El documento presenta varios ejemplos de uso de arrays unidimensionales y bidimensionales en C++. Los ejemplos incluyen pasar arrays como parámetros a funciones, inicializar arrays con diferentes tipos de datos, sumar y multiplicar matrices utilizando arrays bidimensionales, y leer y escribir datos de arrays.
El documento presenta varios ejemplos de uso de arrays unidimensionales y bidimensionales en C++. Los ejemplos incluyen pasar arrays como parámetros a funciones, inicializar arrays con diferentes tipos de datos, sumar y multiplicar matrices utilizando arrays bidimensionales, y leer y escribir datos de arrays.
El documento presenta varios ejemplos de uso de arrays unidimensionales y bidimensionales en C++. Los ejemplos incluyen pasar arrays como parámetros a funciones, inicializar arrays con diferentes tipos de datos, sumar y multiplicar matrices utilizando arrays bidimensionales, y leer y escribir datos de arrays.
Algoritmos y Programacin Ing. Felix Huari Evangelista
GUIA DE LABORATORIO N 3
ARRAYS EN C++ OBJ ETIVOS 1. Saber utilizar los arrays unidimensionales y bidimensionales en sus programas, pasar como parmetros a las funciones.
Ejem 1. #include <iostream> using namespace std; /* programa que lee una cantidad de dinero (entera) en soles y devuelve el despiece */
int x[]={200,100,50,20,10}; //denominacion de los billetes void despiece(int cantidad);
int main() { int cantidad; cout<<"Ingrese cantidad de dinero -> "; cin>>cantidad; despiece(cantidad); system("PAUSE"); }
// Definicion de la funcion void despiece(int cantidad) { int i; for (i=0; i<5;i++) { cout<<cantidad/x[i]<<" billetes de "<<x[i]<<endl; cantidad%=x[i]; //cantidad=cantidad % x[i]; } cout<<cantidad<<" monedas de 1"<<endl; }
Ejem 2. #include <iostream> #include <math.h> using namespace std; /* programa que lee una serie de datos y los guarda en un arreglo, luego evalua la media y la desviacion estandar de los datos. Observese el paso de un arreglo como parametro a una funcion */
const int MAXIMO=25;
//funciones prototipo 2/14 Algoritmos y Programacin Ing. Felix Huari Evangelista void leer(int x[], int); void escribir(int x[], int); double media(int x[], int); double desvstd(int x[], int);
int i; //variable global
int main() { int x[MAXIMO], n; // variables locales
cout<<"Cuantos datos enteros va a ingresar?"; cin>>n; leer(x,n); cout<<"\nUsted ingreso: "; escribir(x,n); cout<<"\nMedia = "<<media(x,n)<<endl; cout<<"Desviacion estandar ="<<desvstd(x,n)<<endl; system("PAUSE"); }
//Definicion de las funciones void leer(int x[], int n) { cout<<"Ingrese "<<n<<" datos\n"; for (i=0;i<n;i++) { cout<<"X["<<i<<"]="; cin>>x[i]; } }
void escribir(int x[], int n) { for (i=0;i<n;i++) cout<<x[i]<<" ";
}
double media(int x[], int n) { double suma=0; for (i=0;i<n;i++) suma+=x[i]; return suma/n; } double desvstd(int x[], int n) { double suma=0, prom=media(x,n); for (i=0;i<n;i++) suma+=pow(x[i]-prom,2); 3/14 Algoritmos y Programacin Ing. Felix Huari Evangelista
return sqrt(suma/n); }
Ejem 3. #include<iostream.h> //muestra el paso de un array como parametro a una funcion using namespace std; const int MAX = 30;
//funciones prototipo void func1(int n, int num[MAX]); //como un array delimitado void func2(int n, int num[]); //como un array no delimitado void func3(int n, int *num); //como una referencia o puntero
int main() { int i, n, num[MAX]; cout<<"Cuantos datos enteros para el arreglo? "; cin>>n;
//leer los elementos del array cout<<"Ingrese "<<n<<" datos "; for (i=0; i<n; i++) { cout<<"num["<<i<<"]="; cin>>num[i]; }
//llamadas a las funciones cout<<"Llamada a func1(): "<<endl; func1(n,num); cout<<"Llamada a func2(): "<<endl; func2(n,num); cout<<"Llamada a func3(): "<<endl; func3(n,num); system("PAUSE"); }
void func1(int n, int num[MAX]) //como un array delimitado { for (int i=0; i<n; i++) cout<<num[i]<<" "; cout<<endl; }
void func2(int n, int num[]) //como un array no delimitado { 4/14 Algoritmos y Programacin Ing. Felix Huari Evangelista for (int i=0; i<n; i++) cout<<num[i]<<" "; cout<<endl; }
void func3(int n, int *num) //como una referencia o puntero { for (int i=0; i<n; i++) cout<<num[i]<<" "; cout<<endl; }
Ejem 4. /*Programa que inicializa un arreglo bidimensional con cadenas */ #include <iostream> using namespace std; //Programa principal int main() { char *Leng[][4]={{"Pascal","Delphi 7.0","Fortran","Assembler"}, {"Prolog","Cobol","Basic","Ada"}, {"Borland C++","Dev C++","Turbo C++","Small Talk"} }; int i,j; for(i=0;i<3;i++) {for(j=0;j<4;j++) cout<<Leng[i][j]<<"\t"; cout<<endl; } system("PAUSE"); }
Ejem 5.
#include <iostream> #include <iomanip> using namespace std; void Escribir( int A[][4]) { int i,j; cout<<"**** MATRIZ A ****"<<endl<<endl; for(i=0;i<3;i++) { for(j=0;j<4;j++) cout<<setw(4)<<A[i][j]; cout<<endl; } cout<<endl; } 5/14 Algoritmos y Programacin Ing. Felix Huari Evangelista
int MayorElem( int A[][4]) { int i,j,k,may; for(i=0,k=0;i<3;i++) for(j=0;j<4;j++) { if(k==0) may=A[i][j]; else if(A[i][j]>may) may=A[i][j]; k++; } return may; }
//programa principal int main() { int A[][4]={28,20,10,55,13,75,30,90,70,68,59,40}; int mElem; Escribir(A); mElem=MayorElem(A); cout<<"Mayor Elemento es:"<<mElem<<endl<<endl; system("pause"); }
Ejem 6. #include <iostream> using namespace std; //programa que suma matrices
const int MAX=20; //orden maximo de una matriz
//funciones prototipo void leer_mat(int n, int X[][MAX]); void escribe_mat(int n, int X[][MAX]); void suma_mat(int n, int a[][MAX],int b[][MAX],int s[][MAX]);
//variable globales short int i,j,k,l,m,n; //Programa principal int main() //sumamat2.cpp { int a[MAX][MAX], b[MAX][MAX],s[MAX][MAX];
//Suma de matrices cout<<"Ingrese orden N de las matrices: "; cin>>n; cout<<"\nMATRIZ A: "; leer_mat(n,a); //llamada a funcion leer matriz cout<<"\nMATRIZ B: "; 6/14 Algoritmos y Programacin Ing. Felix Huari Evangelista leer_mat(n,b); //llamada a funcion leer matriz suma_mat(n,a,b,s); //llamada a funcion sumar matrices cout<<"\nMATRIZ A: "<<endl; escribe_mat(n,a); cout<<"\nMATRIZ B: "<<endl; escribe_mat(n,b); cout<<"\nMATRIZ SUMA S = A+B : "<<endl; escribe_mat(n,s); cout<<"\nFin del Programa!"<<endl; system("PAUSE"); }
//definicion de las funciones void leer_mat(int n, int X[MAX][MAX]) { cout<<"Ingrese "<<n<<" datos por fila:\n"; for(i=0; i<n; i++) for(j=0; j<n; j++) { cout<<"X["<<i<<"]["<<j<<"]="; cin>>X[i][j]; } }
void escribe_mat(int n, int X[MAX][MAX]) { for(i=0; i<n; i++) { for(j=0; j<n; j++) cout<<X[i][j]<<" "; cout<<endl; } }
void suma_mat(int n, int a[][MAX],int b[][MAX],int s[][MAX]) { for (i=0; i<n; i++) { for(j=0; j<n; j++) s[i][j]=a[i][j] + b[i][j]; } }
Ejem 7. #include <iostream> using namespace std;
//Programa que realiza el producto de matrices
7/14 Algoritmos y Programacin Ing. Felix Huari Evangelista const int MAX=20; //orden maximo de una matriz
//funciones prototipo void leer_mat(int n, int m, int elem[][MAX]); void escribe_mat(int n, int m, int elem[][MAX]); void prod_mat(int n,int l,int m,int a[][MAX],int b[][MAX],int p[][MAX]);
//variable globales short int i,j,k,l,m,n;
//Programa principal int main() { int a[MAX][MAX], b[MAX][MAX], p[MAX][MAX];
//Producto de matrices /*Leer parametros de A y B; donde n=filas, l=columnas de A y m=columnas de B */ cout<<"Ingrese numero de filas y columnas de A y "; cout<<"tambien numero de columnas de B: "; cin>>n>>l>>m; cout<<"\nMATRIZ A:"; leer_mat(n,l,a); //llamada a funcion leer matriz cout<<"\nMATRIZ B:"; leer_mat(l,m,b); //llamada a funcion leer matriz prod_mat(n,l,m,a,b,p); cout<<"\nMATRIZ A: "<<endl; escribe_mat(n,l,a); cout<<"\nMATRIZ B: "<<endl; escribe_mat(l,m,b); cout<<"\nMATRIZ PRODUCTO P = A*B : "<<endl; escribe_mat(n,m,p); cout<<"\nFin del Programa!"<<endl; system("PAUSE"); }
//definicion de las funciones void leer_mat(int n, int m, int elem[][MAX]) { cout<<"\nIngrese "<<m<<" datos por fila:\n"; for(i=0; i<n; i++) { cout<<"Fila "<<i<<": "; for (j=0; j<m; j++) cin>>elem[i][j]; } }
void escribe_mat(int n, int m, int elem[][MAX]) { 8/14 Algoritmos y Programacin Ing. Felix Huari Evangelista for(i=0; i<n; i++) { for(j=0; j<m; j++) cout<<elem[i][j]<<" "; cout<<endl; } }
Ejem. 8. /* Programa que captura una lista de productos cuyos datos son los siguientes codigo, descripcion y la cantidad de unidades fisicas que tiene en cada uno de los 5 almacenes, para finalmente mostrarla */ #include <iostream> #include <stdio.h> // usado para la funcion gets(), lectura de cadenas using namespace std; const int M=100,N=5; const int R=8,S=25; void Lectura(char cod[][R],char prod[][S],int a[][N],int m); void Salida(char cod[][R],char prod[][S],int a[][N],int m); //programa principal int main() { int A[M][N],T; char C[M][R],P[M][S]; cout<<"Ingrese la cantidad de productos a procesar ";cin>>T; Lectura(C,P,A,T); Salida(C,P,A,T); system("PAUSE"); }
// Definicion de funciones void Lectura(char cod[][R],char prod[][S],int a[][N],int m) { int i,j; for(i=0;i<m;i++) { cout<<"Codigo["<<i<<"]="; gets(cod[i]);cout<<"Producto["<<i<<"]=";gets(prod[i]); for(j=0;j<N;j++) 9/14 Algoritmos y Programacin Ing. Felix Huari Evangelista { cout<<"A["<<i<<"]"<<"["<<j<<"]="; cin>>a[i][j]; } } }
void Salida(char cod[][R],char prod[][S],int a[][N],int m) { int i,j; cout<<"\nNo. Codigo\tDescripcion\t\tStock x Almacen\n"; for(i=0;i<m;i++) { cout<<(i+1)<<" "<<cod[i] <<"\t"<<prod[i]<<"\t"; for(j=0;j<N;j++) cout<<a[i][j]<<"\t"; cout<<endl; } }
Ejem. 9 /* Programa que llena una matriz de orden 8 x 8 con numeros pseudoaleatorios*/ #include <iostream> #include <stdlib.h> // La funcion srand() y rand() estan dentro de esta libreria #include<time.h> using namespace std; const int N=8; void Numeros(int B[][N]); void Escribir(int B[][N]); int main() { int X[N][N];
cout<<"A R R E G L O D E N U M E R O S P S E U D O A L E A T O R I O S\n"; cout<<"____________________________________________________________________\n\n"; Numeros(X); Escribir(X); system("PAUSE"); }
// Definicion de funciones void Numeros(int B[][N]) { int i,j; srand(time(NULL)); //Generador de semilla en funcion del tiempo for(i=0;i<N;i++) for(j=0;j<N;j++) B[i][j]=1+rand()%100; // Genera numeros pseudoaleatorios entre 1 y 100 10/14 Algoritmos y Programacin Ing. Felix Huari Evangelista
Ejem. 10 /* Una empresa comercial tiene 1000 productos que comercializa, por cada producto se ingresa los siguientes datos: codigo, cantidad, costo unitario. La compaia tiene 3 almacenes y adems el precio unitario de venta por producto es un 40% mas del costo unitario. Se pide escribir un programa que realice lo siguiente: a) Lectura de Datos b) Mostrar los datos leidos y calculados c) Cual es el producto que tiene mayor existencia y en que almacen esta ubicado. d) Determinar y mostrar el total de la inversion y el total de los ingresos */ #include <iostream> using namespace std; const int N=1000; //Lectura de datos void Lectura(int c[],float a[][3],float cv[N][2],int m) { register int i,j,k; for(i=0;i<m;i++) { cout<<"Procesando datos del producto #:"<<(i+1)<<endl; cout<<"C["<<i<<"]=";cin>>c[i]; for(j=0;j<3;j++) { cout<<"Cantidad en Almacen #:"<<(j+1)<<endl; cout<<"A["<<i<<"]["<<j<<"]=";cin>>a[i][j]; } cout<<"Procesando el Costo unitario y precio de venta de producto #:"<<(i+1)<<endl; cout<<"CV["<<i<<"]["<<0<<"]=";cin>>cv[i][0]; cv[i][1]=1.40*cv[i][0]; } cout<<endl; }
//Determinando el producto con mayor existencia void ProductoMayor(int c[],float a[][3],int m,int &cp,float &may,int &al) 11/14 Algoritmos y Programacin Ing. Felix Huari Evangelista { int i,j,k=0; for(i=0;i<m;i++) for(j=0;j<3;j++) if(k==0) { cp=c[i];may=a[i][j]; al=j; } else if(a[i][j]>may) { cp=c[i];may=a[i][j]; al=j; } }
// Determinando el monto total de Iversion e Ingresos void InversionIngresos(float a[][3],float cv[N][2],int m) { register int i,j,k; float s,ct=0,ti=0; for(i=0;i<m;i++) { s=0; for(j=0;j<3;j++) s+=a[i][j]; ct=ct+s*cv[i][0]; ti=ti+s*cv[i][1]; } cout<<"La inversion total es:"<<ct<<endl; cout<<"El ingreso total es:"<<ti<<endl; }
// Mostrando los datos void VerProductos(int c[],float a[][3],float cv[N][2],int m) { register int i,j,k; cout<<"MOSTRANDO LOS PRODUCTOS"<<endl; for(i=0;i<m;i++) { cout<<c[i]<<"\t"; for(j=0;j<3;j++) cout<<a[i][j]<<"\t"; cout<<cv[i][0]<<"\t"<<cv[i][1]<<endl; } }
//Programa principal int main() { int c[N],n,cp,al; float a[N][3],cv[N][2],may; cout<<"Numero de productos a procesar";cin>>n; Lectura(c,a,cv,n); VerProductos(c,a,cv,n); ProductoMayor(c,a,n,cp,may,al); cout<<"El codigo del producto mayor es:"<<cp<<endl; 12/14 Algoritmos y Programacin Ing. Felix Huari Evangelista cout<<"La mayor cantidad fisica es:"<<may<<endl; cout<<"Esta en el almacen #:"<<al<<endl; InversionIngresos(a,cv,n); system("pause"); } 13/14 Algoritmos y Programacin Ing. Felix Huari Evangelista
PROBLEMAS PROPUESTOS
1. Se tiene las ventas en miles de soles que corresponde a una semana (Lunes a Domingo) de 3 sucursales de una tienda, se pide determinar que da se vendi mas y en que sucursal. Los datos son: 100, 800, 500, 900, 250, 960, 145, 789, 456, 445, 660, 700, 810, 490, 1080, 720, 580, 485, 870, 935, 795., Adems mostrar los datos como una matriz. 2. Escribir un programa que permita mostrar el triangulo de pascal tal como se muestra en la siguiente figura: 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 ...........................
2. Escribir un programa que rellene una tabla de 20 x 40 con los 80 primeros nmeros primos y luego lo muestre.
3. Se ha tomado una muestra de n datos (ruidos en decibeles) en una empresa metalmecnica, se pide calcular la media, varianza y la desviacin estndar, para ello defina funciones para cada caso.
4. Una matriz cuadrada A se dice que es simtrica si A[i,j] = A[j,i], escribir una funcin para mostrar si dicha matriz es o no simtrica.
5. Un posta medica posee n mdicos para la atencin en medicina general tal como se muestra a continuacin: Apellido 0 Alva 1 Bendezu 2 Campos 3 Contreras 4 De la Torre 5 Estrada 6 ................... 7 ..................
Se pide escribir un programa que permita insertar y borrar un Apellido en el lugar que corresponde. Como se observa en la figura el vector esta ordenado originalmente, No realizar ningn algoritmo de ordenamiento para realizar la insercin o borrado. Finalmente despus de cada proceso escribir el vector, defina funciones de usuario de acuerdo a sus necesidades.
6. Se tiene una matriz de orden M x N, la misma almacena nmeros enteros, se pide escribir un programa que sume todos los elementos que conforman el 14/14 Algoritmos y Programacin Ing. Felix Huari Evangelista contorno de dicha matriz. Defina una funcin para lectura, escritura y otra para calcular la suma. Usted debe ingresar por teclado el tamao tanto para las filas como para las columnas, ambos deben ser mayor o igual que 3. 7. Escribir un programa que intercambie por filas los elementos de una matriz bidimensional. Los elementos de la primera fila debe intercambiarse con los de la ltima fila, los de la segunda fila con la penltima fila y as sucesivamente, luego escribir la matriz original y la nueva matriz. 8. Escribir un programa que genere una matriz cuadrada de tal manera que sus diagonales contengan la unos (1) y el resto de los elementos 0. Luego escribir la matriz. 9. Se pide escribir un programa que genere una matriz de orden cuadrada de tal manera que almacene todos los nmeros capicas comprendidos entre a y b, donde a es menor que b. Ambos son positivos, luego escribir la matriz generada. Recuerde que al momento de ejecutar el programa solo debe ingresar como datos el orden de la matriz, a y b que son los limites. Resolver el problema aplicando funciones creadas por usted. 10. Escribir una funcin que reciba como parmetro una matriz cuadrada y la dimensin. La funcin debe retornar true si la suma de los elementos de cada fila, columna y diagonales (principal y secundaria) tienen el mismo valor, en caso contrario retorna false. Implementar adems todo el programa. 11. Escribir una funcin que intercambie la filas que tiene la mayor y la menor cantidad de vocales. Asumir que la cantidad de vocales es diferente en cada fila. La matriz es de orden n x m. Adems plantear el programa principal. 12. Los resultados de un torneo de futbol donde participan n equipos se almacenan en una matriz de cuadrada de orden n. Por fila se registran los goles que un equipo anoto a los dems y por columna tiene los goles que dicho equipo recibi de los dems. Se pide implementar otra matriz de tal manera que almacene los siguientes datos: partidos ganados, partidos perdidos, goles a favor goles en contra, partidos empatados y puntaje. Finalmente mostrar la matriz resultante.