Anuncio

Colapsar
No hay ningún anuncio todavía.

Duda funciones lenguaje C

Colapsar
X
 
  • Filtro
  • Hora
  • Mostrar
Borrar todo
nuevos mensajes

  • C/C++ Duda funciones lenguaje C

    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 por 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, 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);
    }

    Mi principal duda es con el return, hay que devolver varios valores, ¿cómo se hace con varios valores?
    Última edición por CARLIN; 10/12/2016, 18:07:21.

  • #2
    Re: Duda funciones lenguaje C

    Escrito por CARLIN Ver mensaje
    Mi principal duda es con el return, hay que devolver varios valores, ¿cómo se hace con varios valores?
    En tu caso devolviendo un solo valor ya puedes hacer todo lo que pasa es que has de usar más funciones. Por ejemplo puedes calcular la suma en una función y el mínimo en el main. O hacer dos funciones a parte que lo hagan: en matrices solo lees, haces otra función que sume matrices y otra para el mínimo. Luego en el main las invocas y asunto resuelto. El enunciado solo te dice que hagas uso de funciones pero te deja total libertad para colocar cuantas funciones quieras.

    Como error principal yo te indicaría lo que el enunciado ya te dice: en la función matrices solo has de leer por pantalla una sola matriz. Luego en el main invocas dos veces esa misma función y así podrás leer dos matrices.

    Por otro lado se agradecería que arreglases tu programa si eres consciente de los errores que tiene. Dices que tienes "mil errores de código" pero en algunos casos no está claro si sabes lo que estás haciendo o no. Por ejemplo, las componentes de las matrices las has puesto enteras. El enunciado no te dice nada pero lo lógico es que las componentes de las matrices sean float o double. Tampoco invocas funciones en el main y no se entiende si es que piensas que lo harás más tarde o que tienes un error de concepto.

    Espero haberte ayudado.
    Última edición por Weip; 10/12/2016, 19:03:03.
    \dst \oint_S \vec{E} \cdot d \vec{S}=\dst \frac{Q}{\epsilon_0}

    Comentario


    • #3
      Re: Duda funciones lenguaje C

      Hola Weip, gracias por la respuesta, por lo general, suelo asignar a las componentes de las matrices la variable int, porque luego cuando el compliador me solicita los valores pongo 0,1,2,5 78 y así, no pongo decimales, aunque es cierto que con float puedo poner números enteros, decimales, fraccionarios, los que quiera. Voy a intentar rehacer el ejercicio haciendo las funciones por separado Saludos.

      Comentario


      • #4
        Re: Duda funciones lenguaje C

        Escrito por CARLIN Ver mensaje
        Hola Weip, gracias por la respuesta, por lo general, suelo asignar a las componentes de las matrices la variable int, porque luego cuando el compliador me solicita los valores pongo 0,1,2,5 78 y así, no pongo decimales, aunque es cierto que con float puedo poner números enteros, decimales, fraccionarios, los que quiera. Voy a intentar rehacer el ejercicio haciendo las funciones por separado Saludos.
        Si es para hacer tú pruebas entonces bien pero en un futuro ten cuidado porque al hacer ciertas operaciones como la división no es lo mismo tener un 1 o un 2 int que un 1 o un 2 double. Si tienes dudas al hacer las funciones ya sabes, aquí te podemos orientar.
        \dst \oint_S \vec{E} \cdot d \vec{S}=\dst \frac{Q}{\epsilon_0}

        Comentario


        • #5
          Re: Duda funciones lenguaje C

          Hola Weip, he hecho esto para el primer punto, la matriz que está en la función principal y luego en el main las dos matrices:


          #define N 4

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

          int i,j,suma;

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


          return (suma);





          int main (void) {

          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");

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

          for (i=0;i<N;i++){
          for(j=0;j<N;j++){
          printf ("%d\t",Suma[i][j]);
          }
          printf("\n");
          }

          GRACIAS
          Última edición por CARLIN; 10/12/2016, 21:25:57.

          Comentario


          • #6
            Re: Duda funciones lenguaje C

            Hola de nuevo.
            Escrito por CARLIN Ver mensaje
            int matrices (int A[N][N]); {

            int i,j,suma;

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


            return (suma);
            Más allá de los errores como es el punto y coma seguido de una llave y la llave que te falta al final, no entiendo porqué declaras la variable suma y la devuelves sin ningún valor. Si en esta función no vas a calcular la suma, si solo vas a leer una matriz, olvídate de la variable suma, suprímela. Tienes dos opciones: pones la función como void (y entonces no has de poner ningun return) o haces return 0; conforme la lectura de la matriz ha ido bien.

            Escrito por CARLIN Ver mensaje
            int main (void) {

            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]);
            La función matrices la has hecho justamente para no tener que leer las dos matrices en el main. Lo que has de hacer es suprimir las líneas en que lees las matrices A y B en el main y en su lugar invocas dos veces la función matrices (el enunciado te obliga a hacerlo así). Escribe algo así como var1=matrices(A); y var2=matrices(B); var1 y var2 contienen los valores que has puesto en el return de la función. Si vas a hacer que la función matrices sea void entonces basta con poner matrices(A); y matrices(B); Todo esto lo que hace es que cuando ejectues el programa te pedirá la lectura primero de la matriz A y luego de la matriz B. No olvides hacer las declaraciones, en especial la de A y la de B, al principio del main.

            Por otra parte, el objetivo del ejercicio es que calcules la suma usando una función a parte, no en el main. Así que has de hacer lo mismo que has puesto pero en otra función distinta del main y distinta de matrices. También piensa desde el punto de vista práctico: sumar dos matrices es algo muy habitual así que una vez tengas esa función lista, la podrás usar tal cual en programas futuros que te hagan hacer.

            Finalmente algo importante, tu estás haciendo el ejercicio usando matrices cuadradas de orden 4, pero el ejercicio te dice que supongas un número cualquiera de filas y columnas, de forma que las matrices no tienen porqué ser cuadradas. Esto te lo piden para que, a la hora de sumarlas, tengas que hacer comprobaciones por si la suma no se puede hacer.

            ¡Ánimo con el programa!
            Última edición por Weip; 11/12/2016, 13:37:05.
            \dst \oint_S \vec{E} \cdot d \vec{S}=\dst \frac{Q}{\epsilon_0}

            Comentario


            • #7
              Re: Duda funciones lenguaje C

              Hola Weip de nuevo, lo hice de otra manera ¿cómo lo ves? gracias

              #include<stdio.h>



              void matrices (mat[][]){

              int i,j,N,M;
              printf ("Introduzca el número de filas");
              scanf ("%d",&N);
              scanf ("Introduzca el número de columnas");
              scanf ("%d",&M);


              for (i=0;i<N;i++){
              for (j=0;j<M;j++){
              print ("Introduzca un numero";
              scanf ("%d",&mat[i][j]);


              }
              }

              }

              VOID suma (int A[N][M], int B[N][M]) {

              int i,j;

              for (i=0;i<N;i++){
              for (j=0;j<N;j++){
              if (A[N]=B[N] && A[M]=B[M]);

              suma[i][j] = A[N][M] + B[N][M];

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

              void minimo (D[N][N])

              int a(i,N-1-i)
              for (i=0;i<N;i++){

              if (min > a[i,N-1-i])

              min=a[i,N-1-i];

              int main (void) {

              matrices (B[3][3]);
              matrices (C[3][3]);

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

              }
              }

              for (i=0;i<N;i++){
              for (j=0;j<N;j++){
              print ("Introduzca un numero";
              scanf ("%d",&A[i][j]);
              }
              }
              Última edición por CARLIN; 13/12/2016, 01:13:22.

              Comentario


              • #8
                Re: Duda funciones lenguaje C

                Hola CARLIN. Tu programa está mucho mejor que la última vez. Cosas a comentar:

                Escrito por CARLIN Ver mensaje
                VOID suma (int A[N][M], int B[N][M]) {

                int i,j;

                for (i=0;i<N;i++){
                for (j=0;j<N;j++){
                if (A[N]=B[N] && A[M]=B[M]);

                suma[i][j] = A[N][M] + B[N][M];

                }
                }
                printf ("la suma es :\n");
                }
                Cuidado porque las matrices en general tienen dimensión nxm y kxp, las dos no tienen que ser nxm como has puesto. Tu supón el caso más general posible y en el if pon la condición de que tengan el mismo número de filas y de columnas para poder ser sumadas. En caso de que no puedan ser sumadas, pon un mensaje indicándoselo al usuario que usa el programa.

                Escrito por CARLIN Ver mensaje
                void minimo (D[N][N])

                int a(i,N-1-i)
                for (i=0;i<N;i++){

                if (min > a[i,N-1-i])

                min=a[i,N-1-i];
                Aquí supones que la matriz es cuadrada cuando no tiene porqué serlo. Corrige las dimensiones para que acepte matrices nxm. Luego con el "int a(i,N-1-i)" no entiendo que estás haciendo. Agradecería una explicación de cómo estás pensando esta función.

                Escrito por CARLIN Ver mensaje
                int main (void) {

                matrices (B[3][3]);
                matrices (C[3][3]);

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

                }
                }

                for (i=0;i<N;i++){
                for (j=0;j<N;j++){
                print ("Introduzca un numero";
                scanf ("%d",&A[i][j]);
                }
                }
                Si la dimensión máxima que pones es 3 entonces haz que en matrices salte un mensaje de error si se introducen dimensiones incorrectas.

                E insisto de nuevo: cuida la redacción del programa. ¡Saludos!
                \dst \oint_S \vec{E} \cdot d \vec{S}=\dst \frac{Q}{\epsilon_0}

                Comentario


                • #9
                  Re: Duda funciones lenguaje C

                  No he leído (analizado) el hilo, perdonadme. No recuerdo muy bien cómo funciona C, y tengo conocimiento escaso del lenguaje.
                  En primer lugar querría hacer un llamado de atención a ambos. Creo que sería más cómodo utilizar la opción [CODE*] [/CODE] (sin el *), que aparece en opciones avanzadas también como el botón "#". También estaría bien tabular el código, así se entiende mejor.
                  Dicho esto, voy a escribir el código del último mensaje de Carlin, para que se vea bien.

                  Código:
                  #include<stdio.h>
                  
                  void matrices (mat[][]){
                  
                      int i,j,N,M;
                      printf ("Introduzca el número de filas");
                      scanf ("%d",&N);
                      scanf ("Introduzca el número de columnas");
                      scanf ("%d",&M);
                  
                  
                      for (i=0;i<N;i++){
                          for (j=0;j<M;j++){
                              print ("Introduzca un numero";
                              scanf ("%d",&mat[i][j]);
                          }
                      }
                  }
                  
                  VOID suma (int A[N][M], int B[N][M]) {
                  
                      int i,j;
                  
                      for (i=0;i<N;i++){
                          for (j=0;j<N;j++){
                              if (A[N]=B[N] && A[M]=B[M]);
                  
                                  suma[i][j] = A[N][M] + B[N][M];
                          }
                      }
                      printf ("la suma es :\n");
                  }
                  
                  void minimo (D[N][N])
                  
                       int a(i,N-1-i)
                       for (i=0;i<N;i++){
                  
                           if (min > a[i,N-1-i])
                  
                               min=a[i,N-1-i];
                  
                  int main (void) {
                  
                      matrices (B[3][3]);
                      matrices (C[3][3]);
                  
                      for (i=0;i<N;i++){
                          for (j=0;j<N;j++){
                              print ("Introduzca un numero";
                              scanf ("%d",&B[i][j]);
                  
                          }
                      }
                  
                      for (i=0;i<N;i++){
                          for (j=0;j<N;j++){
                              print ("Introduzca un numero";
                              scanf ("%d",&A[i][j]);
                          }
                      }
                  Paso a comentar, que veo que los ifs no están con llave, creo que esto no lo sabe entender C. Además que el main no está cerrado...

                  Veo que hay más errores de sintaxis, y no sé si habrá algún error por el tema de las matrices en C.

                  Escrito por CARLIN Ver mensaje
                  aunque sé que tengo mil errores en el código y me faltan cosas, quisiera que me dijeran los errores principales que ven
                  PD: aunque seas ambicioso y quieras implementar más código, lo primero es corregir el que ya tienes y comprobar que funciona como quieres. Por experiencia, es un caos escribir mucho y corregir después miles de errores que no se ven a simple vista.
                  Última edición por alexpglez; 14/12/2016, 21:20:33.
                  [TEX=null] \vdash_T G \leftrightarrow Consis \; \ulcorner T \urcorner [/TEX]

                  Comentario

                  Contenido relacionado

                  Colapsar

                  Trabajando...
                  X