ALGORITMOS y PROGRAMAS LAB Nro 1
ISI 21 - 22 - 23 - 25
1. Hacer un ALGORITMO que permita el ingreso de dos nmeros reales por
teclado y calcule la divisin, si el denominador es diferente de cero. El algoritmo
debe mostrar los nmeros ingresados y el resultado.
ALGORITMO operaciones
INICIO
// Declarar las variables
real A, B, DR
// Ingresar los dos nmeros por teclado
LEER A, B
Si ( B 0 )
{ DR = A / B
// Dividir solo si el denominador es diferente de 0
MOSTRAR A, B // Muestra las entradas
MOSTRAR D R
// Muestra las salidas
}
FIN
Haga el programa en C++
#include<iostream.h>
#include<conio.h>
#include<math.h>
#include<stdlib.h>
#include<stdio.h>
void
{
main()
//
Declarar
double
las
A,
//
Ingresar
cout<<"Ingrese
if
variables
B,
Q
los
;
dos
dos
nmeros
numeros
por
teclado
reales
";
cin>>A>>B;
0
)
(
B
!=
=
A
/
B;
//
Q
=
cociente
real
cout<<"Dividendo
A
=
"<<A<<endl;
cout<<"Divisor
B
=
"<<B<<endl;
//
Muestra
las
entradas
cout<<"cociente Q = "<<Q<<endl; // Muestra el cociente
}
getch();
{
}
2. Haga el algoritmo, que divida dos numeros de tipo entero y calcule el resto, es
decir debe usar los operadores DIV y MOD de algoritmos. Haga el programa en
C++
ALGORITMO operaciones
INICIO
// Declarar las variables
entero A, B, Q , R
// Ingresar los dos nmeros por teclado
LEER A, B
Si ( B 0 )
{ Q = A DIV B
// Q = cociente entero ----- DIVISION ENTERA
R = A MOD B
// R = resto de dividir A y B
MOSTRAR A, B
// Muestra las entradas
MOSTRAR Q, R
// Muestra las salidas
}
FIN
Haga el programa en C++
#include<iostream.h>
#include<conio.h>
#include<math.h>
#include<stdlib.h>
#include<stdio.h>
void
{
main()
//
Declarar
las
variables
int
A,
B,
Q
,
R
;
//
Ingresar
los
dos
cout<<"Ingrese
dos
numeros
nmeros
separados
por
por
teclado
enter
";
cin>>A>>B;
if
(
B
!=
0
)
Q = A / B; // Q = cociente entero ----- DIVISION ENTERA
R = A % B; // R = resto de dividir A y B
cout<<"Dividendo
A
=
"<<A<<endl;
cout<<"Divisor B = "<<B<<endl; // Muestra las entradas
cout<<"cociente
Q
=
"<<Q<<endl;
cout<<"resto R = "<<R<<endl;
}
getch();
}
3. Hacer un ALGORITMO que permita calcular el pago por examen de admision
en una institucin universitaria, teniendo en cuenta que el valor de dicho pago
depende de el colegio de procedencia.
Colegio de Procedencia
Pago por Examen ADmision
Nacional
'N'
100+ 1% de Sueldo Minimo
Parroquial
'P'
200 + 3% de Sueldo Minimo
Particular
'T'
ALGORITMO Admisin
INICIO
// Declarar las variables
caracter ColProc
real PagoAdm
// Declarar las constantes
300 + 7% de Sueldo Minimo
const real tN = 0.01, tP= 0.03 , tR = 0.07
const real SueldoMin = 500
LEER ColProc
SELECCIONE ( ColProc )
{
caso N :
PagoAdm = 100 + tN*SueldoMin
salto
caso P : PagoAdm = 200 + tP*SueldoMin
salto
caso T : PagoAdm = 300 + tR*SueldoMin
salto
}
MOSTRAR PagoAdm
FIN
En lenguaje C++
# include <iostream.h>
# include <conio.h>
# include <stdlib.h>
// nota tolower() convierte a minuscula
// nota toupper() convierte a mayuscula
void main()
{
// Declarar las variables
char ColProc;
double PagoAdm;
// Declarar las constantes
const double tN = 0.01, tP= 0.03 , tR = 0.07;
const double SueldoMin = 500;
cout <<"Ingrese el colegio de procedencia : "; cin >> ColProc;
switch ( ColProc )
{
case 'N' :
PagoAdm = 100 + tN*SueldoMin;
break;
case 'P' :
PagoAdm = 200 + tP*SueldoMin;
break;
case 'T' :
PagoAdm = 300 + tR*SueldoMin;
break;
}
cout <<"Pago por admision : "<< PagoAdm<<endl;
getch();
}
Nota : Para que no diferencie entre valores de ColProc mayusculas y minusculas
puede usarse la funcin toupper(), teniendo los case en mayusculas , es decir 'N',
'P', y 'T', de manera que todo caracter ingresado se convertira en mayuscula.
As seria toupper ( ColProc )
4. Hacer un algoritmo para calcular la tabla de multiplicar de un numero
ingresado por
teclado.
ALGORITMO Tabla
INICIO
// Declarar variables
real valor, Resultado
entero i
Para ( i = 1 Hasta 12 , i=i+1)
{ Resultado = valor * i
MOSTRAR valor , * , i , = , Resultado
}
FIN
En Lenguaje C++
# include <iostream.h>
# include <conio.h>
void main()
{
// Declarar las variables
double valor, Resultado;
int i;
// Ingresar el valor de la tabla de multiplicar
cout<<"ngrese un numero : "; cin>> valor;
// Muestra la tabla del valor ingresado
cout<<"La Tabla del "<< valor <<":"<<endl;
for ( i =1 ; i<=12 ; i=i+1 )
{
Resultado = valor * i;
cout<<valor <<" * " << i <<" = " <<Resultado <<endl;
}
getch();
}
5. Hacer un algoritmo que permita calcular el volumen de 5 cilindros, teniendo en
cuenta que deben ingresarse el radio y la altura de cada uno de los cilindros.
ALGORITMO cilindro
INICIO
real radio, altura, volumen
Pi = 3.1416
PARA ( i =1, hasta 5, i=i+1)
{ LEER radio, altura
volumen = Pi*radio*radio*h
MOSTRAR volumen;
}
FIN
PROBLEMAS PROPUESTOS:
Hacer el algoritmo en seudocodigo y el programa en C++
1. Hacer un algoritmo que permita ingresar un numero real y muestre el numero
truncado (su parte entera) y su parte decimal (parte fraccionaria). Ejm si el numero
es 3.45, su parte entera sera 3 y su parte fraccionaria seria 0.45.
Sugerencia :si el numero real es num use:
ParteEntera = int(num) y
ParteFracc = num - ParteEntera
2. Hacer un algoritmo para calcular la nota final de un alumno, si se ingresa por
teclado: nombre, nota de examen parcial, promedio de practicas, nota de examen
final. Tenga en cuenta que examen parcial y final tienen peso 2 :
Nota final = ( ExParcial * 2 + Practicas + ExFinal * 2 ) / 5
El algoritmo debe mostrar el nombre, las notas parciales y la nota final.
Hacer tambien el codigo en C++
3. Hacer un algoritmo para calcular el area de la base el area lateral y el volumen
de un cilindro recto. Se requiere ingresar por teclado el radio y la altura.
El area de un circulo es pi * radio2
El volumen del cilindro recto es = AreaBase*Altura.
AreaLateral = 2*3.1416* radio*Altura + AreaBase*2
4. Una comercializadora de electrodomesticos ofrece una promocion por
aniversario, ofreciendo los siguientes descuentos de acuerdo al codigo.
4.
Codigo
<1>
Nombre
Precio
TasaDescuento
$
Lavadoras 800
10%
<2>
Licuadoras
90
5%
<3>
Lustradoras
350
11%
<4>
Aspiradoras
300
11%
<5>
Cocinas
550
8%
<6>
Congeladoras
700
12%
Ingresado por teclado el codigo del producto. El algoritmo debe Mostrar el
precio, descuento y el monto a pagar deducido los descuentos. Hacer
tambien el programa en C++. Sugerencia use Seleccione (pseudocodigo y
switch en C++.
5. Hacer el algoritmo y el respectivo programa en C++ para calcular la suma
de :
S = 11 + 22 + 33 + ..... + nn
para los n primeros numeros naturales ingresados por teclado.
SUGERENCIA : Use funcion estandar potencia y estructura de control para
6. Hacer un algoritmo y su respectivo programa en C++ que permita
generar y mostrar los primeros n numeros de fibonnacci. Considere que los
2 primeros numeros son 0 y 1.
Ejm
13
21
34 .............
7. Hacer un algoritmo y su respectivo programa en C++ que permita
generar y mostrar los numeros de fibonnacci menores a 20.
Sugerencia: Ver pseudocodigo en problemas resueltos de la pagina web.
Considerando los tipos de datos usados en clase para los enteros considere
los 20 primeros numeros de fibonacci y los numeros de fibonacci menores a
20
8. Resolver una ecuacin de segundo grado de la forma : ax2 + bx + c = 0.
Sugerencia: Use discriminante: Disc = b2 - 4*a*c
Nota Si Disc >=0
x1 = ( - b + sqrt (Disc) ) / 2
x2 = ( - b sqrt (Disc) ) / 2
Si Disc < 0
la solucin es imaginaria.
Solucin real
Solucin real
9. Se ha efectuado un examen medico a los alumnos de la universidad
Alas Peruanas y se han tomado tres medidas: el peso (kg), la talla (m) y
presion (mm). Se pide calcular el promedio de cada medida. Considere que
se trata de una cantidad n de alumnos ingresado por teclado. Haga el
pseudocdigo y su respectivo programa C++.
10. Hacer un algoritmo que permita ingresar por teclado una cantidad de
dinero (valor real) en soles y calcule la cantidad de billetes de 200, 100, 50,
20,10, monedas de 5,2,1,0.5, 0.2 y 0.10.
Sugerencia : Trabaje con parte entera y parte fracionaria de la cantidad de
soles :
Si Cantidad de dinero es Soles :
)*100)
pEntSoles = int ( Soles)
pFracSoles = int ( ( Soles - pEntSoles
LABORATORIO NRO 2
ISI 21 - 22 - 23 - 25
Ing. Gladys Garca V.
ESTRUCTURAS REPETITIVAS MIENTRAS:
1. Hacer un algoritmo que permita obtener la siguiente suma: S = 1 + 1/2 +
1/3 + 1/4 + ...... + 1/n , se debe seguir aadiendo el termino 1/n , mientras
sea mayor de 0.1 (es decir termina cuando se aade un termino <=0.1)
ALGORITMO Suma
INICIO
real S, i, t
S=0
i=1
t=1
Mientras ( t > 0.1 )
{ S=S+t
i = i +1
t = 1/ t
}
MOSTRAR S
FIN
PROGRAMA c++
#include <iostream.h>
#include <conio.h>
#include <stdlib.h>
#include <math.h>
#include <stdio.h>
void main()
{ double S,t,i;
S = 0;
t=1;
i=1;
while (t > 0.1)
{
S = S + t;
i = i + 1;
t = 1/i;
}
cout<<endl<<" S = "<<S<<endl;
cout<<" # terminos = "<<i<<endl;
getch();
}
2. Hacer un algoritmo que permita ingresar los datos : nombre, edad, peso, talla.
La entrada de datos debe terminar cuando se ingresa la edad de 0 y debe mostrar
el promedio de edad, promedio de peso y promedio de tallas de las personas.
ALGORITMO Personas
INICIO
caracter nombre[20];
real edad, peso, talla, speso, stalla, sedad, prompeso, promtalla, promedad;
int nropers;
sedad = 0; // inicializa acumuladores en cero
speso = 0;
stalla = 0;
nropers = 0; // inicializa contadores en 0
LEER edad
MIENTRAS (edad 0)
{
nropers = nropers + 1;
LEER nombre, peso , talla
sedad = sedad + edad
speso = speso + peso
stalla = stalla + talla
LEER edad
}
prompeso = speso/nropers;
promedad = sedad /nropers;
promtalla = stalla/nropers;
MOSTRAR prompeso , promedad,
promtalla
FIN
PROGRAMA EN C++
#include <iostream.h>
#include <conio.h>
#include <stdlib.h>
#include <math.h>
#include <stdio.h>
void main()
{ char nombre[20];
double edad, peso, talla, speso, stalla, sedad, prompeso, promtalla,promedad;
int nropers;
sedad = 0;
speso = 0;
stalla = 0;
nropers = 0;
cout<<"edad = ";cin>>edad;
while (edad != 0)
{
nropers = nropers + 1;
cout<<"nombre = ";cin>>nombre;
cout<<"peso = ";cin>>peso;
cout<<"talla = ";cin>>talla;
sedad = sedad + edad;
speso = speso + peso;
stalla = stalla + talla;
cout<<"edad = ";cin>>edad;
}
prompeso = speso/nropers;
promedad = sedad /nropers;
promtalla = stalla/nropers;
cout<<"Nro de personas = "<<nropers<<endl;
cout<<"promedio de pesos = "<<prompeso<<endl;
cout<<"promedio de edad = "<<promedad<<endl;
cout<<"promedio de talla = "<<promtalla<<endl;
getch();
}
TIPOS DE DATOS BOOLEANOS
Observe el siguiente programa
#include <iostream.h>
#include <conio.h>
#include <stdlib.h>
#include <math.h>
#include <stdio.h>
void main()
{ bool EdadOK, SexoOK;
double edad;
char sexo;
cout<<"Edad = ";cin>>edad;
cout<<"Sexo = ";cin>>sexo;
EdadOK = edad >=18;
if (sexo == 'M') { SexoOK =true; }
else { SexoOK = false; }
if (EdadOK) { cout<<"Mayor de edad "<<endl; }
else { cout<<"Menor de edad "<<endl; }
if (EdadOK && SexoOK ) {cout<<"Hara SERVICIO MILITAR
OBLIGATORIO"<<endl;}
else {cout<<"Se queda en la RESERVA ..."<<endl;}
getch();
}
ARRAYS UNIDIMENSIONALES
Hacer el algoritmo y su respectivo programa en C++
Problema 1 .- resuelto en seudocodigo en los problemas de arrays
PROGRAMA EN C++
#include <iostream.h>
#include <conio.h>
#include <stdlib.h>
#include <math.h>
#include <stdio.h>
#include <iomanip.h>
void main()
{
const int Long=15;
int n,CanTotLib, CanLib[Long], i , MinLib, MaxLib;
char Areas[Long][20];
cout<<endl<<"tamao del array = ";cin>>n;
// Lectura de los arrays paralelos
for (i=0 ; i<n;i=i+1)
{ cout<<setw(10)<<"cantidad ";cin>>CanLib[i];
cout<<setw(10)<<"Area ";cin>>Areas[i];
}
CanTotLib = 0;
for (i = 0; i<n ;i=i+1)
{ CanTotLib = CanTotLib + CanLib[i]; }
cout<<setw(15)<<CanTotLib<<endl;
getch();
// Ingresado un indice muestra el area y la cantidad de libros de esa area
cout<<"Ingrese el indice : "; cin>>i;
cout<<"Cantidad de Libros = "<<CanLib[i]<<endl;
cout<<"Area = "<<Areas[i]<<endl;
// Calcular la minima cantidad de libros y a que area corresponde
MinLib = CanLib [0];
for ( i= 1; i< n ; i=i+1 )
{ if ( CanLib[i] < MinLib ) { MinLib = CanLib[i]; } }
cout<<"Minima cantidad de Libros = "<<MinLib<<endl;
for(i= 0 ;i<n ;i=i+1 )
{ if ( CanLib[i] == MinLib ) { cout<<Areas[i]; } }
cout<<endl<<endl;
// Calculo de Maximo
MaxLib = CanLib[0];
for (i = 1 ; i< n ; i=i+1 )
{ if ( CanLib[i] > MaxLib )
{ MaxLib = CanLib[i]; }
}
cout<<"Maxima cantidad de libros :
"<<MaxLib<<endl;
for ( i= 0 ; i< n ;i=i+1 )
{ if ( CanLib[i] == MaxLib )
{ cout<<Areas[i]; }
}
cout<<endl;
getch();
}
PROBLEMAS PROPUESTOS
1. Hacer los programas en C++ de los problemas: 1,3,4,5, que estan
resueltos en seudocdigo en la separata de ejercicios de arrays
resueltos.
2. Elabore un algoritmo que proporcione el siguiente reporte:
Estadstica de las Calificaciones.
Nombre
Cal 1
Cal 2
Cal 3
Cal 4
Promedio
Xxxxx
12
14
17
11
99.9
Xxxxx
10
12
11
99.9
...
99.9
Xxxxx
11
Promedios
99
17
10
99
99
99
99.9
Hacerlo para: a) 20 alumnos
b) Hasta que ya no desee continuar
c)Hasta que ingrese como calificativo - 99
3. Una empresa necesita un reporte de comisiones de ventas en la cual
aparezcan todos los vendedores que tengan ventas mayores que el nivel
de comisin que se calcula:
Nivel de comisin = 2/3*(promedio de ventas)
Comisin = 5% sobre el excedente de lo que vendi por arriba del nivel de
comisin.
Elabore un algoritmo que proporcione el siguiente reporte:
COMISIONES DE VENDEDORES
NOMBRE DEL
VENTAS
COMISION
VENDEDOR
XXXXXXXXXXXX
999,999.9
999,999.9
XXXXXXXXXXXX
999,999.9
999,999.9
XXXXXXXXXXXX
999,999.9
999,999.9
TOTAL
999,999.9
999,999.9
4. Teniendo en cuenta que en un array unidimensional se almacena los
resultados correctos de una prueba de 20 preguntas, con 5 opciones ('a',
'b','c','d','e' ). Hacer un algoritmo ( y un programa en C++) que determine
la nota de un alumno cuyo array de respuestas es ingresado por
teclado. Cada respuesta correcta es un punto.
ARRAYS BIDIMENSIONALES
5. Se tiene la produccin de los siete das de la semana de 20 plantas; elaborar
un algoritmo que lea estos datos los almacene en un arreglo de 20 renglones,
para las plantas, y 7 columnas, para
cada da de produccin, adems, que
imprima el nmero de planta que tuvo la mayor produccin semanal.
6.
Se tiene 15 estaciones de trabajo, cada una de las cuales tiene un
encargado, del cual se conocen el nombre y la produccin que tuvo en
cada uno de los meses del ao. Elaborar un algoritmo que lea los 15
nombres y los guarde en un arreglo; que haga lo mismo con los 12 meses
de produccin de cada una de las estaciones y que los almacene en una
matriz de 15 X 12.
Nombre Produccin
11
12
1 Julio C.
120
160
200
190
230
2 Ana R.
140
135
130
150
140
15 Rosa M
15
210
220
290
190
250
Se requiere que se imprima el siguiente reporte:
LABORATORIO NRO 4
PROBLEMA 1:
/*****************************************************
Nombre : PuntAVarDouble.cpp
Objetivo : Usar punteros a variables double
Autor : Ing. Gladys Garcia V.
Fecha : 08/03/98
******************************************************/
// Librerias C++
#include<iostream.h>
#include<conio.h>
int main()
{
double x = 10.25; // a x se le asigna el valor 10
double* p;
p = &x; // a p se le asigna la direccin de x
// p es variable puntero a reales
PA
cout <<"El valor de x, usando : "<<endl;
cout<<"---------------------"<<endl;
cout <<"el nombre de la variable
x = "<<x<<endl;
cout <<"el nombre del puntero y operador* *p = "<<*p<<endl;
cout <<"La direccion de x, usando : "<<endl;
cout<<"---------------------------"<<endl;
cout <<"el nombre del puntero p = "<<p<<endl;
cout <<"el operador &
&x = "<<&x<<endl;
cout <<"La direccion del puntero p, usando : "<<endl;
cout<<"------------------------------------"<<endl;
cout <<"el operador &
&p = "<<&p<<endl;
*p = 12.76;
// se cambia el contenido de x (variable apuntada)
// alternativa : x = 12.76;
cout <<"El valor de x, usando : "<<endl;
cout<<"---------------------"<<endl;
cout <<"el nombre de la variable
x = "<<x<<endl;
cout <<"el nombre del puntero y operador* *p = "<<*p<<endl;
cout <<"La direccion de x, usando : "<<endl;
cout<<"---------------------------"<<endl;
cout <<"el nombre del puntero p = "<<p<<endl;
cout <<"el operador &
&x = "<<&x<<endl;
cout <<"La direccion del puntero p, usando : "<<endl;
cout<<"------------------------------------"<<endl;
cout <<"el operador &
&p = "<<&p<<endl;
getch();
}
PROBLEMA 2:
/****************************************************************************
Archivo : PuntAEnt.cpp
Objetivo: Usar punteros a enteros
Autor : Gladys Garcia
******************************************************************************/
// Nota : El puntero a entero apunta a diferentes enteros
// Varia la direccion de los enteros, pero del puntero no
// Librerias C++
#include<iostream.h>
#include<conio.h>
void main()
{
// se declaran las variables enteras a y b y el puntero a enteros
int a = 10, b = 20, *p;
p = &a; //asigna a la variable puntero p la direccin de a
cout << "a = " << a << endl;
cout << "&a = " << &a << endl;
cout << "p = " << p << endl;
cout << "&p = " << &p << endl;
cout <<endl;
p = &b; //asigna a la variable puntero p la direccin de
b
cout << "b = " << b << endl;
cout << "&b = " << &b << endl;
cout << "p = " << p << endl;
cout << "&p = " << &p << endl;
getch();
}
PROBLEMA 3:
/************************************************
Archivo : PuntArray.cpp
Tema : Punteros - Punteros y Arrays
Objetivo: Usar aritmetica de punteros
Autor : Ing. Gladys Garcia
**************************************************/
// Un valor integral 1 aadido a un puntero no significa "aadir 1 a la direccin"
// sino "ajustar el puntero al prximo objeto del array
#include<iostream.h>
#include<iomanip.h>
#include<conio.h>
void main()
{
int ANotas[5],i; // Array de int
int *pA;
pA = ANotas; // puntero a Array ANotas
// a pA se le asigna la direccion del primer elemento del array
for( i = 0; i < 5; i=i+1 )
{
cout<<"nota : ";cin>>*pA; // asigna a la
variable apuntada
// el valor ingresado por
teclado
pA = pA + 1; // el puntero pA apunta al
siguiente elemento del array
}
pA = ANotas;
for( i = 0; i < 5; i=i+1 )
{
cout<<setw(5)<<*pA; // asigna a la variable apuntada
// el valor ingresado por teclado
pA = pA + 1; // el puntero pA apunta al siguiente elemento del array
}
cout << endl;
getch();
}
PROBLEMA 4 vector dinmico:
#include<iostream.h>
#include<conio.h>
#include<iomanip.h>
void main()
{
int *pnum; // puntero que representa al vector dinamico
int n; // numero de elementos del vector
int i; // contador para recorrer el VECTOR
cout<<"n = ";cin>>n; // tamao del vector
pnum = new(int[n]); // reserva memoria
cout<<"Ingrese el array de "<<n<<" elementos: "<<endl;
for (i=0; i<n;i++)
{ cin>>*(pnum+i); // ingresa los elementos del array }
cout<<endl<<"El array leido es : "<<endl;
for (i=0; i<n;i++)
{
// muestra los elementos del vector
cout<<setw(10)<<*(pnum+i);
}
cout<<endl;
getch();
}
PROBLEMA 5:
#include<iostream.h>
#include<conio.h>
#include<stdio.h>
struct persona
{
char nombre[30];
int edad;
int dni;
float peso;
};
void main()
{
persona per1;
// Ingresa datos de la variable per1
cout<<"Nombre: "<<endl;
gets(per1.nombre);
cout<<"Edad: ";cin>>per1.edad;
cout<<"dni = ";cin>>per1.dni;
cout<<"peso = ";cin>>per1.peso;
// muestra los datos de la variable per1
cout<<endl<<"Los datos son:"<<endl;
cout<<per1.nombre<<endl;
cout<<per1.edad<<endl;
cout<<per1.dni<<endl;
cout<<per1.peso<<endl;
getch();
}
PROBLEMA 6:
#include<iostream.h>
#include<conio.h>
struct Punto
{
float x;
float y;
};
void main()
{
Punto Pto1 = {1.5,2.0}; // C++ permite declarar e inicializar
int i; // una variable de estructura
Punto APto[3];
// muestra los datos de Pto1:
cout<<"la abscisa = "<<Pto1.x<<endl;
cout<<"la ordenada = "<<Pto1.y<<endl;
// Crea el array de puntos:
for(i=0;i<3;i=i+1)
{
cout<<"x = ";cin>>APto[i].x;
cout<<"y = ";cin>>APto[i].y;
}
for(i=0;i<3;i=i+1)
{ cout<<"(x,y) "<<APto[i].x<<" ,
"<<APto[i].y<<endl; }
getch();
}
PROBLEMA 7
#include<iostream.h>
#include<conio.h>
#include<stdio.h>
struct persona
{ char nombre[30];
int edad;
int dni;
float peso;
};
void LeerStruct(persona& S)
{
cout<<"Nombre: "<<endl;
gets(S.nombre);
cout<<"Edad = ";cin>>S.edad;
cout<<"dni = ";cin>>S.dni;
cout<<"peso = ";cin>>S.peso;
}
void MostrarStruct(persona& S)
{
cout<<"Nombre: "<<S.nombre<<endl;
cout<<"Edad : "<<S.edad<<endl;
cout<<"dni : "<<S.dni<<endl;
cout<<"peso : "<<S.peso<<endl;
}
void main()
{ persona per1;
LeerStruct (per1);
cout<<endl<<"Los datos son:"<<endl;
MostrarStruct (per1);
getch();
}
PRACTICA CALIFICADA NRO 2 DE ALGORITMOS AVANZADOS ISI 21
1. En una cadena de almacenes de bebidas gaseosas, el programador almacena
en una matriz la cantidad de cajas adquiridas CANT en el mes de Agosto en
las 5 tiendas, en 10 variedades de gaseosas. Se pide hacer los siguientes
algoritmos: a) Para calcular la cantidad de cajas adquiridas por cada tienda
CCPT b) La cantidad de cajas de cada variedad de producto en las 5 tiendas
CCPP. C) Hacer este reporte para un numero de tienda indicando, el nombre
de la tienda y la cantidad de cajas adquiridas de cada tipo de producto.
Tiendas
xxxxxxx
Num
...
xxxxxxx
...
CANT
Productos
1
2
CCPT
3
....
10
...
...
...
...
...
...
1
...
5
...
...
CCPP
1. Para i 1 Hasta i 5
Para j 1 Hasta j 8
LEER CANT [i , j]
Fin Para
Fin Para
2. Para i 1 Hasta i 5
LEER Tiendas [i]
Fin Para
a) 3. Para i 1 Hasta i 5
CCPT[i] 0
Para j 1 Hasta j 8
CCPT [ I ] CCPT [ I ] + CANT [i , j]
Fin Para
Fin Para
4. Para i 1 Hasta i 5
MOSTRAR CCPT [ I ]
Fin Para
b) 5. Para j 1 Hasta j 8
CCPP[ j ] 0
Para i 1 Hasta i 8
CCPP[ j ] CCPP[ j ] + CANT [ i , j ]
Fin Para
Fin Para
6. Para j 1 Hasta j 5
MOSTRAR CCPP[ j ]
Fin Para
c) 7. LEER i
...
8. MOSTRAR Tiendas[ i ]
9. Para j 1 Hasta j 8
MOSTRAR CANT [i , j]
Fin Para
2. Hacer un algoritmo que permita determinar:
a) La nota final de 35 alumnos del curso de mtodos numricos. Si cada
alumno tiene 3 rubros: de practicas, 1 examen parcial y un examen final.
La nota se calcula mediante el promedio aritmtico de:los tres rubros: R1 de
prcticas; R2 de examen parcial y R3 del examen final (de peso 2)
Usar matriz
.
NOTAS
Considerando tres arrays paralelos:
1.
Para i 1 Hasta i 35
LEER R1[ i ], R2[ i ], R3[ i ]
2.
3.
Fin Para
Para i 1 Hasta i 35
NF[i] ( R1[ i ] + R2[ i ] + 2 * R3[ i ] )/4
Mostrar NF[i]
Fin Para
Otra MANERA de hacerlo. Considerando la matriz de 35X3
1. Para i 1 Hasta i 35
Para j 1 Hasta j 3
LEER Notas[ i , j ]
Fin Para
Fin Para
2. Para i 1 Hasta i 35
SNF[ i ] 0
Para j 1 Hasta j 3
SNF[ i ] SNF[ i ] + Notas[ i , j ]
Fin Para
SNF[ i ] SNF[ i ] + Notas[ i , 3 ]
NF[ i ] SNF[i] / 4
Fin Para
3. Dada los arrays paralelos que guardan los datos de 200 alumnos de Alas
Peruanas
Cod IngresoFam Categ
...
....
...
....
....
....
Hacer un algoritmo que permita :
a) Ordenar en orden ascendente segn la categoria (de menor a mayor ) y
mostrar dichos arrays ya ordenado
b) Mostrar cuanto paga el alumno de mayor categora y el de menor
categora, teniendo en cuenta que solo existen las categoras A, B y C que
paga respectivamente el 20% del Ingreso Familiar, 15% y 10%
1. Para i 1 Hasta i 200
LEER Cod[ i ] , IngresoFam[ i ], Categ[ i ]
Fin Para
3. Para i 1 Hasta i 199
Para j 1 Hasta j 200 - k
SI ( Categ[ j ] > Categ[ j + 1] )
ENTONCES
AuxC Cod[ j ]
AuxI IngresoFam[ j ]
AuxCat Categ[j]
Cod[ j ] Cod [j+1]
IngresoFam[ j ] IngresoFam[ j +1]
Categ[ j ] Categ[ j + 1]
Cod[ j + 1] AuxC
IngresoFam[ j + 1] AuxI
Categ [j+1] AuxCat
Fin Para
Fin Para
2. Para i 1 Hasta i 200
MOSTRAR Cod[i], IngresoFam[i], Categ[i]
Fin Para
4. Un amigo es gerente de personal de una cadena de almacenes, y nos pedido
que le ayudemos a desarrollar un algoritmo que analice el archivo maestro de
nominas, que tiene un registro por cada empleado con los siguientes datos: codigo
del empleado, nombre, codigo del departamento(1,2,3,4); codigo de la sucursal
(1,2), codigo de seccin (Ropa, Abarrotes, Lacteos), sueldo mensual, tipo de
empleado (1 activo, 2 retirado, y 3 licencia).
En el analisis se pide un informe de lo siguiente:
a) El total de empleados activos en cada uno de los siguientes rangos de sueldos:
menos de 1500; entre 1500 y 2500, entre 2500 y 4000 ; y mas de 4000 .
b) El numero de empleados activos, el numero de empleados con licencia.
c) Los codigos y nombres de los empleados del departamento 1
Entero NroEmpAct, NumEmpLic, EmpR1, EmpR2, EmpR3, EmpR4
Entero CodEmp, CodDpto, CodSuc, CodSec
Cadena nomb,
NroEmpAct 0, NumEmpLic 0,
EmpR1 0, EmpR2 0, EmpR3 0, EmpR4 0
LEER CodEmp
MIENTRAS ( CodEmp 999 )
a) LEER Nomb, CodDpto, CodSuc, CodSec, Sueldo, TipoEmp.
b) Si (TipoEmp = 1)
ENTONCES
NroEmpAct NroEmpAct + 1
SI (Sueldo < 1500)
ENTONCES EmpR1 EmpR1 + 1
SINO
SI (Sueldo <= 2500)
ENTONCES EmpR2 EmpR2 + 1
SINO
SI (Sueldo <= 4000)
ENTONCES EmpR3 EmpR3 +1
SINO EmpR4 EmpR4 + 1
FIN SI
SINO
SI (TipoEmp = 3)
ENTONCES NumEmpLic NroEmpAct + 1
FIN SI
FIN SI
c) SI (CodDpto = 1)
ENTONCES MOSTRAR CodEmp, nomb
FIN SI
d) LEER CodEmp
FIN MIENTRAS
5. MOSTRAR NroEmpAct, NumEmpLic, EmpR1, EmpR2, EmpR3, EmpR4
FIN
1.
2.
3.
4.
Ing. Gladys Garcia V.
.
PRACTICA CALIFICADA NRO 2 DE ALGORITMOS AVANZADOS ISI 22
1. Dada los arrays paralelos que guardan los datos de 200 alumnos de Alas Peruanas
Cod PromP Cat
...
....
...
....
....
....
Hacer un algoritmo que permita :
a) Ordenar en orden descendente segn el promedio ponderado (de mayor a menor
) y mostrar dichos arrays ya ordenado
b) Mostrar el codigo, categora y Promedio ponderado del primer lugar y del ultimo
lugar
ALGORITMO ORDEN
1. Para i 1 Hasta i 200
LEER Cod[i] , PromP[i] , Cat[i]
Fin Para
2. Para k 1 Hasta k 199
a. Para j 1 Hasta j 200 k
Si ( Si PromP [j] < PromP [j+1] )
Entonces
AuxPP PromP [j]
AuxCod Cod[j]
AuxCat Cat [j]
PromP[j] PromP [j+1]
Cod [j] Cod [j+1]
Cat [j] Cat [j+1]
PromP [j+1] AuxPP
Cod [j] AuxCod
Cat [j+1] AuxCat
Fin Si
Fin Para
Fin Para
3. Para i 1 Hasta i 200
MOSTRAR Cod[j] , PromP[j] , Cat[j]
Fin Para
4. MOSTRAR Mejor promedio ponderado , Cod[1] , PromP[1] , Cat[1]
MOSTRAR Ultimo en promedio ponderado , Cod[200] , PromP[200] ,
Cat[200]
FIN
Sea el array SUELDO de tamao 30 que almacena los sueldos de los empleados de
una empresa. Otro array paralelo NOMB almacena sus nombres. Hacer un algoritmo
para calcular: a) El numero de empleados que gana mas de 2500 soles. b) La
cantidad de dinero que la empresa invierte en dolares suponiendo que el cambio es de
3.48 soles (considerelo como constante) c) El nombre del empleado que gana mas en
la empresa (pueden ser varios). d) Considere que los sueldos van a ser reajustados,
aumentando en un 20% a todos los empleados que ganan menos de 1200 soles y del
5% a todos los que ganan 1200 o mas.
ALGORITMO EMPLEADOS
INICIO
Cadena nomb [30]
Real Sueldo[30] , SSueldoDol
Entero NumEmp25
2.
1. NumEmp25 0
2. SsueldoDol 0
2. PARA I = 1 HASTA I = 30
LEER nomb[ i], sueldo[ i]
FIN PARA
3. PARA I = 1 HASTA I = 30
SI ( Sueldo [ i ] > 2500 )
ENTONCES NumEmp25 NumEmp25 + 1
FIN SI
FIN PARA
4. PARA I = 1 HASTA I = 30
SsueldoDol SsueldoDol + sueldo[i] / 3.48
FIN PARA
5. MaxSueldo sueldo[1]
6. PARA I = 2 HASTA I = 30
SI (sueldo [ i ] > MaxSueldo )
ENTONCES
Maxueldo sueldo [ i ]
FIN SI
FIN PARA
7. PARA I = 2 HASTA I = 30
SI (sueldo [ i ] = MaxSueldo )
ENTONCES
MOSTRAR nomb[i]
FIN SI
FIN PARA
8. PARA I = 1 HASTA I = 30
SI (sueldo [ i ] < 1200 )
ENTONCES
sueldo[i] sueldo[i] * 0.20
SINO
sueldo[i] sueldo[i] * 0.05
FIN SI
FIN PARA
FIN
3. En una farmacia se venden m=350 productos y se trabaja con n=10 laboratorios. En
una matriz INVINIC se guardan los datos de la cantidad de productos en cada
laboratorio que existen al inicio de la semana. En una matriz PROVEE se guardan la
cantidad de productos de cada laboratorio que se compran en el transcurso de la
semana y en la matriz VENTA se guardan la cantidad de productos de cada
laboratorio que se venden hasta el fin de semana. Hacer un algoritmo que me permita
leer las matrices, mostrar las matrices y calcular la matriz INVFINAL que guarde la
cantidad de productos de cada laboratorio al cierre de la semana
ALGORITMO FARMACIA
INICIO
1. Para i 1 Hasta i 350
Para j 1 Hasta j 10
LEER INV_INC [i , j]
Fin Para
Fin Para
2. Para i 1 Hasta i 350
Para j 1 Hasta j 10
LEER PROVEE [i , j]
Fin Para
Fin Para
3. Para i 1 Hasta i 350
Para j 1 Hasta j 10
LEER VENTA [i , j]
Fin Para
Fin Para
4. Para i 1 Hasta i 350
Para j 1 Hasta j 10
INVFIN [i , j] INV_INC [i , j] + VENTA [i , j]
Fin Para
Fin Para
5. Para i 1 Hasta i 350
Para j 1 Hasta j 10
MOSTRAR INV_FIN [i , j]
Fin Para
Fin Para
FIN
4. Analizar un archivo del inventario semanal de una empresa, el mismo que contiene la
siguiente informacin: cdigo del producto, nombres, cantidad de unidades existentes,
cantidad de unidades mnimas, costo unitario, precio unitario de venta, por cada registro.
Hacer un algoritmo que permita hacer el siguiente informe:
a) Los cdigos, nombres , cantidad a pedir , costo parcial de cada producto cuya cantidad
de unidades existentes es menor a la cantidad mnima, teniendo en cuenta que la
cantidad a pedir = cantidad mnima - cantidad de unidades existentes
costo parcial = costo unitario * cantidad a pedir.
b) El capital invertido en cada producto, y la ganancia de vender cada producto que hay
en existencias; asimismo calcular el capital total que la empresa tiene invertido en sus
productos y la ganancia total de vender todos los productos que hay en existencias.
codigo nombre capital invertido ganancia potencial
999
XXX
99999.99
9999.99
...
...
...
....
999
XXX
99999.99
9999.99
----------------------999999.99
99999.99
capital invertido = costo unitario * unidades en existencias
ganancia potencial = (precio unitario - costo unitario)* unidades en existencia
ALGORITMO INVENTARIOSEMANAL
INICIO
Entero codProd, nomPro, CantExis, CanMin,
Real CosUni, PreUniVen
1. LEER CodProd
2. SCapInv 0
3. SGanPot 0
4. MIENTRAS (CodProd 999)
A) LEER nomPro, CantExis, CanMin, CosUni, PreUniVen
B) SI (CantExis < CanMin )
ENTONCES
CanPedir CanMin CanPedir
CosParcial CanPedir * CosUni
FIN SI
C) CapInv CantExis * CosUni
D) GanPot CantExis * (PreUniVen - CosUni)
E) MOSTRAR CosProd, NomPro, CapInv, GanPot
F) SCapInv ScapInv + CapInv
G) SGanPot SganPot + GanPot
H) LEER CodProd
FIN MIENTRAS
5. MOSTRAR SCapInv , SGanPot
FIN
Ing. Gladys Garcia Vilcapoma
SEGUNDA
PRACTICA
AVANZADOS 23
CALIFICADA
DE
ALGORITMOS
UNIVERSIDAD ALAS PERUANAS
1. Hacer un algoritmo que permita a) crear un array bidimensional de goles anotados por
los 5 equipos que participan en un campeonato Relmpago, jugando de ida y vuelta. Es
decir el Array GOLES es de 5 x 8. b) Crear el array paralelo con los nombres de los
equipos que participan. C) Calcular el numero de goles anotados por cada equipo. D)
Teniendo en cuenta que cada equipo juega un partido por semana. Calcular el numero de
goles anotados en cada semana E) Ingresado por teclado el numero de un equipo Mostrar
su nombre , el numero de goles anotados en cada semana y el numero de goles totales en el
campeonato. F) Ingresado por teclado un numero de semana el algoritmo debe mostrar el
reporte :
Equipo Nro de goles
....
....
....
....
Total goles
(6 puntos)
NomEqui
Alianza
NumEqui
1
2
...
...
Unioversitario
5
GOLES
Partidos
1
2
GolPEqui
3
....
GolPP
a) 1. Para i 1 Hasta i 5
Para j 1 Hasta j 8
LEER GOLES [i , j]
Fin Para
Fin Para
b) 2. Para i 1 Hasta i 5
LEER NomEqui [i]
Fin Para
c) 3. Para i 1 Hasta i 5
GolPEqui[i] 0
Para j 1 Hasta j 8
GolPEqui[i] GolPEqui[i] + GOLES [i , j]
Fin Para
Fin Para
4. Para i 1 Hasta i 5
MOSTRAR GolPEqui[i]
Fin Para
d) 5. Para j 1 Hasta j 8
GolPP[ j ] 0
Para i 1 Hasta i 8
GolPP[ j ] GolPP[ j ] + GOLES [ i , j ]
Fin Para
Fin Para
6. Para j 1 Hasta j 5
MOSTRAR GolPP[ j ]
Fin Para
e) 7. LEER i
8. MOSTRAR NomEqui[ i ]
9. Para j 1 Hasta j 8
MOSTRAR GOLES [i , j]
Fin Para
10. LEER j
11. Para i 1 Hasta i 5
MOSTRAR NomEqui[ i ], GOLES [i , j]
Fin Para
12. MOSTRAR GolPP[ j ]
2. Dados dos arrays paralelos en los que se almacenan los nombres y la
ventas en soles durante el mes de Abril 2001 de los 20 vendedores de una
empresa. Hacer los siguientes algoritmos: a) Calcule las ventas totales en
la empresa. B) Calcule y muestre el sueldo de cada vendedor, teniendo en
cuenta lo siguiente:
Ventas
Monto Fijo Comisin
Menos de 4000 200
8% de ventas
( 5 puntos)
4000 a 10000 350
10% de ventas
mas de 10000 450
14% de ventas
Sueldo = Monto Fijo + Comisin
C) Hacer el algoritmo que muestre el mnimo sueldo y a que vendedor(es)
corresponde.
d) Determinar cuantos y que vendedores tuvieron ventas menores de 5000.
NomVen:
1
...
20
...
20
Ventas
1
1. Para i 1 Hasta i 20
LEER NomVen[ i ], Ventas[ i ]
Fin Para
a) 2. SumVen 0
3. Para i 1 Hasta i 20
SumVen SumVen + Ventas [ i ]
Fin Para
b) 4. Para i 1 Hasta i 20
Si ( Ventas [ i ] < 4000 )
Entonces
Sueldo [ i ] 200 + T1* Ventas[ i ]
Sino
Si ( Ventas [ i ] < 10000 )
Entonces
Sueldo [ i ] 350 + T2 * Ventas[ i ]
Sino
Sueldo [ i ] 450 + T3 * Ventas[ i ]
Fin Si
Fin Si
Fin Para
c) 5. MinS Sueldo[ 1 ]
6. Para i 2 Hasta i 20
SI ( Sueldo [ i, j] < MinS )
Entonces
MinS Sueldo [i,j]
Fin Si
Fin Para
7. Para i 1 Hasta i 20
SI ( Sueldo [ i, j] = MinS )
Entonces
MOSTRAR NomVen[i]
Fin Si
Fin Para
d) 8. NumVen 0
9. Para i 1 Hasta i 20
Si ( Ventas [i] < 5000 )
Entonces
NumVen NumVen + 1
Fin Si
Fin Para
FIN
3. Dados los arrays paralelos con los nombres y sueldos de los 30 empleados
de una empresa. Hacer un algoritmo que ordene dichos arrays por sueldos
en orden descendente. Finalmente el algoritmo tambin debe mostrar los
nombres y sueldos de los empleados que ganan menos y mas en la
empresa.
( 4 puntos)
1. Para i 1 Hasta i 30
LEER Nombre[i], Sueldo[i]
Fin Para
2. Para k 1 Hasta k 29
a. Para j 1 Hasta j 30 k
Si ( Si Sueldo [j] < Sueldo[j+1] )
Entonces
AuxS Sueldo[j]
AuxN Nombre[j]
Sueldo[j] Sueldo [j+1]
Nombre[j] Nombre [j+1]
Sueldo[j+1] AuxS
Nombre[j] AuxN
Fin Si
Fin Para
Fin Para
3. Para i 1 Hasta i 30
MOSTRAR Nombre [i], Sueldo[i]
Fin Para
b) 4. MOSTRAR Gana Mas , Nombre[1]
4. MOSTRAR Gana Menos , Nombre[30]
4. Producir un resumen de ventas que una empresa hizo durante cada mes del
ao. Se debe leer de una cinta que tiene en cada registro la siguiente informacin:
codigo del vendedor, codigo del articulo, mes de la transaccin, valor. Los
registros no estan clasificados y toda la informacin ya fue validada en otro
programa.
El reporte que se pide es el siguiente:
Ventas mensuales:
Mes Valor real de las ventas
99
9999.99
NOTA la lectura de registros termina
con codigo de vendedor FIN
Guarde en una array VENTAS [12] el
valor real de las ventas de cada mes
99
....
99
9999.99
....
9999.99
1. LEER CodV
2. Para i 1 Hasta i 12
Ventas[i] 0
Fin Para
3. MIENTRAS (CodV <> 9999)
a. LEER CodA, Nromes, Valor
b. En CASO (Nromes ) SEA
1 : Ventas [i] Ventas[i] + Valor
2 : Ventas [i] Ventas[i] + Valor
12 : Ventas [i] Ventas[i] + Valor
FIN CASO
FIN MIENTRAS
4. Para i 1 Hasta i 12
a. MOSTRAR i , Ventas[i]
Fin Para
FIN
PRACTICA CALIFICADA NRO 2 DE ALGORITMOS DE ISI 24
1. Se tiene una tienda que vende polos, en una array bidimensional se almacena la
cantidad de polos por tallas y colores:
Rojo Azul Verde Blanco Negro Amarillo
PreUni CapInv
CANT
Junior
.
.
99.99
999.99
Small
.
.
...
Mdium
.
.
..
...
Large
.
.
.
...
XL
.
.
...
...
Calcular: a) Cantidad de polos por tallas. b) Cantidad de polos por colores, c) Los
polos Blanco y negro son de mayor demanda, hacer un pedido si las existencias
son menores a un mnimo de 50 polos d) Los precios de los polos varian por
tallas, determinar de acuerdo a las existencias, cual es el capital que la empresa
tiene invertido en cada talla y el total en mercadera. e) en que talla se tiene
invertido el mayor capital.
SOLUCION
CANT
Colores
CPPT PreUni CapInv
Tallas
Num
1
2
3
....
6
xxxxxxx
1
...
xxxxxxx
...
5
...
...
...
...
CCPC
1. Para i 1 Hasta i 5
Para j 1 Hasta j 6
LEER CANT [i , j]
Fin Para
...
...
...
...
...
...
Fin Para
a) 2. Para i 1 Hasta i 5
CCPT[i] 0
Para j 1 Hasta j 6
CCPT [ i ] CCPT [ i ] + CANT [i , j]
Fin Para
Fin Para
3. Para i 1 Hasta i 5
MOSTRAR CPPT [i]
Fin Para
b) 4. Para j 1 Hasta j 6
CCPC[ j ] 0
Para i 1 Hasta i 5
CCPC[ j ] CCPC[ j ] + CANT [ i , j ]
Fin Para
Fin Para
3. Para i 1 Hasta i 5
MOSTRAR CCPC [ i ]
Fin Para
c) 4. Para i 1 Hasta i 5
Para j 5 Hasta j 5
Si ( CANT [ i] < 50 )
ENTONCES
Ped 50 - CANT [ i]
MOSTRAR Ped
FIN SI
Fin Para
Fin Para
d) 6. Para i 1 Hasta i 5
LEER PreUni [ i ]
Fin Para
7. ScapInv 0
8. Para i 1 Hasta i 5
CapInv [i] CPPT[i]* PreUni [ i ]
ScapInv ScapInv + CapInv [i]
Fin Para
9. MOSTRAR ScapInv
e) 10 MayCap CapInv[1]
11. Para i 2 Hasta i 5
Si (CapInv[i] > MayCap )
ENTONCES
MayCap CapInv[i]
FIN SI
Fin Para
12. Para i 1 Hasta i 5
Si (CapInv[i] = MayCap )
ENTONCES
MOSTRAR i
FIN SI
Fin Para
FIN
2. Dada los arrays paralelos que guardan los datos de 200 alumnos de Alas
Peruanas
Cod PromP Cat
...
....
...
....
....
....
Hacer un algoritmo que permita :
a) Ordenar en orden ascendente segn el promedio ponderado (de menor a
mayor ) y mostrar dichos arrays ya ordenado
b) Mostrar el codigo, categora y Promedio ponderado del primer lugar y del
ultimo lugar
ALGORITMO ALUMNOS
INICIO
1. Para i 1 Hasta i 30
LEER Cod[i] , PromP[i] , Cat[i]
Fin Para
2. Para k 1 Hasta k 199
a. Para j 1 Hasta j 200 k
Si ( Si PromP [j] > PromP [j+1] )
Entonces
AuxPP PromP [j]
AuxCod Cod[j]
AuxCat Cat [j]
PromP[j] PromP [j+1]
Cod [j] Cod [j+1]
Cat [j] Cat [j+1]
PromP [j+1] AuxPP
Cod [j] AuxCod
Cat [j+1] AuxCat
Fin Si
Fin Para
Fin Para
3. Para i 1 Hasta i 200
MOSTRAR Cod[j] , PromP[j] , Cat[j]
Fin Para
4. MOSTRAR Menor promedio ponderado , Cod[1] , PromP[1] , Cat[1]
MOSTRAR Mejor promedio ponderado , Cod[200] , PromP[200] , Cat[200]
FIN
3. Dados los arrays paralelos con los nombres de Curso, Creditos y Notas obtenidas en
cada uno de los 50 cursos, que un alumno de Alas Peruanas lleva para completar su
carrera. Se pide calcular el promedio ponderado del alumno, teniendo en cuenta que
este se halla asi : Creditos*Nota / ( creditos)
ALGORITMO CURSOS
INICIO
ENTERO creditos[50] , nota[50]
Real PromPon
1. Para i 1 Hasta i 50
LEER creditos[i], nota[i]
FIN PARA
2. Screnot 0
3. Scred 0
4. Para i 1 Hasta i 50
ScreNota ScreNot + creditos[i] * nota[i]
Scred Scred + creditos[i]
5. FIN PARA
6. PromPond ScreNota / Scred
7. MOSTRAR PormPond
FIN
4. Un amigo es gerente de personal de una cadena de almacenes, y nos pedido
que le ayudemos a desarrollar un algoritmo que analice el archivo maestro de
nominas, que tiene un registro por cada empleado con los siguientes datos: codigo
del empleado, nombre, codigo del departamento(1,2,3,4); codigo de la sucursal
(1,2), codigo de seccin (Ropa, Abarrotes, Lacteos), sueldo mensual, tipo de
empleado (1 activo, 2 retirado, y 3 licencia).
En el analisis se pide un informe de lo siguiente:
a) El total de empleados activos en cada uno de los siguientes rangos de sueldos:
menos de 1500; entre 1500 y 2500, entre 2500 y 4000 ; y mas de 4000.
b) El numero de empleados activos, el numero de empleados con licencia.
c) Los codigos y nombres de los empleados del departamento 1
ALGORITMO
PRIMERA PRACTICA Semana 09-14 Abril
Solucionario ISI 21
1. Solucion al problema 1
ALGORITMO Encuesta
INICIO
Entero N, VotHabFem, VotHabMas, AoAct , AoNacNum, Edad
Cadena FechNac, AoNacCad
Carcter Cond, Sexo
Real PorcVotHabMas, PorcVotHabFem
VotHabFem 0
VotHabMas 0
LEER AoAct
LEER N
PARA i = 1 HASTA i = N
LEER FechNac, Cond, Sexo
AoNacCad SUBCADENA ( FechNac, 7,4)
AoNacNum CadNum (AoNacCad)
Edad AoAct AoNacNum
Si (Edad >= 18 )
ENTONCES
Si (Sexo = M )
ENTONCES
Si ( Cond = C)
ENTONCES
VotHabMas VotHabMas + 1
FINSI
SINO
Si ( Cond = C)
ENTONCES
VotHabFem VotHabFem + 1
FINSI
FIN SI
FIN SI
PorcVotHabMas (VotHabMas/ N) *100
PorcVotHabFem (VotHabFem/ N) *100
6. MOSTRAR VotHabMas, VotHabMas
7. MOSTRAR PorcVotHabMas, PorcVotHabFem
FIN
1.
2.
3.
4.
5.
2. Solucin al problema 2
ALGORITMO BODEGA
INICIO
Entero P100, P50, P20, P10, P5, Unid
Real MontoPag
LEER NKg
P100 NKg DIV 100
NKg NKg MOD 100
P50 NKg DIV 50
NKg NKg MOD 50
P20 NKg DIV 20
NKg NKg MOD 20
P10 NKg DIV 10
NKg NKg MOD 10
P5 NKg DIV 5
NKg NKg MOD 5
Unid NKg
MOSTRAR P100, P50, P20, P10, P5, Unid
MontoPag P100*200.00 + P50*190.00 + P20*38.00 + P10*19.00 + Unid*2.20
MOSTRAR MontoPag
FIN
3.
N
Corrida
i
Nombre
1
2
3
4
NroCr Categ
ed
Juan Silva
25
Rosa
22
Cespedes
Elena Rosas 20
A
C
PagoC PagoC NroA
red
iclo
LumC
atA
0
100
2500 1
70
1540 1
NroA
LumC
atB
0
0
0
NroA
LumC
atC
0
0
1
SumP
agoCi
clo
0
2500
4040
90
5840
1800
4. Solucin al problema 4
ALGORITMO Seguros
INICIO
Carcter Categ
Real MonMaxAse, MonCub, MontoD, Dauto, Dter, Dpers
Cadena Nombre,
1.
2.
3.
LEER Nombre, Categ, Dauto, Dter, Dpers
MontoD Dauto + Dter + Dpers
EN CASO Categ SEA
A :
MonMaxAse 20000
MonCub 20000*0.9
B :
MonMaxAse 10000
MonCub 10000*0.9
FIN CASO
SI (MontoD > MonCub)
ENTONCES
MOSTRAR No cubre el total de los daos
MOSTRAR Asegurado debe pagar ,MontoD MonCub
SINO
MOSTRAR Cubre el total del dao
MOSTRAR Nombre, Dauto, Dter, Dpers. MontoD
FINSI
FIN
4.
Solucionario isi 22
1. Solucin al problema 1
ALGORITMO SUELDOS
INICIO
Real sueldo
Entero SueldoEnt
Const real t1=0.25, t2= 0.22, t3= 0.20 , t4=0.18
Ssueldos 0
Saum 0
Stotal 0
LEER N
PARA I = 1 HASTA I = N
LEER Codigo , Sueldo
SueldoEnt Truncar(Sueldo )
En CASO ( SueldoEnt ) SEA
< 1500 : Aum Sueldo * t1
1500.. 2500 : Aum Sueldo * t2
2501.. 4000 : Aum Sueldo * t3
>4000 : Aum Sueldo * t4
FIN CASO
Total Sueldo + Aum
SSueldos Sueldos + Sueldo
Saum Saum + Aum
Stotal Stotal + Total
MOSTRAR Codigo, Sueldo, Aum, total
FIN PARA
MOSTRAR Stotal
FIN
2. Solucin al problema 2
ALGORITMO Numero
INICIO
Entero Num5Cif
1. LEER Num
2. u Num MOD 10
3. Num Num DIV 10
4. d Num MOD 10
5. Num Num DIV 10
6. c Num MOD 10
7. Num Num DIV 10
8. um Num MOD 10
9. Num Num DIV 10
10. dm Num
11. ninv u*10000 + d*1000 + c*100+ um+10+ dm
12. MOSTRAR ninv *2
FIN
3. Corrida
ALGORITMO Prueba
INICIO
Entero Fac, i,n
Fac 1
LEER N
PARA i 2 HASTA i N
Fac Fac * i
FIN PARA
MOSTRAR Fac
FIN
N=5 :
N=7 :
Fac 120
Fac 720*7
ALGORITMO Prueba2
INICIO
Entero Fac, i,n , Sum
Sum 0
LEER N
PARA J 1 HASTA J 3
Fac 1
PARA i 2 HASTA i N
Fac Fac * i
FIN PARA
Sum Su + Fac
FIN PARA
MOSTRAR Sum
FIN
S = 1! + 2! + 3!
4. Solucin al problema 4
ALGORITMO TRIANGULO
INICIO
Real a, b, c , alfa
Const real pi = 3.1416
1. LEER a, c
2. b sqrt ( a2 c2 )
3. alfa arctan ( c/b)
4. alfaSex alfa *180/PI
5. seno c/a
6. coseno b/a
7. tangente c/b
8. secante 1/coseno
9. cosecante 1/seno
10. MOSTRAR b, alfa, seno, coseno, tangente, secante , cosecante
FIN
S olucionario isi 23
1. Solucin al problema 1
ALGORITMO elecciones
INICIO
Entero NroVoTo, NroVoGa, NroVoBl, NroVoVi
Real PorcTo, PorcGar
1. NroVoTo 0 , NroVoGa 0 , NroVoBl 0 , NroVoVi 0
2. LEER n
3. PARA i = 1 HASTA i = n
LEER Voto
EN CASO Voto SEA
T
: NroVoTo NroVoTo +1
G
: NroVoGa NroVoGa +1
B
: NroVoBl NroVoBl +1
V
: NroVoVi NroVoVi +1
FIN CASO
FIN PARA
4. PorcTo ( NroVoTo/n ) *100
5. PorcGar ( NroVoGa/n )*100
6. SI ( NroVoTo > NroVoGa )
ENTONCES
MOSTRAR Gano Toledo
SINO
SI ( NroVotGa = NroVoTo)
ENTONCES
MOSTRAR Empate
SINO
MOSTRAR Gano Garcia
FIN SI
FIN SI
7. MOSTRAR NroVoTo, NroGa, NroVoVi, NroVoBl
FIN
2. Solucin al problema 2
ALGORITMO FERRETERIA
INICIO
Entero P1000, P500, P200, P100
Real MontoPag
LEER N
P1000 N DIV 1000
N N MOD 1000
P500 N DIV 500
N N MOD 500
P200 N DIV 200
N N MOD 200
P100 N DIV 100
N N MOD 100
Unid N
MOSTRAR P1000, P500, P200, P100, Unid
MontoPag P1000*20.00 + P500*9.70 + P200*3.80 + P100*1.90 + Unid*0.02
MOSTRAR MontoPag
FIN
3. Corrida:
Onservacion
Debe decir
SumSueldoBas 0
n
i
Nombre
1
2
3
4
Julio Ramos
Ana Perez
Rosa Carpio
4. Solucin al problema 4
SuelBas
Sbas
Imp
SumImp
0
400.50
750.70
1500.40
400
750
1500
4.00
37.50
225.00
0
4.00
41.50
266.50
SumSuel
doBas
0
400.50
1151.20
2651.20
.ALGORITMO Empleado
INICIO
Cadena Nombre, FechIng, AoIngCad
Entero NroHijos, AACt, AoIngNum, AosServ
Carcter EstCiv
Real Sbas, Bonif, SNeto
1. Bonif 0
2. LEER Nombre, FechIng, NroHijos, EstCiv, Sbas
3. LEER AoAct
4. AoIngCad SUBCADENA ( FechIng , 7,4)
5. AIngNum CADNUM (AoIngCad)
6. AosServ AoACt - AoIngNum
7. En CASO EstCiv SEA
S : Bonif Bonif + Sbas* 0.01
C : Bonif Bonif + Sbas* 0.04
FIN CASO
8. EN CASO NroHijos SEA
0 : Bonif Bonif + 0
1 : Bonif Bonif + 40
2 .. 4 : Bonif Bonif + 30*NroHijos
SINO : Bonif Bonif + 150
. FIN CASO
9. EN CASO AosServ SEA
0
: Bonif Bonif + 0
1.. 4 : Bonif Bonif + 20*AosServ.
5.. 10 : Bonif Bonif + 30*AosServ.
SINO : Bonif Bonif + 40*AosServ.
FIN CASO
10. SNeto Sbas + Bonif
11. MOSTRAR Nombre, Sbas, SNeto
FIN
Solucionario isi 24
1. Solucin al problema 1
ALGORITMO
INICIO
Cadena Codigo, Nombre
Carcter TipoEmp
Entero N
NempR1 0
NempR2 0
NempR3 0
NempR4 0
TempAct 0
1. LEER N
2. PARA i 1 HASTA i N
LEER codigo, Nombre, TipoEmp, Sueldo
Si (TipoEmp = 1)
ENTONCES
TempAct TempAct + 1
En CASO Truncar (Sueldo) SEA
< 1500
: NempR1 NempR1 + 1
1501..2500 : NempR2 NempR2 + 1
2501..5000 : NempR3 NempR3 + 1
> 5000 : NempR4 NempR4 + 1
FIN CASO
FIN SI
FIN PARA
3. MOSTRAR TempAct
4. MOSTRAR < 1500
: NempR1
5. MOSTRAR 1501 .. 2500 : NempR2
6. MOSTRAR 2501 .. 5000 : NempR3
7. MOSTRAR >5000
: NempR4
FIN
2. Solucin al problema 2
ALGORITMO
INICIO
Entero NroPas, P100, P50, P20, P10, P5
Real Monto ,
1. LEER NroPaS
2. P100 NroPas DIV 100
3. NroPas NroPas MOD 100
4. P50 NroPas DIV 50
5. NroPas NroPas MOD 50
6. P20 NroPas DIV 20
7. NroPas NroPas MOD 20
8. P10 NroPas DIV 10
9. NroPas NroPas MOD 10
10. P5 NroPas DIV 5
11. NroPas NroPas MOD 5
12. Unid NroPas
13. Monto P100 120 + P50*61 + P20*25 + P10*13+ P5*6.50 + Unid*1.4
14. MOSTRAR Monto
FIN
3. Simular la corrida de estos algoritmos:
ALGORITMO FUNCIN
INICIO
PARA x 0 HASTA x 10
FX x3 + x2 - 5
FIN PARA
MOSTRAR X , FX
FIN
x
0
1
2
3
FX
-5
-3
7
31
ALGORITMO
INICIO
Real C1, C2, C3 , CP
.
FIN
Nombre
Julio Preciado
Ada Lugo
Luis Cespedes
CP
9
15
14
4. Solucin al problema 4
ALGORITMO Cuentas
INICIO
Cadena Nombre, NroCta, FechaAper,
Real Saldo
Carcter TipoCta
1. LEER AoAct
2. LEER Nombre, NroCta, FechaAper, Saldo, TipoCta
3. AoAperNum CADNUM(SUBCADENA (FechaAper,7,4))
4. AosServ AoAct AoAperNum
5. EN CASO (AosServ ) SEA
1.. 5 : Premio 50*AosServ
6 .. 10 : Premio 100*AosServ
> 10 : Premio 1400
FIN CASO
6. MOSTRAR Nombre, NroCta, Saldo, TipoCta, Premio
FIN