Arreglos

Ejemplos de Vector.

1._ A continuación se muestra un programa que cuenta el número de apariciones de los números 0, 1, 2, 3 en una secuencia de enteros acabada en -1.

    #include <stdio.h>
    int main()
    {
        int num, c0=0, c1=0, c2=0, c3=0;

        scanf("%d", &num);
        while (num != -1)
        {
            if (num == 0) c0++; 
            if (num == 1) c1++; 
            if (num == 2) c2++; 
            if (num == 3) c3++;
            scanf("d", &num);
        } 
        printf("Contadores:%d, %d, %d, %d\n", c0, c1, c2, c3);
     return 0; 
     }
     		

¿Que ocurrirá si tuviésemos que contar las apariciones de los cien primeros números enteros? ¿Deberíamos declarar cien contadores y escribir cien construcciones if para cada caso? La respuesta, como era de esperar, se halla en el uso de vectores. Veámoslo en el siguiente programa:

    #include <stdio.h> 
    #define MAX 100 
    int main() 
    {
        for (i= 0; i< MAX; i++)
            cont[i] = 0; 
        scanf("%d", &num);
        while (num != -1) 
            {
            if ((num >= 0) && (num <= MAX))
                cont[num]++; 
            scanf("%d", &num );
            }
         for (i= 0; i< MAX; i++) 
            printf("Contador [%d] = %d\n", i, cont[i]);
    return 0;
    } 
            

Para entender con mayor claridad la practicidad y funcionalidad de los arreglos se muestra el siguiente ejemplo: Suponiendo que tenemos una cantidad n de valores y queremos determinar cual de ellos es el mayor. Suponiendo que no tenemos conocimientos del uso de arreglos, en caso de que se nos presentase el problema anterior tendríamos que hacer algo como lo que se muestra a continuación.

    /* Ejemplo : el mayor de tres números.. */   
    #include <stdio.h> 
    #include <stdlib.h> 
    int main()
    {
        int a,b,c;

        printf("Dime un valor para A : ");
        scanf("%i",&a); 
        printf("Dime un valor para B : ");
        scanf("%i",&b); 
        printf("Dime un valor para C : ");
        scanf("%i",&c); 
        if ((a > b) && (a > c))
            printf("el mayor es %i \n",a);
        else if ((b > a) && (b > c)) 
            printf("el mayor es %i \n",b);
        else 
            printf("el mayor es %i \n",c); 
    return 0;
    }
            

En este ejemplo se muestra un programa ineficiente, y además difícil de ampliar, para encontrar el mayor de tres números. Como podemos ver para encontrar el mayor de más de tres números necesitaríamos reescribir el programa casi por completo. Pero si hacemos uso de arreglos podemos mejorar un poco esto, por lo menos facilitando la reutilización y mantenimiento del programa.

    /* Ejemplo : el mayor de cuatro números.. */
    #include <stdio.h> 
    #include <stdlib.h>
    int main()
    {
        int n = 4;
        int a[n],c,mayor;
        for (c = 0; c < n; c++) { 
            printf("Dime un valor : ");
            scanf("%i",&a[c]);
        }
        for (c = 0; c < n; c++) {
            if ((a[c] > mayor) || (c == 0))
                mayor = a[c];
        }
        printf("El mayor es : %i \n\n", mayor);
        system("pause");
    return 0;
    }                
            

En este otro ejemplo se muestra otra solución al mismo problema de una mejor manera haciendo uso de las virtudes de los arreglos. Claro que esta tampoco es la solución mas optima. Pero a diferencia del primer ejemplo a este solo se le debe cambiar el valor de n para reutilizarlo con otras cantidades de números, o sea es un trabajo que es reutilizable y que en el futuro no tendremos que reescribir. El único problema en este pedacito de código es que para aumentar la cantidad de valores que soporta el programa se debe, todavía, modificar el código y recompilar.

    /* Ejemplo : el mayor de n números.. */
    #include <stdio.h> 
    #include <stdlib.h> 
    int main()
    { 
        int n; 
        int capt,c,mayor; 
        
        printf("Dime la cantidad de números que voy a comparar : ");
        scanf("%i",&n); 
        for (c = 0; c < n; c++) { 
            printf("Dime un valor : "); 
            scanf("%i",&capt); 
            if ((capt > mayor) || (c == 0)) 
                mayor = capt; 
         } 
         printf("El mayor es : %i \n\n", mayor); 
         system("pause"); 
    return 0; 
    }
            

Esta es una manera todavía mas optima porque permite que el usuario decida que cantidad de números el va a introducir para comparar en tiempo de ejecución. Eso significa que no necesitamos recompilar el código.

2._ Vamos a crear un programa que lea un vector de 10 posiciones, luego determine si la quinta posición es positiva, si la primera posición es negativa y si la ultima posición es cero.(*)

    #include <stdio.h>
    #include <conio.h>
    #define N 10
    main()
    {
        float  x[N];
        int  i;

        for(i=0;  i<N; i++) {
            printf("Ingrese el valor %d:\n", i);
            scanf("%f",  &x[i]);
        }
        if(x[ 4]> 0)    
            printf( "La  quinta Posición es Positiva\n\n");
        
         if(x[ 0]< 0,)
            printf( "La 1era Posición es  Negativo\n\n");
        
         if(x[N- 1]== 0)
            printf( "La última Posición es  Cero\n\n");
      
        getch();
    return  0;
    }
            

Seguir a paginadeC en Twitter Foro de Página de C ¡CSS Válido!