Foro de elhacker.net

Programación => Ejercicios => Mensaje iniciado por: LUCHADOR97 en 10 Diciembre 2016, 18:36 pm



Título: Duda funciones programación en C
Publicado por: LUCHADOR97 en 10 Diciembre 2016, 18:36 pm
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:

Código
  1. #include<stdio.h>
  2.  
  3. #define N 4
  4.  
  5.  
  6. int matrices (int A[N][N],int B[N][N]); {
  7.  
  8. int i,j,suma,minimo;
  9. minimo= B[i][j]
  10.  
  11.  
  12. for (i=0;i<N;i++){
  13. for (j=0;j<N;j++){
  14. printf ("Introduzca un número:");
  15. scanf ("%d",&A[i][j]);
  16. }
  17. }
  18.  
  19. for (i=0;i<N;i++){
  20. for (j=0;j<N;j++){
  21. printf ("Introduzca un numero:");
  22. scanf ("%d",&B[i][j]);
  23.  
  24.  
  25. }
  26. }
  27.  
  28. for (i=0; i<N;i++){
  29. for (j=0;j<N;j++){
  30.  
  31. Suma[i][j]= A[i][j] + B[i][j];
  32. }
  33. }
  34. printf ("la suma es :\n");
  35.  
  36. for (i=0;i<N;i++){
  37. for (j=0;j<N;j++){
  38. if (i+j=n+1 < minimo)
  39. minimo = i+j=n+1
  40. printf ("El numero es :\n");
  41.  
  42. return (suma,i+j=n+1)
  43.  
  44. }
  45. }
  46. printf ("la suma es :\n");
  47.  
  48.  
  49. int main (void) {
  50.  
  51. int x,y;
  52.  
  53.  
  54. printf ("La suma es %d\t", suma (x,y);
  55.  
  56. printf ("El numero es %d\n", minimo);
  57. }
  58.  
  59.  


Mod: Los códigos deben ir en etiquetas GeSHi


Título: Re: Duda funciones programación en C
Publicado por: engel lex en 10 Diciembre 2016, 19:27 pm
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


Título: Re: Duda funciones programación en C
Publicado por: LUCHADOR97 en 10 Diciembre 2016, 20:02 pm
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


Título: Re: Duda funciones programación en C
Publicado por: engel lex en 10 Diciembre 2016, 20:04 pm
tu separa en funciones todo lo que quieras XD

normalmente el criterio es organización del código (legibilidad) o reuso del codigo


Título: Re: Duda funciones programación en C
Publicado por: LUCHADOR97 en 10 Diciembre 2016, 23:40 pm
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."


Título: Re: Duda funciones programación en C
Publicado por: engel lex en 11 Diciembre 2016, 00:14 am
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


Código
  1. #define n 4
  2.  
  3. #include <stdio.h>
  4.  
  5.  
  6. void suma(int a[n], int b[n], int r[n]){
  7. int i;
  8. for(i=0; i<n; i++){
  9. r[i] = a[i]+b[i];
  10. }
  11. }
  12.  
  13. int main(void) {
  14. int a[n], b[n], r[n];
  15.  
  16. a[0] = 1;
  17. a[1] = 3;
  18. a[2] = 5;
  19. a[3] = 7;
  20.  
  21. b[0] = 2;
  22. b[1] = 4;
  23. b[2] = 6;
  24. b[3] = 8;
  25.  
  26. suma(a,b,r);
  27. int i;
  28. for(i=0; i<n; i++){
  29. printf("%d\n", r[i]);
  30. }
  31.  
  32. return 0;
  33. }
  34.  


Título: Re: Duda funciones programación en C
Publicado por: LUCHADOR97 en 16 Diciembre 2016, 01:40 am
Hola, he hecho el ejercicio completo de nuevo, me gustaría saber si hago bien las llamadas:


Código
  1. #include<stdio.h>
  2.  
  3. #define N 50
  4. #define M 50
  5.  
  6.  
  7.  
  8. void matrices (int mat[N][M],int F,int C){
  9.  
  10.  
  11.  
  12.  
  13. for (i=0;i<F;i++){
  14.   for (j=0;j<C;j++){
  15.   printf ("Introduzca un numero":);
  16.    scanf ("%d",&mat[i][j]);
  17.  
  18.  
  19. }
  20. }
  21.  
  22. }
  23.  
  24. void mostrar (int matriz [N][M],int z,int v) {
  25.  int i,j;
  26.  for (i=0;i<z;i++){
  27.    for (j=0;j<v;j++){
  28.      printf ("%d\n",mat[i][j]);
  29.  
  30. }
  31. }
  32.  
  33. }
  34.  
  35. void suma (int A[N][M],int B[N][M],int c,int d,int p,int q,int sum[N][M]) {
  36.  
  37. int i,j;
  38. if (c==p && d==q);
  39.   for (i=0;i<c;i++){
  40.    for (j=0;j<d;j++){
  41.  
  42.  
  43.      sum[i][j] = A[i][j] + B[i][j];
  44.  
  45. }
  46. printf ("\n");
  47. }
  48.  
  49.  else {
  50. printf ("las matrices no tienen la misma dimensión, por lo que no se pueden sumar:\n");}
  51. }
  52.  
  53.  
  54.  
  55.  
  56. void MINIMO (int matrices A[N][M], int matrices B[N][M],int e,int f,int h, int g){
  57. int i,j;
  58.  
  59. if (e==f) {
  60. printf ("el minimo de la diagonal secundaria de la matriz A:\n");
  61.     MIN = A[0,e-1];
  62.  
  63.      for (i=0;i<e;i++){
  64.         if (MIN>A[i,e-1-i]){
  65.            MIN = A[i,e-1-i]
  66. }
  67.  
  68. }
  69.  printf ("%d\n",MIN);
  70. }          
  71.  
  72. else {printf ("La matriz A no es cuadrada. Por tanto, no se puede calcular la diagonal\n"); }
  73.  
  74. if (h==g) {
  75.  
  76.   printf ("el minimo de la diagonal secundaria de la matriz B es: \n");
  77.   MIN= B[0,h-1]
  78.  
  79. for (i=0;i<h;i++){
  80.         if (MIN>B[i,h-1-i]){
  81.             MIN = B[i,h-1-i];
  82. }
  83.  
  84. }
  85.  printf ("%d\n", MIN);
  86. }
  87.  
  88.  else {printf ("La matriz B no es cuadrada. Por tanto, no se puede calcular la diagonal\n");}
  89. }
  90.  
  91. void multiplicacion (int mat1[N][M],int mat2[N][M],int a, int b, int c, int d) {
  92. int i,j,k;
  93. int multiplicacion [a][d], resultado ;
  94.  if (b==c) {
  95.    for (i=0;i<b;i++){
  96.      for (j=0;j<c;j++){
  97.  
  98.        {resultado = 0;
  99.         for (k=0;k<d;k++) {
  100.           resultado+= (matrizA[i][k] * matrizB[k][j]);
  101.             multiplicacion[i][j]=resultado;
  102.               }}}
  103. printf ("El resultado de la multiplicación es:\n");
  104.    for (i=0; i<a; i++)
  105.        {
  106.            for (j=0; j<b; j++)
  107.            {
  108.                printf ("%d ", multiplicacion[i][j]);
  109.            }
  110.            printf ("\n");
  111.        }
  112.    printf ("\n");
  113.    }
  114.  
  115.  
  116. void menu (void)
  117. {printf ("ELIJA UNA OPCION:\n");
  118. printf ("0- SALIR\n");
  119. scanf ("%d", &opcion1);
  120. printf ("1- MOSTRAR MATRICES\n");
  121. scanf ("%d", &opcion2);
  122. printf ("2- SUMAR MATRICES\n");
  123. scanf ("%d", &opcion3);
  124. printf ("4- CALCULAR MINIMO DE LA SEGUNDA DIAGONAL DE AMBAS MATRICES\n");
  125. scanf ("%d", &opcion4);
  126. printf ("5- MULTIPLICAR MATRICES \n");
  127. scanf ("%d", &opcion5);
  128. printf ("\n");
  129. }
  130.  
  131. int main (void) {
  132.  
  133. int B[N][M];
  134. int C[N][M];
  135. int Sum[N][M];
  136.  
  137.  
  138. int i,j,x,y,w,t;
  139.  
  140.  
  141. leer matrices (B,x,y);
  142. printf ("Introduzca el número de filas:%d\n");
  143. scanf ("%d",&x);
  144. printf ("Introduzca el número de columnas:%d\n");
  145. scanf ("%d",&y);
  146.  
  147.  
  148.  
  149.  
  150. leer matrices (C,w,t);
  151.  
  152. printf ("Introduzca el número de filas:%d\n");
  153. scanf ("%d",&w);
  154. printf ("Introduzca el número de columnas:%d\n");
  155. scanf ("%d",&t);
  156.  
  157. suma (x=10, y=10);
  158.  
  159. }

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


Título: Re: Duda funciones programación en C
Publicado por: engel lex en 16 Diciembre 2016, 01:44 am
Mod: Los códigos deben ir en etiquetas GeSHi


Código
  1. int main (void) {
  2.  
  3. int B[N][M];
  4. int C[N][M];
  5. int Sum[N][M];
  6.  
  7.  
  8. int i,j,x,y,w,t;
  9.  
  10.  
  11. leer matrices (B,x,y);
  12. printf ("Introduzca el número de filas:%d\n");
  13. scanf ("%d",&x);
  14. printf ("Introduzca el número de columnas:%d\n");
  15. scanf ("%d",&y);
  16.  
  17.  
  18.  
  19.  
  20. leer matrices (C,w,t);
  21.  
  22. printf ("Introduzca el número de filas:%d\n");
  23. scanf ("%d",&w);
  24. printf ("Introduzca el número de columnas:%d\n");
  25. scanf ("%d",&t);
  26.  
  27. suma (x=10, y=10);
  28.  
  29. }


leer matrices es un nombre de funcion invalido... primero debes leer las dimensiones antes de pasarlas