Introducción: Estructuras Secuenciales
Introducción: Estructuras Secuenciales
El presente trabajo tiene como finalidad la elaboración de material didáctico para facilitar el
lenguaje C. Dicho material estará basado en la solución de problemas típicos, utilizados para
los siguientes elementos para el análisis y desarrollo del mismo, a fin de lograr la
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
cual se realizará una introducción a cada uno, sin profundizar en su contenido teórico ya que
Estructuras Secuenciales
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.
Planteamiento 1. Programa para calcular el porcentaje de hombres y de mujeres en un
grupo de estudiantes.
• Análisis
• Algoritmo
Pseudocódigo
FinProceso
Código fuente
#include<iostream>
using namespace std;
int main() {
total=ch+cm;
ph=ch*100/total;
pm=cm*100/total;
return 0;
}
• Análisis
Entrada Salida Proceso
Cantidad de estudiantes del Número de horas ta=ca*5 (tiempo invertido en el salón A)
salón A (ca) (nh) tb=cb*6 (tiempo invertido en el salón B)
Cantidad de estudiantes del Número de tc=cc*6 (tiempo invertido en el salón C)
salón B (cb) minutos (nm) tt = ta + tb + tc (total de minutos
Cantidad de estudiantes del invertidos)
salón C (cc) 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 tiempo
Escribir "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 A
tb<-cb*8; // Tiempo invertido en el salon B
tc<-cc*6; // Tiempo invertido en el salon C
tt = ta +tb + tc;
nh = tt / 60;
nm = tt % 60;
Escribir "Cantidad de horas invertidas ",nh;
Escribir "Cantidad de minutos invertidos ",nm;
FinProceso
7 5 8 35 40 48 123 2 3
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 variables
int 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;
// Proceso
ta=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.
// Salida
cout<<"Cantidad de horas invertidas "<<nh<<endl;
cout<<"Cantidad de minutos invertidos "<<nm<<endl;
return 0;
Ejercicios propuestos:
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.
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.
Decisión simple
• 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
//Entrada
Escribir "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 descuento
Si mbruto > 500 Entonces
desc<-mbruto * 5 / 100; //Calcula el descuento
monto<-mbruto - desc;
FinSi
monto = mbruto - desc;
//Salida
Escribir "Descripcion del articulo:",descrip;
Escribir "Monto a pagar:",monto," Bs.F";
FinProceso
Código fuente
#include<iostream>
using namespace std;
int main() {
int cant;
float desc,iva,mbruto,monto,precio,pv;
char descrip[20];
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;
return 0;
}
Decisión doble
• Análisis
Entrada Salida Proceso
sueldo = 1500 Pago recibido por vend de vt -> ventas totales
Ventas en Bs. realizadas dep1 (sdep1) p33 -> Porcentaje de 33 % sobre vt
por el dep 1 (vdep1) Pago recibido por vend de
Ventas en Bs. realizadas dep2 (sdep2) vt = vdep1 + vdep2 + vdep3
por el dep 2 (vdep2) Pago recibido por vend de p33 = vt * 33 / 100
Ventas en Bs. realizadas dep3 (sdep3)
por el dep 3 (vdep3) // si la venta supera el 33 %, tiene un
incremento del 20 %, de lo contrario
el sueldo no cambia
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
// Proceso
vt <- vdep1+vdep2+vdep3;
p33 <- vt * 33 / 100;
FinProceso
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 datos
cout<<"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;
}
//Salida
cout<<"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 TIPO
BOSQUE DEÁRB
OL
70% Pino
20% Eucalipto
10% 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 TIPO DE
BOSQUE ÁRBOL
50% Pino
30% Eucalipto
20% 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
• 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 */
// proceso
supmts <- suphec * hect; // Conversion de hectareas a mts2
Si supmts > 50000 Entonces // Si la sup es mayor a 50000 mt2
suppin <- supmts * 70/100;
supeuc <- supmts * 20/100;
supced <- supmts * 10/100;
Sino
suppin <- supmts * 50/100;
supeuc <- supmts * 30/100;
supced <- supmts * 20/100;
FinSi
cpinos = suppin * 8 /10;
ceucaliptos = supeuc * 15 /15;
ccedros = supced * 10 / 18;
// Salida
Escribir "Cantidad de pinos a sembrar: ",cpinos;
Escribir "Cantidad de eucaliptos a sembrar: ",ceucaliptos;
Escribir "Cantidad de cedros a sembrar: ",ccedros;
FinProceso
Código fuente
#include<iostream>
#define hect 10000
using namespace std;
int main() {
int ccedros,ceucaliptos,cpinos;
float supced,supeuc,suppin,suphec,supmts;
cout<<"Ingrese la superficie del bosque en hectareas:";
cin>>suphec;
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;
return 0;
}
• Análisis
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
int main() {
int c1,c10,c100,c2,c20,c5,c50,monto,resto;
cout<<"Ingrese el monto a desglosar (valor entero):";
cin>>monto;
return 0;
}
• Análisis
• 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 ingresados
Escribir "Ingresar tres valores diferentes";
Escribir "Valor 1:";
Leer a;
Escribir "Valor 2:";
Leer b;
Escribir "Valor 3:";
Leer c;
promedio<-(a + b + c) / 3;
Escribir "Valor mayor:",mayor;
Escribir "Valor menor:",menor;
Escribir "Promedio:",promedio;
Sino
Escribir "Valores incorrectos, no se puede procesar";
FinSi
FinProceso
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 c
if ((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 Si num = 1 entonces
(mes) Escribir “enero”
Numero de días (ndias) Escribir “numero de dias 31”
• Algoritmo
Pseudocódigo
Proceso mes
Escribir "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";
FinSegun
Si ban = 1 Entonces
Escribir "El mes ",num," corresponde a ", mes," y tiene ",ndias," dias";
FinSi
FinProceso
int main() {
int ban,num,ndias;
string mes;
return 0;
Ejercicios propuestos:
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
• Análisis
Entrada Salida Proceso
Número positivo Número mayor Inicializar mayor en un valor muy pequeño mayor=0
(num) (mayor) si num > mayor entonces
mayor <- num
Este 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 ellos
mayor<-0; // Se inicaliza la variable mayor
contador<-0; // Se inicializa el contador de los números
Repetir
Escribir "Ingrese un valor positivo: ";
Leer num;
// Se evalua si el numero es mayor a la variable 'mayor'
Si (num > mayor) Entonces
mayor<-num;
FinSi
contador<-contador+1; // Se incrementa el contador
Hasta Que contador = 10; // se repite hasta que la condicion sea verdadera, es decir
// hasta que el contador = 10
Escribir "El numero mayor es ", mayor;
FinProceso
Código fuente
#include<iostream>
using namespace std;
int main() {
// Declaracion de variables
int contador, mayor, num;
mayor=0;
contador=0;
do {
// Entrada de datos
cout<<"Ingrese un valor positivo: ";
cin>>num;
if (num > mayor) {
mayor=num;
}
contador=contador+1;
} while (contador != 10);
// Salida
cout<<"El numero mayor es "<<mayor<<endl;
return 0;
Ciclo Mientras-Hacer
• Análisis
Entrada Salida Proceso
Número de Cantidad de Si nota >= 12 entonces
notas a asignaturas ca = ca+1
procesar (n) reprobadas Sino
(cr) cr = cr+1
Calificación del Si la nota es mayor o igual a 12 (se aprueba con 12), se
estudiante Cantidad de incrementa en 1 el contador de abrobadas, de lo contrario
(nota) asignaturas se incrementa el contador de reprobadas; este proceso se
aprobadas (ca) hace con cada nota ingresada.
Pseudocódigo
Proceso NotasAprobasyReprobadas
// Calcular la cantidad de notas aprobadas y reprobadas de un estudiante, así como el
// promedio de ellas
FinProceso
Código fuente
#include<iostream>
using namespace std;
int main() {
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;
• Análisis
Entrada Salida Proceso
No hay La serie 0, 1, A dos variable se asignan los primeros dos valores iniciales a=0; b=1; se
entradas 1, 2, 3, 5, 8, imprimen
13, 21, 34. c= 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 c
Se 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 Fibonacci
a<-0;
b<-1;
contador<-2; // Van dos términos
Escribir "Serie de Fibonacci";
Escribir a," ",b;
Mientras contador < 10 Hacer
c<- a+b; // Se genera el sig termino
Escribir " ",c;
a<- b;
b<- c;
contador<-contador + 1;
FinMientras
FinProceso
#
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 ). Pago semanal del Dependiendo del tipo de empleado
Salario de empleado por hora empleado (pago) se calcula el pago semanal.
(sal_hora=100 ). Los valores para tipo son 1 =
gerente, 2 = por hora, 3 = Por
Salario de empleados por comision comision, 4 = a destajo
(sal_com= 1000).
Nombre del empleado(nombre). Si tipo = 1 entonces
Tipo de empleado: gerente, por hora, pago = sal_ger
por comision, a destajo (tipo) Si tipo = 2 entonces
Si tipo = por hora, leer ch
Cant de horas trab (ch) .
.
Si tipo = comision .
Venta bruta semanal(vs)
Si tipo = destajo
Monto por articulo (monto)
Cant de articulo (cant)
• Algoritmo
Pseudocódigo
Corrida paso a paso
Nro Salida
corrida
1
Código fuente
• Análisis
Entrada Salida Proceso
Numero 1 Los números Para todos los números comprendidos entre n1 y n2
(n1) divisores de 7 Si (numero mod 7) = 0 entonces
Numero 2 que están escribe numero
// si al dividir el numero entre 7, el resto es 0 entonces se imprime el
(n2) entre n1 y n2 // numero
• Algoritmo
Pseudocódigo
Proceso divisores_de_7
// Algoritmo que imprime los divisores de 7 comprendidos entre dos números dados
Escribir "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 Entonces
Escribir " ",x;
FinSi
FinPara
Sino
Escribir "Error, el numero 2 debe ser mayor al numero 1";
FinSi
FinProceso
Código fuente
#include<iostream>
using namespace std;
int main() {
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ón
cout<<" "<<x<<endl;
}
}
} else {
cout<<"Error, el numero 2 debe ser mayor al numero 1"<<endl;
}
return 0;
}