Pasar arreglos a una función en C

Por default, los arrreglos en C se pasan a una función como referencia y no como valor. Esto significa que todas las modificaciones que hagamos dentro de la función en C al arreglo que recibimos como parámetro, realmente se realizan en el arreglo original que se utilizó como argumento al momento de llamar a la función.

Al escribir una función en C, la forma de indicar que uno de los parámetros que se va a recibir es un arreglo de una dimensión, es decir de que tipo va a ser el arreglo y el nombre con el cual vamos a manipular dicho arreglo dentro de nuestra función seguido de corchetes que abren y cierran; nuestra función también debe recibir un segundo parámetro que nos indique el tamaño del arreglo, o dicho de otra forma, el número de elementos de los que consta nuestro arreglo, recordemos que como el arreglo se pasa a la función como referencia, lo que esta recibiendo la función en realidad es un apuntador al primer elemento del arreglo, pero no sabe en donde termina el arreglo, por eso es necesario que la función también reciba como parámetro el número de elementos del arreglo.

Por ejemplo, el prototipo de una función en C que va a regresar un entero y va a recibir un arreglo de 10 elementos de tipo entero sería algo asi:

int MiFuncion(int mi_arreglo[], int num_elemetos);

Para llamar a la función anterior, se pone como primer argumento el nombre del arreglo (sin corcehetes) y como segundo argumento el número de elementos del arreglo. Supongamos que tenemos un arreglo de 10 elementos de tipo entero llamado numeros y queremos guardar en una variable llamada “x” el valor que nos regresa la función “MiFuncion” al llamarla pasandole como argumentos el arreglo “numeros”, haríamos algo como esto

x = MiFuncion(numeros, 10);

El siguiente programa solicita al usuario que ingrese 10 números de tipo entero y los almacena en un arreglo; después le pide que introduzca un número para que busque su posición dentro del arreglo..

El programa utiliza una función llamada BuscaNumero que recibe como parámetros el arreglo con los 10 números capturados, el número de elementos del arreglo (en este caso 10) y el número del cual se desea saber su posición dentro del arreglo.. La función regresa -1 si el número que se busca no se encuentra en el arreglo y en caso contrario, regresa la primera posición del arreglo que contiene dicho número.

El programa también utiliza una función llamada MuestraArreglo que no regresa valor alguno, sólo recibe como parámetros el arreglo y el número de elementos. Esta función imprime en pantalla los elementos del arreglo separados por un tabulador.

#include <stdio.h>

int BuscaNumero(int valores[], int tamanio, int busca)
{
int i=0, posicion=-1;

do
  {
   if (valores[i]==busca)
       posicion=i;
   else
       ++i;
  }
while(i<tamanio && posicion<0);

return posicion;
}

void MuestraArreglo(int valores[], int tamanio)
{
 int i=0;

 for (i=0; i<tamanio; ++i)
      printf("%d\t",valores[i]);
 printf("\n");
}

int main()
{
 int x=0, numero=0, posicion=0;
 int ar_numeros[10] = {0};

 printf("Introduzca los 10 numeros enteros que se almacenaran en el arreglo\n");
 for (x=0; x<10; ++x)
     {
      printf("Valor para el elemento [%d]: ", x);
      scanf("%d",&ar_numeros[x]);
     }
 printf("\n");

 printf("Introduzca el número que desea buscar en el arreglo\n");
 scanf("%d",&numero);
 printf("\n");
 MuestraArreglo(ar_numeros,10);

 posicion=BuscaNumero(ar_numeros,10,numero);
 if (posicion != -1)
     printf("El número %d está en la posición %d del arreglo\n",numero, posicion);
 else
     printf("El número %d no está en el arreglo\n",numero);

 return 0;
}

Para pasar a una función un arreglo de dos dimensiones, si debemos indicar el tamaño de la segunda dimensión del arreglo

Ejemplo:int MiFuncion(int mi_arreglo[][5], int num_elemetos);

El siguiente programa le pide al usuario que introduzca 9 números y los almacena en un arreglo de dos dimensiones, en este caso una matriz de 3×3; posteriormente utiliza una función llamada ImprimeMatriz para mostrar como quedaron almacenados los números en la matriz. Dicha función recibe como parámetros, la matriz de 3×3 y el tamaño de la primera dimensión (normalmente la primera dimensión son filas y la segunda dimensión columnas).

#include <stdio.h>

void ImprimeMatriz(int m[][3], int filas)
{
 int i=0,j=0;

 for (i=0; i<filas; ++i)
     {
      for (j=0; j<3; ++j)
          {
           printf("%d ",m[i][j]);
          }
      printf("\n");
     }
}

int main()
{
 int x=0,y=0;
 int matriz[3][3] = {{0},{0},{0}};

 printf("Introduzca los valores para la matriz\n");
 for (x=0; x<3; ++x)
     {
      for (y=0; y<3; ++y)
          {
           printf("Valor para el elemento [%d][%d]: ", x, y);
           scanf("%d",&matriz[x][y]);
          }
      printf("\n");
     }

 printf("Matriz\n");
 ImprimeMatriz(matriz, 3);

 return 0;
}
Anuncios

Etiquetas: ,

49 comentarios to “Pasar arreglos a una función en C”

  1. samuel ramos Says:

    void ImprimeMatriz(int m[][3], int filas)

    Y si en vez de poner el 3 pusiese una variable como por ejemplo columnas que habría que hacer?

    • rtmex Says:

      C no maneja arreglos dinámicos, así que si quieres usar una variable como tu lo planteas, tendrías que haberla declarado antes y haberle asignado un valor. Por ejemplo:

      int columnas=3;
      void ImprimeMatriz(int m[][columnas], int filas)
      {
       int i=0,j=0;
       
       for (i=0; i<filas; ++i)
           {
            for (j=0; j<columnas; ++j)
                {
                 printf("%d ",m[i][j]);
                }
            printf("\n");
           }
      }
      
  2. Skratch bit Says:

    y si quiero que la funcion reciba un arreglo, trabaje en el, por ejemplo ordenarlo y que retorne un arreglo, como se podria hacer?, usando punteros?, porque lo hago pero el primer elemento me aparece un numero extraño, creo que es la direccion del primer elemento…. por ejemplo: el arreglo son 3, 2, 2, 0 6. al pasar por la funcion queda: 5451440, 2, 2, 3, 6. me elimina el primer elemento. Como podria solucionar eso?

  3. Novato Says:

    Muchas gracias por los ejemplos. Un saludo.

  4. héctor Says:

    buenísimo me ayudó mucho, mil gracias

  5. jesus salas Says:

    y si quiero q por medio de una función permita buscar un elemento y determinar a través de un mensaje si existe ó no dentro del arreglo.

    • rtmex Says:

      Hola

      Eso es muy sencillo, sólo modificas la función para que ya no regrese la posición en caso de que el elemento se encuentre en el arreglo y -1 en caso de que no se encuentre, sino que ahora no regresará valor alguno, sino que imprimirá un mensaje indicando si se encuentra o no el elemento en el arreglo.

      void BuscaNumero(int valores[], int tamanio, int busca)
      {
      int i=0, posicion=-1;
       
      do
        {
         if (valores[i]==busca)
             posicion=i;
         else
             ++i;
        }
      while(i<tamanio && posicion<0);
      
      if (posicion >= 0) 
          printf("El elemento se encuentra en el arreglo");
      else
          printf("El elemento no se encuentra en el arreglo");
      }
      
  6. nominado Says:

    exelente!

  7. Matias Vallejo Says:

    hola, cómo me ayudaron tus ejemplos, podrías ayudarme con este:
    2. Elabore un programa el cual invoque a una función que tome como parámetro de entrada el contenido de una variable string (LETRAS) y regrese al punto de llamada el número de palabras diferentes de la variable leída. Considere que las palabras están separadas por un espacio en blanco.

    • rtmex Says:

      Ok, se ve que es una tarea, como ya mencioné en algún otro post, este blog no es para hacerle la tarea a algún estudiante. Así que lo que voy a hacer es indicarte que instrucciones puedes usar para hacer lo que te piden y tú tendrás que estudiarlas y hacer tú programa.

      Debido a que están hablando de una “variable string” y en C no existe el tipo string (para manejar cadenas se hace un arreglo de tipo char), supongo que entónces están hablando de C++ (ahí si existe el tipo String).
      Lo que te piden lo puedes hacer utilizando la función find. Ahora sólo para estar claros, el texto dice “regrese al punto de llamada el número de palabras diferentes de la variable leída”; esto me indica que el comportamiento de la función que te piden que hagas en tú programa debe ser el siguiente:

      Caso 1
      La variable tipo String contiene el texto “palabra1 palabra2 palabra3”
      Tu función debería regresar el número 3, ya que la variable contiene 3 palabras diferentes

      Caso 2
      La variable tipo String contiene el texto “palabra1 palabra2 palabra1 palabra3 palabra4 palabra2”
      Tu función debería regresar el número 4, ya que la variable contiene 4 palabras diferentes debido a que palabra1 y palabra2 aparecen 2 veces, y el ejercicio dice palabras diferentes

      Espero esto te sirva.

      Saludos

  8. andres Says:

    al momento de ingresar 2 veces o mas un numero ,quisiera que me lo muestre las posiciones de este ,gracias

  9. WSQ10 Lists – Learning to program 2016 Says:

    […] Array in a function […]

  10. espitia Says:

    Como almaceno en un vector el nombre, el sexo y la edad de un grupo de personas e imprimir lo siguiente:

    a) Promedio de edades.
    b) Cuantas mujeres existen
    c) Cuantos hombres existen
    c) Los nombres de todas las personas que tienen la menor edad

    • rtmex Says:

      Puedes hacer una matriz de 3 x n (3 columnas x n renglones o filas), una columna para el nombre, una para el sexo y otra para la edad; la edad la tendrás que almacenar como char (en C no puedes almacenar datos de diferentes tipos en una misma matriz) y convertirlo a algún tipo numérico para hacer tus operaciones como el promedio de edades, ordenar con base en la edad, etc. N es el número máximo de registros (personas) que podrá admitir tu matriz.

      Si lo quieres hacer en C++ en lugar de C, hay mejores soluciones, te recomiendo que leas este post que escribí para que te des una idea Usando cadenas, vectores y estructuras con la STL

      Saludos

  11. david retiz Says:

    y si quiero que el usuario ingrese el tamaño de la matriz, y que tambien busque un numero y diga en que posicion de matriz esta ?

    • rtmex Says:

      En C no hay arreglos dinámicos, así que el tamaño de la matriz tiene que estar determinado desde que declaras la matriz.

  12. Nancy López Says:

    y si quiero hacer lo del primer programa pero con caracteres?

  13. Milton Says:

    interesante. se puede crear funciones de tal manera que al ingresar por teclado un string digamos “efecto1” lo evalue y luego devuelva algún entero para entrar a un switch y ejecutar lo que corresponda? entiendo que el switch no acepta strings.

    gracias.
    Milton

  14. Miguel Angel Says:

    Buenas tardes estoy programando en C y tengo esta duda, si tengo un puntero inicializado al primer elemento de un vector y quiero ordenarlo con funciones como puedo regresar el puntero o vector ya ordenado por las funciones? espero alguien me pueda ayudar.

  15. Hanel Says:

    Tengo un codigo donde primero lleno una matriz y luego los valores de las posiciones pares e impares deban guardarse en vectores diferentes y a cada vector hay que imprimir la suma de los valores pero al hacerlo no me aparecen unos números extraños que no corresponden al valor de la suma cuál podría ser el error que se está cometiendo?

    • rtmex Says:

      Pues por el error que comentas puede ser que etsas queriendo accesar a direcciones de memoria que no existen, ¿puedes poner tu código?

  16. Gabriel Gurrero Says:

    buenas tengo dudas en una es que tengo que poner 10 numeros de menor a mayor en sus pociones y que mar que el numero y posición del numero pero desde en medio marca la posiciones sabe como es

    • rtmex Says:

      Hola Gabriel, no entendí eso de que “pero desde en medio marca la posiciones”. Además necesitas dar más información, los números los va a ir capturando el usuario o ya los tienes en otro arreglo? Hay varios métodos de ordenación como quick sort, buble sort, etc.

  17. Alejandro Alvarez Castañeda Says:

    Tengo unas dudas con un programa que estoy haciendo un proyecto y debo separarlo en funciones entonces tengo una funcion de lectura, hasta ahi todo perfecto el problema es en la funcion de impresion ya que lo que estoy leyendo son datos que van dentro de un arreglo y nose como pasar esos datos de ese arreglo a la funcion de imprimir

    1. tengo una estructura y dentro de esa estructura tengo los arreglos
    2. la funcion main donde van las funciones que tengo que realizar
    3. la funcion de leer
    4. la funcion de imprimir

    parte de mi codigo es asi:

    int registro()
    {
    struct alumnos a[50];
    int q;
    int c;
    int i=0;
    int ca=0;
    int op3;

    printf(“Matricula: “); scanf(“%d”, &a[i].matricula); fflush(stdin);
    printf(“\nNombre: “); gets(a[i].nombre); fflush(stdin);
    printf(“\nApellido: “); gets(a[i].apellido); fflush(stdin);
    printf(“\nCorreo: “); gets(a[i].correo); fflush(stdin);
    printf(“\nCelular”); gets(a[i].celular); fflush(stdin);
    for(q=0;q<6;q++)
    {
    printf("\n Cal %d del alumno %d: ",q,i); scanf("%d",&a[i].cal[q]); fflush(stdin);
    a[i].cal[6]=((a[i].cal[0]*.20)+(a[i].cal[1]*.20)+(a[i].cal[2]*.20)+(a[i].cal[3]*.20)+(a[i].cal[4]*.10)+(a[i].cal[5]*.10));
    }
    ca=ca+1;
    for(i=0;i<ca;i++)
    {
    for(q=0;q<7;q++)
    {
    printf ("cal %d del alumno %d: ",q,i); printf("%d\n", a[i].cal[q]);
    }
    }
    printf("para regresar al menu presione 1: "); scanf("%d",&op3);
    system("cls");
    return ca;

    }
    void impresion_datos()
    {
    struct alumnos a[50];
    int x,i;
    printf("Matricula\t\tNombre\t\t\tApellido\t\tCelular\t\tCorreo");
    for(i=0;i<x;i++)
    {
    printf("%d\t\t",a[i].matricula);
    printf("%d\t\t",a[i].nombre);
    printf("%d\t\t",a[i].apellido);
    printf("%d\t\t",a[i].celular);
    printf("%d\t\t",a[i].correo);
    }

    en la impresion debo estar muy mal pero no se como mandar los datos de leer a la funcion de imprimir

    espero me puedaas ayudar

    • rtmex Says:

      El problema que tienes que es dentro de la función registro defines un arreglo a que no es visible fuera de esa función, es decir, es un arreglo local. Y en la función impresion_datos defines otro arreglo que aunque se llama a, no es el mismo que el que definiste en la función registro; ese arreglo es un arreglo local dentro de la función impresion_datos

      Hay dos posibles soluciones:
      1. Define el arreglo a como una variable global, es decir antes de la función main, y ya no definas nuevamente el arreglo ni en la función registro ni en la función impresion_datos.
      2. Puedes definir el arreglo a como variable local dentro de la función main, modificar las funciones registro e impresion_datos para que reciban como parámetro un arreglo y cuando mandes a llamar esas funciones, el arreglo que les vas a pasar como parámetro sería el arreglo a que definiste en la función main

      Saludos

  18. Alejandro Alvarez Castañeda Says:

    pero sera definir la estructura dentro de la funcion main y con eso se arreglaria??

    • rtmex Says:

      Una cosa es definir la estructura y otra cosa es crear variables que sean del tipo de la estructura que definiste. Tu estructura se llama “alumnos” y luego, defines un arreglo de 50 elementos llamado “a” en donde cada uno de los elementos del arreglo es del tipo “alumnos”.
      Como te dije en el comentario anterior, el problema es que estas definiendo los arreglos dentro de las funciones registro e impresion_datos, el arreglo “a” que defines dentro de la función registro, no tiene relación con el arreglo “a” que defines dentro de la función impresion_datos.

      Pon la linea struct alumnos a[50]; antes de la función main y borra esa linea de código tanto de la función registro como de la función impresion_datos. Esto sería la solución número uno de la que hablé en mi comentario anterior

      • Alejandro Alvarez Castañeda Says:

        si, pero no se me permite poner nada en el area global
        entonces lo que quiero saber es como hacer que lo que escriba en la funcion leer, lo pueda imprimir con la funcion de impresion

      • rtmex Says:

        Entónces aplica la solución número 2 que te di :)

      • Alejandro Alvarez Castañeda Says:

        pero es que si entiendo lo que dices pero nose como escribirlo en mi programa para que lo de leer lo pueda imprimir….por eso te decia que si te podia pasar el programa completo :(

      • rtmex Says:

        El prototipo de tu función para leer los datos tendría que quedar algo como int registro(struct alumnos arreglo[], int elementos)
        El prototipo de tu función para imprimir los datos tendría que quedar algo como void impresion_datos(struct alumnos arreglo[], int elementos)

        Te pongo un ejemplo de como mandarías a llamar la función para imprimir los datos
        impresion_datos(a, 50);

      • Alejandro Alvarez Castañeda Says:

        igual en el registro ?
        quedaria:

        registro(a,50)

        para mandar los datos del registro hacia “a” del main

      • Alejandro Alvarez Castañeda Says:

        Matricula Nombre Apellido Celular Correo12312 6477828 6477878 6477978 6477928 0 6478024 6478074 6478174 6478124 0 6478220 6478270 6478370 6478320 32763 6478416 6478466 6478566 6478516 6478705 6478612 6478662 6478762 6478712 0 6478808 6478858 6478958 6478908 0 6479004 6479054 6479154 6479104 32763 6479200 6479250 6479350 6479300 6479984 6479396 6479446 6479546 6479496 0 6479592 6479642 6479742 6479692 10 6479788 6479838 6479938 6479888 7471220 6479984 6480034 6480134 6480084 538976288 6480180 6480230 6480330 6480280 0 6480376 6480426 6480526 6480476 2 6480572 6480622 6480722 6480672 0 6480768 6480818 6480918 6480868 6481120 6480964 6481014 6481114 6481064 1 6481160 6481210 6481310 6481260 0 6481356 6481406 6481506 6481456 0 6481552 6481602 6481702 6481652 1 6481748 6481798 6481898 6481848 0 6481944 6481994 6482094 6482044 3473460 6482140 6482190 6482290 6482240 538189843 6482336 6482386 6482486 6482436 5374168 6482532 6482582 6482682 6482632 5439570 6482728 6482778 6482878 6482828 64 6482924 6482974 6483074 6483024 0 6483120 6483170 6483270 6483220 1574896 6483316 6483366 6483466 6483416 0 6483512 6483562 6483662 6483612 1375731794 6483708 6483758 6483858 6483808 32763 6483904 6483954 6484054 6484004 160 6484100 6484150 6484250 6484200 0 6484296 6484346 6484446 6484396 6484564 6484492 6484542 6484642 6484592 0 6484688 6484738 6484838 6484788 143423664 6484884 6484934 6485034 6484984 56140 6485080 6485130 6485230 6485180 187998870 6485276 6485326 6485426 6485376 0 6485472 6485522 6485622 6485572 0 6485668 6485718 6485818 6485768 0 6485864 6485914 6486014 6485964 0 6486060 6486110 6486210 6486160 0 6486256 6486306 6486406 6486356 75 6486452 6486502 6486602 6486552 0 6486648 6486698 6486798 6486748 1224736841 6486844 6486894 6486994 6486944 0 6487040 6487090 6487190 6487140 1572864 6487236 6487286 6487386 6487336 0 6487432 6487482 6487582 6487532 4199739 6487628 6487678 6487778 6487728 0 6487824 6487874 6487974 6487924 0 6488020 6488070 6488170 6488120
        ——————————–
        Process exited after 25.53 seconds with return value 3221225477
        Presione una tecla para continuar . . .

        me imprime estas cosas :(
        en serio necesito tu ayuda

      • rtmex Says:

        Obviamente en el código dentro de las funciones debes reemplazar a por arreglo, es decir, en lugar de scanf(“%d”, &a[i].matricula); debes poner scanf(“%d”, &arreglo[i].matricula);

        Debes volver a leer el artículo detenidamente, analizarlo y entenderlo, con eso y con los comentarios que hemos intercambiado tienes todo lo que necesitas. Aunque probablemente te de la impresión de que no quiero ayudarte, creeme que te ayudo más orientándote para que tú mismo lo resuelvas que haciendote el código, “si quieres ayudar a alguien con hambre no le des pescado, enseñale a pescar”.

      • Alejandro Alvarez Castañeda Says:

        si, entiendo que quieras ayudarme pero en serio estoy desesperado jaja no es porque piense eso, es que lo necesito completo para mañana y esto es solo una parte de todo lo que falta

      • Alejandro Alvarez Castañeda Says:

        te mandare el codigo una vez mas, solo necesito que me digas cual es el error :(

        #include
        #include
        struct alumnos
        {
        int matricula;
        char nombre[50];
        char apellido[50];
        char correo[50];
        char celular[12];
        int cal[7];
        };
        int registro(struct alumnos b[], int elementos);
        void impresion_datos(struct alumnos b[], int elementos);
        int main()
        {
        struct alumnos a[50];
        int op,z=0;
        while(z<50)
        {
        printf("teclee la opcion que desea realizar: ");
        printf("\n1. Registrar los datos del alumno\n2.Modificar alumno\n3. Eliminar alumno\n4. Imprimir los datos de los alumnos\n5. Imprimir calificaciones de los alumnos\n6. Salir");
        scanf("%d",&op);
        system("cls");
        switch (op)
        {
        case 1: registro(a,50);break;
        case 2: impresion_datos(a,50); break;
        }
        z++;
        }
        }
        int registro(struct alumnos b[], int elementos)
        {
        int q;
        int c;
        int i=0;
        int ca=0;
        int op3;

        printf("Matricula: "); scanf("%d", &b[i].matricula); fflush(stdin);
        printf("\nNombre: "); gets(b[i].nombre); fflush(stdin);
        printf("\nApellido: "); gets(b[i].apellido); fflush(stdin);
        printf("\nCorreo: "); gets(b[i].correo); fflush(stdin);
        printf("\nCelular"); gets(b[i].celular); fflush(stdin);
        for(q=0;q<6;q++)
        {
        printf("\n Cal %d del alumno %d: ",q,i); scanf("%d",&b[i].cal[q]); fflush(stdin);
        b[i].cal[6]=((b[i].cal[0]*.20)+(b[i].cal[1]*.20)+(b[i].cal[2]*.20)+(b[i].cal[3]*.20)+(b[i].cal[4]*.10)+(b[i].cal[5]*.10));
        }
        ca=ca+1;
        for(i=0;i<ca;i++)
        {
        for(q=0;q<7;q++)
        {
        printf ("cal %d del alumno %d: ",q,i); printf("%d\n", b[i].cal[q]);
        }
        }
        printf("para regresar al menu presione 1: "); scanf("%d",&op3);
        system("cls");
        }
        void impresion_datos(struct alumnos b[], int elementos)
        {
        int i;
        printf("Matricula\t\tNombre\t\t\tApellido\t\tCelular\t\tCorreo");
        for(i=0;i<50;i++)
        {
        printf("%d\t\t",b[i].matricula);
        printf("%d\t\t",b[i].nombre);
        printf("%d\t\t",b[i].apellido);
        printf("%d\t\t",b[i].celular);
        printf("%d\t\t",b[i].correo);
        }
        }

      • rtmex Says:

        Ok, te recomiendo sustituir for(i=0;i<50;i++) por for(i=0;i<elementos;i++)
        Tu principal problema está cuando mandas a imprimir los datos, estas poniendo printf("%d\t\t",b[i].nombre); y la variable nombre es un arreglo de chars, por lo tanto debes poner printf("%s\t\t",b[i].nombre);
        Lo mismo con las otras variables de la estructura.
        Saludos

      • Alejandro Alvarez Castañeda Says:

        bueno ya arregle eso y ahora me imprime unos simbolos raros, si me impime lo que ingrese pero despues de eso unos simbolos….
        perdon por abrumarte con tantas dudas, pero es un trabajo importante

        y otra cosa, sabes que puedo poner para que se impriman de mayor a menor por matricula?? es que no se que hacer para ordenar los datos

      • rtmex Says:

        Eso es porque en tu función registro, sólo capturas la información para el primer elemento de los 50 del arreglo, entónces, los otros 49 elementos del arreglo apuntan a direcciones de memoria que quien sabe que contengan; y en tu función impresion_datos si imprimes los 50 elementos. La solución es que en tu finción registro hagas un ciclo para capturar información para los 50 elementos del arreglo, no sólo para el primero

        En cuanto a lo de ordenarlos, hay muchos métodos de ordenación, quick sort, buble sort, etc. investígalos y utiliza uno

      • Alejandro Alvarez Castañeda Says:

        pero y si el usuario no quiere poner 50 y pone solo 3 por ejemplo??

      • rtmex Says:

        Entónces primero debes inicializar las matrículas con un valor que no es válido como matrícula, por ejemplo -1. Y en el ciclo en donde imprimes los datos, antes de imprimir, checas si el valor del campo matricula es diferente de -1; así sólo imprimes la información de los elementos que tienen matriculas válidas (es decir, que el usuario capturó)

      • Alejandro Alvarez Castañeda Says:

        nono, no me refiero a eso si no a que si el ya no quiere ingresar mas datos, ya ves que es para 50 registros pero y si solo se desean hacer 3??

        y ahora tengo otro problema, solo me imprime el ultimo que ingrese :(

        no tendras otro medio para ayudarme y mandarte fotos del programa porque en serio necesito ayuda y no me ha salido poder hacerlo yo solo

      • rtmex Says:

        En la función registro haces un ciclo, y pones un aviso al usuario cada vez que capture la matricula que diga algo como Matricula (0 para terminar):, y checas si el usuario ingresa 0, significa que ya no quiere capturar más registros, entonces sales del ciclo, es decir, ya no capturas ese registro ni los que falten. Si el usuario no ingresa cero, capturas la matricula en el registro correspondiente y pides los otros datos (nombre, apellido, etc.)

      • Alejandro Alvarez Castañeda Says:

        eso hice pero ahora al momento de imprimir solo me imprime el ultimo que registre

  19. Alejandro Alvarez Castañeda Says:

    disculpa te podria pasar todo el codigo para saber que hacer porque trato de mandar los arreglos pero no me funciona aun

  20. laura valentina Says:

    Hola, cómo me ayudaron tus ejemplos, podrías ayudarme con estos:

    1. Solicite o ingrese 25 valores, con notas de 0 a 5 (con un decimal, por ejemplo 5.0 y
    3.5) que ingrese el usuario a través del teclado o lo genere el sistema, luego imprimir el
    promedio y decir si aprobó o no (dichas notas mayores o iguales a 3.5)

    2.Crear un programa que capture una cadena de texto con una longitud no mayor a 40
    caracteres, luego en un mensaje imprimir solo las vocales y en otro mensaje imprimir sólo las
    consonantes.

    3.Realizar una función que reciba como parámetro una frase cualquiera que ingrese el usuario, la
    función deberá retornar dicha frase al revés

    4. Un Supermercado efectúa durante el mes 15 ventas a distintos clientes, el supermercado
    desea tener a disposición un programa que permita capturar el precio total de dichas ventas y
    con base a eso desea saber lo siguiente:
    1. ¿Cuántas ventas fueron mayores a 550?
    2. ¿Cuántas ventas fueron mayores a 200 y menores o iguales a 550?
    3. Calcular los promedios de cada grupo (puntos a y b), es decir el promedio de las ventas
    mayores a 550, y el promedio de las ventas que están entre 200 y son menores a 550.
    4. ¿Cuáles ventas fueron mayores a 550?
    5. ¿Cuáles ventas fueron mayores a 200 y menores o iguales a 550?
    6. Imprimir por pantalla lo solicitado en los puntos anteriores

    5.Crear un programa que permita capturar, almacenar y ordenar de mayor a menor en un arreglo
    20 números enteros que ingrese el usuario a través de la consola (los números deben ser
    menores que 100), luego capturar un número por fuera del arreglo e imprimir los números del
    arreglo que sean mayores al número ingresado por fuera del arreglo

    GRACIAS.

    • rtmex Says:

      Laura: Que bueno que te hayan servido los ejemplos que he puesto en este blog. No lo tomes a mal pero no resuelvo tareas, con gusto te ayudo si tienes alguna duda concreta sobre algún tema que ya hayas investigado previamente. La única forma de aprender es investigar e intentar hacer los programas, no te desanimes.

      Todo lo que te piden no es realmente muy complicado. Te recomiendo este texto de la Universidad de Navarra “Aprenda lenguaje ANSI C como si estuviera en primero”, puedes descargarlo sin costo para fines personales http://www4.tecnun.es/asignaturas/Informat1/ayudainf/aprendainf/AnsiC/leng_c.pdf

      Saludos

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s


A %d blogueros les gusta esto: