Duda funciones programación en C

Iniciado por LUCHADOR97, 10 Diciembre 2016, 18:36 PM

0 Miembros y 1 Visitante están viendo este tema.

LUCHADOR97

Hola, tengo el siguiente ejercicio de funciones:


// Se desea realizar las siguientes tareas con matrices:

// 1.Almacenar una matriz de orden nxm introducida desde teclado. (n y m se pedirán por teclado). El usuario debe introducir dos matrices,llamando dos veces a misma función.

// 2.Imprimir en pantalla una matriz. Se llamará dos veces a la función para mostrar ambas matrices.

// 3.Calcular la suma de ambas matrices (tienen que coincidir sus nº de filas y sus no de columnas)

// 4.Calcular el mínimo de la diagonal secundaria para la matriz que elija el usuario. La función recibirá como parámetro la matriz correspondiente.

// 5.OPCIONAL: Hallar el producto de dos matrices (pij = ai1b1j + ai2b2j + ai3b3j + . . . + ainbnj). Para ello, primero hay que comprobar si se pueden multiplicar, es decir, el número de columnas de la primera matriz tiene que coincidir con el número de filas de la segunda.

// Se pide: Construir un programa en C que haciendo uso de llamadas funciones resuelva las areas anteriores. Además el programa debe mostrarle al usuario un menú con las distintas opciones. Dicho menú también estará implementado en una función.

Lo tengo que hacer con funciones y aunque sé que tengo mil errores en el código y me faltan cosas, quisiera que me dijeran los errores principales que ven, cómo se haría el return con varios valores,muchas gracias:

#include<stdio.h>

#define N 4


int matrices (int A[N][N],int B[N][N]); {

int i,j,suma,minimo;
minimo= B[i][j]


for (i=0;i<N;i++){
for (j=0;j<N;j++){
printf ("Introduzca un número:");
scanf ("%d",&A[i][j]);
}
}

for (i=0;i<N;i++){
for (j=0;j<N;j++){
printf ("Introduzca un numero:");
scanf ("%d",&B[i][j]);


}
}

for (i=0; i<N;i++){
for (j=0;j<N;j++){

Suma[i][j]= A[i][j] + B[i][j];
}
}
printf ("la suma es :\n");

for (i=0;i<N;i++){
for (j=0;j<N;j++){
if (i+j=n+1 < minimo)
minimo = i+j=n+1
printf ("El numero es :\n");

return (suma,i+j=n+1)

}
}
printf ("la suma es :\n");


int main (void) {

int x,y;


printf ("La suma es %d\t", suma (x,y);

printf ("El numero es %d\n", minimo);
}




Mod: Los códigos deben ir en etiquetas GeSHi

engel lex

usa identaciones para que el codigo sea legible -.-

linea 8: suma es un numero entero
linea31: tratas suma como un array

linea 41:  a que juegas en ese return... el return es tipo int, solo retornará un valor, no entiendo la coma

recomiendo tutorial de C sobre manejo de array... los arrays no los pasas simplemente con return
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

LUCHADOR97

Ok gracias, me surgió otra duda, las funciones de cada apartado se hacen por separado o todos tienen que estar en una sola función.

Gracias

engel lex

tu separa en funciones todo lo que quieras XD

normalmente el criterio es organización del código (legibilidad) o reuso del codigo
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

LUCHADOR97

Hola, ¿Cómo lo planterías? especialmente "1.Almacenar una matriz de orden nxm introducida desde teclado. (n y m se pedirán por teclado). El usuario debe introducir dos matrices,llamando dos veces a misma función.

// 2.Imprimir en pantalla una matriz. Se llamará dos veces a la función para mostrar ambas matrices."

engel lex

cuando pasas array se pasan por referencia siempre


te sobra un punto y coma luego del nombre de la función que te causará errores


si alteras un array que pases, quedará alterado ya


es decir


#define n 4

#include <stdio.h>


void suma(int a[n], int b[n], int r[n]){
int i;
for(i=0; i<n; i++){
r[i] = a[i]+b[i];
}
}

int main(void) {
int a[n], b[n], r[n];

a[0] = 1;
a[1] = 3;
a[2] = 5;
a[3] = 7;

b[0] = 2;
b[1] = 4;
b[2] = 6;
b[3] = 8;

suma(a,b,r);
int i;
for(i=0; i<n; i++){
printf("%d\n", r[i]);
}

return 0;
}
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

LUCHADOR97

#6
Hola, he hecho el ejercicio completo de nuevo, me gustaría saber si hago bien las llamadas:


Código (cpp) [Seleccionar]
#include<stdio.h>

#define N 50
#define M 50



void matrices (int mat[N][M],int F,int C){




for (i=0;i<F;i++){
  for (j=0;j<C;j++){
  printf ("Introduzca un numero":);
   scanf ("%d",&mat[i][j]);


}
}

}

void mostrar (int matriz [N][M],int z,int v) {
 int i,j;
 for (i=0;i<z;i++){
   for (j=0;j<v;j++){
     printf ("%d\n",mat[i][j]);

}
}

}

void suma (int A[N][M],int B[N][M],int c,int d,int p,int q,int sum[N][M]) {

int i,j;
if (c==p && d==q);
  for (i=0;i<c;i++){
   for (j=0;j<d;j++){


     sum[i][j] = A[i][j] + B[i][j];

}
printf ("\n");
}

 else {
printf ("las matrices no tienen la misma dimensión, por lo que no se pueden sumar:\n");}
}




void MINIMO (int matrices A[N][M], int matrices B[N][M],int e,int f,int h, int g){
int i,j;

if (e==f) {
printf ("el minimo de la diagonal secundaria de la matriz A:\n");
    MIN = A[0,e-1];

     for (i=0;i<e;i++){
        if (MIN>A[i,e-1-i]){
           MIN = A[i,e-1-i]
}

}
 printf ("%d\n",MIN);
}          

else {printf ("La matriz A no es cuadrada. Por tanto, no se puede calcular la diagonal\n"); }

if (h==g) {

  printf ("el minimo de la diagonal secundaria de la matriz B es: \n");
  MIN= B[0,h-1]

for (i=0;i<h;i++){
        if (MIN>B[i,h-1-i]){
            MIN = B[i,h-1-i];
}

}
 printf ("%d\n", MIN);
}

 else {printf ("La matriz B no es cuadrada. Por tanto, no se puede calcular la diagonal\n");}
}

void multiplicacion (int mat1[N][M],int mat2[N][M],int a, int b, int c, int d) {
int i,j,k;
int multiplicacion [a][d], resultado ;
 if (b==c) {
   for (i=0;i<b;i++){
     for (j=0;j<c;j++){
         
       {resultado = 0;
        for (k=0;k<d;k++) {
          resultado+= (matrizA[i][k] * matrizB[k][j]);
            multiplicacion[i][j]=resultado;
              }}}
printf ("El resultado de la multiplicación es:\n");
   for (i=0; i<a; i++)
       {
           for (j=0; j<b; j++)
           {
               printf ("%d ", multiplicacion[i][j]);
           }
           printf ("\n");
       }
   printf ("\n");
   }


void menu (void)
{printf ("ELIJA UNA OPCION:\n");
printf ("0- SALIR\n");
scanf ("%d", &opcion1);
printf ("1- MOSTRAR MATRICES\n");
scanf ("%d", &opcion2);
printf ("2- SUMAR MATRICES\n");
scanf ("%d", &opcion3);
printf ("4- CALCULAR MINIMO DE LA SEGUNDA DIAGONAL DE AMBAS MATRICES\n");
scanf ("%d", &opcion4);
printf ("5- MULTIPLICAR MATRICES \n");
scanf ("%d", &opcion5);
printf ("\n");
}

int main (void) {

int B[N][M];
int C[N][M];
int Sum[N][M];


int i,j,x,y,w,t;


leer matrices (B,x,y);
printf ("Introduzca el número de filas:%d\n");
scanf ("%d",&x);
printf ("Introduzca el número de columnas:%d\n");
scanf ("%d",&y);




leer matrices (C,w,t);

printf ("Introduzca el número de filas:%d\n");
scanf ("%d",&w);
printf ("Introduzca el número de columnas:%d\n");
scanf ("%d",&t);

suma (x=10, y=10);

}


Me interese está última parte, la del main, ¿hago correctamenta las llamadas a las otras funciones?

Gracias


Mod: Los códigos deben ir en etiquetas GeSHi

engel lex

Mod: Los códigos deben ir en etiquetas GeSHi


Código (cpp) [Seleccionar]
int main (void) {

int B[N][M];
int C[N][M];
int Sum[N][M];


int i,j,x,y,w,t;


leer matrices (B,x,y);
printf ("Introduzca el número de filas:%d\n");
scanf ("%d",&x);
printf ("Introduzca el número de columnas:%d\n");
scanf ("%d",&y);




leer matrices (C,w,t);

printf ("Introduzca el número de filas:%d\n");
scanf ("%d",&w);
printf ("Introduzca el número de columnas:%d\n");
scanf ("%d",&t);

suma (x=10, y=10);

}



leer matrices es un nombre de funcion invalido... primero debes leer las dimensiones antes de pasarlas
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.