ALGORITMOS y PROGRAMAS LAB Nro 1.pdf

42
ALGORITMOS y PROGRAMAS LAB Nro 1 ISI 21 - 22 - 23 - 25 1. Hacer un ALGORITMO que permita el ingreso de dos números reales por teclado y calcule la división, si el denominador es diferente de cero. El algoritmo debe mostrar los números ingresados y el resultado. ALGORITMO operaciones INICIO // Declarar las variables real A, B, DR // Ingresar los dos números 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 las variables double A, B, Q ; // Ingresar los dos números por teclado cout<<"Ingrese dos numeros reales "; cin>>A>>B; if ( B != 0 ) { Q = 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

Transcript of ALGORITMOS y PROGRAMAS LAB Nro 1.pdf

Page 1: ALGORITMOS y PROGRAMAS LAB Nro 1.pdf

ALGORITMOS y PROGRAMAS LAB Nro 1

ISI 21 - 22 - 23 - 25

1. Hacer un ALGORITMO que permita el ingreso de dos números reales por teclado y calcule la división, si el denominador es diferente de cero. El algoritmo debe mostrar los números ingresados y el resultado. ALGORITMO operaciones INICIO

// Declarar las variables real A, B, DR

// Ingresar los dos números 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 las variables

double A, B, Q ; // Ingresar los dos números por teclado cout<<"Ingrese dos numeros reales "; cin>>A>>B; if ( B != 0 ) { Q = 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

Page 2: ALGORITMOS y PROGRAMAS LAB Nro 1.pdf

// Ingresar los dos números 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 números por teclado cout<<"Ingrese dos numeros separados por 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 institución 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' 300 + 7% de Sueldo Minimo

ALGORITMO Admisión INICIO

// Declarar las variables caracter ColProc

real PagoAdm // Declarar las constantes

Page 3: ALGORITMOS y PROGRAMAS LAB Nro 1.pdf

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 función toupper(), teniendo los case en mayusculas , es decir 'N',

Page 4: ALGORITMOS y PROGRAMAS LAB Nro 1.pdf

'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

Page 5: ALGORITMOS y PROGRAMAS LAB Nro 1.pdf

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 Nombre Precio $

TasaDescuento

<1> 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 :

Page 6: ALGORITMOS y PROGRAMAS LAB Nro 1.pdf

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 0 1 1 2 3 5 8 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 ecuación 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 Solución real

x2 = ( - b sqrt (Disc) ) / 2 Solución real Si Disc < 0 la solución es imaginaria.

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 pseudocódigo 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 : pEntSoles = int ( Soles) pFracSoles = int ( ( Soles - pEntSoles )*100)

Page 7: ALGORITMOS y PROGRAMAS LAB Nro 1.pdf

LABORATORIO NRO 2

ISI 21 - 22 - 23 - 25

Ing. Gladys García 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 añadiendo el termino 1/n , mientras sea mayor de 0.1 (es decir termina cuando se añade 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(); }

Page 8: ALGORITMOS y PROGRAMAS LAB Nro 1.pdf

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;

Page 9: ALGORITMOS y PROGRAMAS LAB Nro 1.pdf

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

Page 10: ALGORITMOS y PROGRAMAS LAB Nro 1.pdf

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<<"tamaño 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(); }

Page 11: ALGORITMOS y PROGRAMAS LAB Nro 1.pdf

PROBLEMAS PROPUESTOS

1. Hacer los programas en C++ de los problemas: 1,3,4,5, que estan resueltos en seudocódigo en la separata de ejercicios de arrays resueltos.

2. Elabore un algoritmo que proporcione el siguiente reporte:

Estadística de las Calificaciones.

Nombre Cal 1 Cal 2 Cal 3 Cal 4 Promedio

Xxxxx 12 14 17 11 99.9

Xxxxx 10 7 12 11 99.9

... 99.9

Xxxxx 11 5 17 10 99.9

Promedios 99 99 99 99

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 comisión que se calcula:

Nivel de comisión = 2/3*(promedio de ventas) Comisión = 5% sobre el excedente de lo que vendió por arriba del nivel de comisión. Elabore un algoritmo que proporcione el siguiente reporte: COMISIONES DE VENDEDORES

NOMBRE DEL VENDEDOR

VENTAS COMISION

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.

Page 12: ALGORITMOS y PROGRAMAS LAB Nro 1.pdf

ARRAYS BIDIMENSIONALES 5. Se tiene la producción de los siete días 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 día de producción, además, que imprima el número de planta que tuvo la mayor producción semanal.

6. Se tiene 15 estaciones de trabajo, cada una de las cuales tiene un encargado, del cual se conocen el nombre y la producción que tuvo en cada uno de los meses del año. Elaborar un algoritmo que lea los 15 nombres y los guarde en un arreglo; que haga lo mismo con los 12 meses de producción de cada una de las estaciones y que los almacene en una matriz de 15 X 12.

Nombre Producción 2 3 11 12 PA

1 Julio C. 1 120 160 200 190 230

2 Ana R. 2 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 dirección de x // p es variable puntero a reales

Page 13: ALGORITMOS y PROGRAMAS LAB Nro 1.pdf

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:

Page 14: ALGORITMOS y PROGRAMAS LAB Nro 1.pdf

/**************************************************************************** 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 dirección 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 dirección 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 añadido a un puntero no significa "añadir 1 a la dirección" // sino "ajustar el puntero al próximo objeto del array #include<iostream.h> #include<iomanip.h> #include<conio.h>

Page 15: ALGORITMOS y PROGRAMAS LAB Nro 1.pdf

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 dinámico: #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; // tamaño 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 }

Page 16: ALGORITMOS y PROGRAMAS LAB Nro 1.pdf

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() {

Page 17: ALGORITMOS y PROGRAMAS LAB Nro 1.pdf

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

Page 18: ALGORITMOS y PROGRAMAS LAB Nro 1.pdf

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

Page 19: ALGORITMOS y PROGRAMAS LAB Nro 1.pdf

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.

CANT

Productos CCPT Tiendas Num 1 2 3 .... 10 xxxxxxx 1

... ... ... ... ... ... ... xxxxxxx 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

Page 20: ALGORITMOS y PROGRAMAS LAB Nro 1.pdf

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 métodos numéricos. Si cada alumno tiene 3 rubros: de practicas, 1 examen parcial y un examen final.

La nota se calcula mediante el promedio aritmético de:los tres rubros: R1 de prácticas; 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 ]

Fin Para 2. Para i 1 Hasta i 35

NF[i] ( R1[ i ] + R2[ i ] + 2 * R3[ i ] )/4 Mostrar NF[i]

3. 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

Page 21: ALGORITMOS y PROGRAMAS LAB Nro 1.pdf

... .... ...

.... .... .... Hacer un algoritmo que permita : a) Ordenar en orden ascendente según la categoria (de menor a mayor ) y

mostrar dichos arrays ya ordenado b) Mostrar cuanto paga el alumno de mayor categoría y el de menor

categoría, teniendo en cuenta que solo existen las categorías 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 sección (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,

Page 22: ALGORITMOS y PROGRAMAS LAB Nro 1.pdf

1. NroEmpAct 0, NumEmpLic 0, 2. EmpR1 0, EmpR2 0, EmpR3 0, EmpR4 0 3. LEER CodEmp

4. 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

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 según el promedio ponderado (de mayor a menor

) y mostrar dichos arrays ya ordenado b) Mostrar el codigo, categoría 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

Page 23: ALGORITMOS y PROGRAMAS LAB Nro 1.pdf

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 2. Sea el array SUELDO de tamaño 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 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

Page 24: ALGORITMOS y PROGRAMAS LAB Nro 1.pdf

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

Page 25: ALGORITMOS y PROGRAMAS LAB Nro 1.pdf

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 información: código del producto, nombres, cantidad de unidades existentes, cantidad de unidades mínimas, costo unitario, precio unitario de venta, por cada registro. Hacer un algoritmo que permita hacer el siguiente informe: a) Los códigos, nombres , cantidad a pedir , costo parcial de cada producto cuya cantidad de unidades existentes es menor a la cantidad mínima, teniendo en cuenta que la cantidad a pedir = cantidad mínima - 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

Page 26: ALGORITMOS y PROGRAMAS LAB Nro 1.pdf

FIN MIENTRAS 5. MOSTRAR SCapInv , SGanPot

FIN Ing. Gladys Garcia Vilcapoma

SEGUNDA PRACTICA CALIFICADA DE ALGORITMOS AVANZADOS 23

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 Relámpago, 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)

GOLES Partidos GolPEqui NomEqui NumEqui 1 2 3 .... 8 Alianza 1

2 ... ... Unioversitario 5 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

Page 27: ALGORITMOS y PROGRAMAS LAB Nro 1.pdf

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 Comisión 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 + Comisión C) Hacer el algoritmo que muestre el mínimo sueldo y a que vendedor(es) corresponde. d) Determinar cuantos y que vendedores tuvieron ventas menores de 5000.

NomVen: 1 2 ... 20 Ventas 1 2 ... 20

Page 28: ALGORITMOS y PROGRAMAS LAB Nro 1.pdf

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 también debe mostrar los nombres y sueldos de los empleados que ganan menos y mas en la empresa. ( 4 puntos)

Page 29: ALGORITMOS y PROGRAMAS LAB Nro 1.pdf

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 año. Se debe leer de una cinta que tiene en cada registro la siguiente información: codigo del vendedor, codigo del articulo, mes de la transacción, valor. Los registros no estan clasificados y toda la información 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 9999.99 .... .... 99 9999.99

1. LEER CodV 2. Para i 1 Hasta i 12

Page 30: ALGORITMOS y PROGRAMAS LAB Nro 1.pdf

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 …. …. … ... Médium …. …. .. ... 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 mínimo 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 mercadería. 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

Page 31: ALGORITMOS y PROGRAMAS LAB Nro 1.pdf

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

Page 32: ALGORITMOS y PROGRAMAS LAB Nro 1.pdf

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 según el promedio ponderado (de menor a mayor ) y mostrar dichos arrays ya ordenado

b) Mostrar el codigo, categoría 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

Page 33: ALGORITMOS y PROGRAMAS LAB Nro 1.pdf

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 sección (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

Page 34: ALGORITMOS y PROGRAMAS LAB Nro 1.pdf

PRIMERA PRACTICA Semana 09-14 Abril

Solucionario ISI 21

1. Solucion al problema 1 ALGORITMO Encuesta

INICIO

Entero N, VotHabFem, VotHabMas, AñoAct , AñoNacNum, Edad

Cadena FechNac, AñoNacCad

Carácter Cond, Sexo

Real PorcVotHabMas, PorcVotHabFem

1. VotHabFem 0

2. VotHabMas 0

3. LEER AñoAct

4. LEER N

5. PARA i = 1 HASTA i = N

LEER FechNac, Cond, Sexo

AñoNacCad SUBCADENA ( FechNac, 7,4)

AñoNacNum CadNum (AñoNacCad)

Edad AñoAct – AñoNacNum

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

2. Solución al problema 2 ALGORITMO BODEGA

INICIO

Entero P100, P50, P20, P10, P5, Unid

Page 35: ALGORITMOS y PROGRAMAS LAB Nro 1.pdf

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. Corrida

N i Nombre NroCr

ed

Categ PagoC

red

PagoC

iclo

NroA

LumC

atA

NroA

LumC

atB

NroA

LumC

atC

SumP

agoCi

clo

0 0 0 0

3 1 Juan Silva 25 A 100 2500 1 0 0 2500

2 Rosa

Cespedes

22 C 70 1540 1 0 1 4040

3 Elena Rosas 20 B 90 1800 1 1 1 5840

4

4. Solución al problema 4

ALGORITMO Seguros

INICIO

Carácter Categ

Real MonMaxAse, MonCub, MontoD, Dauto, Dter, Dpers

Cadena Nombre,

1. LEER Nombre, Categ, Dauto, Dter, Dpers

2. MontoD Dauto + Dter + Dpers

3. EN CASO Categ SEA

„A‟ : MonMaxAse 20000

MonCub 20000*0.9

„B‟ : MonMaxAse 10000

MonCub 10000*0.9

Page 36: ALGORITMOS y PROGRAMAS LAB Nro 1.pdf

FIN CASO

4. SI (MontoD > MonCub)

ENTONCES

MOSTRAR “ No cubre el total de los daños“

MOSTRAR “Asegurado debe pagar “,MontoD – MonCub

SINO

MOSTRAR “Cubre el total del daño”

MOSTRAR Nombre, Dauto, Dter, Dpers. MontoD

FINSI

FIN

Solucionario isi 22

1. Solución 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. Solución al problema 2

Page 37: ALGORITMOS y PROGRAMAS LAB Nro 1.pdf

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 : Fac 120

N = 7 : 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

Page 38: ALGORITMOS y PROGRAMAS LAB Nro 1.pdf

FIN

S = 1! + 2! + 3!

4. Solución al problema 4

ALGORITMO TRIANGULO

INICIO

Real a, b, c , alfa

Const real pi = 3.1416

1. LEER a, c

2. b sqrt ( a¨2 – c¨2 )

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. Solución 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

Page 39: ALGORITMOS y PROGRAMAS LAB Nro 1.pdf

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. Solución 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 SuelBas Sbas Imp SumImp SumSuel

doBas

0 0 0

3 1 Julio Ramos 400.50 400 4.00 4.00 400.50

2 Ana Perez 750.70 750 37.50 41.50 1151.20

3 Rosa Carpio 1500.40 1500 225.00 266.50 2651.20

4

4. Solución al problema 4

Page 40: ALGORITMOS y PROGRAMAS LAB Nro 1.pdf

.ALGORITMO Empleado

INICIO

Cadena Nombre, FechIng, AñoIngCad

Entero NroHijos, AñACt, AñoIngNum, AñosServ

Carácter EstCiv

Real Sbas, Bonif, SNeto

1. Bonif 0

2. LEER Nombre, FechIng, NroHijos, EstCiv, Sbas

3. LEER AñoAct

4. AñoIngCad SUBCADENA ( FechIng , 7,4)

5. AñIngNum CADNUM (AñoIngCad)

6. AñosServ AñoACt - AñoIngNum

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 AñosServ SEA

0 : Bonif Bonif + 0

1.. 4 : Bonif Bonif + 20*AñosServ.

5.. 10 : Bonif Bonif + 30*AñosServ.

SINO : Bonif Bonif + 40*AñosServ.

FIN CASO

10. SNeto Sbas + Bonif

11. MOSTRAR Nombre, Sbas, SNeto

FIN

Solucionario isi 24 1. Solución al problema 1

ALGORITMO

INICIO

Cadena Codigo, Nombre

Carácter TipoEmp

Entero N

NempR1 0

NempR2 0

NempR3 0

NempR4 0

TempAct 0

Page 41: ALGORITMOS y PROGRAMAS LAB Nro 1.pdf

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. Solución 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 FUNCIÓN

INICIO

PARA x 0 HASTA x 10

Page 42: ALGORITMOS y PROGRAMAS LAB Nro 1.pdf

FX x¨3 + x¨2 - 5

FIN PARA

MOSTRAR X , FX

FIN

x FX

0 -5

1 -3

2 7

3 31

ALGORITMO

INICIO

Real C1, C2, C3 , CP

….

FIN

Nombre CP

Julio Preciado 9

Ada Lugo 15

Luis Cespedes 14

4. Solución al problema 4

ALGORITMO Cuentas

INICIO

Cadena Nombre, NroCta, FechaAper,

Real Saldo

Carácter TipoCta

1. LEER AñoAct

2. LEER Nombre, NroCta, FechaAper, Saldo, TipoCta

3. AñoAperNum CADNUM(SUBCADENA (FechaAper,7,4))

4. AñosServ AñoAct – AñoAperNum

5. EN CASO (AñosServ ) SEA

1.. 5 : Premio 50*AñosServ

6 .. 10 : Premio 100*AñosServ

> 10 : Premio 1400

FIN CASO

6. MOSTRAR Nombre, NroCta, Saldo, TipoCta, Premio

FIN