ayuda con programacion en C.

  • Autor Autor espartan1047
  • Fecha de inicio Fecha de inicio
espartan1047

espartan1047

Iota
Redactor
Verificación en dos pasos activada
Hola, necesito la ayuda de algun programador con conocimientos en C, es para una tarea. La cosa esta asi, necesito hacer un programa que dadas dos matrices (MatrizA y MatrizB) y sume los elementos de cada matriz y la guarde en dos variables (SumaA y SumaB) y si SumaA es mayor que SumaB imprima verdadero, en caso contrario, imprima falso.

El problema esta que al momento de correrlo, los resultados de la suma no son los correctos y por ende el resultado tampoco. Ayuda por favor, aqui les dejo mi codigo (Es un programa con varias opciones, en este caso la opcion "d", del switch):

Insertar CODE, HTML o PHP:
#include <stdlib.h>
#include <stdio.h>

int main()
{
    int ejercicio;
    int A[10]={34,21,7,8,12,45,-4,8,6,10};
    int Numeros[10], pares[10],impares[10],sumapares=0,sumaimpares=0,promediopares,promedioimpares,i,k,l,j,m,n;
    int MatrizA[3][3],MatrizB[3][3],sumaA,sumaB;
    int *p;

    
    
    printf("Que va a hacer: ");
    printf ("\n a) Ejercicio 1. \n b) Ejercicio 2. \n c) Ejercicio 3. \n d) Ejercicio 4.");
    printf ("\n Ingrese el Carater EOF (presionando CTRL + Z) ");
    
    while ( (ejercicio = getchar()) !=EOF ) {
          switch ( ejercicio ) {
                 case 'a':
                 case 'A':
                      for (i=1;i<=10;i++){
                      printf ("Dame el primer elemento de la lista de numeros ");
                      scanf ("%d", &Numeros[i]);
                      }
                      
                      for (i=1;i<=10;i++){
                          if (Numeros[i]%2==0){
                                               k++;
                                               }
                          else {
                               l++;
                               }
                               }
                      for (i=1;i<=10;i++){
                          if (Numeros[i]%2==0){
                                               for (j=1;j<=k;j++){
                                                   pares[j]=Numeros[i];
                                                   sumapares=sumapares+pares[j];
                                                   }
                                                   }
                          else {
                               for (m=1;m<=l;m++){
                                   impares[m]=Numeros[i];
                                   sumaimpares=sumaimpares+impares[m];
                                   }
                                   }
                                   } /*Cierre del for con i */
                                   
                printf ("El promedio de numeros impares es %d ", sumaimpares/l);
                printf ("El promedio de numeros pares es %d ", sumapares/k);                                                                                                                                                               
                                                            
                      
                      break;
                 case 'b':
                 case 'B':
                      p=&A[2];
                      p++;
                      printf ("\n P1 =  %d ", (*p)+1);
                      break;   
                 case 'c':
                 case 'C':
                      printf ("Ejercicio 3");
                      break;
                 case 'd':
                 case 'D':
                      for (i=1;i<=3;i++){
                          for (j=1;j<=3;j++){
                              printf ("Dame el valor de la posicion %d %d ", i,j);
                              scanf ("%d", &MatrizA[i][j]);
                              sumaA = sumaA + MatrizA[i][j];
                              }
                              }
                       printf ("\n");       
                       for (i=1;i<=3;i++){
                           for (j=1;j<=3;j++){
                               printf ("Dame el valor de la posicion %d %d ", i,j);
                               scanf ("%d", &MatrizB[i][j]);
                               sumaB = sumaB + MatrizB[i][j];
                               }
                               }
                     if (sumaA > sumaB){
                               printf  ("\nVerdadero");
                               
                               }
                                else if (sumaA < sumaB) {
                                    printf ("\nFalso");
                                    printf ("%d",sumaA);
                                    printf ("\n%d",sumaB);
                                    } 
                                    
                                    else if (sumaA == sumaB){
                                         printf ("\nLas matrices son iguales");
                                         }             
                      break;
                      
                 case '\n':
                 case '\t':
                 case ' ':
                      break;
                 
                 default:
                         printf("Introduzco una letra incorrecta, intentelo de nuevo");
                         break;
                         }
                         }
system ("pause");
return 0;
}

por favor, ayuda. Se los agradecere mucho.
 
- El indice de las matrices comienzan en 0 y no en 1.
- sumaX no lo inicializas.
- else if (sumaA == sumaB) lo puedes remplazar por un else.
 
- El indice de las matrices comienzan en 0 y no en 1.
- sumaX no lo inicializas.
- else if (sumaA == sumaB) lo puedes remplazar por un else.

Gracias por tu respuesta, yo tomo los indides desde 1 para que se cumpla la numeracion de los elementos de 1 a 10, ya que luego se me va la onda y pues me daria 11 elementos si lo tomo desde 0, pero bueno creo que es un mal habito de programacion, lo tomare en cuenta.

en que parte uso el sumaX?
 
sumaX me refiero a sumaA y sumaB.

Con respecto a lo de los índices, es una barbaridad lo que haces. De hecho reservas memoria que no usas, y accedes a memoria que no deberías lo raro es que no te de una violación de segmento. Los bucles serían asi:
for (i=0;i<3;i++){
 
sumaX me refiero a sumaA y sumaB.

Con respecto a lo de los índices, es una barbaridad lo que haces. De hecho reservas memoria que no usas, y accedes a memoria que no deberías lo raro es que no te de una violación de segmento. Los bucles serían asi:
for (i=0;i<3;i++){

gracias amigo, me haz ayudado mucho a mejorar, ahora entiendo el uso del for como se debe.
 

Temas similares

Miguel Sanches
Respuestas
6
Visitas
343
Rolando C
Rolando C
Cristianfeiz
Respuestas
10
Visitas
450
Cristianfeiz
Cristianfeiz
Martin Castellanos
Respuestas
3
Visitas
296
Martin Castellanos
Martin Castellanos
Atrás
Arriba