8.1 Arreglos y Modularidad
Mtra. Irma Ardón
Colección de valores todos ellos del mismo tipo, que se almacenan en localidades consecutivas (celdas)
en la memoria de la computadora, bajo un mismo NOMBRE de variable:
tipo NOMBRE[max_elem];
max_elem es la cantidad máxima de elementos del arreglo
Arreglo o Vector
Para localizar un valor en un arreglo o vector, se utiliza un indicador de posición también llamado
índice
X[0] = 1.8 lee (X[1]) muestra(X[i])
Para recorrer todos los elementos de un vector (en C/C++)
i va de cero a max_elem –1
Localización de cada valor
El programador es responsable de:
No exceder los límites del vector
Solo recuperar el contenido de celdas con valor previamente definido
En C/C++
Propiedades de los Arreglos
Los arreglos tienen tres propiedades:
un nombre
un conjunto de valores todos ellos del mismo tipo
índice o indicador de posición de 0 a MaxElem –1
#include<iostream>
#define N 10
using namespace std;
int main() {
int datos[N],indice;
float prom, suma =0.0;
for ( indice = 0; indice < N; indice++ ) { cout<<”\n NUMERO?:”;
cin>>datos[indice];
suma = suma + datos[indice];
}
prom = suma / N ;
cout<<”\nEl promedio es:”<<prom;
}
Promedio
de diez
números
Promedio, menor y mayores a
prom
#include <iostream>
#include <conio.h>
#define n 4
using namespace std;
int main (){
int i,datos[n], menor, cont_may;
float prom,total;
cont_may=i=0;
cout<<"\nINGRESE EL DATO "<<i+1<<" ";
cin>>datos[i];
total= menor=datos[i];
for(i=1;i<n; i++){
cout<<"\nINGRESE EL DATO "<<i+1<<" ";
cin>>datos[i];
if (datos[i] < menor) menor=datos[i];
total=total+datos[i];
}
prom=total/n; //…
//…
cout<<"\nPROMEDIO = "<<prom
<<"\nMENOR = “ <<menor;
for(i=0;i<n;i++){
if (datos[i] > prom) cont_may++;
}
cout<<"\nMAYORES AL PROMEDIO = “ <<cont_may;
getch();
}
1.
Dados dos arreglos producto de los i-esimos elementos, almacenando en un tercer
arreglo (i-esima posición) el resultado
2.
Leer y mostrar con sus posiciones los elementos de un vector
3.
Dado el vector L, acomodar sus elementos en L1, L2 y L3 por intervalos de 0-50, 51-100 y 101-150
4.
Reemplazar todas las apariciones de un valor
por un nuevo valor
Puede estar compuesto de elementos de tipo
cadena, otro puede tener todos sus elementos de tipo entero
a) Arreglo b) Contador c) Ciclo
¿Cuál es una de las ventajas más importantes de usar un vector? Almacenar:
b)tipos de datos
c) variables
d)un conjunto de datos
e)constantes
EJERCICIO
Pedir y leer N igual a tres números,
determinar y mostrar: la suma, la cantidad
de números positivos y avisar con una
bandera si al menos un valor fue negativo
Modularidad
Dividir el trabajo
Reutilizar código
Fácil comprensión
Fácil mantenimiento
#include <iostream>
using namespace std;
//se escriben los encabezados de los módulos a implementar void altas();
void bajas();
void cambios();
void consultas();
Base de
Datos…
//luego se escribe el encabezado del main y se implementa:
int main (){
int opc;
do {
cout<<endl<<"\nmain: MENU PRINCIPAL ";
cout<<endl<<"\n1. Altas\n2. Bajas\n3. Cambios\n4.
Consultas\n5. Salir ";
cout<<endl<<"\nOpcion: ";
cin>>opc;
switch (opc){
case 1: altas(); break;
case 2: bajas(); break;
case 3: cambios(); break;
case 4: consultas();
}
}while (opc != 5);
}
…Base de
Datos…
//Después del main se implementan los módulos:
void altas(){
cout<<endl<<" MODULO DE ALTAS ";
}
void bajas(){
cout<<endl<<" MODULO DE BAJAS ";
}
void cambios(){
cout<<"\n MODULO DE CAMBIOS ";
}
void consultas(){
cout<<"\nMODULO DE CONSULTAS ";
}
//o el main al final, sin encabezados del principio
…Base de
Datos
Otro Ejemplo
Cálculo de área y perímetro de un
triángulo
Declaración de Módulos
1. void Calcula_Area(float base, float altura, float * area) {
2. *area = base*altura/2;
3. }
4. float Calcula_Perimetro(float base, float altura){
5. float perimetro;
6. perimetro=base*altura;
7. return (perimetro);
8. }
1. void main(void){
2. float base,a,perimetro,area;
3. int opc;
4. do {
5. do {
6. cout<<"\n1. AREA\n2. PERIMETRO\n3. SALIR\nOPCION? ";
7. cin>>opc;
8. }while(opc < 1 || opc > 3);
9. if (opc != 3) {
10. cout<<"\nINGRESE BASE Y ALTURA ";
11. cin>>base>>a;
12. switch (opc) {
13. case 1:Calcula_Area(base,a,&area);
14. cout<<"AREA = " <<area; break;
15. case 2:perimetro=Calcula_Perimetro(base,a);
16. cout<<" PERIMETRO = "<<perimetro;
17. }
18. }
19. }while (opc != 3);
20. }
Llamado
Comunicación entre módulos…
Parámetros de Permiten al módulo invocado Entrada Llevar a cabo su misión
Salida Comunicar resultados obtenidos
…comunicación
1. void Calcula_Area(float base, float altura, float * area) {
2. *area = base*altura/2;
3. }
4. float Calcula_Perimetro(float base, float altura){
5. float perimetro;
6. perimetro=base*altura;
7. return (perimetro);
8. }
Parámetros de Entrada Parámetro de Salida
Tipos de Parámetros
Formales.- Se declaran en el encabezado de un módulo
Actuales.- Se escriben en el llamado a un
módulo
Parámetros Formales
1. void Calcula_Area(float base, float altura,float * area) {
2. *area = base*altura/2;
3. }
4. float Calcula_Perimetro(float base, float altura){
5. float perimetro;
6. perimetro=base*altura;
7. return (perimetro);
8. }
1. void main(void){
2. float base,a,perimetro,area;
3. int opc;
4. do {
5. do {
6. cout<<"\n1. AREA\n2. PERIMETRO”<<"\n3. SALIR\nOPCION? ";
7. cin>>opc;
8. }while(opc < 1 || opc > 3);
9. if (opc != 3) {
10. cout<<"\nINGRESE BASE Y ALTURA ";
11. cin>>base>>a;
12. switch (opc) {
13. case 1:Calcula_Area(base,a,&area);
14. cout<<"AREA = " <<area; break;
15. case 2:perimetro=Calcula_Perimetro(base,a);
16. cout<<" PERIMETRO = "<<perimetro;
17. }
18. }
19. }while (opc != 3);
20. }
Parámetros Actuales
Comunicación de Parámetros…
Al invocar a un módulo, se le envían los parámetros actuales para que inicie su trabajo
Los parámetros enviados al módulo, son recibidos por los parámetros formales
Se ejecuta el módulo invocado con los
parámetros formales y sus variables
locales
…Los Parámetros, Actuales y
Formales
Deben coincidir en cantidad, tipo y
secuencia
Ejecución del Programa…
1.
Siempre inicia en main()
2.
Cuando se invoca a un módulo, la ejecución del main() se suspende
3.
Se ejecuta el módulo invocado
4.
Al terminar el módulo invocado, se regresa a main()
5.
Siempre termina en main()
…Ejecución del Programa…
Un módulo puede invocar a otro módulo y así sucesivamente,
iniciando y terminando la
aplicacion siempre en main()
Paso de Parámetros…
Por:
Valor. Entradas que no cambian
Referencia a su dirección de memoria.
Salidas que sí cambian
1. void Calcula_Area(float base, float altura, float * area) {
2. *area = base*altura/2;
3. }
4. float Calcula_Perimetro(float base, float altura) {
5. float perimetro;
6. perimetro=base*altura;
7. return (perimetro);
8. }