Estructuras Secuenciales · El presente trabajo tiene como finalidad la elaboración de material...
Transcript of Estructuras Secuenciales · El presente trabajo tiene como finalidad la elaboración de material...
Introducción
El presente trabajo tiene como finalidad la elaboración de material didáctico para facilitar el
aprendizaje en cuanto a la construcción de algoritmos y su correspondiente solución en
lenguaje C. Dicho material estará basado en la solución de problemas típicos, utilizados para
el desarrollo de programas de computadora de mediana complejidad. Para ello se incluirán
los siguientes elementos para el análisis y desarrollo del mismo, a fin de lograr la
comprensión del ejercicio desde su planteamiento hasta el desarrollo final:
1. Planteamiento del problema.
2. Análisis del problema.
3. Desarrollo del algoritmo (pseudocódigo)
4. Corrida paso a paso.
5. Codificación en lenguaje C
Se incluyen además por cada tema, una serie de ejercicios planteados relacionados con el
ejercicio resuelto.
El desarrollo de los algoritmos será realizado en función de cada uno de los temas que
comprende la programación estructurada como lo es estructuras secuenciales, selectivas y
de repetición. Para la prueba de cada algoritmo se ha utilizado el programa PSEINT Para lo
cual se realizará una introducción a cada uno, sin profundizar en su contenido teórico ya que
se trata de un material totalmente práctico.
En las estructuras secuenciales una instrucción sigue a otra en secuencia, es decir, la salida de una instrucción es la entrada de la siguiente.
Estructuras Secuenciales
Planteamiento 1. Programa para calcular el porcentaje de hombres y de mujeres en un grupo de estudiantes.
• Análisis
Entrada Salida Proceso
Cantidad de hombres(ch)Cantidad de mujeres(cm)
Porcentaje de hombres (ph)Porcentaje de mujeres (pm)
total = ch + cmph = ch * 100 / totalpm = cm * 100 / total
• Algoritmo Pseudocódigo
// Permite calcular el porcentaje de hombres y mujeresProceso porcentaje
Escribir "Ingrese la cantidad de hombres: ";Leer ch;Escribir "Ingrese la cantidad de mujeres: ";Leer cm;total<-ch + cm; ph<-ch*100 / total; pm<-cm*100 / total;Escribir "Porcentaje de mujeres: ",pm;Escribir "Porcentaje de hombres: ",ph;
FinProceso
Corrida paso a paso
ch cm total ph (%) pm (%)
62
3167
9169
66,661
33,3398
• Codificación en lenguaje C++
Código fuente
#include<iostream>using namespace std;int main() {
int ch,cm, total;float ph;float pm;
cout<<"Ingrese la cantidad de hombres: "<<endl;cin>>ch;cout<<"Ingrese la cantidad de mujeres: "<<endl;cin>>cm;
total=ch+cm;ph=ch*100/total;pm=cm*100/total;
cout<<"Porcentaje de mujeres: "<<pm<<endl;cout<<"Porcentaje de hombres: "<<ph<<endl;
return 0;}
Planteamiento 2. Un instructor prepara tres modelos de exámenes para tres secciones en un curso de programación. El instructor sabe que tarda 5 minutos en el modelo del salón A, 8 minutos en el modelo del salón B y 6 minutos en el modelo del salón C. ¿Cuantas horas y minutos tardará el instructor en revisar los exámenes de todos los salones?
• Análisis
Entrada Salida Proceso
Cantidad de estudiantes del salón A (ca)Cantidad de estudiantes del salón B (cb)Cantidad de estudiantes del salón C (cc)
Número de horas (nh)Número de minutos (nm)
ta=ca*5 (tiempo invertido en el salón A)tb=cb*6 (tiempo invertido en el salón B)tc=cc*6 (tiempo invertido en el salón C)tt = ta + tb + tc (total de minutos invertidos)nh = tt / 60 (Calcula la cantidad de horas, parte entera de la división)nm = tt % 60 (Calcula el resto de la división)
• Algoritmo Pseudocódigo
// Permite calcular el tiempo en horas y minutos
// invertidos en revisar 3 modelos de exámenes // Elaborado por: Prof. Carmen Uzcátegui
Proceso tiempoEscribir "Ingrese la cantidad de estudiantes del salón A: ";Leer ca;Escribir "Ingrese la cantidad de estudiantes del salón B: ";Leer cb;Escribir "Ingrese la cantidad de estudiantes del salón c: ";Leer cc;ta<-ca*5; // Tiempo invertido en el salon Atb<-cb*8; // Tiempo invertido en el salon Btc<-cc*6; // Tiempo invertido en el salon Ctt = ta +tb + tc;nh = tt / 60; nm = tt % 60;Escribir "Cantidad de horas invertidas ",nh;Escribir "Cantidad de minutos invertidos ",nm;
FinProceso
Corrida paso a paso
ca cb cc ta tb tc tt nh nm
7 5 8 35 40 48 123 2 3
• Codificación en lenguaje C++
Código fuente
// Permite calcular el tiempo en horas y minutos // invertidos en revisar 3 modelos de exámenes // Elaborado por: Prof. Carmen Uzcátegui
#include<iostream>using namespace std;
int main() {
// Declaración de variablesint ca,cb, cc, ta, tb, tc, tt, nh, nm;
// Entrada de datos
cout<<"Ingrese la cantidad de estudiantes del salón A: "<<endl;cin>>ca;cout<<"Ingrese la cantidad de estudiantes del salón B: "<<endl;cin>>cb;cout<<"Ingrese la cantidad de estudiantes del salón c: "<<endl;cin>>cc;
// Procesota=ca*5; tb=cb*8;tc=cc*6;tt=ta+tb+tc;nh=tt / 60; // Calcula nro de horas, (/) toma la parte entera de la división nm=tt % 60; // Calcula el nro de minutos, (%) toma el residuo de la división.
// Salidacout<<"Cantidad de horas invertidas "<<nh<<endl;cout<<"Cantidad de minutos invertidos "<<nm<<endl;
return 0;
}
Ejercicios propuestos:
1. Una tienda ofrece un descuento del 15 % cobre el total de la compra y un cliente desea saber cuánto deberá pagar finalmente por su compra.
2. Dada la base y altura de un rectángulo, calcular el área y el perímetro del mismo. Las fórmulas son area=base*altura y perimetro=2*(base+altura)
3. Dados como datos el precio final pagado por un producto y su precio de venta al público (PVP), se requiere que calcule y muestre el porcentaje de descuento que le ha sido aplicado.
4. Un alumno desea saber cual será su calificación final en la materia Programación I. Dicha calificación se compone de los siguientes porcentajes : 55 % del promedio de sus tres parciales, 30 % de las practicas evaluadas y 15 % del trabajo final.
Estructuras de Decisión
Las estructuras de decisión o también llamadas de selección permite que el algoritmo tome decisiones y ejecute u omita algunos procesos dependiendo del cumplimiento de una condición.
Se pueden manejar tres tipos de decisiones: simple, doble y múltiple.
Una decisión es simple, cuando sólo se tiene determinado los pasos a seguir si el resultado de la condición es verdadero, mientras que si es falso, la ejecución del algoritmo continúa después de la estructura condicional.
Una decisión es doble, cuando se tiene un curso de acción para el caso que el resultado de la comparación sea verdadero y otro para cuando sea falso.
La decisión múltiple determina el valor de una variable y dependiendo de éste sigue un curso de acción. Es importante tener en cuenta que sólo se verifica la condición de igualdad entre la variable y la constante.
Decisión simple
Planteamiento 1 : Elabore un programa que permita emitir la factura correspondiente a la compra de un artículo determinado, del que se adquieren una o varias unidades. El IVA es del 15% y si el monto bruto (precio venta más IVA) es mayor a 500 Bs., se debe realizar un descuento del 5% sobre el monto total.
• Análisis
Entrada Salida Proceso
Cantidad de artículos (cant)Precio de venta (precio)Descripción del articulo (descrip)
Descripción del articulo (descrip)Monto a pagar (monto)
pv= cant*precio (precio de venta)IVA = pv * 15/100 mbruto= pv + IVAsi mbruto > 500 entonces desc= mbruto – mbruto * 5/100monto = mbruto – desc
• Algoritmo
Pseudocódigo
// Se trata de calcular el monto a pagar por una compra, especificando un descuento // del 5 % si el monto bruto es mayor a 500 Bs.Proceso descuento
//EntradaEscribir "Ingrese la descripción del articulo: ";Leer descrip;Escribir "Ingrese la cantidad de articulos: ";Leer cant;Escribir "Ingrese el precio del articulo: ";Leer precio;
//Proceso
pv<-cant * precio;IVA<-pv * 15 /100;mbruto<-pv + IVA;desc<- 0; //Inicializo la variable descuentoSi mbruto > 500 Entonces
desc<-mbruto * 5 / 100; //Calcula el descuentomonto<-mbruto - desc;
FinSimonto = mbruto - desc;
//SalidaEscribir "Descripcion del articulo:",descrip;Escribir "Monto a pagar:",monto," Bs.F";
FinProceso
Corrida paso a paso
Nro corrida
descrip cant precio pv IVA mbruto desc monto
1 mesa 2 400 800 120 920 46 874
2 audifonos 1 134.50 134.50 20.175 154.675 0 154.675
• Codificación en lenguaje C++
Código fuente
#include<iostream>using namespace std;
int main() {
int cant;float desc,iva,mbruto,monto,precio,pv;char descrip[20];
cout<<"Ingrese la descripción del articulo: ";cin>>descrip;cout<<"Ingrese la cantidad de articulos: ";cin>>cant;
cout<<"Ingrese el precio del articulo: ";cin>>precio;
pv=cant * precio;iva=pv * 15 / 100;mbruto=pv + iva;desc=0;if (mbruto>500) {
desc=mbruto*5/100;monto=mbruto-desc;
}monto=mbruto-desc;
cout<<"Descripcion del articulo: "<<descrip<<endl;cout<<"Monto a pagar: "<<monto<<" Bs.F"<<endl;
return 0;}
Decisión doble
Planteamiento 2 : Una empresa que comercializa cosméticos tiene organizados a sus vendedores en tres departamentos y ha establecido un programa de incentivos para incrementar su productividad. El gerente, al final del mes, pide el importe global de las ventas de los tres departamentos y aquellos que excedan el 33% de las ventas totales se les paga una cantidad extra equivalente al 20% de su salario mensual. Si todos los vendedores ganan lo mismo, determinar cuánto recibirán los vendedores de los tres departamentos al finalizar el mes.
• Análisis
Entrada Salida Proceso
sueldo = 1500 Ventas en Bs. realizadas por el dep 1 (vdep1)Ventas en Bs. realizadas por el dep 2 (vdep2)Ventas en Bs. realizadas por el dep 3 (vdep3)
Pago recibido por vend de dep1 (sdep1)Pago recibido por vend de dep2 (sdep2)Pago recibido por vend de dep3 (sdep3)
vt -> ventas totalesp33 -> Porcentaje de 33 % sobre vt
vt = vdep1 + vdep2 + vdep3 p33 = vt * 33 / 100
// si la venta supera el 33 %, tiene un incremento del 20 %, de lo contrario el sueldo no cambia
si vdep1 > p33 entonces sdep1 = sueldo + sueldo * 20/100sino sdep1= sueldo;
• Algoritmo
Pseudocódigo
Proceso ventas// Este codigo permite pagar un aumento del 20 % a aquellos vendedores // que superaron el 33 % de las ventas globales
// Entradas de datos
sueldo <- 1500 // se define como un valor constanteEscribir "Ventas en Bs. realizadas por departamento 1:";Leer vdep1;
Escribir "Ventas en Bs. realizadas por departamento 2:";Leer vdep2; Escribir "Ventas en Bs. realizadas por departamento 3:";Leer vdep3;
// Proceso
vt <- vdep1+vdep2+vdep3;p33 <- vt * 33 / 100;
Si (vdep1 > p33) Entoncessdep1 <- sueldo + sueldo * 20 /100;
Sino sdep1 <- sueldo;
FinSi // Se hace el mismo procedimiento para los tres departamentosSi (vdep2 > p33) Entonces
sdep2 <- sueldo + sueldo * 20 /100; Sino
sdep2 <- sueldo;FinSi
Si (vdep3 > p33) Entonces
sdep3 <- sueldo + sueldo * 20 /100; Sino
sdep3 <- sueldo;FinSi// Salidas del programa
Escribir "Los vendedores del dep 1 recibiran un pago de :",sdep1," Bs.";Escribir "Los vendedores del dep 2 recibiran un pago de :",sdep2," Bs.";Escribir "Los vendedores del dep 3 recibiran un pago de :",sdep3," Bs.";
// Fin del programa
FinProceso
Corrida paso a paso
Nro corrida
sueldo vdep1 vdep2 vdep3 vt p33 sdep1 sdep2 sdep3
1 1500 12000 1300 10000 23300 7689 1800 1500 1800
2 1500 200 200 200 600 198 1800 1800 1800
• Codificación en lenguaje C++
Código fuente
#include<iostream>using namespace std;#define sueldo 1500 // para definir un valor constante int main() {
float p33,sdep1,sdep2,sdep3,vdep1,vdep2,vdep3,vt;
// Entrada de datoscout<<"Ventas en Bs. realizadas por departamento 1:";cin>>vdep1;cout<<"Ventas en Bs. realizadas por departamento 2:";cin>>vdep2;cout<<"Ventas en Bs. realizadas por departamento 3:";cin>>vdep3;
//proceso
vt=vdep1+vdep2+vdep3;p33=vt*33/100;
if ((vdep1>p33)) {sdep1=sueldo+sueldo*20/100;
}else {
sdep1=sueldo;}if ((vdep2>p33)) {
sdep2=sueldo+sueldo*20/100;} else {
sdep2=sueldo;}if ((vdep3>p33)) {
sdep3=sueldo+sueldo*20/100;}else {
sdep3=sueldo;}
//Salidacout<<"Los vendedores del dep 1 recibiran un pago de :"<<sdep1<<" Bs."<<endl;cout<<"Los vendedores del dep 2 recibiran un pago de :"<<sdep2<<" Bs."<<endl;cout<<"Los vendedores del dep 3 recibiran un pago de :"<<sdep3<<" Bs."<<endl;return 0;
}
Planteamiento 3: El gobierno del estado Táchira desea reforestar un bosque que mide determinado número de hectáreas. Si la superficie del terreno excede a 50000 metros cuadrados, entonces decidirá sembrar de la siguiente manera:
PORCENTAJE DE LA SUPERFICIE DEL BOSQUE
TIPO DEÁRB
OL70% Pino20% Eucalipto10% Cedro
Si la superficie del terreno es menor o igual a 50000 metros cuadrados, entonces decidirá sembrar de la siguiente manera:
PORCENTAJE DE LA SUPERFICIE DEL BOSQUE
TIPO DE ÁRBOL
50% Pino30% Eucalipto20% Cedro
El gobierno desea saber el número de pinos, eucaliptos y cedros que tendrá que sembrar en el bosque, si se sabe que en 10 metros cuadrados caben 8 pinos, en 15 metros
cuadrados caben 15 eucaliptos y en 18 metros cuadrados caben 10 cedros. También se sabe que una hectárea equivale a 10 mil metros cuadrados.
• Análisis
Entrada Salida Proceso
1 hect = 10000 metros
Superficie del bosque en hect. (suphec)
Cantidad de pinos (cpinos)
Cantidad de eucaliptos (ceucalipto)
Cantidad de cedros (ccedros)
supmts → Superficie en metros cuadradossuppin → Superficie para los pinossupeuc → Superficie para los eucaliptosupced → Superficie para los cedros
supmts = suphec * hect; Conversion de hectareas a mts2// Si la sup es mayor a 50000 mts2Se determina que superficie del terreno será utilizado para cada tipo de árbol
si (supmts > 50000) entonces suppin = supmts * 70/100 supeuc = supmts * 20/100 supced = supmts * 10/100 en caso contrario ...
Se aplica una regla de tres para saber la cantidad de arboles de acuerdo a la superficie disponible. cpinos = suppin * 8 /10; ceucalipto = supeuc * 15 /15; ccedros = supced * 10 / 18;
• Algoritmo
Pseudocódigo
Proceso bosque// Programa que calcula la cantidad de pinos, cedros y eucaliptos que se podrán// sembrar en una superficie de terreno determinada */
hect <- 10000; // 1 hectárea equivale a 10000 metros cuadrados// EntradaEscribir "Ingrese la superficie del bosque en hectareas:";Leer suphec;
// procesosupmts <- suphec * hect; // Conversion de hectareas a mts2
Si supmts > 50000 Entonces // Si la sup es mayor a 50000 mt2suppin <- supmts * 70/100;supeuc <- supmts * 20/100;supced <- supmts * 10/100;
Sinosuppin <- supmts * 50/100;supeuc <- supmts * 30/100;supced <- supmts * 20/100;
FinSicpinos = suppin * 8 /10;ceucaliptos = supeuc * 15 /15;ccedros = supced * 10 / 18;
// SalidaEscribir "Cantidad de pinos a sembrar: ",cpinos;Escribir "Cantidad de eucaliptos a sembrar: ",ceucaliptos;Escribir "Cantidad de cedros a sembrar: ",ccedros;
FinProceso
Corrida paso a paso
Nro corrid
a
hect suphec
supmts
suppin supeuc supced cpinos ceucaliptos
ccedros
1 10000 3 30000 15000 9000 6000 12000 9000 3333
2 10000 6 60000 42000 12000 6000 33600 12000 3333
3 10000 2,7 27000 13500 8100 5400 10800 8100 3000
• Codificación en lenguaje C++
Código fuente
#include<iostream>#define hect 10000using namespace std;
int main() {
int ccedros,ceucaliptos,cpinos;float supced,supeuc,suppin,suphec,supmts;
cout<<"Ingrese la superficie del bosque en hectareas:";cin>>suphec;
supmts=suphec*hect; // Conversion a metros 2
if (supmts>50000) {suppin=supmts*70/100;supeuc=supmts*20/100;supced=supmts*10/100;
}else {
suppin=supmts*50/100;supeuc=supmts*30/100;supced=supmts*20/100;
}cpinos=suppin*8/10;ceucaliptos=supeuc*15/15;ccedros=supced*10/18;
cout<<"Cantidad de pinos a sembrar: "<<cpinos<<endl;cout<<"Cantidad de eucaliptos a sembrar: "<<ceucaliptos<<endl;cout<<"Cantidad de cedros a sembrar: "<<ccedros<<endl;
return 0;}
Planteamiento 4: Dada una cantidad de Bs. F, desarrolle un algoritmo que permita desglosar dicha cantidad en los billetes y monedas de curso legal en el País. Recuerde que estos son: 100, 50, 20, 10, 5, 2, 1, 0.5, 0.250, 0.125, 0.1 Imprima el número de billetes y/monedas correspondientes.
• Análisis
Entrada Salida Proceso
Monto a desglosar, valor entero (monto)
Cantidad de billetes de 100 (c100)
Cantidad de billetes de 50 (c50)
Cantidad de billetes de 20 (c20)
Cantidad de billetes de 10 (c10)Cantidad de billetes de 5 (c5)Cantidad de billetes de 2 (c2) Cantidad de monedas de 1 (c1)
c100 <-- monto / 100 ; se obtiene el cociente de la division, es decir la cantidad de billetes de 100
resto <-- monto % 100; con este operador se obtiene el residuo de la división, el cual se tomará para la siguiente operación y así sucesivamente.
• Algoritmo
Pseudocódigo
Proceso desglose// Este algoritmo se encarga de tomar un monto en Bs. F
// (cantidad entera) y desglosarlo en billetes de 100, 50,20,10,5,2,1
// Declaración de variables enterasDefinir monto,resto,c100,c50,c10,c5,c2,c1 Como Entero;
Escribir "Ingrese el monto a desglosar (valor entero):";Leer monto;// Inicializar variablesc100<-0; c50<-0; c20<-0; c10<-0; c5<-0; c2<-0;c1<-0;
Si (monto >= 100) Entoncesc100 <- monto / 100;resto <- monto % 100;
FinSiSi (resto >= 50) Entonces
c50 <- resto / 50;resto <- resto % 50;
FinSiSi (resto >= 20) Entonces
c20 <- resto / 20;resto <- resto % 20;
FinSiSi (rest0 >= 10) Entonces
c10 <- resto / 10;resto <- resto % 10;
FinSiSi (resto >= 5) Entonces
c5 <- resto / 5;resto <- resto % 5;
FinSiSi (resto >= 2) Entonces
c2 <- resto / 2;resto <- resto % 2;
FinSic1 <- resto;Escribir "Cantidad de billetes de 100 ",c100;Escribir "Cantidad de billetes de 50 ",c50;Escribir "Cantidad de billetes de 20 ",c20;Escribir "Cantidad de billetes de 10 ",c10;Escribir "Cantidad de billetes de 5 ",c5;Escribir "Cantidad de billetes de 2 ",c2;Escribir "Cantidad de monedas de 1 ",c1;
FinProceso
Corrida paso a paso
Nro corrid
a
monto c100 resto c50 c20 c10 c5 c2 c1
1 473 04 73
2331
01
0
1
0 0 0
1
0
1
2 765431 07654 31
111
0 01
0
1
0 0 0
1
• Codificación en lenguaje C++
Código fuente
#include<iostream>using namespace std;
int main() {int c1,c10,c100,c2,c20,c5,c50,monto,resto;cout<<"Ingrese el monto a desglosar (valor entero):";cin>>monto;
c100=0; c50=0; c20=0; c10=0; c5=0; c2=0; c1=0;if ((monto>=100)) {
c100=monto/100;resto=monto%100; // Se obtiene el residuo de la division
}if ((resto>=50)) {
c50=resto/50;resto=resto%50;
}if ((resto>=20)) {
c20=resto/20;resto=resto%20;
}if ((resto>=10)) {
c10=resto/10;resto=resto%10;
}if ((resto>=5)) {
c5=resto/5;
resto=resto%5;}if ((resto>=2)) {
c2=resto/2;resto=resto%2;
}c1=resto;cout<<"Cantidad de billetes de 100 :"<<c100<<endl;cout<<"Cantidad de billetes de 50 :"<<c50<<endl;cout<<"Cantidad de billetes de 20 :"<<c20<<endl;cout<<"Cantidad de billetes de 10 :"<<c10<<endl;cout<<"Cantidad de billetes de 5 :"<<c5<<endl;cout<<"Cantidad de billetes de 2 :"<<c2<<endl;cout<<"Cantidad de monedas de 1 :"<<c1<<endl;
return 0;}
Planteamiento 6: Leer tres números naturales y calcular el máximo el mínimo y el promedio de esos números.
• Análisis
Entrada Salida Proceso
Numero 1 (a)Numero 2 (b)Numero 3 (c)
Numero mayor (mayor)Numero menor (menor)Promedio (promedio)
// Determinar si a es el mayor de todosSi (a > b y a > c) Entonces mayor<-a // De los dos que quedan determinar cual // es el menor Si (b > c) Entonces
menor<-c; Sino
menor<-b; FinSi...
• Algoritmo
Pseudocódigo
Proceso mayor_menor// Este algoritmo va a pemitir buscar el numero mayor, el menor y el promedio// a partir de tres valores ingresadosEscribir "Ingresar tres valores diferentes";Escribir "Valor 1:";Leer a;
Escribir "Valor 2:";Leer b;Escribir "Valor 3:";Leer c;
// validar que todos los valores son diferentes entre siSi (a != b y a != c y b != c) Entonces
Escribir "valores correctos ...";Si (a > b y a > c) Entonces
mayor<-a;Si (b > c) Entonces
menor<-c;Sino
menor<-b;FinSi
SinoSi (b > c) Entonces
mayor<-b;Si (a > c) Entonces
menor<-c;Sino
menor<-a;FinSi
Sinomayor<-c;Si (b > a) Entonces
menor<-a;Sino
menor<-b;FinSi
FinSiFinSi
promedio<-(a + b + c) / 3;Escribir "Valor mayor:",mayor;Escribir "Valor menor:",menor;Escribir "Promedio:",promedio;
SinoEscribir "Valores incorrectos, no se puede procesar";
FinSiFinProceso
Corrida paso a paso
Nro corrid
a
a b c mayor menor promedio
1 7 7 5 Valores incorrectos
2 14 -3 1 14 -3 4
3 6 678 -6 678 -6 226
• Codificación en lenguaje C++
Código fuente
#include<iostream>using namespace std;// Este algoritmo va a pemitir buscar el numero mayor, el menor y el promedio// a partir de tres valores diferentes ingresadosint main() {
int a,b,c,mayor,menor;float promedio;cout<<"Ingresar tres valores diferentes"<<endl;cout<<"Valor 1:";cin>>a;cout<<"Valor 2:";cin>>b;cout<<"Valor 3:";cin>>c;if (a != b && a != c && b != c) {
cout<<"valores correctos ..."<<endl;if ((a>b && a>c)) { // verifica si a es el mayor
mayor=a;if ((b>c)) { // Examina el menor entre b y c
menor=c;} else {
menor=b;}
} else {if ((b>c)) { // verifica si b es el mayor
mayor=b;if ((a>c)) { // verifica el menor entre a y c
menor=c;
} else {menor=a;
}} else {
mayor=c; // el mayor es cif ((b>a)) { // verifica el menor entre a y b
menor=a;} else {
menor=b;}
}}promedio=(a+b+c)/3;cout<<"Valor mayor:"<<mayor<<endl;cout<<"Valor menor:"<<menor<<endl;cout<<"Promedio:"<<promedio<<endl;
} else {cout<<"Valores incorrectos, no se puede procesar"<<endl;
}return 0;
}
Decisión múltiple
Planteamiento 1 : Dado el numero del mes, muestre el numero de días y a que mes corresponde.
• Análisis
Entrada Salida Proceso
Numero del mes (num) Descripción del mes (mes)Numero de días (ndias)
Si num = 1 entonces Escribir “enero” Escribir “numero de dias 31”
• Algoritmo
Pseudocódigo
Proceso mesEscribir "Ingrese el numero del mes: ";Leer num;ban=1;Segun num Hacer
1:mes<-"enero";ndias <- 31;
2:mes<-"febrero";
ndias <- 28;3:
mes<-"marzo";ndias <- 31;
4:mes<-"abril";ndias <- 30;
5:mes<-"mayo";ndias <- 31;
6:mes<-"junio";ndias <- 30;
7:mes<-"julio";ndias <- 31;
8:mes<-"agosto";ndias <- 31;
9:mes<-"septiembre";ndias <- 30;
10:mes<-"octubre";ndias <- 31;
11:mes<-"noviembre";ndias <- 31;
12:mes<-"diciembre";ndias <- 31;
De Otro Modo:ban=0;Escribir "Error... valor incorrecto";
FinSegunSi ban = 1 Entonces Escribir "El mes ",num," corresponde a ", mes," y tiene ",ndias," dias";FinSi
FinProceso
Corrida paso a paso
Nro corrida
num mes ndias Salida
1 14 Error... valor incorrecto
2 01 enero 31
• Codificación en lenguaje C++
Código fuente
#include<iostream>using namespace std;
int main() {
int ban,num,ndias;string mes;
cout<<"Ingrese el numero del mes: ";cin>>num;ban=1; // bandera vale 1switch (num) {case 1:
mes="enero";ndias=31;break;
case 2:mes="febrero";ndias=28;break;
case 3:mes="marzo";ndias=31;break;
case 4:mes="abril";ndias=30;break;
case 5:mes="mayo";ndias=31;break;
case 6:mes="junio";ndias=30;break;
case 7:mes="julio";ndias=31;break;
case 8:mes="agosto";ndias=31;break;
case 9:mes="septiembre";
ndias=30;break;
case 10:mes="octubre";ndias=31;break;
case 11:mes="noviembre";ndias=31;break;
case 12:mes="diciembre";ndias=31;break;
default:ban=0; // bandera vale 0, valor incorrectocout<<"Error... valor incorrecto"<<endl;break;
} // fin del caseif (ban==1) {
cout<<"El mes "<<num<<" corresponde a "<<mes<<" y tiene "<<ndias<<" dias"<<endl;
}
return 0;
}
Ejercicios propuestos:
1. Calcular el cociente y el resto de la división de dos números naturales.2. Elabore un programa que lea un número e indique si éste es par-positivo, par-negativo,
impar-positivo o impar-negativo.
3. Dados sus tres lados, determinar si un triángulo es: equilátero, isósceles o escaleno. Equilátero: todos sus lados son iguales. Isósceles: Dos lados iguales y uno diferente. Escaleno: Todos sus lados diferentes.
4. Determinar la edad de una persona. Mostrar la edad en años, meses y días.
5. Validar una fecha en formato DD/MM/AA.
6. Una persona desea iniciar un negocio, para lo cual piensa verificar cuánto dinero le prestaría el banco por hipotecar su casa. Tiene una cuenta bancaria, pero no quiere disponer de ella a menos que el monto por hipotecar su casa sea muy pequeño. Si el monto de la hipoteca es menor que $1.000.000 entonces invertirá el 50% de la inversión total, y un socio invertirá el otro 50%. Si el monto de la hipoteca es de $1.000.000 o más, entonces invertirá el monto total de a hipoteca y el resto del dinero que se necesite para cubrir la inversión total se repartirá a partes iguales entre el socio y él.
Estructuras de Repetición
Un ciclo consiste en un grupo de acciones que se ejecutan repetidas veces dependiendo del cumplimiento de una condición. En algunos casos, el número de repeticiones se conoce con anterioridad, mientras que en otros depende de cálculos o estados de variables que se dan dentro de la solución del problema. Existen tres tipos de ciclos: ciclo Mientras-Hacer, ciclo Haga-Mientras, ciclo Desde.
Ciclo Mientras-Hacer: consiste en un conjunto de instrucciones que se repiten mientras se cumpla una condición. Las instrucciones contenidas en el cuerpo del ciclo, se ejecutarán solamente si al evaluar la condición se genera un valor verdadero, en caso contrario se ejecutará la instrucción que este después del Fin-mientras.
Ciclo Repita- Hasta: funciona muy similar al ciclo Mientras-Hacer, sólo que en ésta siempre se ejecuta el cuerpo del ciclo al menos una vez, ya que la condición se evalúa al final del mismo y se sale del ciclo cuando la condición sea verdadera.
Ciclo Desde: este ciclo, a diferencia de los anteriores, maneja el valor inicial, el valor de incremento o decremento y el valor final de la variable de control como parte de la instrucción. Se utiliza cuando se conoce con anterioridad el número de veces que se debe repetir el ciclo.
Ciclo Repita-Hasta
Planteamiento 1 : Solicite al usuario 10 números positivos y muestre el mayor de ellos
• Análisis
Entrada Salida Proceso
Número positivo (num)
Número mayor (mayor)
Inicializar mayor en un valor muy pequeño mayor=0si num > mayor entonces mayor <- numEste proceso se repite con cada uno de los números ingresados.
• Algoritmo
Pseudocódigo
Proceso valor_mayor// Solicita 10 numeros positivos y muestra el mayor de ellosmayor<-0; // Se inicaliza la variable mayorcontador<-0; // Se inicializa el contador de los númerosRepetir
Escribir "Ingrese un valor positivo: ";Leer num;// Se evalua si el numero es mayor a la variable 'mayor'Si (num > mayor) Entonces
mayor<-num;FinSicontador<-contador+1; // Se incrementa el contador
Hasta Que contador = 10; // se repite hasta que la condicion sea verdadera, es decir // hasta que el contador = 10Escribir "El numero mayor es ", mayor;
FinProceso
Corrida paso a paso
Nro corrida
mayor contador num Nota
1 0517
18
012345
5173181
La prueba se hará solo con 5 números
• Codificación en lenguaje C++
Código fuente
#include<iostream>using namespace std;
int main() { // Declaracion de variables
int contador, mayor, num;mayor=0;contador=0;do {
// Entrada de datoscout<<"Ingrese un valor positivo: ";cin>>num;if (num > mayor) {
mayor=num;}contador=contador+1;
} while (contador != 10);
// Salidacout<<"El numero mayor es "<<mayor<<endl;
return 0;
}
Nota: Es importante resaltar que la estructura Repita-hasta, no existe en Lenguaje C y en su defecto se utiliza la estructura Haga-Mientras, y en ella cambia la condición, ya que se ejecuta el ciclo mientras la condición sea verdadera.
Ciclo Mientras-Hacer
Planteamiento 2 : Dadas N notas de un estudiante, calcular: Cuantas asignaturas tiene reprobadas.Cuantas asignaturas tiene aprobadas.El promedio de todas las calificaciones.
• Análisis
Entrada Salida Proceso
Número de notas a procesar (n)
Calificación del estudiante (nota)
Cantidad de asignaturas reprobadas (cr)
Cantidad de asignaturas aprobadas (ca)
Promedio de calificaciones (prom)
Si nota >= 12 entonces ca = ca+1Sino cr = cr+1Si la nota es mayor o igual a 12 (se aprueba con 12), se incrementa en 1 el contador de abrobadas, de lo contrario se incrementa el contador de reprobadas; este proceso se hace con cada nota ingresada.
suma = suma + nota; Se acumula en 'suma' el total de todas las notas ingresadas.
prom = suma / n; Se divide la suma de todas las notas entre la cantidad de ellas
• Algoritmo
Pseudocódigo
Proceso NotasAprobasyReprobadas// Calcular la cantidad de notas aprobadas y reprobadas de un estudiante, así como el // promedio de ellas
ca<-0; cr<-0; suma<-0;contador<-1;Escribir "Cantidad de calificaciones del estudiante: ";Leer n;Mientras contador <= n Hacer
Escribir "Ingrese la calificacion ",contador;Leer nota;Si nota >=12 Entonces
ca<-ca+1; // Contador de aprobadasSino
cr<-cr+1; // Contador de reprobadasFinSisuma<-suma+nota; // Acumulador de notascontador<-contador+1;
FinMientrasprom<-suma/n;Escribir "Cantidad de calificaciones aprobadas: ",ca;Escribir "Cantidad de calificaciones reprobadas: ",cr;Escribir "Promedio de notas : ",prom;
FinProceso
Corrida paso a paso
Nro corrida
contador ca cr suma n nota prom
1 12345
012
0123
01023404450
5 10131746
10
• Codificación en lenguaje C++
Código fuente
#include<iostream>using namespace std;
int main() {
int ca, contador, cr, n;float nota, prom, suma;
ca=0; cr=0; suma=0; contador=1;cout<<"Cantidad de calificaciones del estudiante: ";cin>>n;
while (contador<=n) {cout<<"Ingrese la calificacion "<<contador;cin>>nota;if (nota>=12) {
ca=ca+1;} else {
cr=cr+1;}suma=suma+nota;contador=contador+1;
}prom=suma/n;cout<<"Cantidad de calificaciones aprobadas: "<<ca<<endl;cout<<"Cantidad de calificaciones reprobadas: "<<cr<<endl;cout<<"Promedio de notas : "<<prom<<endl;
return 0;
}
Planteamiento 3 : La serie Fibonacci comienza con los números 0,1,1,2,3,5,8,13,21.. Desarrolle un algoritmo para generar los primeros 10 términos de la serie de Fibonacci.
• Análisis
Entrada Salida Proceso
No hay entradas
La serie 0, 1, 1, 2, 3, 5, 8, 13, 21, 34.
A dos variable se asignan los primeros dos valores iniciales a=0; b=1; se imprimenc= a+b; se genera el siguiente término con la suma de los anteriores, se imprime.a=b; b=c; Luego a toma el valor de b y b toma el valor de cSe repite de nuevo el paso anterior hasta que se generen los diez términos.
• Algoritmo
Pseudocódigo
Proceso Fibonacci// Algoritmo que genere los primeros 10 términos de la // serie de Fibonaccia<-0; b<-1;contador<-2; // Van dos términosEscribir "Serie de Fibonacci";Escribir a," ",b;Mientras contador < 10 Hacer
c<- a+b; // Se genera el sig terminoEscribir " ",c;a<- b; b<- c;contador<-contador + 1;
FinMientrasFinProceso#
Corrida paso a paso
Nro corrida
a b contador c
1 011235813
1123581321
23456789
12358132134
• Codificación en lenguaje C++
Código fuente
#include<iostream>using namespace std;
int main() {
int a,b,c,contador;a=0;
b=1;contador=2;cout<<"Serie de Fibonacci"<<endl;cout<<a<<" "<<b;while (contador<10) {
c=a+b;cout<<" "<<c;a=b;b=c;contador=contador+1;
}
return 0;}
Planteamiento 4: Una empresa paga a sus empleados como: Gerentes (reciben un salario fijo semanal), Empleados por hora (reciben un pago fijo por hora por las primeras 40 horas de trabajo, y 1.5 veces su pago por hora, por el tiempo extra trabajado), Empleados por comisión (reciben 2500 Bs F. Más el 5.7 % de sus ventas brutas semanales), Empleados a destajo (reciben un monto fijo por cada uno de los elementos que producen, y cada uno sólo trabajan con un tipo de artículo). Calcule la paga semanal por cada empleado. No se conoce el número de empleados. Cada empleado tiene su propio código de pago. Se procesarán empleados hasta que se ingrese un “ * ” en el campo nombre.
• Análisis
Entrada Salida Proceso
Salario del gerente (sal_ger=2000 ).Salario de empleado por hora (sal_hora=100 ).Salario de empleados por comision (sal_com= 1000).Nombre del empleado(nombre).Tipo de empleado: gerente, por hora, por comision, a destajo (tipo)Si tipo = por hora, Cant de horas trab (ch)Si tipo = comision Venta bruta semanal(vs)Si tipo = destajo Monto por articulo (monto) Cant de articulo (cant)
Pago semanal del empleado (pago)
Dependiendo del tipo de empleado se calcula el pago semanal.Los valores para tipo son 1 = gerente, 2 = por hora, 3 = Por comision, 4 = a destajo
Si tipo = 1 entonces pago = sal_gerSi tipo = 2 entonces leer ch . . .
• Algoritmo
Pseudocódigo
Corrida paso a paso
Nro corrida
Salida
1
• Codificación en lenguaje C++
Código fuente
Ciclo Para (Repita-Para)
Planteamiento 5: Programa que muestra los divisores de 7 comprendidos entre dos números dados.
• Análisis
Entrada Salida Proceso
Numero 1 (n1)Numero 2 (n2)
Los números divisores de 7 que están entre n1 y n2
Para todos los números comprendidos entre n1 y n2 Si (numero mod 7) = 0 entonces escribe numero // si al dividir el numero entre 7, el resto es 0 entonces se imprime el // numero
• Algoritmo
Pseudocódigo
Proceso divisores_de_7// Algoritmo que imprime los divisores de 7 comprendidos entre dos números dadosEscribir "Ingrese un primer numero";Leer n1;Escribir "Ingrese el segundo numero (debe ser mayor que n1)";Leer n2;Si n2 > n1 Entonces // Los valores ingresados son correctos
Escribir "Numero divisores de 7 comprendidos entre ",n1," y ",n2;Para x<-n1 Hasta n2 Con Paso 1 Hacer
Si x mod 7 = 0 EntoncesEscribir " ",x;
FinSiFinPara
Sino Escribir "Error, el numero 2 debe ser mayor al numero 1";
FinSiFinProceso
Corrida paso a paso
Nro corrida
n1 n2 x Salida
1 6 23 67891011121314151617181920212223
7
14
21
• Codificación en lenguaje C++
Código fuente
#include<iostream>using namespace std;
#define SIN_TIPO string
int main() {
int n1, n2,x;cout<<"Ingrese un primer numero";cin>>n1;cout<<"Ingrese el segundo numero (debe ser mayor que n1)";cin>>n2;
if (n2>n1) {cout<<"Numero divisores de 7 comprendidos entre "<<n1<<" y "<<n2<<endl;for (x=n1;x<=n2;x++) {
if (x % 7==0) { // El operador % equivale al resto o residuo de la divisióncout<<" "<<x<<endl;
}}
} else {cout<<"Error, el numero 2 debe ser mayor al numero 1"<<endl;
}
return 0;}