UNIVERSIDAD TECNOLÓGICA DE LOS ANDES INGENIERÍA DE SISTEMAS E INFORMÁTICA FUNDAMENTOS DE PROGRAMACIÓN DOCENTE: Ing. Ronald Rentería Ayquipa. ARREGLOS (ARRAYS) MARCO TEÓRICO: En clase ya conocimos algunos tipos básicos como por ejemplo los tipos char, int y float. El lenguaje C++ permite, además, construir estructuras más complejas a partir de estos tipos básicos. Una de las construcciones que podemos definir son los arreglos o arrays. ARREGLO Colección ordenada de elementos de un mismo tipo, que se almacenan en memoria de manera contigua, que se referencian utilizando un nombre común. Ordenada significa que cada elemento tiene una ubicación determinada dentro del arreglo (hay un primer elemento, un segundo elemento, un tercer elemento, y así sucesivamente) y debemos conocerla para accederlo. Para diferenciar y acceder a un elemento en particular de un arreglo se usa un índice. Estos índices van después del nombre del arreglo y encerrados por [] (corchetes). El elemento 5° (quinto) de un arreglo, es representado por el índice [4], ya que los índices comienzan en 0. Esto significa que un arreglo de 10 elementos tendría los índices del 0 al 9: [0…9] Una forma de visualizar un arreglo es como un grupo de cajas, una detrás de otra. MiArreglo 0 1 2 3 4 5 6 7 8 9 índices Donde cada caja representa un dato del arreglo o un elemento. En este caso el arreglo tiene el nombre MiArreglo, es de tamaño 10 (contiene 10 cajas) y los índices *0…9+ indican la posicion de los elementos dentro del arreglo. Así el 1° elemento es accesado mediante MiArreglo*0+, el 2° elemento mediante MiArreglo*1+, …. , el 10° elemento mediante MiArreglo[9]. Podemos concluir que un arreglo tiene: Tamaño: cuantas cajas va a tener, el número de datos o elementos. Tipo: cual es el tipo de todos los elementos (enteros, reales, etc) Nombre: es el único nombre bajo el cual vamos a dirigirnos al arreglo. Un arreglo puede tener una o varias dimensiones. Las dimensiones indican como están organizados los elementos dentro del grupo. Los arreglos se clasifican de acuerdo a las dimensiones que tengan, así hay arreglos de una dimensión, de dos dimensiones, de tres dimensiones, etc. Universidad Tecnológica de los Andes Fundamentos de Programación 1/6 Ingeniería de Sistemas e Informática Ing. Ronald Rentería A. ARREGLOS UNIDIMENSIONALES O VECTORES Son aquellos que tienen una sola dimensión, se les conoce también como unidimensionales o vectores. Arreglo unidimensional con 10 elementos 0 1 2 3 4 5 6 7 8 9 Declaracion de vectores: Sintaxis: <tipo> nombre_arreglo[longitud]; Donde: tipo= es el tipo de datos del arreglo nombre_arreglo= el nombre que le vas a asignar al arreglo longitud= el tamaño del arreglo. Cabe destacar que longitud debe ser cualquier expresión entera constante mayor que cero. Ejemplos de declaración de vectores: int unamba[7]; // declara un vector de 7 elementos enteros de nombre unamba float vector[50]; // declara un vector de nombre vector de 50 elementos tipo float Manejo de vectores: Cuando declaramos un arreglo, por ejemplo: int mivector[5]; obtenemos 5 elementos enteros bajo el mismo nombre (mivector), pero ahora ¿Cómo accedemos a cada uno de estos elementos individuales del arreglo? Manipulación de elementos individuales Usamos el nombre del arreglo seguido del índice que identifica al elemento que se desea acceder: nombre_arreglo[indice]. En este ejemplo se muestra como asignar valores a los elementos de un vector de forma individual: int arreglito[4]; // declara un arreglo de 4 enteros llamado arreglito arreglito[0]=4; // asigna 4 al primer elemento (índice 0) arreglito[1]=6; // asigna 6 al segundo elemento (índice 1) arreglito[2]=0; // asigna 0 al tercer elemento (índice 2) arreglito[3]=15; // asigna 15 al cuarto elemento (índice 3) El arreglo finalmente quedará lleno de la siguiente manera: arreglito 4 6 0 15 0 1 2 3 Para imprimir los elementos del arreglo anterior también se acceden a los elementos de la forma anterior: Universidad Tecnológica de los Andes Fundamentos de Programación 2/6 Ingeniería de Sistemas e Informática cout<<arreglito[0]; cout<<arreglito[1]; cout<<arreglito[2]; cout<<arreglito[3]; Ing. Ronald Rentería A. // imprime el primer elemento (índice 0) // imprime el segundo elemento (índice 1) // imprime el tercer elemento (índice 2) // imprime el cuarto elemento (índice 3) Cada elemento del vector es, a todos los efectos, una variable que puede usarse independientemente de los demás elementos. Así, por ejemplo, un elemento del vector arreglito puede usarse en una instrucción de entrada, salida o de otro tipo igual que cualquier variable simple de tipo int: cout<<”Ingrese un valor”; cin>>arreglito[1]; // almacena el valor ingresado en el segundo elemento (índice 1) cout<<arreglito[1]; // imprime el segundo elemento (índice 1) arreglito[1]= arreglito[1]*2; // duplica el valor del segundo elemento cout<<arreglito[1]; // vuelve a imprimir el segundo elemento ahora duplicado Cuando se quiere llenar, imprimir o recorrer un vector por ejemplo de 20 elementos hacerlo de la forma anteriormente vista es un proceso muy tedioso, lo mejor es usar un ciclo para llenarlo rápido. Recorrido de un vector Una forma habitual de manipular un vector es accediendo secuencialmente a todos sus elementos, uno tras otro. Para ello, se utiliza un bucle con contador, de modo que la variable contador nos sirve como índice para acceder a cada uno de los elementos del vector. La estructura más utilizada para recorrer arreglos es for. Supongamos, por ejemplo, que tenemos un vector de 10 números enteros declarado como int v[10]; y una variable entera declarada como int i;. Por medio de un bucle, con ligeras modificaciones, podemos realizar todas estas operaciones: a. Inicializar todos los elementos a un valor cualquiera (por ejemplo, 0): for(i=0 ; i<10 ; i++) // notar el menor estricto (<) para ir de 0 hasta 9 { v[i]=0; // asigna el valor ‘0’ al vector v en la posición i } b. Inicializar todos los elementos con valores introducidos por teclado: for(i=0 ; i<10 ; i++) { cout<<”Ingrese valor para la posicion ”<<i; cin>>v[i]; // asigna el valor ingresado al vector v en la posición i } Universidad Tecnológica de los Andes Fundamentos de Programación 3/6 Ingeniería de Sistemas e Informática Ing. Ronald Rentería A. c. Mostrar todos los elementos en la pantalla: for(i=0 ; i<10 ; i++) { cout<<”El elemento ”<<i<<”es”<<v*i+; // imprime el valor del vector v en la posicion i } d. Realizar alguna operación que implique a todos los elementos. Por ejemplo, sumarlos: suma=0; for(i=0 ; i<10 ; i++) { suma=suma + v[i]; } EJERCICIOS RESUELTOS Ejercicio Nº 01: Hacer un programa que pida 5 valores enteros, los almacene en un vector y luego los muestre en pantalla. #include<iostream.h> #include<conio.h> void main() { int i,valores[5]; //llenar el arreglo con datos del teclado for(i=0 ; i<5 ; i++) { cout<<"Ingrese valor para la posicion "<<i<<"=> "; cin>>valores[i]; } //imprimir el arreglo for(i=0 ; i<5 ; i++) { cout<<"El elemento "<<i<<" es "<<valores[i]<<endl; } getch(); } Ejercicio Nº 02: Hacer un programa que llene un arreglo de 10 elementos con los siguientes valores: 0, 10, 20, 30, …, 90. Universidad Tecnológica de los Andes Fundamentos de Programación 4/6 Ingeniería de Sistemas e Informática Ing. Ronald Rentería A. #include<iostream.h> #include<conio.h> void main() { int i,serie[10]; // llena el arreglo con los valores pedidos for(i=0 ; i<10 ; i++) { serie[i]=i*10; } // imprime el arreglo con los valores pedidos for(i=0 ; i<10 ; i++) { cout<<serie[i]<<"\t"; } getch(); } Ejercicio Nº 03: Realizar un programa que permita el ingreso de notas de un curso de 12 alumnos. Una vez ingresadas se debe mostrar la suma y el promedio de las notas del curso. #include<iostream.h> #include<conio.h> void main() { int i,notas[12],suma; float promedio; // llena el arreglo con las notas for(i=0 ; i<12 ; i++) { cout<<"Ingrese la nota del alumno "<<i<<" #- "; cin>>notas[i]; } // cálculo de la suma de las notas suma=0; for(i=0 ; i<12 ; i++) { suma+=notas[i]; } // ahora calculamos el promedio promedio=suma/12.0; // imprimimos las variables de salida cout<<"La suma de las notas es: "<<suma<<endl; cout<<"El promedio de las notas es: "<<promedio; getch(); } Universidad Tecnológica de los Andes Fundamentos de Programación 5/6 Ingeniería de Sistemas e Informática Ing. Ronald Rentería A. Ejercicio Nº 04: Hacer un programa que permita el ingreso de n valores a un arreglo. Una vez ingresados se debe pedir un valor para buscar en el arreglo e imprimir si fue encontrado en el arreglo o no, en caso de que fuera encontrado imprimir también su posición. #include<iostream.h> #include<conio.h> void main() { int i,A[100],encontrado,n,valor_buscado,posicion; // llena el arreglo con los valores cout<<"Ingrese el numero de valores que desea ingresar: "; cin>>n; for(i=0 ; i<n ; i++) { cout<<"Ingrese el valor "<<i<<" #- "; cin>>A[i]; } cout<<"Ingrese el valor que desea buscar: "; cin>>valor_buscado; // recorrer el arreglo para buscar el valor encontrado=0; // inicializa la variable bandera en 0 for(i=0 ; i<n ; i++) { if(A[i]==valor_buscado) { encontrado=1; posicion=i; } } if(encontrado==1) { cout<<"El valor "<<valor_buscado<<" se encuentra en la posicion "<<posicion; } else { cout<<"El valor "<<valor_buscado<<" no se encuentra en el arreglo"; } getch(); } EJERCICIOS DE EXTENSIÓN Modificar los ejercicios 1, 2 y 3 de tal manera que sean para ‘n’ elementos (generalizar). Universidad Tecnológica de los Andes Fundamentos de Programación 6/6