estructuras secuenciales · el presente trabajo tiene como finalidad la elaboración de material...

33
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

Upload: buitu

Post on 27-Sep-2018

222 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Estructuras Secuenciales · El presente trabajo tiene como finalidad la elaboración de material ... una serie de ejercicios planteados relacionados con el ... utilizado el programa

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

Page 2: Estructuras Secuenciales · El presente trabajo tiene como finalidad la elaboración de material ... una serie de ejercicios planteados relacionados con el ... utilizado el programa

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

Page 3: Estructuras Secuenciales · El presente trabajo tiene como finalidad la elaboración de material ... una serie de ejercicios planteados relacionados con el ... utilizado el programa

• 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

Page 4: Estructuras Secuenciales · El presente trabajo tiene como finalidad la elaboración de material ... una serie de ejercicios planteados relacionados con el ... utilizado el programa

// 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

Page 5: Estructuras Secuenciales · El presente trabajo tiene como finalidad la elaboración de material ... una serie de ejercicios planteados relacionados con el ... utilizado el programa

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.

Page 6: Estructuras Secuenciales · El presente trabajo tiene como finalidad la elaboración de material ... una serie de ejercicios planteados relacionados con el ... utilizado el programa

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

Page 7: Estructuras Secuenciales · El presente trabajo tiene como finalidad la elaboración de material ... una serie de ejercicios planteados relacionados con el ... utilizado el programa

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;

Page 8: Estructuras Secuenciales · El presente trabajo tiene como finalidad la elaboración de material ... una serie de ejercicios planteados relacionados con el ... utilizado el programa

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;

Page 9: Estructuras Secuenciales · El presente trabajo tiene como finalidad la elaboración de material ... una serie de ejercicios planteados relacionados con el ... utilizado el programa

• 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.";

Page 10: Estructuras Secuenciales · El presente trabajo tiene como finalidad la elaboración de material ... una serie de ejercicios planteados relacionados con el ... utilizado el programa

// 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

Page 11: Estructuras Secuenciales · El presente trabajo tiene como finalidad la elaboración de material ... una serie de ejercicios planteados relacionados con el ... utilizado el programa

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

Page 12: Estructuras Secuenciales · El presente trabajo tiene como finalidad la elaboración de material ... una serie de ejercicios planteados relacionados con el ... utilizado el programa

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

Page 13: Estructuras Secuenciales · El presente trabajo tiene como finalidad la elaboración de material ... una serie de ejercicios planteados relacionados con el ... utilizado el programa

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;

Page 14: Estructuras Secuenciales · El presente trabajo tiene como finalidad la elaboración de material ... una serie de ejercicios planteados relacionados con el ... utilizado el programa

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.

Page 15: Estructuras Secuenciales · El presente trabajo tiene como finalidad la elaboración de material ... una serie de ejercicios planteados relacionados con el ... utilizado el programa

• 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

Page 16: Estructuras Secuenciales · El presente trabajo tiene como finalidad la elaboración de material ... una serie de ejercicios planteados relacionados con el ... utilizado el programa

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;

Page 17: Estructuras Secuenciales · El presente trabajo tiene como finalidad la elaboración de material ... una serie de ejercicios planteados relacionados con el ... utilizado el programa

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;

Page 18: Estructuras Secuenciales · El presente trabajo tiene como finalidad la elaboración de material ... una serie de ejercicios planteados relacionados con el ... utilizado el programa

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

Page 19: Estructuras Secuenciales · El presente trabajo tiene como finalidad la elaboración de material ... una serie de ejercicios planteados relacionados con el ... utilizado el programa

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;

Page 20: Estructuras Secuenciales · El presente trabajo tiene como finalidad la elaboración de material ... una serie de ejercicios planteados relacionados con el ... utilizado el programa

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

Page 21: Estructuras Secuenciales · El presente trabajo tiene como finalidad la elaboración de material ... una serie de ejercicios planteados relacionados con el ... utilizado el programa

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

Page 22: Estructuras Secuenciales · El presente trabajo tiene como finalidad la elaboración de material ... una serie de ejercicios planteados relacionados con el ... utilizado el programa

• 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";

Page 23: Estructuras Secuenciales · El presente trabajo tiene como finalidad la elaboración de material ... una serie de ejercicios planteados relacionados con el ... utilizado el programa

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.

Page 24: Estructuras Secuenciales · El presente trabajo tiene como finalidad la elaboración de material ... una serie de ejercicios planteados relacionados con el ... utilizado el programa

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.

Page 25: Estructuras Secuenciales · El presente trabajo tiene como finalidad la elaboración de material ... una serie de ejercicios planteados relacionados con el ... utilizado el programa

• 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

Page 26: Estructuras Secuenciales · El presente trabajo tiene como finalidad la elaboración de material ... una serie de ejercicios planteados relacionados con el ... utilizado el programa

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

Page 27: Estructuras Secuenciales · El presente trabajo tiene como finalidad la elaboración de material ... una serie de ejercicios planteados relacionados con el ... utilizado el programa

• 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

Page 28: Estructuras Secuenciales · El presente trabajo tiene como finalidad la elaboración de material ... una serie de ejercicios planteados relacionados con el ... utilizado el programa

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

Page 29: Estructuras Secuenciales · El presente trabajo tiene como finalidad la elaboración de material ... una serie de ejercicios planteados relacionados con el ... utilizado el programa

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

Page 30: Estructuras Secuenciales · El presente trabajo tiene como finalidad la elaboración de material ... una serie de ejercicios planteados relacionados con el ... utilizado el programa

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

Page 31: Estructuras Secuenciales · El presente trabajo tiene como finalidad la elaboración de material ... una serie de ejercicios planteados relacionados con el ... utilizado el programa

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

Page 32: Estructuras Secuenciales · El presente trabajo tiene como finalidad la elaboración de material ... una serie de ejercicios planteados relacionados con el ... utilizado el programa

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

Page 33: Estructuras Secuenciales · El presente trabajo tiene como finalidad la elaboración de material ... una serie de ejercicios planteados relacionados con el ... utilizado el programa

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