UNIVERSIDAD DON BOSCO FACULTAD DE ESTUDIOS TECNOLÓGICOS ESCUELA DE COMPUTACION GUIA DE LABORATORIO #08 Nombre de la Practica: CICLO: 01/ 2013 Uso de arreglos Unidimensionales (Vectores) Lugar de Ejecución: Centro de Computo Tiempo Estimado: 2 horas y 30 minutos MATERIA: Introducción a la Programación I. OBJETIVOS Que el estudiante: • • • • Definir que es un arreglo y cómo utilizarlo en el lenguaje C/C++. Desarrolle métodos para crear, inicializar y asignar valores a los elementos de un arreglo. Determine la forma de cómo debe tener acceso a los elementos de un arreglo, ya sea para asignarle valores a sus elementos o para leer los datos almacenados en ellos. Resolver una de las aplicaciones prácticas típicas con arreglos, como lo es la ordenación de elementos. II. INTRODUCCION TEORICA ¿Qué es un Arreglo? Muchas aplicaciones requieren el procesamiento de múltiples datos que tienen características comunes, por ejemplo, un conjunto de datos numéricos, representados por x1, x2, x3 x4… hasta un xN. En tales situaciones, es conveniente colocar los datos en un arreglo, el cual se caracteriza porque todos sus elementos comparten un mismo nombre (en este ejemplo el nombre para la variable de arreglo seria x). Los datos individuales pueden ser caracteres, números enteros, números de coma flotante de simple o de doble precisión (reales). Debe tenerse muy en cuenta que todos los N elementos de un arreglo se caracterizan en que: todos deben ser del mismo tipo de dato y deben tener el mismo tipo de almacenamiento. Definición de arreglo (Array en ingles) Un arreglo es un conjunto de variables del mismo tipo de datos que pueden ser referenciadas a través de un mismo nombre. La forma de identificar a un elemento determinado es a través de un índice. Como se maneja a los elementos de un arreglo Cada elemento (dato individual) del Arreglo es referenciado mediante la especificación del Nombre del arreglo seguido por uno o más Índices. El número de índices utilizados determinan las Dimensiones del Arreglo. 1 Guía # 8: Uso de arreglos Unidimensionales (Vectores) Dimensiones del arreglo Al definir un arreglo, se le debe indicar el total de elementos N que lo formaran. A este total N se le conoce como Dimensión del Arreglo, el cual permite indicar el total de posiciones que se almacenara dentro de la memoria de la PC. Si un arreglo tiene solo una dimensión, se le llama Arreglo Unidimensional, porque basta indicar un número, llamado “índice” para referenciar a una posición específica dentro del mismo. Si a un arreglo se le definen 2 o mas dimensiones, se le conoce como “Arreglo Multidimensional” o también “Matriz”, y necesitara tantos índices como dimensiones se le declaren al arreglo. Si define 2 dimensiones para un arreglo, a este se le conoce como un Arreglo bidimensional. Al definir más de una dimensión al arreglo, le permite aplicar diversos métodos de clasificación para el almacenamiento de listas de datos más complejos. Índices del arreglo Cada índice se encierra entre corchetes [ ] y debe ser expresado como un entero no negativo. Así en un Arreglo unidimensional llamado x de “n” elementos, para referenciar a cada uno de sus elementos se hará así: x[0], x[1], x[2], x[3], ........ Hasta x[n-1] Tal como se ilustra en la siguiente figura: Al observar el conteo de índices de la figura anterior, se debe tener muy claro que: al declarar un arreglo dentro de Lenguaje C, con una dimensión de N elementos, el primer índice disponible del arreglo comienza con 0 (cero) y el último índice es N-1 (uno menos del total N indicado para la dimensión). Esta aclaración es valida para el conteo de índices de cada una de las dimensiones de un arreglo multidimensional. Observe los ejemplos siguientes: Ejemplo 1: - Para declarar un arreglo unidimensional llamado MiLista con un total (una dimensión única) de 5 elementos de tipo entero, utilizara esta instrucción: int MiLista [5]; - Si desea asignar el valor 956 a la cuarta posición de MiLista, lo hará referenciando a este elemento con la siguiente instrucción: MiLista[3]= 956; //índice 3 del arreglo - Al final de esta asignación, el arreglo MiLista se vera en memoria así: índice 0 1 2 Valor asignado Introducción a la Programación 3 4 956 2 Guía # 8: Uso de arreglos Unidimensionales (Vectores) Declaración de un Arreglo Los Arreglos se declaran de igual forma que las variables ordinarias, excepto que cada nombre de Arreglo debe acompañarse de una especificación de tamaño (es decir, el total de elementos por cada dimensión). El tamaño de cada dimensión se especifica con una expresión entera positiva encerrada entre corchetes [ ]. En términos generales, la definición de un Arreglo se puede expresarse como: TipoDato nombre-arreglo [expresión] [expresion2] [expresion3]… [expresionD] En donde: TipoDato es el tipo de datos común para todos los elementos del arreglo nombre-arreglo es el nombre del Arreglo [expresión][expresión2][expresión3].. hasta [expresionD] es una o más expresiones enteras positivas que indican el total de elementos por cada dimensión del Arreglo. La multiplicación de las dimensiones da el total de elementos a crear. El primer valor expresión es obligatorio para definir un arreglo unidimensional. Si se utiliza además la expresion2, se define un arreglo bidimensional (2 dimensiones). Si utiliza el resto de expresiones, crea un arreglo multidimensional o matriz. Ejemplos sobre definición de arreglos y su respectivo significado respectivo: int A[100]; Arreglo unidimensional A de 100 enteros. Para utilizarlos se referencian como A[0], A[1], y así sucesivamente hasta las posiciones A[98] y A[99] float raices[5]; Arreglo llamado raíces que tiene 5 valores de comas flotantes (valores reales) char texto[80]; arreglo de 80 caracteres llamado texto */ Asignando valores a las posiciones del Arreglo Un arreglo puede almacenar un valor por cada una de sus posiciones. Existen 3 métodos para almacenar los valores en las posiciones del arreglo: a) Inicializar todas las posiciones de un arreglo al momento de declararlo, con los valores definidos por el programador. b) Asignar un valor fijo, o de una variable o el resultado de un calculo que genere un valor del mismo tipo de dato asignado al arreglo c) Solicite al usuario el valor para una posición del arreglo Observe la aplicación de estos métodos en el segundo ejemplo del procedimiento de esta guía. III. MATERIALES Y EQUIPO Para la realización de la guía de práctica se requerirá lo siguiente: No. Requerimiento Cantidad 1 Guía de Laboratorio #08 de IP 1 2 Compilador de C++. 1 3 Disquete ó Memoria USB 1 Introducción a la Programación 3 Guía # 8: Uso de arreglos Unidimensionales (Vectores) IV. PROCEDIMIENTO METODOS PARA ADMINISTRAR UN ARREGLO / VECTOR /ARRAY • • • Método 1: solicitando al usuario valor para una posición Método 2: inicializando posiciones al momento de declarar la matriz Método 3: asignando valor, ya sea: directamente, 2. de una variable, 3. de un proceso/calculo 1. Cree una carpeta denominada IPguia08proc_CARNET, en el cual se guardara los códigos fuente (cpp) de los ejemplos del procedimiento a continuación. Método 1: solicitando al Usuario los datos del Arreglo Ejercicio 1: Proceso de Creacion, almacenamiento e impresión del contenido de un Arreglo/Array GUIA8ejemplo1.cpp #include <iostream> #include <stdlib.h> #include <conio.h> using namespace std; #define tam 20 //max. total de elementos main(){//Llenado y Salida de Arreglo Unidimensional int n; //total elementos a ingresar int arreglo[tam];//Arreglo de 20 elementos int j=0; //contador de ciclo e indice del arreglo cout<<" INICIO: Datos del arreglo."<<endl; cout<<endl<<"Valores actuales del arreglo:"<<endl; for(j=0;j<tam; j++) cout<<"Elemento["<<j+1<<"]=\t "<<arreglo[j]<<endl; system("pause"); cout<<endl<<"LLENADO DEL ARREGLO"<<endl; cout<<"Cuantos elementos tendra Arreglo(como Max 20):\t"; cin>>n; if((n>0)&&(n<=tam)){ cout<<"\n\nIngreso de sus datos hacia el Arreglo"<<endl; for(j=0;j<n; j++){ cout<<endl<<"Ingrese el elemento ["<<j+1<<"]:\t"; cin>>arreglo[j]; }//fin for j system("pause"); system("cls"); cout<<"\tVista de datos almacenados en arreglo"<<endl; for(j=0;j<tam; j++) cout<<"Elemento ["<<j+1<<"] = "<<arreglo[j]<<endl; }else cout<<"*** ERROR: Entrada no Valida ***"; getch(); }//fin de main Introducción a la Programación 4 Guía # 8: Uso de arreglos Unidimensionales (Vectores) + Método 2: inicializando posiciones al momento de declarar la matriz + Método 3: asignando valor, ya sea: directamente, 2. de una variable, 3. de un proceso/calculo Ejercicio 2: GUIA08ejemplo2.cpp Metodo 2 y 3 para llenar las posiciones de un arreglo. #include <iostream> #include <conio.h> #include<stdlib.h> using namespace std; //Demostración de como ingresar valores a un arreglo main(){ /* inicializando posiciones al momento de declarar la matriz*/ float venta[6]={62,0,70,63.5,0,83.4}; int i; //contador para índice de arreglo float prom=0; //valor ventas promedio del semestre float mayo=76.9; //guarda venta de mes de mayo //asignando valor, ya sea: venta[1]=56.4; //1. directamente //(venta de febrero) venta[4]=mayo; //2. de una variable //3. de un proceso/calculo //calcula venta promedio de 1er trimestre prom=(venta[0]+venta[1]+venta[2])/3; //mostrando valores almacenados en el vector num cout<<endl<<"Montos mensuales del semestre:"<<endl; for(i=0; i<6; i++) cout<<endl<<"mes "<<i+1<<" : $ "<<venta[i]; getch(); //resultado de operar valores de un arreglo cout<<endl<<endl<<"Venta promedio de 1er trimestre es de $"; cout<<prom; getch(); }//fin de main + Operaciones con los elementos de un Arreglo Ejercicio 3: GUIA8ejemplo3.cpp Ordenar en forma ascendente los datos de un vector. #include <iostream> #include <conio.h> #include <stdlib.h> using namespace std; main(){//Ordenamiento rapido de arreglos int n,i; //variables locales de main int k,l,mayor; Introducción a la Programación 5 Guía # 8: Uso de arreglos Unidimensionales (Vectores) int cont; cout<<"PROGRAMA PARA ORDENAR ELEMENTOS DE ARREGLO\t"; cout<<"//ORDEN ASCENDENTE\\"<<endl; cout<<"De cuantos elementos quiere su arreglo[1-20max]\t"; cin>>n; system("cls"); int arreglo[n]; //arreglo de n elementos enteros cout<<"Ingreso los "<<n<<" datos del Arreglo:"<<endl; for(i=0; i<n; i++){ cout<<endl<<"Ingrese el elemento ("<<i+1<<"): "; cin>>arreglo[i]; }//fin for i //ordenamiento de arreglo en forma ascendente. cont=n; mayor=0; for(k=1;k<cont; ++k){ for(l=cont-1;l>=k;--l){ //intercambio de posiciones if(arreglo[l-1]>arreglo[l]){ mayor=arreglo[l-1]; arreglo[l-1]=arreglo[l]; arreglo[l]=mayor; }//fin if }//fin for l }//fin for k cout<<endl<<endl<<"Datos del arreglo ya ordenado de forma ASCENDENTE"<<endl; for(int j=0;j<n;j++) cout<<"elemento ("<<j+1<<")= "<<arreglo[j]<<endl; getch(); }//fin main Ejercicio 4: GUIA8ejemplo4.cpp Determinar el numero mayor y menor de un vector de N elementos brindados por usuario. #include <iostream> using namespace std; #include <conio.h> #include <stdlib.h> main(){ //Funcion principal int n; //total de datos en arreglo int i,mayor,menor; //contador de ciclos, valor mayor y menor del listado cout<<"ENCONTRANDO NUMERO MAYOR Y MENOR ALMACENADOS EN UN ARREGLO"; cout<<endl<<endl<<"De cuantos elementos quiere su arreglo [1-20max]:\t"; cin>>n; int vector[n]; //define arreglo para un total (n) de elementos enteros system("cls"); cout<<"Ingrese c/u de los "<<n<<" datos del Arreglo:"; for(i=0; i<n; i++){ cout<< endl<<"Elemento ("<<i+1<<")?? : ";cin>> vector[i]; }//fin for i //Se calcula menor y mayor valor dentro de arreglo /* (al iniciar) asigna los 1eros valores de arreglo a las variables mayor y menor*/ mayor=vector[0]; menor=vector[0]; //comienza busqueda del verdadero dato mayor y menor en listado Introducción a la Programación 6 Guía # 8: Uso de arreglos Unidimensionales (Vectores) for(i=0;i<n;i++){ //evalua numero almacenado en arreglo con variable mayor //si el numero del arreglo es mayor que la variable, actualiza valor if(vector[i]>mayor) mayor=vector[i]; //de manera similar, se compara ahora con variable menor, para actualizarla if(vector[i]<menor) menor=vector[i]; }//fin for i //imprimir resultados cout<<endl<<endl<<"RESULTADOS"<<endl; cout<<endl<<"Numero mayor dentro del arreglo es "<<mayor; cout<<endl<<endl<<"y menor valor en arreglo es "<<menor; getch(); }//fin main Ejercicio 5: GUIA8ejemplo5.cpp Manejo de un arreglo de tipo carácter (char) #include<iostream> #include<conio.h> using namespace std; main(){ char nom[25];//cadena string de 25 caracteres int edad; cout<<"Digite nombre completo de alumno: "; //captura cadenas con espacios cin.getline(nom,25); //captura cadenas sin espacios //cin>>nom; cout<<"Digite la edad del alumno: "; cin>>edad; if (edad>=18) cout<<endl<<"\tAlumno "<<nom<<" es mayor de edad"; else cout<<endl<<"\tAlumno "<<nom<<" es menor de edad"; getch(); } //fin main PROBLEMAS A RESOLVER: Elabore el código fuente de C++ que solucionen a cada uno de los problemas a continuación: Ejercicio 6: GUIA8final.cpp Crear un programa que permita almacenar en un vector 10 números enteros de todo tipo (positivos, negativos, ceros) e indique después el porcentaje (con una sola cifra decimal de exactitud) de números pares e impares, asi como la cantidad de ceros que fueron almacenados en dicho vector. Introducción a la Programación 7 Guía # 8: Uso de arreglos Unidimensionales (Vectores) VI. INVESTIGACION COMPLEMENTARIA 1. Investigue 8 funciones (pertenecientes como minimo a 2 librerías diferentes de C/C++) para el manejo de cadenas de caracteres en C/C++. No tomar en cuenta a librería s t d i o . h Elabore un programa ejemplo que en el que se demuestre a todas las funciones que investigó anteriormente. 2. Desarrolle un programa en C que realice lo siguiente: • Solicite al contador del almacén La Milagrosa el monto de las ventas mensuales de todo el año 2010. • El contador desea obtener los siguientes resultados: • Valor de la venta mensual promedio. • Obtenga el porcentaje de los meses del año que cumplieron los siguientes niveles de ventas: Nivel ventas Descripcion Minimo Menos del 45% del promedio anual de ventas Regular Entre el 45% a 75% del promedio de ventas Excelente Mas del 75% del promedio mensual • Indique los nombres de los meses en los cuales la venta fue Excelente. 3. Escriba un programa que lea una frase dada por usuario, para luego mostrar el total de palabras que la conforman y el total de espacios en blanco que tiene la frase. 4. Crear un vector que guarde las 9 notas mensuales (desde Enero hasta Septiembre) de un estudiante de bachillerato. Una vez recibidas las notas, muestre al estudiante a) nota promedio final b) el porcentaje de meses en los cuales obtuvo menor nota que el promedio final c) en cuales meses obtuvo notas mayores al promedio final. Tomar en cuenta que una nota valida solo debe variar entre {0.0 a 10.0}. No reciba una nueva nota mensual hasta que la nota actual a ingresar cumpla el rango indicado. 5. Escriba un programa que determine, si una cadena de texto es palíndromo. Es decir que se puede leer en ambos sentidos, por ejemplo OSO al escribirla al revés resulta OSO. VII. BIBLIOGRAFIA • • • Deitel, Harvey M. y Deitel, Paul J. CÓMO PROGRAMAR EN C++. 1ra Edición. Editorial Mc Graw Hill Pappas, Chris H. y Murray, William H. MANUAL DE REFERENCIA DE VISUAL C++ 6.0. 4ta Edición Editorial Prentice Hall (PEARSON). Joyanes Aguilar, Luís. PROGRAMACIÓN EN C++ - ALGORITMOS, ESTRUCTURAS DE DATOS Y OBJETOS. Editorial McGraw Hill, España, 2000. Introducción a la Programación 8