Arreglos

15
Arreglos en lenguaje C Programaci´ on estructurada Arreglos Oscar Alvarado Nava [email protected] Departamento de Electr´ onica Divisi´on de Ciencias B´ asicas e Ingenier´ ıa Universidad Aut´onoma Metropolitana, Unidad Azcapotzalco 13O, octubre de 2013 Oscar Alvarado Nava UAM Azcapotzalco Arreglos 1/15

description

programacion

Transcript of Arreglos

  • Arreglos en lenguaje C

    Programacion estructuradaArreglos

    Oscar Alvarado Nava

    [email protected]

    Departamento de ElectronicaDivision de Ciencias Basicas e Ingeniera

    Universidad Autonoma Metropolitana, Unidad Azcapotzalco

    13O, octubre de 2013

    Oscar Alvarado Nava UAM Azcapotzalco Arreglos 1/15

  • Arreglos en lenguaje C

    Contenido

    1 Arreglos en lenguaje CArreglos en lenguaje CUni-dimensionales

    Oscar Alvarado Nava UAM Azcapotzalco Arreglos 2/15

  • Arreglos en lenguaje C

    Arreglos en lenguaje C

    Arreglos

    Un arreglo (array) es un conjunto de variables del mismo tipoque son referenciadas por un identificador

    Cada elemento en el arreglo es accedido por un ndice

    En C, un arreglo es un segmento de memoria (locaciones dememoria contiguas)

    Los arreglos pueden ser de varias dimensiones, comunmentede una o dos dimensiones

    El arreglo mas comun es C es la cadena (string), el cual es unarreglo de caracteres terminado por el caracter nulo (NULL,\0)Los arreglos y los apuntadores (pointer) estan estrechamenterelacionados

    Oscar Alvarado Nava UAM Azcapotzalco Arreglos 3/15

  • Arreglos en lenguaje C

    Arreglos en lenguaje C

    Puntos de vista logico

    Un arreglo uni-dimensional es un conjunto de elementos delmismo tipo ordenados en fila. Tambien son llamado lista,secuencia o vector

    Un arreglo bi-dimensional es un conjunto de elementos delmismo tipo ordenados en filas y columnas. Tambien sonllamados matrices

    Oscar Alvarado Nava UAM Azcapotzalco Arreglos 4/15

  • Arreglos en lenguaje C

    Uni-dimensionales

    Declaracion de un arreglo uni-dimensional

    La forma de declarar un arreglo uni-dimensional es

    tipo identificador[tama~no];

    Como cualquier otra variable, un arreglo debe de ser declaradoantes de utilizarse

    tipo es el tipo de variables que podra almacenar el arreglo

    tama~no define el numero de elementos que contendra elarreglo

    Oscar Alvarado Nava UAM Azcapotzalco Arreglos 5/15

  • Arreglos en lenguaje C

    Uni-dimensionales

    Declaracion de un arreglo

    float unArreglo[10];

    unArreglo

    En tiempo de compilacion se reserva un segmento de memoriasuficiente para alojar el arreglo

    En este caso, si cada float es de 4 bytes, el segmentodebera de ser de 40 bytes

    Ni compilador, ni el cargador inicializan el arreglo

    Oscar Alvarado Nava UAM Azcapotzalco Arreglos 6/15

  • Arreglos en lenguaje C

    Uni-dimensionales

    dir float.c

    1 /* Programacion estructurada , 13O, Oscar Alvarado Nava2 Direcciones de memoria de un arreglo de flotantes */3 #include 45 int main()6 {7 float unArreglo [10]; /* declara un arreglo de 10 flotantes */89 printf("Arreglo de %d bytes\n", sizeof(unArreglo));

    10 printf("Cada elemento es de %d bytes\n", sizeof(unArreglo [0]));1112 printf("Direccion de memoria\n");13 printf("1er elemento: %p\n", &unArreglo [0]);14 printf("2do elemento: %p\n", &unArreglo [1]);15 printf("3er elemento: %p\n", &unArreglo [2]);16 printf("4to elemento: %p\n", &unArreglo [3]);17 printf("5to elemento: %p\n", &unArreglo [4]);18 printf("6to elemento: %p\n", &unArreglo [5]);19 printf("7mo elemento: %p\n", &unArreglo [6]);20 printf("8vo elemento: %p\n", &unArreglo [7]);21 printf("9no elemento: %p\n", &unArreglo [8]);22 printf("10mo elemento: %p\n", &unArreglo [9]);2324 return 0;25 }

    Oscar Alvarado Nava UAM Azcapotzalco Arreglos 7/15

  • Arreglos en lenguaje C

    Uni-dimensionales

    dir char.c

    1 /* Programacion estructurada , 13O, Oscar Alvarado Nava2 Direcciones de memoria de un arreglo de chars*/3 #include 45 int main()6 {7 char unArreglo [10]; /* declara un arreglo de 10 caracteres */89 printf("Arreglo de %d bytes\n", sizeof(unArreglo));

    10 printf("Cada elemento es de %d bytes\n", sizeof(unArreglo [0]));1112 printf("Direccion de memoria\n");13 printf("1er elemento: %p\n", &unArreglo [0]);14 printf("2do elemento: %p\n", &unArreglo [1]);15 printf("3er elemento: %p\n", &unArreglo [2]);16 printf("4to elemento: %p\n", &unArreglo [3]);17 printf("5to elemento: %p\n", &unArreglo [4]);18 printf("6to elemento: %p\n", &unArreglo [5]);19 printf("7mo elemento: %p\n", &unArreglo [6]);20 printf("8vo elemento: %p\n", &unArreglo [7]);21 printf("9no elemento: %p\n", &unArreglo [8]);22 printf("10mo elemento: %p\n", &unArreglo [9]);2324 return 0;25 }

    Oscar Alvarado Nava UAM Azcapotzalco Arreglos 8/15

  • Arreglos en lenguaje C

    Uni-dimensionales

    dir double.c

    1 /* Programacion estructurada , 13O, Oscar Alvarado Nava2 Direcciones de memoria de un arreglo de doubles */3 #include 45 int main()6 {7 double unArreglo [10]; /* declara un arreglo de 10 dobles */89 printf("Arreglo de %d bytes\n", sizeof(unArreglo));

    10 printf("Cada elemento es de %d bytes\n", sizeof(unArreglo [0]));1112 printf("Direccion de memoria\n");13 printf("1er elemento: %p\n", &unArreglo [0]);14 printf("2do elemento: %p\n", &unArreglo [1]);15 printf("3er elemento: %p\n", &unArreglo [2]);16 printf("4to elemento: %p\n", &unArreglo [3]);17 printf("5to elemento: %p\n", &unArreglo [4]);18 printf("6to elemento: %p\n", &unArreglo [5]);19 printf("7mo elemento: %p\n", &unArreglo [6]);20 printf("8vo elemento: %p\n", &unArreglo [7]);21 printf("9no elemento: %p\n", &unArreglo [8]);22 printf("10mo elemento: %p\n", &unArreglo [9]);2324 return 0;25 }

    Oscar Alvarado Nava UAM Azcapotzalco Arreglos 9/15

  • Arreglos en lenguaje C

    Uni-dimensionales

    Inicializacion de un arreglo

    Ni compilador, ni el cargador inicializan el arreglo

    Sera responsabilidad del programador inicializar el arreglo convalores adecuados

    La inicializacion se puede hacer al declarar el arreglo

    ...float puntos[5] = {1.1, -2.2, 3.3, -4.4, 5.5};...char vocales[5] = {a, e, i, o, u};...int respuesta[2] = {0, 1};...

    Oscar Alvarado Nava UAM Azcapotzalco Arreglos 10/15

  • Arreglos en lenguaje C

    Uni-dimensionales

    Indexacion del arreglo

    float unArreglo[10];

    0 1 2 3 4 5 6 7 8 9

    unArreglo 3.1 1.2 1.3 4.4 1.5 2.5 2.7 3.1 3.3 3.9

    Cada elemento del arreglo es identificado por un numero

    En cada elemento del arreglo se puede almacenar un valor deltipo del arreglo

    Un arreglo de N elementos debera ser indexado de 0 a N-1

    Oscar Alvarado Nava UAM Azcapotzalco Arreglos 11/15

  • Arreglos en lenguaje C

    Uni-dimensionales

    Acceso al arreglo

    float unArreglo[10];

    0 1 2 3 4 5 6 7 8 9

    unArreglo 3.1 1.2 1.3 4.4 1.5 2.5 2.7 3.1 3.3 3.9

    Tambien se utiliza el operador corchete para indexar el arregloy acceder a uno de sus elementos

    La sentenciavar = unArreglo[0];

    almacena en la variable var el valor del primer elemento (vardebe ser de tipo float)

    Oscar Alvarado Nava UAM Azcapotzalco Arreglos 12/15

  • Arreglos en lenguaje C

    Uni-dimensionales

    Almacenamiento en el arreglo

    0 1 2 3 4 5 6 7 8 9

    unArreglo 3.1 1.2 1.3 9.9 1.5 2.5 2.7 3.1 3.3 3.9

    De la misma forma se utiliza el operador corchete para indexarel arreglo y almacenar un valor en uno de sus elementos

    La sentenciaunArreglo[3] = 9.9;

    almacena el valor 9.9 en el cuarto elemento

    Oscar Alvarado Nava UAM Azcapotzalco Arreglos 13/15

  • Arreglos en lenguaje C

    Uni-dimensionales

    promedio arreglo.c

    1 /* Programacion estructurada , 13O, Oscar Alvarado Nava2 Solicita 10 valores , los almacena en un arreglo3 muesta los valores y calcula el promedio */4 #include 5 #define NCALIF 106 int main()7 {8 float calif[NCALIF ]; /* declara un arreglo de 5 flotantes */9 int i; /*para indexar el arreglo y como contador en los ciclos */

    10 float suma =0.0, promedio;11 /* solicita las calificaciones */12 for(i=0; i

  • Arreglos en lenguaje C

    Uni-dimensionales

    Desbordamiento de arreglos

    Ni en la compilacion ni en la ejecucion del programa seprueban los lmites de un arreglo

    Sera responsabilidad del programador asegurar que el arreglono sea desbordado

    int puntos[10],i;

    ...for(i=0; i