AnteriorPosterior

5. Arrays y estructuras - 5.1. Conceptos básicos sobre tablas

  Curso: Fundamentos de programación en C, por Nacho Cabanes

5.1. Conceptos básicos sobre tablas

5.1.1. Definición de una tabla y acceso a los datos

Una tabla, vector, matriz o array (que algunos autores traducen por “arreglo”) es un conjunto de elementos, todos los cuales son del mismo tipo. Estos elementos tendrán todos el mismo nombre, y ocuparán un espacio contiguo en la memoria.

Por ejemplo, si queremos definir un grupo de 4 números enteros, usaríamos

int ejemplo[4];

Podemos acceder a cada uno de los valores individuales indicando su nombre (ejemplo) y el número de elemento que nos interesa, pero con una precaución: se empieza a numerar desde 0, así que en el caso anterior tendríamos 4 elementos, que serían ejemplo[0], ejemplo[1], ejemplo[2], ejemplo[3].

Como ejemplo, vamos a definir un grupo de 5 números enteros y hallar su suma:

/*---------------------------*/
/*  Ejemplo en C nº 38:      */
/*  C038.C                   */
/*                           */
/*  Primer ejemplo de tablas */
/*                           */
/*  Curso de C,              */
/*    Nacho Cabanes          */
/*---------------------------*/
 
#include <stdio.h>
 
int main()
{
    int numero[5];           /* Un array de 5 números enteros */
    int suma;                /* Un entero que será la suma */
 
    numero[0] = 200;      /* Les damos valores */
    numero[1] = 150;
    numero[2] = 100;
    numero[3] = -50;
    numero[4] = 300;
    suma = numero[0] +    /* Y hallamos la suma */
        numero[1] + numero[2#93; + numero[3] + numero[4];
    printf("Su suma es %d", suma);
    /* Nota: esta es la forma más ineficiente e incómoda */
    /* Ya lo iremos mejorando */
 
    return 0;
}
 

Ejercicios propuestos:

  • Un programa que pida al usuario 4 números, los memorice (utilizando una tabla), calcule su media aritmética y después muestre en pantalla la media y los datos tecleados.
  • Un programa que pida al usuario 5 números reales y luego los muestre en el orden contrario al que se introdujeron.

5.1.2. Valor inicial de una tabla

Al igual que ocurría con las variables “normales”, podemos dar valor a los elementos de una tabla al principio del programa. Será más cómodo que dar los valores uno por uno, como hemos hecho antes. Esta vez los indicaremos todos entre llaves, separados por comas:

/*---------------------------*/
/*  Ejemplo en C nº 39:      */
/*  C039.C                   */
/*                           */
/*  Segundo ejemplo de       */
/*  tablas                   */
/*                           */
/*  Curso de C,              */
/*    Nacho Cabanes          */
/*---------------------------*/
 
#include <stdio.h>
 
int main()
{
    int numero[5] =            /* Un array de 5 números enteros */
      {200, 150, 100, -50, 300};
    int suma;                  /* Un entero que será la suma */
 
    suma = numero[0] +    /* Y hallamos la suma */
        numero[1] + numero[2] + numero[3] + numero[4];
    printf("Su suma es %d", suma);
    /* Nota: esta forma es algo menos engorrosa, pero todavía no */
    /* está bien hecho.  Lo seguiremos mejorando */
 
    return 0;
}
 

Ejercicios propuestos:

•  Un programa que almacene en una tabla el número de días que tiene cada mes (su­pon­dremos que es un año no bisiesto), pida al usuario que le indique un mes (1=enero, 12=diciembre) y muestre en pantalla el número de días que tiene ese mes.

•  Un programa que almacene en una tabla el número de días que tiene cada mes (año no bisiesto), pida al usuario que le indique un mes (ej. 2 para febrero) y un día (ej. el día 15) y diga qué número de día es dentro del año (por ejemplo, el 15 de febrero sería el día número 46, el 31 de diciembre sería el día 365).

 

5.1.3. Recorriendo los elementos de una tabla

Es de esperar que exista una forma más cómoda de acceder a varios elementos de un array, sin tener siempre que repetirlos todos, como hemos hecho en

suma = numero[0] + numero[1] + numero[2] + numero[3] + numero[4];

El “truco” consistirá en emplear cualquiera de las estructuras repetitivas que ya hemos visto (while, do..while, for), por ejemplo así:

suma = 0; /* Valor inicial */
for (i=0; i<=4; i++)
suma += numero[i];

En este caso, que sólo sumábamos 5 números, no hemos escrito mucho menos, pero si trabajásemos con 100, 500 o 1000 números, la ganancia en comodidad sí que está clara.

Ejercicios propuestos:

  • A partir del programa propuesto en 5.1.2, que almacenaba en una tabla el número de días que tiene cada mes, crear otro que pida al usuario que le indique la fecha, detallando el día (1 al 31) y el mes (1=enero, 12=diciembre), como respuesta muestre en pantalla el número de días que quedan hasta final de año.
  • Crear un programa que pida al usuario 10 números y luego los muestre en orden inverso (del último al primero).
  • Crear un programa que pida al usuario 10 números, calcule su media y luego muestre los que están por encima de la media.
  • Un programa que pida al usuario 10 números enteros y calcule (y muestre) cuál es el mayor de ellos.

Actualizado el: 24-07-2014 15:32

AnteriorPosterior