You are on page 1of 14

1/14

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;
}
}

void prod_mat(int n,int l,int m,int a[][MAX],int b[][MAX],int p[][MAX])
{
for(i=0; i<n; i++)
{ for(j=0; j<m; j++)
{ p[i][j]=0;
for(k=0; k<l; k++)
p[i][j]=p[i][j]+a[i][k]*b[k][j];
}
}
}

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

}

void Escribir(int B[][N])
{
int i,j;
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
cout<<" "<<B[i][j]<<"\t";
cout<<endl<<endl;
}
}

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.

You might also like