Guía de Fundamentos de Programacion C++
Guía de Fundamentos de Programacion C++
Guía de Fundamentos de Programacion C++
FUNDAMENTOS DE
PROGRAMACION
C++
100 ALGORITMOS
C++
Página 0 de 235
Italo Yaranga Vite
GUIA PRÁCTICA
ALGORITMOS
ESTRUCTURADOS
C++
Página 1 de 235
Italo Yaranga Vite
INDICE
PAG
SESION 01 : Procesos Secuenciales.............................................. 3
Página 2 de 235
Italo Yaranga Vite
S SESION 01
Los procesos secuenciales
variar la secuencia.
Página 3 de 235
Italo Yaranga Vite
SESION 01
PROCESOS SECUENCIALES
Solución:
*Análisis de datos
E: vendedor, sm, vt1, vt2 ,vt3.
S: pt (pago total)
*Algoritmo
1.-Inicio
2.-vendedor='', sm=0.0, vt1=0, vt2=0, vt3=0,pt=0.0,c=0.0
3.-Leer vendedor, sm, vt1, vt2, vt3.
4.-c=(vt1+vt2+vt3)*0.10
pt=sm + c
5.-Escribir pt
6.-fin
*Prueba de escritorio
vendedor='juan'
sm=1800
vt1=200
vt2=400
vt3=600
pt=1920
Página 4 de 235
Italo Yaranga Vite
Solución:
*Análisis de datos
E: e (empleado), ht (horas trabajadas), th (tarifa por hora)
s: sb (sueldo bruto), d(descuento), sn (sueldo neto).
*Algoritmo
1.-inicio
2.-e='', ht=0, th=0.0, sb=0.0, d=0.0, sn=0.0
3.-leer e, ht ,th.
4.-sb=ht * th
d=sb * 0.13
sn=sb - d
5.-escribir sb, d, sn
6.-fin
*Prueba de Escritorio
e=’juan’
ht=160
th=20
sb=3200
d=416
sn=2784
Página 5 de 235
Italo Yaranga Vite
Página 6 de 235
Italo Yaranga Vite
3. Diseñar un algoritmo que permita distribuir una cantidad ingresada en soles y Visualice la
cantidad de billetes de cada denominación de billetes de 200, 100, 50, 20, 10 y moneda 5,
2 y 1.
Solución:
*Análisis de datos
E: cs (cantidad soles)
S: b200, b100, b50, b20, b10, m5.
*Algoritmo
2.-cs=0,b200=0,b100=0,b50=0,b20=0,b10=0,m5=0,r=0, m2=0,m1=0
3.-leer cs
4.-b200=entero(cs/200)
r=residuo(cs/200)
b100=entero(r/100)
r=residuo(r/100)
b50=entero(r/50)
r=residuo(r/50)
b20=entero(r/20)
r=residuo(r/20)
b10=entero(r/10)
r=residuo(r/10)
m5=entero(r/5)
r=residuo(r/5)
m2=entero(r/2)
r=residuo(r/2)
m1=entero(r/1)
5.- escribir b200,b100,b50,b20,b10,m5,m2,m1
6.- fin
*Prueba de Escritorio
cs=388
b200=1, b100=1, b50=1, b20=1, b10=1, m5=1,m2=1,m1=1
Página 7 de 235
Italo Yaranga Vite
Página 8 de 235
Italo Yaranga Vite
*Ejecución del programa.
*Análisis de datos
E: co (coste original), vu (vida útil), vrc (valor de recuperación), ap (años de propiedad)
S: da (depreciación acumulada), vr (valor real)
*Algoritmo
1.-inicio
2.-co=0.0, vu=0, vrc=0.0, ap=0, da=0.0, vr=0.0
3.-leer co, vu, vrc, ap
4.-da=ap*(co-vrc)/vu
vr=co-da
5.-escribir da, vr
6.-fin
*Prueba de Escritorio
co =20000
vu =6
vrc =2000
ap =2
da =6000
vr =14000
Página 9 de 235
Italo Yaranga Vite
Página 10 de 235
Italo Yaranga Vite
5. Diseñar un algoritmo que permita realizar las operaciones aritmeticas basicas como: suma,
resta, mult, división, residuo, potencia, raiz cuadrada mediante dos números ingresados.
Solución:
*Análisis de datos
E:n1,n2
S:s(suma),r(resta),m(mult),d(div),
rs(residuo),p(potencia),rc(raiz cuadrada)
*Algoritmo
1.-inicio
2.-n1=0.0,n2=0.0,s=0.0,r=0.0,m=0.0,d=0.0,rs=0,p=0,rc=0.0
3.-leer n1,n2
4.-s=n1+n2
r=n1-n2
m=n1*n2
d=n1/n2
rs=residuo(n1/n2)
p=potencia(n1,n2)
rc=raiz(n1)
5.-escribir s,r,m,d,rs,p,rc
6.-fin
*Prueba de Escritorio
n1=10
n2=5
s=15
r=5
m=50
d=2
rs=0
p=100000
rc=3.16228
Página 11 de 235
Italo Yaranga Vite
Página 12 de 235
Italo Yaranga Vite
6. Diseñar un algoritmo que solicite al usuario su sueldo mensual, sus gastos de: renta, luz,
agua y comida y le muestre cuánto dinero le queda.
Solución:
*Análisis de datos
E:sm,r,l,a,c
S:dr(dinero restante)
*Algoritmo
1.-inicio
2.-sm=0,r=0,l=0,a=0,c=0,dr=0,s=0
3.-leer sm,r,l,a,c
4.-s=r+l+a+c
dr=sm-s
5.-escribir dr
6.-fin
*Prueba de Escritorio
sm=2000
r=700
l=100
a=120
comida=300
dr=780
Página 13 de 235
Italo Yaranga Vite
Página 14 de 235
Italo Yaranga Vite
7. Digite un número entero positivo de tres cifras, luego visualice el nuevo formado por sus
cifras extremas y la inversa de dicho número.
Solución:
*Análisis de datos
E:n(numero)
S: nnum(digitos de extremos), inv_nnum(números invertidos)
*Algoritmo
1.-inicio
2.-n=0, c1=0,c2=0,c3=0, nnum=0,inv_nnum=0,r=0
3.-leer n
4.-c1=entero(n/100)
r=residuo(n/100)
c2=entero(r/10)
r=residuo(r/10)
c3=entero(r)
nnum=(c1*10+c3)
inv_nnum=(c1+c3*10)
5.-escribir nnum,inv_nnum
6.-fin
*Prueba de Escritorio
n=483
nnum=43
inv_nnum=34
Página 15 de 235
Italo Yaranga Vite
Página 16 de 235
Italo Yaranga Vite
8. ¿Cual es el monto a devolver si nos prestan un capital c a una tasa de interes t%,
durante n periodos?
Solución:
*Analisis de datos
E:c(capital),t(tasa de interes),n(periodos)
S:m(monto)
*Algoritmo
1.-Inicio
2.-c=0.0,t=0.0,n=0,m=0.0
3.-m=c*pow(1 + t ,n)
4.-escribir m
5.-fin
*Prueba de escritorio
c=500
t=0.2
n=5
m=1244.16
Página 17 de 235
Italo Yaranga Vite
Solución:
*Analisis de datos
E:hr(horas),m(minutos),s(segundos)
S:ts(tiempo total en segundos)
*Algoritmo
1.-Inicio
2.-hr=0.0,m=0.0,s=0.0,ts=0.0
3.-leer hr,m,s
4.-ts=hr*3600 + m*60 + s
5.-escribir ts
6.-fin
*Prueba de escritorio
hr=5
m=30
s=40
ts=19840
Página 18 de 235
Italo Yaranga Vite
*Implementación del algoritmo en C++.
#include <iostream.h>
#include <stdlib.h>
//promgrama principal
main(){
//declarar variables
double hr,m,s,ts;
//entrada de datos
cout<<"Ingrese la cantidad de horas :";cin>>hr;
cout<<"Ingrese la cantidad de minutos :";cin>>m;
cout<<"Ingrese la cantidad de segundos :";cin>>s;
//proceso de datos
ts=hr*3600+m*60+s;
//salida de datos
cout<<"El tiempo total en segundos es :"<<ts<<endl;
system("PAUSE");
}//fin de programa
Página 19 de 235
Italo Yaranga Vite
10. Diseñar un algoritmo que permita convertir una cantidad de dolares a una cantidad
soles, teniendo en cuenta el tipo de cambio del dolar.
Solución:
*Analisis de datos
E:cd(cantidad dolares),tc(tipo de cambio)
S:cs(cantidad soles)
*Algoritmo
1.-inicio
2.-cd=0.0,tc=0.0,cs=0.0
3.-leer cd,tc
4.-cs=cd*tc
5.-escribir cs
6.-fin
*Prueba de Escritorio
cd=375
tc=2.75
cs=1031.25
Página 20 de 235
Italo Yaranga Vite
11. Diseñar un algoritmo que permita determinar el área de un circulo, su diametro y la
longitud de la circunferencia al dar como dato su radio.
Solución:
*Analisis de datos
e:r(radio)
s:d(diametro), l(longitud de la circunferencia), a(area)
*Algoritmo
1.-inicio
2.-r=0, d=0, l=0,a=0
3.-leer r
4.-d=2*r
l=3.1416*radio*2;
a=3.1416*radio*radio;
5.-escribir d,l,a
6.-fin
*Prueba de escritorio
r=5
d=10
l=31.416
a=78.54
Página 21 de 235
Italo Yaranga Vite
Solución:
*Analisis de datos
e:t(temperaturaen celcius)
s:f(temperatura fahrenheit),k(temperatura en kelvin)
*Algoritmo
1.-inicio
2.-t=0.0,f=0.0,k=0.0
3.-leer t
4.-k=t+273
f=(1.8*t)+32
5.-escribir k,f
6.-fin
*Prueba de escritorio
t=5
f=41
k=278
Página 22 de 235
Italo Yaranga Vite
*Implementación del algoritmo en C++.
/*
Diseñar un algortimo en el cual calculae el equivalente en grados Fahrenheit o kelvin de
una temperatura en grados celsius.
*/
//libreria de e/s de datos por consola
#include<iostream.h>
//programa principal
main(){
//declarar variable
double t,f,k;
//entrada de datos
cout<<"Temperatura en Celsius:";cin>>t;
//proceso de datos
k=t+273;
f=(1.8*t)+32;
//salida de datos
cout<<"Temperatura en Fahrenheit:"<<f<<endl;
cout<<"Temperatura en Kelvin:"<<k<<endl;
system("PAUSE");
}//fin de programa
Página 23 de 235
Italo Yaranga Vite
13. Diseñar un algortimo que permita a un alumno desea saber cual será su calificación
final en la materia de Algoritmos. Dicha calificación se compone de los siguientes
porcentajes:
Solución:
*Analisis de datos
e:p1(nota del primer parcial),p2(nota del segundo parcial),
p3(nota del tercer parcial),ef(nota del examen final),
tf(nota del trabajo final)
s:cf(calificacion final)
*Algoritmos
1.-inicio
2.-p1=0.0,p2=0.0,p3=0.0,pp=0.0,ef=0.0,tf=0.0,cf=0.0
3.-leer p1,p2,p3,ef,tf
4.-pp=(p1+p2+p3)/3
cf=0.55*pp+0.3*ef+0.15*tf
5.-escribir cf
6.-fin
*Prueba de Escritorio
p1=18
p2=12
p3=10
ef=14
tf=15
cf=13.78
Página 24 de 235
Italo Yaranga Vite
Página 25 de 235
Italo Yaranga Vite
Solución:
*Análisis de datos
*Algoritmo
1.-inicio
2.-d=0.0,sv=0.0,dv=0.0,v1=0.0,v2=0.0,te=0.0,ta=0.0
3.-leer d,v1,v2
4.-sv=v1+v2
dv=v1-v2
te= d/sv
ta= d/dv
5.-escribir te,ta
6.-fin
*Prueba de Escritorio
d=100
v1=40
v2=20
sv=60
dv=20
te=1.67
ta=5
Página 26 de 235
Italo Yaranga Vite
Página 27 de 235
Italo Yaranga Vite
15. Diseñar un algoritmo que permita conocer los datos estadísticos de una asignatura, por lo
tanto, que lea el número de desaprobados, aprobados y sobresalientes de una asignatura
y devuelva el tanto por ciento de alumnos que pasaron la asignatura y el tanto por ciento
de desaprobados, aprobados y sobresalientes de la asignatura.
Solución:
*Análisis de datos
*Algoritmo
1.-inicio
2.-d=0.0,a=0.0,s=0.0,ta=0.0,pp=0.0,pd=0.0,pa=0.0,ps=0.0
3.-leer d,a,s
4.-ta=d+a+s
pp=(a+s)*100/ta
pd=d*100/ta
pa=a*100/ta
ps=s*100/ta
5.-escribir pp,pd,pa,ps
6.-fin
*Prueba de Escritorio
d=5
a=25
s=10
ta=40
pp=87.5
pd=12.5
pa=62.5
ps=25
Página 28 de 235
Italo Yaranga Vite
*Implementación del algoritmo en C++.
/*
Diseñar un algoritmo que permita conocer los datos estadísticos de una asignatura,
por lo tanto, que lea el número de desaprobados, aprobados y sobresalientes de una
asignatura y devuelva el tanto por ciento de alumnos que pasaron la asignatura y el
tanto por ciento de desaprobados, aprobados y sobresalientes de la asignatura.
*/
//libreria de e/s de datos por consola
#include<iostream.h>
#include<iomanip.h>
//programa principal
main(){
//declarar variables
double d,a,s,ta,pp,pd,pa,ps;//variables tipo real
//entrada de datos
cout<<"Estadisticas de una asignatura:"<<endl;
cout<<"Ingrese cantidad de alumnos desaprobados:";cin>>d;
cout<<"Ingrese cantidad de alumnos aprobados:";cin>>a;
cout<<"Ingrese cantidad de alumnos sobresalientes:";cin>>s;
//proceso de Datos
ta=d+a+s;
pp=(a+s)*100/ta;
pd=d*100/ta;
pa=a*100/ta;
ps=s*100/ta;
//salida de datos
cout<<"El ";
cout<<fixed<<setprecision(2)<<pp<<"% de alumnos ha pasado la asignatura"<<endl;
cout<<"Hay un:";
cout<<fixed<<setprecision(2)<<pd<<"% de alumnos desaprobados"<<endl;
cout<<"Hay un:";
cout<<fixed<<setprecision(2)<<pa<<"% de alumnos aprobados"<<endl;
cout<<"Hay un:";
cout<<fixed<<setprecision(2)<<ps<<"% de alumnos sobresalientes"<<endl;
system("PAUSE");
}//fin de programa
Página 29 de 235
Italo Yaranga Vite
Solución:
*Análisis de datos
E:at(altura),bs(base)
S:hp(hipotenusa),pt(perimetro),ar(area)
*Algoritmo
1.-inicio
2.-hp=0.0,pt=0.0,ar=0.0,at=0,bs=0
3.-leer at,bs
4.- hp=(at^2+bs^2)^(1/2)
pt=hp+at+bs
ar=(bs*at)/2
5.-mostrar hp,pt,ar
6.-fin
*prueba de escritorio
at=3, bs=4
hp=5
pt=12
ar=6
Página 30 de 235
Italo Yaranga Vite
*Implementación del algoritmo en C++.
/*
determinar el valor de la hipotenusa de un triangulo rectángulo aplicando el teorema de
pitagoras. el perimetro y el area que representa conociendo solamente el valor de su catetos
*/
#include<iostream.h>
#include<conio.h>
//proceso principal
int main() {
//declarar las variables
double hp,pt,ar;
int at,bs;
//entrada de datos
cout<<"ingresar la altura del triangulo:";cin>>at;
cout<<"ingresar la base del triangulo";cin>>bs;
//salida de datos
Página 31 de 235
Italo Yaranga Vite
17. Diseñar un algoritmo que permita calcular las funciones trigonométricas básicas como:
seno, coseno y tangente de un ángulo ingresado
Solución:
*Analisis de datos
E:grad
S:seno(seno),coseno(coseno)
*Algoritmo
1.-inicio
2.-grad=0.0,seno=0.0,coseno=0.0
3.-leer grad
4.-sen=sin(grad*pi/180)
cose=cos(grad*pi/180)
tang=tan(grad*pi/180)
5.-escribir sen,cose,tang
6.-fin
*prueba de escritorio
grad=50
seno=0.76604444
coseno=0.64278760
tangente=1.19175359
Página 32 de 235
Italo Yaranga Vite
//proceso de datos
seno=sin(grad*3.14159265/180);
coseno=cos(grad*3.14159265/180);
tangente=tan(grad*3.14159265/180);
//salida de datos
cout<<""<<endl;
cout<<"el seno de "<<grad<<" es="<<seno<<endl;
cout<<"el coseno de "<<grad<<" es="<<coseno<<endl;
cout<<"la tangente de "<<grad<<" es="<<tangente<<endl;
//cout<<"el valor real actual es:"<<vr;
getch();
}//fin de programa
Página 33 de 235
Italo Yaranga Vite
18. Diseñar un algoritmo que digite el radio y la altura de un cilindro y muestre su volúmen,
área lateral y área total.
Solución:
*Analisis de datos
e:r(radio),h(altura)
s:v(volumen),at(area total),al(area lateral)
*Algoritmo
1.- inicio
2.- r=0.0,h=0.0,v=0.0,at=0.0,al=0.0,ab=0.0(area de la base)
3.- leer r,h
4.- ab=3.14*r*r
al=2*3.14*r*h
at=al+2*ab
v=ab*h
5.- escribir al,at,v
6.- fin
*Prueba de Escritorio
r=3
h=5
al=94.2
at=150.72
v=141.3
Página 34 de 235
Italo Yaranga Vite
*Ejecución del programa.
19. Diseñar un algoritmo que digite un número natural de dos cifras y muestre el promedio
de sus cifras.
Solución:
*Analisis de datos
e:n(numero)
s:prom(promedio de cifras)
*Algoritmo
1.- inicio
2.- n=0,Prom=0.0,d=0.0,u=0.0
3.- leer n;
4.- d=n/10
u=n%10
prom=(d+u)/10
5.- escribir prom
6.- fin
*Prueba de Escritorio
n=99
prom=9
Página 35 de 235
Italo Yaranga Vite
system("pause");
}//fin programa
Página 36 de 235
Italo Yaranga Vite
20. Diseñar un algoritmo que dados tres numeros positivos ,calcule la media armonica
(permite medir velocidades).
Solución:
Análisis de datos
e:n1,n2,n3
s:mh(media armoonica)
Algoritmo
1.-inicio
2.-n1=0.0,n2=0.0,n3=0.0,mh=0.0
3.-leer n1,n2,n3
4.-mh=3/(1/n1+1/n2+1/n3)
5.-escribir mh
6.-fin
prueba de escritorio
n1=12
n2=16
n3=11
mh=12.672
}//fin de programa
Página 37 de 235
Italo Yaranga Vite
Página 38 de 235
Italo Yaranga Vite
S SESION 02
Las condiciones nos permiten
Página 39 de 235
Italo Yaranga Vite
SESION 02
ESTRUCTURAS CONDICIONALES
Condición
Promedio >=10.5 ‘aprobado’,’desaprobado’
Estado
<=5 “pesimo”
<=10 “malo”
<=15 "regular"
<=18 “bueno”
<=20 “excelente”
Soluciòn:
*Análisis de datos
E:nt1,nt2,nt3
S:prom(promedio),c(condicion),e(estado),nmy,nmn
*Algoritmo
1.-inicio
2.-nt1=0.0,nt2=0.0,nt3=0.0,
prom=0.0,c='',e='',nmy=0.0,nmn=0.0
3.-leer nt1,nt2,nt3
4.-nmy=nt1
//nota mayor
si nt2>nmy entonces
nmy=nt2
fin de si
si nt3>nmy entonces
nmy=nt3
fin de si
//nota menor
nmn=nt1
si nt2<nmn entonces
nmn=nt2
fin de si
si nt3<nmn entonces
nmn=nt3
fin de si
//condición del alumno
prom=(nt1+nt2+nt3)/3
Página 40 de 235
Italo Yaranga Vite
si prom>=10.5 entonces
c='Aprobado'
sino
c='Desprobado'
fin de si
//estado del alumno
si prom<=5 entonces
e='pesimo'
sino si prom<=10 entonces
e='malo'
sino si prom<=15 entonces
e='regular'
sino si prom<=18 entonces
e='bueno'
sino si prom<=20 entonces
e='excelente'
fin de si
5.-escribir prom,c,e,nmy,nmn
6.-fin
*Prueba de Escritorio
nt1=12.0
nt2=13.0
nt3=15.0
prom=13.333
c='Aprobado'
e='Regular'
nmy=15.0
nmn=12.0
Página 41 de 235
Italo Yaranga Vite
Página 42 de 235
Italo Yaranga Vite
Página 43 de 235
Italo Yaranga Vite
a) Las familias que tienen hasta 2 hijos reciben S/.120, las que tienen entre 3 y 5 hijos
reciben S/.150.00 y las que tienen 6 hijos o más reciben S/.180 mensual.
Determinar el monto mensual que recibirá una familia de acuerdo a su propia realidad
familiar.
Solución:
*Análisis de datos
E:nh(nhijos),nhe(nhjios escolar),ec(estado civil),ss(seguro social)
S:ms(monto mensual)
*Algoritmo
1.-inicio
2.-nh=0,nhe=0,ec='',ss=.f.,ms=0
3.-leer nh,nhe,ec,ss
4.- si nh>0 y nh<=2 entonces
ms=120
sino si nh<=5 entonces
ms=150
sino si nh>=6 entonces
ms=180
fin de si
//verificar el nro hijos en edad escolar
si nhe<=nh entonces
ms=ms + (nhe * 20) //acumulador
fin de si
//verificar el estado civil
si ec='vuida' entonces
ms=ms + 90 //acumulador
sino si ec='casada' entonces
ms=ms + 50 //acumulador
fin de si
//verificar el seguro social
si ss=.f. entonces
ms=ms + 100 //acumulador
fin de si
//salida de datos
5.-escribir 'el monto mensual que recibe la familia es:',ms
6.-fin
Página 44 de 235
Italo Yaranga Vite
*Prueba de Escritorio
nh=4
nhe=2
ec='viuda'
ss=.f.
ms=380
Página 45 de 235
Italo Yaranga Vite
Página 46 de 235
Italo Yaranga Vite
3. Dada la duración en minutos de una llamada teléfonica, mediante un algoritmo; calcular el
costo, considerando:
1.-Hasta tres minutos el costo es 0.50
2.-Por encima de tres minutos es 0.50 más 0.1 por cada minuto adicional a los tres
primeros.
Solución:
*Análisis de datos
E: min(minutos consumidos)
S: costo(costo de llamada)
*Algoritmo
1.-inicio
2.-min=0.0,costo=0.0
3.-leer min
4.-Si (min<=3) entonces
costo=0.50
sino
costo=0.1*(min-3)+0.50
fin de si
5.-escribir costo
6.-fin
*Prueba de escritorio
min=18
costo=2
Página 47 de 235
Italo Yaranga Vite
4. Escribir un algoritmo que lea tres números reales y me diga, si se trata de un triangulo (La
suma de dos lados cualesquiera debe ser mayor que el tercer lado), y que tipo de triangulo
es (Equilátero: todos los lados son iguales, Isósceles: al menos dos lados son
iguales,Escaleno: no tiene dos lados iguales).
Solución:
*Análisis de datos
E: a,b,c (lados del triangulo)
S: m
*Algoritmo
1.- Inicio
2.- a=0.0, b=0.0, c=0.0,m= ' '
3.- leer a,b,c
4.- Si a+b<c o a+c<b o b+c<a entonces
m= 'El triángulo no existe '
Sino
Si a=b y a=c entonces
m= 'El triángulo es equilátero'
Sino
Si a=b o a=c ó b=c entonces
m=‘El triángulo es isosceles‘
Sino
m=‘El triángulo es escaleno‘
Fin de Si
Fin de Si
Fin de Si
5.-escribir m
6.- Fin
*Prueba de escritorio
a=2
b=2
c=3
m= ‘El triángulo es isosceles’
Página 48 de 235
Italo Yaranga Vite
*Implementación del algoritmo en C++.
/*
Escribir un algoritmo que lea tres números reales y me diga, si se trata de un triangulo (La suma
de dos lados cualesquiera debe ser mayor
que el tercer lado), y que tipo de triangulo es (Equilátero: todos los lados son iguales, Isósceles:
al menos dos lados son iguales,
Escaleno: no tiene dos lados iguales).
*/
//libreria de e/s de datos
#include <iostream.h>
//libreria para el getch()
#include <conio.h>
//programa principal
int main(){
//declaración de variables
double a,b,c;
char m[20];
//lectura de datos
cout<<"Ingrese los 3 lados de un triangulo : "<<endl;
cout<<endl<<"Lado 1 : ";cin>>a;
cout<<endl<<"Lado 2 : ";cin>>b;
cout<<endl<<"Lado 3 : ";cin>>c;
cout<<endl;
//proceso de datos
if (a+b<c || a+c<b || b+c<a){//condicion necesaria para la existencia de un triángulo
strcpy(m,"No existe el triángulo con los lados ingresados.");
}else{
if (a==b && a==c){//todos los lados iguales resulta equilátero
strcpy(m,"El triangulo es equilatero.");
}else if (a==b || a==c || b==c){//si dos lados son iguales resulta isósceles
strcpy(m,"El triangulo es isosceles");
}else{//sino, es escaleno
strcpy(m,"El triangulo es escaleno");
}
}//fin del if
//salida de datos
cout<<m<<endl;
getch();
}//fin del main
Página 49 de 235
Italo Yaranga Vite
5. En una llantera se ha establecido una promoción de las llantas marca "Ponchadas", dicha
promoción consiste en lo siguiente: Si se compran menos de cinco llantas el precio es de
$300 cada una, de $250 si se compran de cinco a 10 y de $200 si se compran mas de 10.
Obtener la cantidad de dinero que una persona tiene que pagar por cada una de las llantas
que compra y la que tiene que pagar por el total de la compra,así como el monto que paga
y el vuelto si lo hubiera.
Solución:
*Análisis de datos
e:u(comprador),c(cantidad de llantas),mp(monto a pagar)
s:pu(Precio por llanta),pt(Costo total por llantas),v(Vuelto)
*Algoritmo
1.-inicio
2.-u='',c=0,mp=0.0,v=0.0,pu=0.0,pt=0.0
3.-leer u,c,mp
4.-//proceso de datos
si c<5 entonces//menos de 5 llantas
pu = 300
sino
si c>=5 y c<10 entonces//entre 5 y 10 llantas
pu = 250
sino//mas de 10 llantas
pu = 200
fin de si
fin de si
pt = pu*c
5.-//salida de datos: costo x llanta y el costo total
escribir 'Costo por cada llanta : ',pu
escribir 'Costo total de las llantas:',pt
//segunda lectura de datos : pago de las llantas
leer mp//monto a pagar por las llantas
si mp<pt entonces
cescribir 'El pago no es suficiente. No se realiza la venta'
sino
v = mp-pt
salida final de datos
escribir u,pu,c,pt,mp,v
fin sde si
6.-fin
*Prueba de escritorio
u='juan perez'
c=4
mp=1500
pt=1200
v=3000
Página 50 de 235
Italo Yaranga Vite
*Implementación del algoritmo en C++.
/*
En una llantera se ha establecido una promoción de las llantas marca "Ponchadas", dicha
promoción consiste en lo siguiente: Si se compran
menos de cinco llantas el precio es de $300 cada una, de $250 si se compran de cinco a 10 y de
$200 si se compran mas de 10. Obtener la
cantidad de dinero que una persona tiene que pagar por cada una de las llantas que compra y la
que tiene que pagar por el total de la compra,
así como el monto que paga y el vuelto si lo hubiera.
*/
//libreria para e/s de datos por consola
#include <iostream.h>
//libreria para el getch()
#include <conio.h>
//máximo número de caracteres para el nombre del comprador
#define MAX 30
main(){
//declaracion de variables
char u[MAX];
int c,pu,pt;
double mp,v;
cout<<"\t\tLlantas Ponchadas"<<endl<<endl;
//lectura de datos
cout<<"Ingrese el nombre del comprador : ";cin.getline(u,MAX);
cout<<endl<<"Ingrese la cantidad de llantas : ";cin>>c;
cout<<endl;
//proceso de datos
if (c<5)//menos de 5 llantas
pu = 300;
else{
if (c>=5 && c<10)//entre 5 y 10 llantas
pu = 250;
else//mas de 10 llantas
pu = 200;
}
pt = pu*c;
//salida de datos: costo x llanta y el costo total
cout<<endl<<"Costo por cada llanta : "<<pu;
cout<<endl<<"Costo total de las llantas : "<<pt<<endl;
//segunda lectura de datos : pago de las llantas
cout<<endl<<"Ingrese el monto a pagar : ";cin>>mp;//monto a pagar por las llantas
if (mp<pt)
cout<<"El pago no es suficiente. No se realiza la venta.";
else{
v = mp-pt;
//salida final de datos
cout<<"El cliente de nombre "<<u<<" ha realizado la compra que consiste en : "<<endl;
cout<<endl<<"- Precio por llanta : S/"<<pu;
cout<<endl<<"- Cantidad de llantas : "<<c;
cout<<endl<<"- Pago total : S/"<<pt;
cout<<endl<<"- Monto pagado : S/"<<mp;
cout<<endl<<"- Vuelto : S/"<<v;
}
getch();
}
Página 51 de 235
Italo Yaranga Vite
Página 52 de 235
Italo Yaranga Vite
6. Construir un programa que calcule el índice de masa corporal de una persona (IMC = peso
[kg] /altura[m]) e indique el estado en el que se encuentra esa persona en función del valor
de IMC:
Valor de IMC
<16 "ingrese al hospital"
16 a 17 "infrapeso"
17 a 18 "bajo peso"
18 a 25 "peso normal(saludable)"
25 a 30 "sobrepeso(obesidad de gradoI)"
30 a 35 "sobrepeso crónico(obesidad de grado II)"
35 a 40 "obesidad premorbida(obesidad de grado III)"
>40 "obesidad morbica(obesidad de grado IV)"
*ESTADO
<16 "ingrese al hospital"
<17 "infrapeso"
<18 "bajo peso"
<26 "peso normal(saludable)"
<30 "sobrepeso(obesidad de gradoI)"
<35 "sobrepeso crónico(obesidad de grado II)"
<40 "obesidad premorbida(obesidad de grado III))"
>40 "obesidad morbica(obesidad de grado IV)"
Solución:
*Analisis de datos
E:p(peso),t(talla)
S:e(estado);
*Algoritmo
1.-inicio
2.-p=0.0,t=0.0,imc=0.0;
3.-leer p,t ;
4.-imc=p*1/t*1/t
//ingrese al hospital
si imc<16 entonces
e='ingrese hospital'
sino si imc<17 entonces
e= 'infrapeso'
sino si imc<18 entonces
e= 'bajopeso'
sino si imc<26 entonces
e= 'pesonormal'
sino si imc<30 entonces
e= 'sobrepeso(obesidad de gradoI)'
sino si imc<35 entonces
e= 'sobrepeso crónico(obesidad de grado II)'
sino si imc<40 entonces
e= "obesidad premorbida(obesidad de grado III))'
sino si imc=40 entonces
e='obesidad morbica(obesidad de grado IV)'
fin de si
5.-escribir e
6.-fin
Página 53 de 235
Italo Yaranga Vite
*PRUEBA DE ESCRITORIO
p=60
t=1.60
imc=23,4375
PN=PESO NORMAL
#include<iostream.h>
main(){
char e[30];
double p,t,imc;;
//entrada de datos
cout<<"calcule su peso"<<endl;
cout<<"peso en kg:";cin>>p;
cout<<"talla en metros:";cin>>t;
//proceso de datos
imc=p*1/t*1/t;
//proceso de datos
if(imc<16){
strcpy(e,"Reuiere Atencion Medica:");
}else if (imc<17){
strcpy(e,"usted tiene infrapeso:");
}else if (imc<18){
strcpy(e,"usted tiene bajo peso");
}else if (imc<26){
strcpy(e,"usted tiene un peso normal(saludable)");
}else if (imc<30){
strcpy(e,"usted tiene sobrepeso(obesidad de gradoI)");
}else if (imc<35){
strcpy(e,"usted tiene sobrepeso crónico(obesidad de grado II)");
}else if (imc<40){
strcpy(e,"usted tiene obesidad premorbida(obesidad de grado III)");
}else if (imc>=40){
strcpy(e,"usted tiene obesidad morbica(obesidad de grado IV)");
}
cout<<endl;
//salaida de datos
cout<<"Los resultados son:"<<e<<endl;
system("PAUSE");
}//fin de programa
Página 54 de 235
Italo Yaranga Vite
7. Una empresa de bienes raíces ofrece casas de interés social, bajo las siguientes
condiciones: Si los ingresos del comprador son menores de $8000, el enganche será del
15% del costo de la casa y el resto se distribuirá en pagos mensuales, a pagar en diez años.
Si los ingresos del comprador son de $8000 o mas, el enganche será del 30% del costo de
la casa y el resto se distribuirá en pagos mensuales a pagar en 7 años. La empresa quiere
obtener cuanto debe pagar un comprador por concepto de enganche y cuanto por cada
pago parcial
Solución:
*Analisis de datos:
E:ingresos del comprador(ing),costo de la casa(costoc)
S:enganche(eng),pago mensual(pagmen)
*Algoritmo
1.-inicio
2.-ing=0.0,costoc=0,eng=0.0,pagmen=0.0
3.-leer ing,costoc
4.-//enganche y pago mensual
si (ing>=8000) entonces
eng=costoc*0.15
pagmen=0.85*costoc/120
sino
eng=costoc*0.30
pagmen=0.70*costoc/84
fin de si
5.-escribir eng,pagmen
6.-fin
*Prueba de escritorio:
ing=8500
costoc=52500
eng=15750
pagmen=437.5
Página 55 de 235
Italo Yaranga Vite
}//fin de programa
Página 56 de 235
Italo Yaranga Vite
8. Disenar un algoritmo permita ingresar 3 numeros enteros positivos y que determine cual de
ellos es el mayor cual es el menor y cual es el medio.
Solución:
*Análisis de datos
E:n1,n2,n3
S:my,mr,md
*Algoritmo
1.-inicio
2.-n1=0,n2=0,n3=0,my=0,mr=0,md=0
3.-escribir n1,n2,n3
4.- //mayor
my=n1
si n2>my entences
my=n2
fin de si
si n3>my entonces
my=n3
//menor
mr=n1
si n2<mr entences
mr=n2
fin de si
si n3<mr entonces
mr=n3
fin si
md=(n1+n2+n3)-(my+mr)
5.-escribir my,mr,md
6.-fin
*prueba de escritorio
n1=12
n2=9
n3=15
my=15
mr=9
md=12
Página 57 de 235
Italo Yaranga Vite
Página 58 de 235
Italo Yaranga Vite
9. Un supermercado ha puesto en oferta la venta al por mayor de cierto producto,
ofreciendo un descuento del 15% por la compra de más de 3 docenas y 10% en caso
contrario. Además por la compra de más de 3 docenas se obsequia una unidad del
producto por cada docena en exceso sobre 3. Diseñe un algoritmo que determine el
monto de la compra, el monto del descuento, el monto a pagar y el número de unidades
de obsequio por la compra de cierta cantidad de docenas del producto.
Solución:
*Análisis de datos
E: cantdocenas, precio
S: montcompra, montdesc,montpagar, cantuniobs
*Algoritmos
1.- inicio
2.- cantdocenas=0, precio=0.0, montcompra=0.0, montpagar=0.0, cantuniobs=0
3.- leer cantdocenas, precio
4.- montcompra=precio * cantdocenas
si (cantdocenas>3) entonces
montdesc=0.15 * montcompra
cantuniobs=cantdocenas/3
fin de si
si no entonces
montdesc=0.10 * montcompra
cantuniobs=0
fin de si no
5.- montpagar=montcompra-montdesc
6.-imprimir montcompra,montodesc,montpagar,cantuniobs
7.-fin
*Prueba de Escritorio
Ingresar la cantidad de docenas:5
Ingresar el precio por docena:2
---------------------------------
El monto de compra es:10
El monto de descuento es:1.5
El monto a pagar es:8.5
Las unidades de obsequio son:1
Página 59 de 235
Italo Yaranga Vite
Página 60 de 235
Italo Yaranga Vite
10. El promedio de prácticas de un curso se calcula en base a cuatro prácticas calificadas de
las cuales se elimina la nota menor y se promedian las tres notas más altas. Diseñe un
algoritmo que determine la nota eliminada y el promedio de prácticas de un estudiante.
Solución:
*Análisis de datos
E: nota1,nota2,nota3,nota4
S: notaelim,promedio
*Algoritmos
1.-inicio
2.- nota1=0.0, nota2=0.0, nota3=0.0, nota4=0.0, notaelim=0.0, promedio=0.0,notamenor=0.0
3.- leer nota1,nota2,nota3,nota4
4.- notamenor=nota1
si nota2<notamenor entonces
notamenor=nota2
fin de si
si nota3<notamenor entonces
notamenor=nota3
fin de si
si nota4<notamenor entonces
notamenor=nota4
fin de si
promedio=(nota1 + nota2 + nota3 + nota4 - notamenor)/3
5.- imprimir notamenor, promedio
6.-fin
*Prueba de Escritorio
Ingresar nota1:12
Ingresar nota2:14
Ingresar nota3:16
Ingresar nota4:10
----------------
La nota menor es:10
El promedio es:14
Página 61 de 235
Italo Yaranga Vite
Página 62 de 235
Italo Yaranga Vite
S SESION 03
Selectivas permiten evaluar
Página 63 de 235
Italo Yaranga Vite
SESION 03
ESTRUCTURAS SELECTIVAS
1. Diseñar un algoritmo que permita enseñar a utilizar las cuatro operaciones Aritméticas
básicas, mediante dos números ingresado. El algoritmo pregunta la operación aritmética y
respuesta a los alumnos de primer grado, Si la respuesta es correcta se le emite un mensaje
de "felicitaciones" caso contrario "Respuesta incorrecta".
Solución:
*Análisis de datos
E:n1,n2,opa,rpta
S:m(mensaje)
*Algoritmo
1.-inicio
2.-n1=0.0,n2=0.0,opa=' ',rpta=0.0,r=0.0,m=' '
3.-leer n1,n2,opa,rpta
4.-segun sea opa
caso '+'
r=n1+n2
caso '-'
r=n1-n2
caso '*'
r=n1*n2
caso '/'
r=n1/n2
fin de segun
si r=rpta entonces
m='Felicitaciones'
sino
m='Respuesta Incorrecta'
fin de si
5.-escribir m
6.-fin
*Prueba de Escritorio
n1=4
n2=2
opa='*'
rpta=8
m='Felicitaciones'
Página 64 de 235
Italo Yaranga Vite
*Implementación del algoritmo en C++.
Página 65 de 235
Italo Yaranga Vite
Página 66 de 235
Italo Yaranga Vite
2. Diseñar un algoritmo que permita determinar el nombre del mes del año y la estación del
año, mediante un número ingresado.
Solución:
*Análisis de datos
E:n(número)
S:m(mes),e(estación)
*Algoritmo
1.-inicio
2.-n=0,m='',e=''
3.-leer n
4.-si n>0 y n<=12 entonces
según sea n
caso 1:m='enero'
caso 2:m='febrero'
caso 3:m='marzo'
caso 4:m='abril'
caso 5:m='mayo'
caso 6:m='junio'
caso 7:m='julio'
caso 8:m='agosto'
caso 9:m='setiembre'
caso 10:m='octubre'
caso 11:m='noviembre'
caso 12:m='diciembre'
fin de según
según sea n
caso 1,2,3
e='verano'
caso 4,5,6
e='otoño'
caso 7,8,9
e='invierno'
caso 10,11,12
e='primavera'
fin de según
sino
m='Número Incorrecto'
fin de si
5.-escribir m,e
6.-fin
*Prueba de escritorio
n=5
m='mayo'
e='otoño'
Página 67 de 235
Italo Yaranga Vite
Página 68 de 235
Italo Yaranga Vite
case 12:
strcpy(m,"diciembre");
break;
}
switch(n){
case 1:
case 2:
case 3:
strcpy(e,"verano");
break;
case 4:
case 5:
case 6:
strcpy(e,"otoño");
break;
case 7:
case 8:
case 9:
strcpy(e,"invierno");
break;
case 10:
case 11:
case 12:
strcpy(e,"primavera");
break;
}//fin de switch
//salida de datos
cout<<"El mes del año es:"<<m<<endl;
cout<<"La estación del año:"<<e<<endl;
getch();//permite leer un carácter del teclado
}//fin de procedimiento
Página 69 de 235
Italo Yaranga Vite
NIVEL SOCIAL
COLEGIO A B C
Nacional 300 200 100
Particular 400 300 200
Solución:
*Análisis de datos
E:c(colegio)
E:n(nivel)
S:mp(monto a pagar)
*Algoritmo
1.-inicio
2.- c='', n='', mp=0
3.-leer c, n
4.- //proceso
segun sea c
caso'N'
caso 'A'
mp=300
caso 'B'
mp=200
caso 'C'
mp=100
Fin caso
caso'P'
caso 'A'
mp=400
caso 'B'
mp=300
caso 'C'
mp=200
fin de caso
fin caso
//salida de datos
5.-escribir mp
6.-Fin
*Prueba de escritorio
Colegio=’P’
Nivel= ‘B’
mp= 300
Página 70 de 235
Italo Yaranga Vite
*Implementación del algoritmo en C++.
Página 71 de 235
Italo Yaranga Vite
Página 72 de 235
Italo Yaranga Vite
4. Una empresa de carga brinda servicio a todo el continente americano,la tarifa que cobra por
cada tonelada se muestra en el siguiente cuadro: destinos ($/toneladas).
Solución:
*Análiis de datos
E: mt,dest,peso,tipcarga.
S:pagotot
*Algoritmo
1.-inicio
2.-mt=0,dest=0,tipcarga,peso=0.0,pago=0.0,incre=0.0,pagotot=0.0
3.-leer mt,dest,peso,tipcarga.
4.-segun sea (mt)
caso 1: segun sea(dest)
caso 1:pago=30*peso;
caso 2:pago=25*peso;
caso 3:pago=20*peso:
fin segun sea
caso2:
segun sea (dest)
caso 1:pago=17*peso;
caso 2:pago=19*peso;
caso 3:pago=15*peso;
fin segun sea
caso3:
segun sea (dest)
caso 1:pago=14*peso;
caso 2:pago=10*peso;
caso 3:pago=12*peso;
fin segun sea
fin segun sea
si tipcarga=1 entonces
incre=0.07*pago
sino si tipcarga=2 entonces
incre=0
fin de si
pagotot=pago+incre
5.-escribir pagotot
6.-fin
*Prueba de escritorio
mt=1
dest=1
tipcarga=1
peso=50
pagotot=1605
Página 73 de 235
Italo Yaranga Vite
# include <iostream.h>
//programa principal
main(){
//declaracion de variables
int mt,dest,tipcarga;
double peso,pago,incre,pagotot;
// entrada de datos
cout<<"ingrese medio de transporte aereo=1,maritimo=2,terrestre=3:";cin>>mt;
cout<<"ingresar el destino norte=1,sur=2,centro=3:";cin>>dest;
cout<<"ingresar carga perecible=1 y no perecible=2:";cin>>tipcarga;
cout<<"ingresar poso de la carga:";cin>>peso;
// proceso de datos
switch (mt){
case 1:
switch(dest){
case 1:pago=30*peso;break;
case 2:pago=25*peso;break;
case 3:pago=20*peso;break;
}
break;
case 2:
switch (dest){
case 1:pago=17*peso;break;
case 2:pago=19*peso;break;
case 3:pago=15*peso;break;
}
break;
case 3:
switch (dest){
case 1:pago=14*peso;break;
case 2:pago=10*peso;break;
case 3:pago=12*peso;break;
}
break;
}
//verificación de la carga
if(tipcarga==1){
incre=0.07*pago;
}else if(tipcarga==2){
incre=0;
}
pagotot=pago+incre;
// salida de datos
cout<<"el pago a realizar es:"<<pagotot<<endl;
system("PAUSE");
}
Página 74 de 235
Italo Yaranga Vite
*Ejecución del programa.
Página 75 de 235
Italo Yaranga Vite
5. Un banco realiza el pago de intereses a sus clientes por un deposito a plazo fijo de
acuerdo al siguiente informacion tipo de moneda tiempo de deposito y monto depositado
los intereses seran segun el siguiente cuadro:
Solución:
*Análisis de datos
E:d(dinero),mes,mon
S:inte,total
*Algoritmo
1.-inicio
2.-mes=0,mon=0,d=0.0,inte=0.0,total=0.0
3.leer d(dinero),mes,mon
4.-segun sea (mon)
caso 1:
si mes>0 y mes<=5 entonces
inte=0
sino si mes>6 y mes<=12 entonces
inte=d*0.06
sino
inte=d*0.09
fin de si
caso 2:
si mes>0 y mes<=5 entonces
inte=0
sino si mes>=6 y mes<=12 entonces
inte=d*0.04
sino
inte=d*0.07
fin de si
fin segun sea
5.-total=d+inte
6.-escribir inte,total
7.-fin
*prueba de escritorio
d=8500
mes=12
mon=2(dolares)
inte=340
total=8840
Página 76 de 235
Italo Yaranga Vite
*Implementación del algoritmo en C++.
Página 77 de 235
Italo Yaranga Vite
Página 78 de 235
Italo Yaranga Vite
6. Una libreria tiene dos tipos de clientes: estudiantes (E) y publico en general (P).Ademas
ofrece dos tipos de pago:contado(C) y plazos(P).Se pide escribir un programa que pida el
ingreso de:El nombre del cliente,el tipo de cliente,la forma de pago y el monto de pago.
Dependiendo del tipo de pago va a existir un descuento tal como se muestra en el siguiente
cuadro.
*Analisis de datos
E:n,tc,tp,mp;
S:mpt
*Algoritmos
1.-Inicio
2.-so=0,mpt=0.0,md=0.0,mr=0.0,n[20]='',tc,tp
3.-leer n,tc,tp,mp
4.-segun sea(tc)
caso 'E':
segun sea (tp)
caso 'C':
md=0.1*mp
caso 'P':
md=0.05*mp
fin de segun
caso 'G':
segun sea (tp)
caso 'E':
md =0.05*mp
caso 'P':
md =0.15*mp
fin de segun
mpt=(mp-md)+mp
5.-escribir mpt
6.-Fin
*Prueba de escritorio
nombre=juan’
tip cliente=’E’
forma de pago=’C’
monto del pago=200
descuento=20
monto total apagar =180
Página 79 de 235
Italo Yaranga Vite
main(){
int mp;
double mpt,md,mr;
char n[20];
char tc;
char tp;
//entrasda de datos
cout<<"Ingrese el nombre del cliente:";cin>>n;
cout<<"Ingrese el tipo de cliente[E,P]:";cin>>tc;
cout<<"Ingrese la forma de pago [C,P]:";cin>>tp;
cout<<"ingrese el monto del pago:";cin>>mp;
//proceso de datos
switch(tp){
case 'C':
switch(tc){
case 'E':
md=0.1*mp;
break;
case 'P':
md=0.05*mp;
break;
}
case 'l':
switch (tc){
case 'E':
md=0.05*mp;
break;
case 'P':
md=0.15*mp;
break;
}
}
mpt=(mp-md)+mr;
//salida de datos
cout<<"presenta monto pagado:"<<mp<<endl;
cout<<"presenta un descuento de:"<<md<<endl;
cout<<"el monto total apagar es:"<<mpt<<endl;
system("PAUSE");
}
Página 80 de 235
Italo Yaranga Vite
*Ejecución del programa.
Página 81 de 235
Italo Yaranga Vite
7. Diseñe un algoritmo que permita analizar la validez de una fecha, considere que el año
válido sea mayo a 1800.
Solución:
*Analisis de datos
E:dd(dia),mm(mes),aa(año)
S:m(mensaje)
*Algoritmo
1. inicio
2. dd=0,mm=0,aa=0, ndias=0,m='' //variable ndias almacena el número de días que tiene el mes.
3. leer dd,mm,aa
4. En caso de mm
caso1:ndias=31
caso2:
si(aa mod 4=0 y aa mod 400=0) o (aa mod 400=0) entonces
ndias=29
sino
ndias=28
fin de si
caso3: ndias=31
caso4: ndias=30
caso5: ndias=31
caso6: ndias=30
caso7: ndias=31
caso8: ndias=31
caso9: ndias=30
caso10: ndias=31
caso11: ndias=30
caso12: ndias=31
fin de caso
si aa>1800 y (mm>0 y mm<=12) y (dd>0 y dd<=ndias)
m='fecha valida'
sino
m='fecha no valida'
fin de si
5.fin
*prueba de escritorio
dia=11
mes=7
año=1856
m='fecha valida'
Página 82 de 235
Italo Yaranga Vite
*Implementación del algoritmo en C++.
Página 83 de 235
Italo Yaranga Vite
Página 84 de 235
Italo Yaranga Vite
8. Construir un programa que permita simular el juego en un hipódromo. La idea es mostrar
una lista de 6 caballos:
1.Rocinante
2.Trueno
3.Comanche
4.Gitana
5.Sombra
6.Savage
Se debe elegir ingresando el número del caballo. Luego el sistema simula la carrera y muestra
al final el caballo que gano (con un numero al azar).
Si el número elegido coincide con el numero ganador se muestra el mensaje de ganaste. Sino
el mensaje de perdedor.
Solución:
*Análisis de datos
E:num(numero de caballo)
S:nc(nombre de caballo),mensaje
*Algoritmo
1.-inicio
2.-nc='',mensaje='',num=0,numg=0
3.-escribir ‘1.Rocinante’
‘2.Trueno’
‘3.Comanche’
‘4.Gitana’
‘5.Sombra’
‘6.Savage’
4.-leer num
5.-numg=aleatorio() //genera numero aleatorio
segun sea numg
caso 1:
nc='Rocinante'
caso 2:
nc='Trueno'
caso 3:
nc='Comanche'
caso 4:
nc='Gitana'
caso 5:
nc='Sombra'
caso 6:
nc='Savage'
fin segun sea
si num=numg entonces
mensaje='ganaste'
sino
mensaje='perdedor'
fin de si
6.-escribir nc,mensaje
7.-fin
*Prueba de escritorio
num=3
nc='Comache'
mensaje='ganaste'
Página 85 de 235
Italo Yaranga Vite
#include <iostream.h>
#include <conio.h>
#include <math.h>
#include <time.h>
//procedimiento principal
int main(){
char nc[20],mensaje[20];
int num,numg;
cout<<"Carrera de Caballos"<<endl;
cout<<"1.Rocinante"<<endl;
cout<<"2.Trueno"<<endl;
cout<<"3.Comanche"<<endl;
cout<<"4.Gitana"<<endl;
cout<<"5.Sombra"<<endl;
cout<<"6.Savage"<<endl;
cout<<"Ingrese el numero del caballo:";cin>>num;
srand(time(NULL)); //se cambia la semilla del numero al azar basado en la hora
numg=1 + rand() % 6;
switch(numg){
case 1:
strcpy(nc,"Rocinante");break;
case 2:
strcpy(nc,"Trueno");break;
case 3:
strcpy(nc,"Comache");break;
case 4:
strcpy(nc,"Gitana");break;
case 5:
strcpy(nc,"Sombra");break;
case 6:
strcpy(nc,"Savage");break;
}
if(num==numg){
strcpy(mensaje,"ganaste");
}
else{
strcpy(mensaje,"perdedor");
}
cout<<"Caballo ganador:"<<nc<<endl;
cout<<"Resultado:"<<mensaje<<endl;
getch();
}
Página 86 de 235
Italo Yaranga Vite
*Ejecución del programa.
*Algoritmo
1.-inicio
2.-c=0,s=0.0,ns=0.0,m=''
3.-leer c,s
4.- segun sea
caso 1:
m='primera categoria'
ns=s+0.15*s
caso 2:
m='segunda categoria'
ns=s+0.10*s
caso 3:
m='tercera categoria'
ns=s+0.08*s
caso 4:
m='cuarta categoria'
ns=s+0.07*s
otro caso
m='no existe esa categoria'
fin de segun
5.-escribir ns,m
6.-fin
*Prueba de Escritorio
c=1
s=5000
ns=5750
m='primera categoria'
Página 87 de 235
Italo Yaranga Vite
#include <iostream.h>
main(){
int c;
double s,ns;
char m[20];
case 1:
strcpy(m,"primera categoria");
ns=s+s*0.15;
break;
case 2:
strcpy(m,"segunda categoria");
ns=s+s*0.10;
break;
case 3:
strcpy(m,"tercera categoria");
ns=s+s*0.08;
break;
case 4:
strcpy(m,"cuarta categoria");
ns=s+s*0.07;
break;
default:
strcpy(m,"Ingreso mal la categoria");
break;
}
cout<<"Tu nuevo sueldo es: "<<ns<<endl;
cout<<"pertenece a la "<<m<<endl;
system("PAUSE");
}
Página 88 de 235
Italo Yaranga Vite
Página 89 de 235
Italo Yaranga Vite
Solución:
*Análisis de datos
E:ne
S:nr
*Algoritmo
1.-inicio
2.-ne=0,nr="
3.-leer ne
4.-segun sea ne
caso '1'
nr=I
caso '2'
nr=II
caso '3'
nr=III
caso '4'
nr=IV
caso '5'
nr=V
caso '6'
nr=VI
caso '7'
nr=VII
caso '8'
nr=VIII
caso '9'
nr=IX
caso '10'
nr=X
fin de según
5.-escribir nr
6.-fin
*prueba de escritorio
ne=5
nr=v
Página 90 de 235
Italo Yaranga Vite
#include<iostream.h>
#include<conio.h>
//procedimiento principal
int main() {
//declara variables
int ne;
char nr[20];
//entrada de datos
cout<<"ingresar numero entero :";cin>>ne;
//proceso de datos
switch(ne){
case 1:
strcpy(nr,"I");
break;
case 2:
strcpy(nr,"II");
break;
case 3:
strcpy(nr,"III");
break;
case 4:
strcpy(nr,"IV");
break;
case 5:
strcpy(nr,"V");
break;
case 6:
strcpy(nr,"VI");
break;
case 7:
strcpy(nr,"VII");
break;
case 8:
strcpy(nr,"VIII");
break;
case 9:
strcpy(nr,"IX");
break;
case 10:
strcpy(nr,"X");
break;
}//fin de switch
//salida de datos
cout<<"el numero romano es:"<<nr;
getch();//permite leer un caracter del teclado
}//fin de procedimiento
Página 91 de 235
Italo Yaranga Vite
Página 92 de 235
Italo Yaranga Vite
S SESION 04
Para o desde permite generear
un ciclo de repetiticiones
mediante valores definidos.
SESION 04
Página 93 de 235
Italo Yaranga Vite
1. Diseñar un algoritmo que permita generar una tabla de multiplicar mediante un número
ingresado. Visualizar la suma de los resaultados.
Solución:
*Análisis de datos
E: n (número)
S: resultados,sr(suma de resultados)
*Algoritmo
1.-inicio
2.-n=0,r=0,i=0
3.-leer n
4.-para i=1 hasta 12
r=n * i
sr=sr + r
escribir n,'*',i,'=',r
fin de para
5.-escribir sr
6.-fin
*Prueba de escritorio
n=5
5 * 1 =5
5 * 2 =10
5 * 11=55
.
.
5 * 12=60
La suma de los reusltados son:390
Página 94 de 235
Italo Yaranga Vite
/*
Ejercicio1:
Diseñar un algoritmo que permita generar una tabla de multiplicar mediante un
número ingresado.
*/
//libreria de e/s de datos por consola
#include <iostream.h>
#include <conio.h>
#include <stdlib.h>
//procedimiento principal
int main(){
//declarar variables
int n,r,i,sr=0;
//entrada de datos
cout<<"Ingresar Número:";cin>>n;
//proceso de datos
for(i=1;i<=12;i++){
r=n * i;
sr=sr+r;
//salida de datos
cout<<n<<"*"<<i<<"="<<r<<endl;
}//fin de for
//salida de datos
cout<<"La suma de los resultados es:"<<sr<<endl;
system("PAUSE");
}//fin de programa
Página 95 de 235
Italo Yaranga Vite
2. Diseñar un algoritmo que permita al final de un curso saber cuál ha sido el alumno de
primer grado con mejor promedio. Se sabe que este año entraron 3 y que en primer
grado tiene tres asignaturas. Visualizar el nombre del alumno con su promedio mayor.
Solución:
*Análisis de datos
E: nombre, asignatura
S: xnom, xpmayor
*Algoritmo
1.-Inicio
2.-nombre='', asignatura=0.0, xnom='', promedio=0.0, i=0, j=0, sn=0.0, xpmayor=0.0
3.-Para i=1 hasta 3 //alumno
leer nombre
para j=1 hasta 3 //notas
leer asignatura
sn=sn + asignatura
fin de para
promedio=sn/3
si promedio>xpmayor entonces
xnom=nombre
xpmayor=promedio
fin de si
promedio=0.0
sn=0.0
fin de para
4.-Escribir xnom,xpmayor
5.-Fin
*Prueba de escritorio
Alumno1:'juan'
as1=12
as2=13
as1=14
promedio =13
Alumno2:'jose'
as1=10
as2=12
as1=14
promedio =12
Alumno3:'julio'
as1=14
as2=16
as1=13
promedio =14.3
---------------
Alumno ='julio'
Promedio =14.3
Página 96 de 235
Italo Yaranga Vite
*Implementación del algoritmo C++.
/*
Diseñar un algoritmo que permita al final de un curso saber cuál ha sido el alumno de
primer grado con mejor promedio. Se sabe que este año entraron 3 y que en primer
grado tiene tres asignaturas. Visualizar el nombre del alumno con su promedio mayor.
*/
//librerias de entrada y salida de datos por consola
#include <iostream.h>
#include <conio.h>
#include <iomanip.h>
//procedimiento principal
int main(){
//declarar variables
int n,i,j;
char nombre[50];
char xnom[50];
double asignatura,promedio,sn,xpmayor;
//proceso de datos
for(i=1;i<=3;i++){ //alumno
//entrada de datos
cout<<"Ingresar nombre del alumno:";cin>>nombre;
for(j=1;j<=3;j++){ //notas
cout<<"Ingresar Asignatura:";cin>>asignatura;
sn=sn + asignatura;
}//fin for
promedio=sn/3;
if(promedio>xpmayor){
strcpy(xnom,nombre);
xpmayor=promedio;
}
sn=0.0;
cout<<"Su promedio es:";
cout<<fixed<<setprecision(2)<<promedio<<endl;
cout<<""<<endl;
}//fin for
//salida de datos
cout<<"Alumno:"<<xnom<<endl;
cout<<"El promedio mayor es:";
cout<<fixed<<setprecision(2)<<xpmayor;
getch();//permite leer un carácter del teclado
}//fin de procedimiento
Página 97 de 235
Italo Yaranga Vite
3. Diseñar un algoritmo que permita determinar el promedio, suma de los números pares y
la cantidad de números impares que se encuentran en los diez primeros números.
Solución:
*Análisis de datos
E:
S:p(promedio),sp(suma de pares),ci(cantidad de impares),sn=0
*Algoritmo
1.-inicio
2.-p=0.0,sp=0,ci=0,i=0,r=0
3.-para i=1 hasta 10
sn=sn + i
r=residuo(i/2)
si r=0 entonces
sp=sp + i //acumulador
sino
ci=ci + 1 //contador
fin de si
fin de para
p=sn/10
4.-escribir p,sp,ci
5.-fin
*Prueba de Escritorio
1-2-3-4-5-6-7-8-9-10
p=5.5
sp=30
ci=5
Página 98 de 235
Italo Yaranga Vite
*Implementación del algoritmo C++.
/*
Diseñar un algoritmo que permita determinar el promedio,
suma de los números pares y la cantidad de números impares
que se encuentran en los diez primeros números.
*/
//librerias de entrada y salida de datos por consola
#include <iostream.h>
#include <conio.h>
#include <iomanip.h>
//procedimiento principal
int main(){
//declarar variables
int sn,i,r,sp=0,ci=0;
double p;
//proceso de datos
for(i=1;i<=10;i++){
sn=sn+i;
r=i%2;
if(r==0){
sp=sp+i; //acumulador
}else{
ci=ci+1; //contador
}//fin if
}//fin for
p=sn/10;
//salida de datos
cout<<"El promedio es:"<<p<<endl;
cout<<fixed<<setprecision(2);
cout<<"La suma de n pares es:"<<sp<<endl;
cout<<"La cantidad de n impares es:"<<ci<<endl;
getch();//permite leer un caracter del teclado
}//fin de procedimiento
Página 99 de 235
Italo Yaranga Vite
4. Diseñe un algoritmo que permita hallar los divisores de un número ingresado. Además,
que se muestre la suma de los divisores y se informe si es un número primo y si es un
número perfecto (un número perfecto es aquel que es igual a la mitad de la suma de
todos sus divisores).
Solución:
*Análisis de datos
E: n(número)
S: lista de números primos, suma, primo, perfecto
*Algoritmo
1.- Inicio
2.- n=0, i=0, suma=0
3.- leer n
4.- Para i=1 hasta n
Si residuo(n,i)=0 entonces
escribir i
suma = suma + i
Fin de Si
Fin de Para
escribir suma
Si suma=n+1 entonces
escribir n,' es un número primo'
Sino
escribir n,' no es un número primo'
Fin de Si
Si division(suma,2)=n entonces
escribir n,' es un número perfecto'
Sino
escribir n,' no es un número perfecto'
Fin de Si
5.- Fin
*Prueba de escritorio
n=28
divisores: 1 2 4 7 14 28
suma = 56
´No es un número primo´
'Es un número perfecto´
Solución:
*Analisis de datos
E: n(valor de la base del triangulo)
S: *
*Algoritmo
1. inicio
2. n=0,i=0,j=0
3. Leer n
4. Para i desde 0 hasta n inc de 1 en 1
para j desde 0 hasta i+1 inc de 1 en 1
escribir '*'
fin para
escribir ' '
Fin para
5. fin
*Prueba de escritorio
n=3
*
**
***
//Librerias de cabecera
#include<iostream.h>
#include<conio.h>
//Procedimiento principal
int main(){
//Definicion de variables
int n,i,j;
//Ingreso de datos
cout<<"Ingrese el numero de asteriscos que va a tener la base del triangulo: ";
cin>>n;
cout<<endl;
//Procesos
for(i=0;i<n;i++){
for(j=0;j<i+1;j++){
cout<<"*";}
cout<<endl;
}
getch();
}//fin del procedimiento
Solución:
*Analisis de datos
E:nota
S:pn(promedio de notas),cna(cantidad notas aprobados),
cnd(cantidad de notas desaprobadas)
*Algoritmo
1.-inicio
2.-nota=0.0,pn=0.0,cna=0,cnd=0,i=0,sn=0.0
3.-para i =1 hasta 5
leer nota
sn=sn + nota //acumulador
si nota>10 entonces
cna=cna+1 //contador
sino
cnd=cnd+1 //contador
fin de si
fin de para
pn=sn/5
4.-escribir pn,cna,cnd
5.-fin
*Prueba de escritorio
nota1=12
nota2=9
nota3=13
nota4=10
nota5=11
pn=11
cna=3
cnd=2
Solución:
*Analisis de datos
E:n(número empleados),s(sueldo)
S:sp(sueldo promedio),smy(sueldo mayor),smn(sueldo menor)
Algoritmo
1.-inicio
2.-p=0.0,sp=0.0,smy=0.0,smn=0.0,n=0,s=0.0,i=0
3.-smn=99999
4.-leer n
5.-para i=1,n
leer s //lectura de sueldo
p=p+s //acumulador de sueldo
//sueldo mayor
si s>smy entonces
smy=s
fin de si
//sueldo menor
si s<smn entonces
smn=s
fin de si
fin de para
sp=p/n //promedio
6.-escribir sp,smy,smn
7.-fin
Prueba de Escritorio
n=5
1000,2000,3000,4000,5000
sp=3000
smy=5000
smn=1000
Solución:
*Análisis de datos
e:numnat(numeros naturales)
s:suma,sc(suma de cuadrados),scb(suma de cubos)
*Algoritmo
1.-inicio
2.-numnat=0,suma=0,sc=0,scb=0,i=0
3.-leer numnat
4.-para i=1 hasta numnat
suma=suma+i
sc=sc+cuadrado(i)
scb=scb+cubo(i)
fin de para
5.-escribir suma,sc,scb
6.-fin
*Prueba de escritorio
numnat=3
suma=3
sc=14
scb=36
Solución:
*Análisis de datos
e:num(numero)
s:f(factorial)
*Algoritmo
1.-inicio
2.-num=0,f=0,i=0
3.-leer num
f=1
4.-para i=1 hasta num
f=f*i
fin de para
5.-escribir f
6.-fin
*Prueba de escritorio
n=5
f=120
10. Diseñar un algoritmo permita visualizar el promedio,la nota mayor y menor de n notas
generadas a la azar.
Solución:
*Algoritmo
1.-inicio
2.-nt=0,pnt=0.0,i=0,nota=0.0,ntmy=0.0,ntmn=0.0,snt=0.0
3.-leer nt
4.-ntmn=99
para i=1 hasta nt
nota=aleatorio()
snt=snt+nota
si nota>ntmy entonces
ntmy=nota
fin de si
si nota<ntmn entonces
ntmn=nota
fin de si
fin de para
pnt=snt/nt
5.-escribir pnt,ntmy,ntmn
6.-fin
*Implementación del algoritmo C++.
//libreria de e/s de datos por consola
#include <iostream.h> //permite brindar comandos de lectura y escritura
#include <cstdlib>//numeros aleatorios
//programa principal
main(){
//declarar variables
int nt,i;
double pnt=0.0,nota=0.0,ntmy=0.0,ntmn=0.0,snt=0.0;
//permite inicializar el tiempo a null a para utilizarlo en la funcion rand
srand(time(NULL));
//entrada de datos
cout<<"Cantidad de notas a procesar:";cin>>nt;
ntmn=99;
//proceso de datos
for(i=1;i<=nt;i++){
nota=1+rand()%20;
snt=snt+nota;
if(nota>ntmy){
ntmy=nota;
}
if(nota<ntmn){
ntmn=nota;
}
cout<<"Nota "<<i<<":"<<nota<<endl;
}
pnt=snt/nt;
//salida de datos
cout<<"Promedio de notas:"<<pnt<<endl;
cout<<"Nota mayor:"<<ntmy<<endl;
cout<<"Nota menor:"<<ntmn<<endl;
system("PAUSE");
}//fin del programa
S SESION 05
Mientras, Permite realizar un
ciclo de repetiticiones mediante
unas candición.
SESION 05
Solución:
*Análisis de datos
E:c(cantidad)
S:ci(cantidad invertida)
*Algoritmo
1.-inicio
2.-c=0,ci=0,dg=0
3.-leer c
mientras c>0
dg=residuo(c/10) //digito
ci=(ci * 10) + dg //cantidad invertida
c=entero(c/10) //cantidad actualizada
fin de mientras
4.-escribir ci
5.-fin
*Prueba de Escritorio
Cantidad: 123
Invertir la cantidad Ingresada: 321
2. Diseñar un algoritmo que permita determinar el total a pagar de una compra, el precio
promedio, el precio mayor y la cantidad de compras. Ingresando nombre del producto,
precio y cantidad. El algoritmo preguntara al usuario si desea seguir comprando si/no.
Solución:
*Análisis de datos
E:p(producto),pc(precio),c(cantidad),rpta
S:cp(cantidad de compra),pp(precio promedio),pmy(precio mayor),tp(total pg)
*Algoritmo
1.-inicio
2.-p='',pc=0.0,c=0,rpta='',cp=0,pp=0.0,pmy=0.0,tp=0.0,sp=0.0
3.-hacer
cp=cp + 1 //cantidad de productos
leer p,pc,c
sp=sp + pc //acumulador de precios
//precio mayor
si pc>pmy entonces
pmy=pc
fin de si
tp=tp+(pc*c) //acumulador de total a pagar
escribir 'Desea continuar si/no'
leer rpta
mientras rpta='si'
//promedio de precio de producto
pp=sp/cp
4.-escribir cp,pp,pmy,tp
5.-fin
*Prueba de Escritorio
NRO PRODUCTO PRECIO CANTIDAD importe a pagar respuesta
1 a 10 2 20 si
2 b 20 4 80 si
3 c 30 6 180 no
3. Diseñe un programa que genere números aleatorios en el intervalo de -1000 a 1000 hasta
obtener un número par menor que 500 pero mayor que -500. ¿Cuántos números fueron
necesarios generar y cuáles fueron el mayor y el menor número generados?.
Solución:
*Analisis de Datos
E: Ninguna
S:conta,mayor,menor
*Algoritmo
1.- inicio
2.-conta=0,mayor=0,menor=0,numero=0
3.-hacer
numero = random(-1000,1000)// numero random desde -1000 hasta 1000
escribir 'Numero ' conta : numero
conta++
si (numero > mayor)
mayor = numero;
sino(numero < menor)
menor = numero;
fin de si
mientras(numero%2!=0 o numero <= -500 o numero >= 500)
4.- escribir conta,mayor,menor
5.-fin
*Prueba de escritorio
int main(){
//declarar variables
int numero=0, mayor=0,menor=0,conta=0;
cout<<""<<endl;
srand(time(NULL));
//proceso de datos
do{
numero = -1000+rand()%(1001+1000);
cout<<"Numero "<<conta<<" : "<<numero <<endl;
conta++;
if(numero > mayor){
mayor = numero;
}
if(numero < menor){
menor = numero;
}
}while(numero%2!=0 || numero <= -500 || numero >= 500);
//Salida de datos
cout<<""<<endl;
cout<<"-------------------------------------"<<endl;
cout<<"Cantidad de numeros generados : "<<conta<<endl;
cout<<"Mayor numero generado : "<<mayor<<endl;
cout<<"Menor numero generado : "<<menor<<endl;
cout<<"-------------------------------------"<<endl;
getch();
cout<<""<<endl;
cout<<"-------------------------------------------------------------------------------"<<endl;
main();
}//fin del programa
4. Diseñar un algoritmo que permita ingresar para los N alumnos de un aula de clases la edad
y su sexo (M ó F). Al final se deberá mostrar el porcentaje de varones y mujeres, así como
los promedios de edad de cada género.
Solución:
*Análisis de datos
E: s,edad,rpta
S: i,porv,porm,promm,promv
*Algoritmo
1.- Inicio
2.- s='',promm=0.0, promv=0.0, porm=0.0, porv=0.0, rpta=0, edad=0, i=0, summ=0.0,
nrom=0, sumv=0.0, nrov=0
3.- Mientras rpta <>0 hacer
i=i+1
leer s,edad
Si s='m' ó s='M' entonces
sumv=sumv+edad
nrov=nrov+1
Sino
summ=summ+edad
nrom=nrom+1
Fin de Si
leer rpta
Fin de Mientras
porv=division(nrov*100,i)
porm=division(nrom*100,i)
promm=division(summ,nrom)
promv=division(sumv,nrov)
4.- escribir i,porv,porm,promm,promv
5.- Fin
*Prueba de escritorio
s='M'
edad=15
rpta=1
s='M'
edad=12
rpta=1
s='F'
edad=17
rpta=1
s='M'
edad=14
rpta=1
s='F'
edad=16
rpta=0
i=5
porv=60
porm=40
promv=13
promm=16
Solución:
*Análisis de datos:
E: op,n,ex
S: r
*Algoritmo
1.- Inicio
2.- Mientras op<1 ó op>3 hacer
n=0,op=0,ex=0,r=0
escribir 'FACTORIAL - POTENCIA'
escribir '1.- Factorial'
escribir '2.- Potencia'
escribir '3.- Salir'
escribir 'Seleccione opcion : '
leer op
Segn sea(op)
caso 1: r=1
leer n
Para i=1 hasta n
r=r*i
Fin de Para
escribir
caso 2: leer n,ex
r = potencia(n,ex)
escrirbir n
caso 3: escribir 'Saliendo del programa'
Fin de Segun Sea
op=0
Fin de Mientras
3.- Fin
*Prueba de escritorio
op=1
n=6
r=720
op=2
n=5
ex=2
r=25
op=3
6. Diseñar un algoritmo que pide el año de nacimiento al usuario y calcule la edad del
mismo. Si el año de nacimiento introducido es posterior al año actual por error el
programa volverá a pedir el año de nacimiento correcto.
Solución:
*Analisis de datos
E:actual,edad
S:nacimiento
*Algoritmo
1.-inicio
2.-leer nacimiento
3.-edad=0,nacimiento=0
4.- mientras actual< nacimiento entonces
edad= actual-nacimiento
fin de mientras
5.-escribir edad
6.-fin
*Prueba de escritorio
nacimiento=1988
edad=24
#include <iostream.h>
#include <conio.h>
//programa principal
int main(){
// programa que pide el año de nacimiento al usuario y cacula la edad del mismo//
int actual=2012, nacimiento, edad;
cout<<" Inserte su año de nacimiento:";cin>>nacimiento;
while ( actual< nacimiento){
cout<<" vuelva a insertar su año de nacimiento:";cin>>nacimiento;
}
edad= actual-nacimiento;
cout<< " Su edad es: " << edad<<" años";
getch();
}//fin del programa
Solución:
*Analisis de datos
E:num(numero ingresado)
S:inv(inverso del numero),m(mensaje)
*Algoritmo
1.-inicio
2.-r=0,u=0,inv=0,num=0
3.-leer num
4.-u=num;
hacer mientras(u!=0)
r=u%10
u=u/10
inv=inv*10+r
fin de hacer mientras
si num=inv entonces
m= ‘es capicua’
sino
m =‘no es capicua’
fin de si
5.-fin
*Prueba de Escritorio
inv=131
m= ‘es capicua’
1/2+1/4+1/6+……..
Solución:
*Analisis de datos
E:nt(numero de terminos)
S:sumainv(numero de pares invertidos)
*Algoritmo
1.-inicio
2.-nt=0,sumainv=0.0,par=0.0,cont=0.0
3.-leer nt
4.-sumainv=0
par=2
cont=1
mientras cont<=nt
sumainv=sumainv+1/par
par=par+2
cont=cont+1
fin mientras
5.-escribir sumainv
6.-fin
*Prueba de Escritorio
n=3
sumainv=0.9166
9. Diseñar un algoritmo que permita determinar las cantidad y la suma de los dígitos que ahí
en una cantidad ingresada.
.
Solución:
*Análisis de datos
E:c(cantidad)
S:sd(suma de digitos),cd(cantidad de digitos)
*Algoritmo
1.-inicio
2.-c=0,sd=0,dg=0,cd=0
3.-leer c
mientras c>0
dg=residuo(c/10) //digito
sd=sd+dg //suma sde digitos
cd=cd+1
c=entero(c/10) //cantidad actualizada
fin de mientras
4.-escribir sd,cd
5.-fin
*Prueba de Escritorio
Cantidad: 1234
sd=10
cd=4
10.- Diseñar un algoritmo que permita determinar el digito mayor y menor de una cantidad
ingresada.
Solución:
*Análisis de datos
E:c(cantidad)
S:dmy(digito mayor),dmn(digito menor)
*Algoritmo
1.-inicio
2.-c=0,dmy=0,dmn=0,dg=0
3.-leer c
mientras c>0
dg=residuo(c/10) //digito
//digito mayor
si dg>dmy entonces
dmy=dg
fin de si
//digito menor
si dg<dmn entonces
dmn=dg
fin de si
c=entero(c/10) //cantidad actualizada
fin de mientras
4.-escribir dmy,dmn
5.-fin
*Prueba de Escritorio
Cantidad: 4321
dmy=4
dmn=1
S SESION 06
Procedimiento es un
con frecuencia.
SESION 06
SUBALGORITMO PROCEDIMIENTOS
Solución:
*Análisis de datos
E:dp(deposito),mr(monto a retirar)
S:s(saldo)
//procedimiento deposito
procedimiento deposito(xdp entero)
mr=0,r=0
mientras xdp>0
escribir 'Ingresar monto a retirar:'
leer mr;
r=residuo(mr/20); //multiplo de 20
si r=0 y mr<=xdp entonces
xdp=xdp-mr;
//salida de datos
escribir 'Saldo:',xdp;
sino
escribir 'Valor Incorrecto:',xdp;
fin de si
fin de mientras
fin de procedimiento
*Algoritmo
1.-inicio
2.-dp=0
3.-leer dp
4.-deposito(dp) //invocar al procedimiento
5.-fin
*Prueba de Escritorio
dp=860
mr=900
mr=400
mr=150
mr=460
xdp=0
2. Diseñar un procedimiento que permita generar una fecha siguiente a la fecha ingresadas en
formato día, mes y año.
Solución:
*Análisis de datos
E:d1,m1,a1
S:fechaActual
*Algoritmos
1.-inicio
2.-d1=0,m1=0,a1=0
3.-leer d1,m1,a1
4.- si((d1>0 y d1<=31) y (m1>0 y m1<=12) y a1>0) entonces
genfecha(d1,m1,a1)
sino
escribir ‘La fecha Ingresada es Incorrecta’
fin de si
5.-fin
*Prueba de Escritorio
d=9
m=9
a=2012
fechaactual=10/9/2012
/*
Diseñar un procedimiento que permita generar una fecha siguiente a la fecha ingresadas
en formato día, mes y año.
*/
//librería de entrada y salida de datos por consola
#include <iostream.h>
#include <conio.h>
#include <stdio.h>
void genfecha(int d,int m,int a){
int diamax;
//proceso de datos
switch(m){
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
diamax=31;
break;
case 4:
case 6:
case 9:
case 11:
diamax=30;
break;
case 2:
if(((a%4)==0 && (a%100)!=0) || (a%400)==0){
diamax=29;
}else{
diamax=28;
}
break;
}//fin switch
int main(){
//declarar variables
int d1,m1,a1;
//entrada de datos
cout<<"Ingresa el dia :";cin>>d1;
cout<<"Ingresa el mes :";cin>>m1;
cout<<"Ingresa el año :";cin>>a1;
if((d1>0 && d1<=31) && (m1>0 && m1<=12) && a1>0){
genfecha(d1,m1,a1);
}else{
cout<<"La fecha Ingresada es Incorrecta";
}//fin if
getch();//permite leer un caracter del teclado
}//fin de procedimiento principal
Solución:
*Análisis de datos
e:n(numero)
s:resultados
procedimiento mtabla(xn:entero)
r=0,i=0
para i=1 hasta 12
r=n * i
escribir n,'*',i,'=',r
fin de para
fin procedimiento
*Algoritmo
1.-inicio
2.-n=0
3.-leer n
4.-mtabla(n)
5.-fin
*Prueba de Escritorio
n=5
5*1=5
5*2=10
.
5*12=60
*Implementación del algoritmo C++.
//libreria de e/s de datos por consola
#include <iostream.h>
//procedimiento mtabla
void mtabla(int xn){
int r=0,i=0;
for(i=1;i<=12;i++){
r=xn * i;
cout<<xn<<"*"<<i<<"="<<r<<endl;
} //fin for
}//fin proc
//programa principal
main(){
//declarar variables
int n=0,n1=0;
//entrada de datos
cout<<"Ingresar Numero 1:";cin>>n;
//invocar al proc
mtabla(n);
cout<<endl;
cout<<"----------------------";
cout<<endl;
cout<<"Ingresar Numero 2:";cin>>n1;
mtabla(n1);
system("PAUSE");
}//fin de programa
4. Diseñar un procedimiento que permita visualizar las cantidad y la suma de los dígitos que
ahí en una cantidad ingresada.
Solución:
*Análisis de datos
E:c(cantidad)
S:sd(suma de digitos),cd(cantidad de digitos)
procedimiento digitos(c)
sd=0,cd=0
mientras c>0
dg=residuo(c/10) //digito
sd=sd+dg //suma sde digitos
cd=cd+1
c=entero(c/10) //cantidad actualizada
fin de mientras
escribir sd,cd
fin procedimiento
*Algoritmo
1.-inicio
2.-c=0
3.-leer c
4.-digitos(c)
5.-fin
*Prueba de Escritorio
Cantidad: 123
sd=6
cd=3
Solución:
*Analisis de datos
E:num
S:m,n
*Algoritmo
1.-inicio
2.-num=0
3.-leer num
4.-Cambio(num)
5.-fin
*Prueba de escritorio
num=246
m=26
n=62
Solución:
*Analisis de Datos
E:m,n
S:multiplos
procedimiento Multiplos(n:entero)
i=0
escribir 'Los Multiplos del ',n,'son'
para i desde 0 hasta m
escribir i,'X',n,'=',i*n
fin de para
fin procedimiento
*Algoritmo
1.-inicio
2.-n=0
3.-leer n
4.-multiplos(n)
5.-fin
*Prueba de escritorio
n=3
0*3=0
1*3=3
2*3=6
3*3=9
Solución:
*Analisis de Datos
E:a,b
S:(divisores comunes)
procedimiento Divisores(entero a,entero b){
i=1
mientras(i<=a y i<=b) entonces
si(residuo(a/i)=0 y residuo(b/i)=0) entonces
escribir ' ',i
fin de si
i=i+1
fin de mientras
fin procedimento
*Algoritmo
1.-inicio
2.-a=0,b=0
3.-leer a,b
4.-escrbir'los divisores comunes son'
5.-divisores(a,b)
6.-fin
*Prueba Escritorio
a=25
b=60
1 , 5
#include <iostream.h>
//procedimiento Divisores
void Divisores(int a,int b){
int i=1;
while(i<=a && i<=b){
if(a%i==0 && b%i==0){
cout<<" "<<i<<endl;
}//fin if
i=i+1;
}//fin while
}//fin procedimento
//progrsms principal
main(){
//declarar variables
int a,b;
cout<<" Divisores comunes de dos numeros "<<endl;
cout<<"Ingrese el primer numero :";
cin>>a;
cout<<"Ingrese el segundo numero :";
cin>>b;
cout<<"Los divisores comunes son "<<endl;
//invoca al procedimiento
Divisores(a,b);
system("PAUSE");
}//fin de programa
8. Diseñar un procedimiento que permita escribir los numeros pares entre dos numeros de
manera descendente.
Solución:
*Analisis de datos
E:a(numero inicial),an(numero final)
S:np(numeros pares)
procedimiento pares(xa:entero,xan:entero)
si residuo(an/2)=0 entonces
mientras xan>xa
xan=xan-2
si xan>xa entonces
escribir xan
sino
escribir''
fin de si
fin de mientras
sino
mientras xan>xa
xan=xan-1
si xan>xa entonces
escribir xan
sino
escribir''
fin de si
fin de mientras
fin de procedimiento
*Algoritmo
1.-inicio
2.-a=0,an=0 np=0
3.-leer a,an
4.-pares(a,an)
5.-fin
*Prueba de Escritorio
a=20
an=35
34,32,30,28,26,24,22,
Solución:
*Análisis de datos:
E:n, i
S:d
Procedimiento pdivisores(nx:entero):real
i=0, d=0.0
mientras (i<=nx)
si (nx%i==0) entonces
d=i
fin de si
i=i+1
escribir d
fin de mientras
fin de procedimiento
*Algoritmo:
1.-inicio
2.-n=0
3.-leer n
4.-pdivisores(n)
5.-fin
*Prueba de escritorio:
n=10
d=1
d=2
d=5
d=10
Solución:
*Análisis de datos
E: n(número)
S: el número expresado en notación romana
procedimiento calccifrarom(d1:entero,d2:entero,d3:entero,d4:entero)
i='', j='', k='', h=''
según sea d1
caso 0
i=''
caso 1
i='M'
caso 2
i='MM'
caso 3
i='MMM'
fin de según
según sea d2
caso 0
j=''
caso 1
j='C'
caso 2
j='CC'
caso 3
j='CCC'
caso 4
j='CD'
caso 5
j='D'
caso 6
j='DC'
caso 7
j='DCC'
caso 8
j='DCCC'
caso 9
j='CM'
fin de según
según sea d3
caso 0
k=''
caso 1
k='X'
caso 2
k='XX'
caso 3
k='XXX'
caso 4
k='XL'
caso 5
k='L'
caso 6
k='LX'
caso 7
k='LXX'
caso 8
k='LXXX'
caso 9
k='XC'
fin de según
según sea d4
caso 0
h=''
caso 1
h='I'
caso 2
h='II'
caso 3
h='III'
caso 4
h='IV'
caso 5
h='V'
caso 6
h='VI'
caso 7
h='VII'
caso 8
h='VIII'
caso 9
h='IX'
fin de según
escribir'Notación Romana', i,j,k,h
fin de procedimiento
*Algortimo
1.-inicio
2.-n=0,d1=0,d2=0,d3=0,d4=0,r=0
3.-leer n
4.-r=n
si (r>=1000 y r<=3000) entonces
d1=entero(r/1000)
r=residuo(r/1000)
sino
d1=0
fin de si
si (r>=100 y r<1000) entonces
d2=entero(r/100)
r=(residuo(r/100)
sino
d2=0
fin de si
si (r>=10 y r<100) entonces
d3=entero(r/10)
r=residuo(r/10)
sino
d3=0
fin de si
si (r>0 y r<10) entonces
d4=r
sino
d4=0
fin de si
calccifrarom(d1,d2,d3,d4)
5.-fin
*Prueba de Escritorio
n=2155
Notación Romana: MMCLV
switch(d3){
case 0:strcpy(k,"");break;
case 1:strcpy(k,"X");break;
case 2:strcpy(k,"XX");break;
case 3:strcpy(k,"XXX");break;
case 4:strcpy(k,"XL");break;
case 5:strcpy(k,"L");break;
case 6:strcpy(k,"LX");break;
case 7:strcpy(k,"LXX");break;
case 8:strcpy(k,"LXXX");break;
case 9:strcpy(k,"XC");
} //fin de switch
switch(d4){
case 0:
strcpy(h,"");
break;
case 1:
strcpy(h,"I");
break;
case 2:
strcpy(h,"II");
break;
case 3:
strcpy(h,"III");
break;
case 4:
strcpy(h,"IV");
break;
case 5:
strcpy(h,"V");
break;
case 6:
strcpy(h,"VI");
break;
case 7:
strcpy(h,"VII");
break;
case 8:
strcpy(h,"VIII");
break;
case 9:
strcpy(h,"IX");
} //fin de switch
cout<<""<<endl;
cout<<"Notacion Romana"<<endl;
cout<<"---------------* "<<i<<j<<k<<h;
}//fin de procedimiento cout<<""<<endl;
cout<<"Notacion Romana"<<endl;
cout<<"---------------* "<<i<<j<<k<<h;
}//fin de procedimiento
//procedimiento principal
int main(){
//declarar variables
int n,r,d1,d2,d3,d4;
//proceso de datos
cout<<"Ingresar el numero: ";cin>>n;
r=n;
if(r>=1000 && r<=3000){
d1=r/1000;
r=r%1000;
}else{
d1=0;
}
if(r>=100 && r<1000){
d2=r/100;
r=r%100;
}else{
d2=0;
}
if(r>=10 && r<100){
d3=r/10;
r=r%10;
}else{
d3=0;
}
if(r>0 && r<10){
d4=r;
}else{
d4=0;
}
calccifrarom(d1,d2,d3,d4); //invocar procedimiento
getch();
} //fin de procedimiento principal
S SESION07
Las función son rutinas que
resultado.
SESION 07
SUBALGORITMO FUNCIONES
1. Diseñar las funciones que permita determinar el promedio de tres notas ingresadas de
un alumno, la condición (‘aprobado’, ‘desaprobado’), estado.
Condición
Promedio >=10.5 ‘aprobado’ ,’desaprobado’
Estado
<=5 “pesimo”
<=10 “malo”
<=15 "regular"
<=18 “bueno”
<=20 “excelente”
Solución:
*Análisis de datos
E:nt1,nt2,nt3
S:p(promedio),c(condiciòn),e(estado)
funcion fpromedio(xnt1:real,xnt2:real,xnt3:real):real
retornar(xnt1+xnt2+xnt3)/3
fin funcion
funcion fcondicion(xp:real):cadena
c=' '
si xp>=10.5 entonces
c='aprobado'
sino
c='desaprobado'
fin de si
retornar(c)
fin funcion
funcion festado(xp1:real):cadena
e=''
si xp1<=5 entonces
e='pésimo'
sino si xp1<=10 entonces
e='malo'
sino si xp1<=15 entonces
e='regular'
sino si xp1<=18 entonces
e='bueno'
sino si xp1<=20 entonces
e='excelente'
fin de si
retornar(e)
fin funcion
*Algoritmo
1.-inicio
2.-nt1=0.0,nt2=0.0,nt3=0.0,p=0.0,condicion='',estado='',
3.-leer nt1,nt2,nt3
4.-p=fpromedio(nt1,nt2,nt3)
condicion=fcondicion(p)
estado=festado(p)
5.-escribir p,condicion,estado
6.-fin
*Prueba de Escritorio
nt1=12.0
nt2=13.0
nt3=15.0
p=13.33
condición='Aprobado'
estado='Regular’
//función fcondicion
char* fcondicion(double xp){
char c[20];
if(xp>=10.5){
strcpy(c,"Aprobado");
}else{
strcpy(c,"Desaprobado");
}
return(c);
}//fin funcion
//funcion festado
char* festado(double xp1){
char e[20];
if(xp1<=5){
strcpy(e,"pesimo");
}else if(xp1<=10){
strcpy(e,"malo");
}else if(xp1<=15){
strcpy(e,"regular");
}else if(xp1<=18){
strcpy(e,"bueno");
}else if(xp1<=20){
strcpy(e,"excelente");
}//fin if
return(e);
}//fin de función
//procedimiento principal
int main(){
//declarar variables
double nt1,nt2,nt3,p
char condicion[20];
char estado[20];
//entrada de datos
cout<<"Ingresar Nota 1:";cin>>nt1;
cout<<"Ingresar Nota 2:";cin>>nt2;
cout<<"Ingresar Nota 3:";cin>>nt3;
//invocar a las funciones
//strcpy(puntero,var)
p=fpromedio(nt1,nt2,nt3);
strcpy(condicion,fcondicion(p));
strcpy(estado,festado(p));
//salida de datos
cout<<"El promedio es:"<<p<<endl;
cout<<"La condicón es:";
cout<<fixed<<setprecision(2)<<condicion<<endl;
cout<<"El estado es:"<<estado<<endl;
getch();
}//fin de procedimiento
2. Diseñar las funciones que permita determinar la nota mayor y menor de cuadro nota
ingresadas.
Solución:
*Análisis de datos
e:nt1,nt2,nt3
s:nmayor,nmenor
funcion fmayor(xnt1:real,xnt2:real,xnt3:real):real
nmy=0
nmy=xn1
si xn2>nmy entonces
nmy=xnt2
fin de si
si xn3>nmy entonces
nmy=xnt3
fin de si
retornar(nmy)
fin funcion
funcion fmenor(xnt1:real,xnt2:real,xnt3:real):real
nmn=0
nmn=xn1
si xn2<nmn entonces
nmn=xnt2
fin de si
si xn3<nmn entonces
nmn=xnt3
fin de si
retornar(nmn)
fin funcion
*Algoritmo
1.-inicio
2.-nt1=0.0,nt2=0.0,nt3=0.0,p=0.0,nmayor=0.0,nmenor=0.0
3.-leer nt1,nt2,nt3
4.-nmayor=fmayor(nt1,nt2,nt3)
nmenor=fmenor(nt1,nt2,nt3)
5.-escribir nmayor,nmenor
6.-fin
*Prueba de Escritorio
nt1=12
nt2=14
nt3=16
nmayor=16
nmenor=12
//funcion mayor
double fmayor(double xnt1,double xnt2,double xnt3){
double nmy;
nmy=xnt1;
//nota mayor
if(xnt2>nmy){
nmy=xnt2;
}
if(xnt3>nmy){
nmy=xnt3;
}
return(nmy);
}//fin de la funcion
//funcion fmenor
double fmenor(double xnt1,double xnt2,double xnt3){
double nmn;
nmn=xnt1;
//nota mayor
if(xnt2<nmn){
nmn=xnt2;
}
if(xnt3<nmn){
nmn=xnt3;
}
return(nmn);
}//fin de la funcion
//procedimiento principal
int main(){
//declarar variables
double nt1,nt2,nt3,p;
double mayor,menor;
//entrada de datos
cout<<"Ingresar Nota 1:";cin>>nt1;
cout<<"Ingresar Nota 2:";cin>>nt2;
cout<<"Ingresar Nota 3:";cin>>nt3;
//invocar a las funciones
mayor=fmayor(nt1,nt2,nt3);
menor=fmenor(nt1,nt2,nt3);
//salida de datos
cout<<"Nota mayor es:"<<mayor<<endl;
cout<<"Nota menor es:"<<menor<<endl;
system("PAUSE");
}//fin de procedimiento
funcion fcapicua(xu:entero):cadena
r=0,inv=0
xm=''
xnum=xu //almaceno el número ingresado para compararlo
mientras(xu!=0)
r=residuo(xu/10)
xu=xu/10
inv=inv*10+r
fin de mientras
si xnum=inv entonces
xm='es capicua'
sino
xm ='no es capicua'
fin de si
retornar(xm)
fin de funcion
*Algoritmo
1.-inicio
2.-n=0,m=''
3.-leer n
4.-m=fcapicua(n)
5.-escribir m
6.-fin
*Prueba de Escritorio
n=123
m='no es capicua'
#include <iostream.h>
//funcion capicua
char *fcapicua(int xu){
int r=0,inv=0,xnum=0;
char xm[20];
xnum=xu; //almaceno el número ingresado para compararlo
while(xu!=0){
r=xu%10;
xu=xu/10;
inv=(inv*10)+r;
}//fin while
if(xnum==inv){
strcpy(xm,"es capicua");
}else{
strcpy(xm,"no es capicua");
}
return(xm);
}//fin de funcion
//programa principal
main(){
//declarar variables
int n=0;
char m[20];
//entrada de datos
cout<<"Ingresar numero:";cin>>n;
//invocar a la función
strcpy(m,fcapicua(n));
//salida de datos
cout<<m<<endl;
system("PAUSE");
}//fin dee programa
Solución:
*Análisis de datos
e:num(numero)
s:f(factorial)
función ffactorial(xnum:entero):entero
xf=0
xf=1
para i=1 hasta xnum
xf=xf * i
fin de para
retornar(xf)
fin de funcion
*Algoritmo
1.-inicio
2.-num=0,fact=0
3.-leer num
4.-fact =ffactorial(num)
5.-escribir fact
6.-fin
*Prueba de escritorio
n=5
f=120
5. Diseñar una funcion que permite determinar si una palabra ingresada el palindroma.
Solución:
*Análisis de datos
e:palabra
s:m(mensaje)
//funcion fpalindromo
cadena fpalindromo(xpalabra:cadena){
m='',num=0, x=0
x=1
//csantidad de carácteres
num = longitud(xpalabra)
para i=0 hasta num-1
si xpalabra[i]=xpalabra[num-1-i]
x=1
sino
x=2
fin de si
fin de para
si x=2 entonces
m='No es un palindromo'
sino
m='Es un plindromo'
fin de si
returnar(m)
fin de funcion
*Algoritmo
1.-inicio
2.-palabra='',plb=''
3.-leer palabra
4.-plb=fpalindromo(palabra)
5.-escribir plb;
//programa principal
main(){
//declarar variables
char palabra[20];
char plb[20];
//entrada ce datos
cout<<"Ingresa una plalabra:";cin>>palabra;
//invocar a la funcion
strcpy(plb,fpalindromo(palabra));
//salida de datos
cout<<plb<<endl;
system("PAUSE");
}//fin de programa
6. Diseñar una funcion que permita determinar el nombre del día, mediante un número
ingresado.
Solución:
*Analisis de datos
E: n(numero)
S: d(día);
funcion fdia(nx:entero):cadena
nx=0, xd=''
si nx>0 y nx<=7
Segun sea nx
caso 1
xd='Lunes'
caso 2
xd='Martes'
caso 3
xd='Miercoles'
caso 4
xd='Jueves'
caso 5
xd='Viernes'
caso 6
xd='Sabado'
Caso 7
xd='Domingo'
Fin de segun
sino si
escribir "Error el numero ingresado no es valido"
fin si
retornar(xd)
fin de funcion
*Algoritmo
1.-inicio
2.-n=0,dia=''
3.-Leer n
4.-dia=fdia(n)
5.-escribir dia
6.-fin
*Prueba de escritorio
n=5
dia='viernes'
//programa principal
main(){
//declarar variables
int n=0;
char dia[30];
//entrada de datos
cout<<"Ingresar numero del 1-7:";cin>>n;
//invocar a la funcion
strcpy(dia,fdia(n));
//salida de datos
cout<<"El dia de la semana es:"<<dia<<endl;
system("PAUSE");
}//fin de programa
Solución:
*Análisis de daton
E: n(número atómico)
S: nombre, grupo, bloque, ev(electronegatividad)
función felemento(xn:entero):cadena
e=''
según sea xn
caso 2:
e='HELIO / He'
caso 3:
e='LITIO / Li'
caso 4:
e='BERILIO / Be'
caso 5:
e='BORO / B'
caso 6:
e='CARBONO / C'
caso 7:
e='NITROGENO / N'
caso 8:
e='OXIGENO / O'
caso 9:
e='FLUOR / F'
fin de según
retornar(e)
fin función
función fgrupo(xn:entero):cadena
g=''
según sea xn
caso 2
g='Gases Nobles'
caso 3
g='Alcalinos'
caso 4
g='Alcalinos terreos'
caso 5
g='Boroides'
caso 6
g='Carbonoides'
caso 7
g='Nitrogenoides'
caso 8
g='Anfígenos'
caso 9
g='Halógenos'
. fin de según
retornar(g)
fin función
función fbloque(xn:entero):cadena
b=''
según sea xn
caso 3,4
b='*Metal Ligero'
caso 5,6,7,8,9
b='*No Metal'
caso 2
b='*Gas raro'
fin de según
retornar(b)
fin función
función felectronegatividad(xn:entero):real
p=0.0
según sea xn
caso 2
p=4.1
caso 3
p=1.0
caso 4
p=1.5
caso 5
p=2.0
caso 6
p=2.5
caso 7
p=3.0
caso 8
p=3.5
caso 9
p=4.0
fin de según
retornar(p)
fin función
*Algortimo
1.-inicio
2.-n=0, ev=0.0, nombre='', grupo='', bloque=''
3.-leer n
nombre=felemento(n)
grupo=fgrupo(n)
bloque=fbloque(n)
ev=felectronegatividad(n)
4.-escribir nombre,grupo,bloque,ev
5.-fin
*Prueba de Escritorio
n=8
nombre= 'OXIGENO / O'
grupo='Anfígenos'
bloque='*No Metal'
ev=3.5
//función fbloque
char*fbloque(int xn){
char b[20];
switch(xn){
case 3:
case 4:
strcpy(b,"*Metal Ligero");break;
case 5:
case 6:
case 7:
case 8:
case 9:
strcpy(b,"*No Metal");break;
case 2:
strcpy(b,"*Gas raro");break;
}
return(b);
} //fin de la función
//función felectronegatividad
double felectronegatividad(int xn){
double p;
switch(xn){
case 2:
p=4.1;break;
case 3:
p=1.0;break;
case 4:
p=1.5;break;
case 5:
p=2.0;break;
case 6:
p=2.5;break;
case 7:
p=3.0;break;
case 8:
p=3.5;break;
case 9:
p=4.0;break;
}//fin de switch
return(p);
} //fin de la función
//procedimiento principal
int main(){
//declarar variables
int n;
double ev;
char nombre[20];
char grupo[20];
char bloque[20];
//entrada de datos
cout<<"Ingresar el NUMERO ATOMICO: ";cin>>n;
//invocar funciones
strcpy(nombre,felemento(n));
strcpy(grupo,fgrupo(n));
strcpy(bloque,fbloque(n));
ev=felectronegatividad(n);
//salida de datos
cout<<""<<endl;
cout<<"----------------El Elemento Quimico es: "<<nombre<<endl;
cout<<"------------Familia a la que pertenece: "<<grupo<<endl;
cout<<"---------------------------------Es un: "<<bloque<<endl;
cout<<"Su electronegatividad segun PAULING es: ";
cout<<fixed<<setprecision(1)<<ev;
getch();
} //fin del procedimiento principal
8. Diseñar una función que permita devolver el mayor digito de una cantidad ingresada.
Solución:
*Anàlisis de datos
e:c(cantidad)
s:dmy(digito mayor)
funcion fdmayor(xc:entero):entero
d=0,xdmy=0
mientras xc>0
d=residuo(xc/10)
si d>xdmy entonces
xdmy=d
fin de si
xc=entero(xc/10)
fin de mientras
retornar(xdmy)
fin función
*Algoritmo
1.-inicio
2.-c=0,dmy=0
3.-leer c
4.-dmy=fdmayor(c)
5.-escribir dmy
6.-fin
*Prueba de EScritorio
c=124
dmy=4
Solución:
*Analisis de datos
e:tf(tipo de figura)
s:area
*Algoritmo
1.-inicio
2.-sigue='', tipof=0
3.-hacer
tipof=menu()
escribir area
escribir'desea continuar S/N'
mientras (sigue=='S')
fin de hacer
4.-fin
*Prueba de escritorio
opcion=5
base1=12
base2=14
altura=10
area=130
//programa principal
int main(){
//declarar variables
char sigue;
do {
//invocar funciones
int tipof=menu();
cout<<"Area="<<fCalArea(tipof)<<endl;
cout<<"Desea continuar S/N:";cin>>sigue;
}while (sigue=='S');
}//fin de programa
Solución:
*Analisis de datos
e:c1(cateto 1),c2(cateto 2)
s:p(perimetro),alfa,beta
funcion fhipotenusa(c1:real,c2:real):real
hip=0.0
hip=sqrt(pow(c1,2)+pow(c2,2))
retornar hip
fin de funcion
funcion fperimetro(c1:real,c2:real,hip:real):real
per=0.0
per=c1+c2+hip
retornar per
fin de funcion
procedimiento calculoaa(c1:real,c2:real,alfa:real,beta:real)
alfa=atan(c1/c2)
beta=atan(c2/c1)
fin de procedimiento
funcion ConASex(AlfaRad)
*Algoritmo
1.-inicio
2.-c1=0.0,c2=0.0,hipote=0.0,peri=0.0,alf=0.0,bet=0.0
3.-leer c1,c2
4.-hipote=fhipotenusa(c1,c2)
peri=fperimetro(c1,c2,hip)
calculoaa(c1,c2,alfa,beta)
5.-escribir hipote,peri,alf,bet
6.-fin
*Prueba de Escritorio
C1=4
C2=3
Peri=12
Alf=0
Bet=6.9495
}//fin de procedimiento
//programa principal
main(){
//declarar variables
double c1,c2,hip,peri,alfa,beta;
char sigue;
do{
//entrada de datos
cout<<"Ingrese el valor del cateto 1:";cin>>c1;
cout<<"Ingrese el valor del cateto 2:";cin>>c2;
//invocar varaibles
hip=fhipotenusa(c1,c2);
peri=fperimetro(c1,c2,hip);
calculoaa(c1,c2,alfa,beta);
//salida de datos
cout<<"La hipotenusa es:"<<hip<<endl;
cout<<"El perimetro del triangulo es"<<peri<<endl;
cout<<"El valor del angulo alfa es:"<<alfa<<endl;
cout<<"El valor del angulo beta es:"<<beta<<endl;
system("PAUSE");
cout<<"Desea continuar S/N:";cin>>sigue;
}while(sigue=='S') ;
}//fin de programa
S SESION08
Los arreglo nos permiten
SESION 08
ARREGLO DE DATOS
Solución:
*Análisis de datos
e:n(números),nb(numero a buscar)
s:m(mensaje),pos(posición)
funcion fbuscar(arr[]:entero,xnb:entero):entero
xpos=0,i=0
para i=0 hasta 4
si arr[i]=xnb entonces
xpos=i //si encontro
i=5 //permite finalizar la e.repetitiva
sino
xpos=-1//no encontro
fin de si
fin de para
retornar(xpos)
fin de funcion
*Algoritmo
1.-inicio
2.-anum[5]:0,nb=0,f=0,n=0,pos=0,m=''
3.-para f=0 hasta 4
leer n
anum[f]=n
fin de para
leer nb
4.-pos=fbuscar(anum,nb)
si pos>=0 entonces
m='si existe'
sino
m='no existe'
fin de si
5.-escribir pos,m
6.-fin
*Prueba de Escritorio
10-20-30-40-50
nb=30
m='si existe'
pos=2
Solución:
*Análisis de datos
E: n(número)
S: números intercalados del arreglo a y b en c
*Algoritmo
1.-inicio
2.-n=0,a[5]:0,b[5]:0,c[10]:0,i=0,j=0,r=0,k=0
3.-para i=0 hasta 4
leer n
a[i]=n
fin de para
para j=0 hasta 4
leer n
b[j]=n
fin de para
4.- para k=0 hasta 4
c[k+r]=a[k]
r=r+1
c[k+r]=b[k]
fin de para
5.-escribir
para k=0 hasta 9
escribir c[k]
fin de para
6.-fin
*Prueba de Escritorio
a[10-20-30-40-50]
b[60-70-80-90-100]
c[10-60-20-70-30-80-40-90-50-100]
/*
Ejercicio2:
Diseñar un algoritmo que permita almacenar cinco números en el arreglo a y b. Visualizar los
valores del arreglo a y b en forma intercalada al arreglo c.
*/
//librería de entrada y salida de datos
#include <iostream.h>
#include <conio.h>
//procedimiento principal
int main(){
//declarar variables
int n=0,i=0,j=0,r=0,k=0,y=0;
int a[5]={0}; //arreglo de datos estático
int b[5]={0}; //arreglo de datos estático
int c[10]={0}; //arreglo de datos estático
//entrada de datos
for(i=0;i<5;i++){
cout<<"Arreglo A número"<<(i+1)<<":";cin>>n;
a[i]=n;
}//fin de for
for(j=0;j<5;j++){
cout<<"Arreglo B número"<<(j+1)<<":";cin>>n;
b[j]=n;
}//fin de for
//proceso de datos
for(k=0;k<5;k++){
c[k+r]=a[k];
r=r+1;
c[k+r]=b[k];
}//fin de for
//salida de datos
for(y=0;y<=9;y++){
cout<<c[y]<<endl;
}//fin de for
getch();
} //fin procedimiento
3. Diseñar un algoritmo que permita registrar los sueldos de los n empleados en un arreglo
de datos. Visualizar sueldo mayor.
Solución:
*Análisis de datos
e:ne(número de empleados),sueldo
s:smayor
*Algoritmo
1.-inicio
2.-ne=0,sueldo=0.0,smayor=0.0,i=0
3.-leer ne
asueldo[ne]:0.0
para i=0 hasta ne
leer sueldo
asueldo[i]=sueldo
fin de para
5.-para i=0 hasta ne
si asueldo[i]>smayor entonces
smayor=asueldo[i]
fin de si
fin de para
6.-escribir smayor
7.-fin
*Prueba de Escritorio
ne=3
sueldo1=1000
sueldo2=2000
sueldo2=3000
smayor=3000
/*
Diseñar un algoritmo que permita registras n empleados y su sueldo en un arreglo de
datos. Visualizar sueldo mayor.
*/
//librería de e/s de datos por consola
#include <iostream.h>
#include <conio.h>
//permite utilizar el comando cls limpiar Pantallas
#include <stdlib.h>
//procedimiento principal
int main(){
//declarar variables
int ne,i;
double sueldo=0.0,smayor=0.0;
char rpta[2];
do{
//entrada de datos
cout<<"Ingresar número de empleados:";cin>>ne;
//proceso de datos
double asueldo[ne];
for(i=0;i<ne;i++){
cout<<"Ingresar sueldo "<<i+1<<":";cin>>sueldo;
asueldo[i]=sueldo;
}
for(i=0;i<ne;i++){
if(asueldo[i]>smayor){
smayor=asueldo[i];
}
}
//salida de datos
cout<<"el sueldo mayor es:"<<smayor<<endl;
cout<<"Desea seguir si/no:";cin>>rpta;
system("CLS"); //permite limpiar pantalla
}while(strcmp(rpta,"si")==0);
} //fin del procedimiento
4. Diseñar un arreglo de datos que permita almacenar cinco notas de un alumno visualizando su
promedio.
Solución:
*Análisis de datos
E:nota
S:p(promedio)
*Algoritmo
1.-inicio
2.-sn=0.0,p=0.0,n=0,i=0,nota=0.0
3.-leer n
4.-anotas[n]=0.0
para i=1 hasta n
leer nota
anotas[i]=nota
sn=sn+anotas[i]
fin de para
p=sn/n
4.-escribir p
5.-fin
*Prueba de Escritorio
anotas[1]=12
anotas[2]=14
anotas[3]=13
anotas[4]=16
anotas[5]=17
p=14,4
/*
4.Diseñar un arreglo de datos que permita almacenar cinco
notas de un alumno visualizando su promedio.
*/
//librerías de comandos de entrada y salida de datos por consola
#include <iostream.h>
#include <conio.h>
//procedimiento principal
int main(){
//declarar variables
double sn,p,nota;
int n,i;
//entrada de datos
cout<<"Ingresar cantidad de notas:";cin>>n;
double anotas[n];
//proceso de datos
for(i=0;i<n;i++){
cout<<"Ingresar Nota "<<i+1<<":";cin>>nota;
anotas[i]=nota;
sn=sn+anotas[i];
}
p=sn/n;
//salida de datos
cout<<"El promedio de los números es:"<<p;
getch();
}
Solución:
*Análisis de datos
E: n(número), t(pc de tierra), b(pc de bolsas), s(pc de semillas),
a(pc de abono)
S: m(mensaje), c(costo total), in(ingreso), g(ganancia)
funcion fcosto(xt:entero,xb:entero,xs:entero,xa:entero):entero
retornar xt+xb+xs+xa
fin función
*Algortimo
1.-inicio
2.-x[5]:0 ,z[5]:0 ,n=0, t=0, b=0, s=0, a=0, i=0, j=0, y=0, c=0, r=0,
in=0, g=0, m=''
3.-para i=0 hasta 4 //cantidades de plantas
leer n
x[i]=n
fin del para
para j=0 hasta 4 //precio de dicha variedades
leer n
z[j]=n
fin del para
leer t,b,s,a
4.-c=fcosto(t,b,s,a)
para y=0 hasta 4
r=x[y]*z[y]
in=in+r
fin de para
g=in-c
si g>0 entonces
m='HUBO GANANCIAS'
fin de si
si g<0 entonces
m='HUBO PÉRDIDAS'
fin de si
5.-escribir m,c,in,g
6.-fin
*Prueba de Escritorio
x[5]: 400,200,300,20,80
z[5]: 2,3,5,15,8
t=500
b=19
s=1000
a=400
m='HUBO GANANCIA'
C=1919
in=3840
g=1921
g=in-c;
if(g>0){
strcpy(m,"------------*HUBO GANANCIAS*-------------");
}
if(g<0){
strcpy(m,"------------*HUBO PERDIDAS*--------------");
}
//salida de datos
cout<<""<<endl;
cout<<m<<endl;
cout<<"El costo total es: "<<c<<endl;
cout<<"El ingreso es: "<<in<<endl;
cout<<"La ganancia es: "<<g;
getch();
} //fin del procedimiento principal
6. Diseñar un algoritmo que permita almacenar en un arreglos de datos los nombres de las
principales playas del sur y en otro arreglo de datos el número de bañistas en orden
correlativo. Visualizar los porcentajes de bañistas de cada playa en un arreglo de datos.
Solución:
*Análisis de datos
E: py(playas), n(número)
S: los porcentajes en un arreglo de datos
*Algoritmo
1.-inicio
2.-ap[5]:'', b[5]:0.0, c[5]:0.0, py='', i=0, j=0, k=0, y=0, n=0, bmy=0, bt=0,my=0.0
3.-para i=0 hasta 4
leer py
ap[i]=py
fin del para
para j=0 hasta 4
leer n
b[j]=n
fin del para
4.- para j=0 hasta 4
bt=bt+b[j]
fin del para
para k=0 hasta 4
c[k]=b[k]*100/bt
fin del para
my=c[0]
pos=0
si c[1]>my entonces
my=c[1]
pos=1
fin de si
si c[2]>my entonces
my=c[2]
pos=2
fin de si
si c[3]>my entonces
my=c[3]
pos=3
fin de si
si c[4]>my entonces
my=c[4]
pos=4
fin de si
5.-escribir
para y=0 hasta 4
escribir c[y]
fin del para
ap[pos]
6.-fin
*Prueba de Escritorio
ap[5]: 'san_pedro','silencio','san_bartolo','punta_negra','punta_hermosa'
b[5]: 1000,200,400,800,950
c[5]: 29.85,5.97,11.94,23.88,28.36
ap[pos]='san_pedro'
//salida de datos
cout<<""<<endl;
cout<<"PORCENTAJE DE BAÑISTAS"<<endl;
for(y=0;y<=4;y++){
cout<<"En la playa "<<(y+1)<<" : ";
cout<<fixed<<setprecision(2)<<c[y]<<"%"<<endl;
} //fin de for
cout<<""<<endl;
cout<<"Playa con mayor cantidad de bañistas:"<<endl;
cout<<v1[pos];
getch();
} //fin del procedimiento
Solución:
*Análisis de datos
E: n(número)
S: pa(porcentaje de chicas), pe(porcentaje de chicos), l(sexo predominante)
*Algoritmo
1.-inicio
2.-i=0, j=0, n=0, na=0, ne=0, nt=0.0, pa=0.0, pe=0.0, l='', a[5]:0, b[5]:0
3.-escribir 'NÚMERO DE ALUMNAS'
para i=0 hasta 4
leer n
a[i]=n
fin de para
escribir 'NÚMERO DE ALUMNOS'
para j=0 hasta 4
leer n
b[j]=n
fin de para
4.-para i=0 hasta 4
na=na+a[i]
fin de para
para j=0 hasta 4
ne=ne+b[j]
fin de para
si na>ne entonces
l='----*PREDOMINIO FEMENINO'
fin de si
si na<ne entonces
l='----*PREDOMINIO MASCULINO'
fin de si
si na=ne entonces
l='----*'
fin de si
nt=na+ne
pa=100*na/nt
pe=100-pa
5.-escribir pa,pe,l
6.-fin
*Prueba de escritorio
a[5]:6,10,14,12,8
b[5]:30,14,10,13,27
pa=34.72%
pe=65.28%
l='----*PREDOMINIO MASCULINO'
Solución:
*Análisis de datos
E: t(temperaturas)
S: m(media de temperaturas), c(número de temperaturas >= de la media)
*Algoritmo
1.-inicio
2.-i=0, j=0, c=0, t=0.0, s=0.0, m=0.0, tem[10]:0.0
3.-escribir 'TEMPERATURAS EN GRADOS CELSIUS'
para i=0 hasta 9
leer t
tem[i]=t
s=s+t
fin de para
4.-para i=0 hasta 9
s=s+tem[i]
fin de para
m=s/10
para j=0 hasta 9
si tem[j]>=m entonces
c=c+1
fin de si
fin de para
4.-escribir m,c
5.-fin
*Prueba de escritorio
tem[10]: 23,25.2,35,30.26,42,16,15.62,30,40.32,26.5
m=28.39
c=5
9. Diseñar un algoritmo que permita almacenar en dos arreglos de datos cuatro numeros
ingresados y genere un tercer arreglo que almacene la suma de los dos arreglos anteriores.
Solución:
*Análisis de datos:
E:n
S:sn
*Algoritmo:
1.-inicio
2.-n=0, a[4]:0, b[4]:0, c[4]:0, i, j, k
3.-para i = 0 hasta 3
leer n
a[i]=n
fin de para
para j = 0 hasta 3
leer n
b[j]=n
fin de para
4.-para k = 0 hasta 3
c[k]=a[k]+b[k]
fin para
5.-fin
*prueba de escritorio:
a[4]= 1-2-3-4
b[4]= 5-6-7-8
c[4]= 6-8-10-12
//salida de datos
for(j=0; j<4; j++){
cout<<"Arreglo C numero"<<(j+1)<<": "<<c[j]<<endl;
}
system("PAUSE");
}//fin de programa
10. Diseñar un algoritmo para un conjunto de 10 personas se desea almacenar su edad. Cuál
es la mayor edad y cuántas veces se repite la mayor edad.
Solución:
*Análisis de datos
E:e(edad)
S:me(mayor edad),cont(conteo)
*Algoritmo
1.-inicio
2.-e=0,i=0,me=0,cont=0,edad[10]:0
3.-para i=0 hasta 9
leer e
edad[i]=e
fin de para
me=edad[0]
para i=1 hasta 9
si edad[i]>me entonces
me=edad[i]
fin de si
fin de para
cont=0
para i=0 hasta 9
si edad[i]=me entonces
cont=cont+1
fin de si
fin de para
4.- escribir me,cont
5.-fin
*Prueba de Escritorio
e1=15
e2=16
e3=17
e4=16
e5=18
e6=18
e7=19
e8=20
e9=18
e10=20
me=20
cont=2
getch();
}//fin de procedimiento
[ SESION 09
Las matrices de datos permiten
columnas.
SESION 09
MATRICES DE DATOS
1. Diseñar un algoritmo que permita registrar números enteros dentro de una matriz de
3x3. Visualizar la suma de los números, la suma de los n pares, la cantidad de los n
impares.
Solución:
*Análisis de datos
E:n(números)
S:se(suma elementos),sp(suma pares),ci(cantidad de impares)
*Algoritmo
1.-inicio
2.-n=0,se=0,sp=0,ci=0,f=0,c=0,mnum[3,3]:0,r=0
3.-para f=0 hasta 2 //fila
para c=0 hasta 2 //columna
leer n
mnum[f][c]=n
fin de para
fin de para
4.-para f=0 hasta 2 //fila
para c=0 hasta 2 //columna
se=se+mnum[f][c]
r=residuo(mnum[f][c]/2)
si r=0 entonces
sp=sp+mnum[f][c] //suma de pares
sino
ci=ci+1 //contador de impares
fin de si
fin de para
fin de para
5.-escribir se,sp,ci
6.-fin
*Prueba de escritorio
n=1-2-3-4-5-6-7-8-9
se=45
sp=20
ci=5
2. Diseñar un algoritmo que permita registrar nueve números ingresados en un matriz 3x3.
Visualizar la suma de la diagonal principal, secundaria, suma de datos por filas y columnas.
*Análisis de datos
E:n(numero)
S:sdp,sds,afila[],sc1,sc2,sc3
*Algoritmo
1.-inicio
2.-n=0,f=0,c=0,mnum[3][3]:0,afila[3]:0,sfila=0,sc1=0,sc2=0,sc3=0,sdp=0,sds=0
3.-para f=0 hasta 2 //fila
para c=0 hasta 2 //columna
leer n
mnum[f,c]=n
fin de para
fin de para
4.-para f=0 hasta 2 //fila
para c=0 hasta 2 //columna
//diagonal principal
si f=c entonces
sdp=sdp+mnum[f][c]
fin de si
//diagonal secundaria
si(f+c)=2 entonces
sds=sds+mnum[f][c]
fin de si
//acumulador de filas
sfila=sfila+mnum[f][c]
fin de para
afila[f]=sfila
sfila=0 //volver a inicializar la variable
//acumulador de columnas
sc1=mnum[f][0]
sc2=mnum[f][1]
sc3=mnum[f][2]
fin de para
5.-escribir sdp,sds,sc1,sc2,sc3,afila[0],afila[1],afila[2]
6.-fin
#include<iostream.h>
#include<conio.h>
//procedimiento principal
int main(){
//declarar variables
int n,f,c,sc1=0,sc2=0,sc3=0,sdp=0,sds=0,afila[3],sfila=0;
int mnum[3][3];
//entrada de datos
for(f=0;f<3;f++){ //fila
for(c=0;c<3;c++){ //columna
cout<<"Ingresar numero:";cin>>n;
mnum[f][c]=n;
}
}
//proceso de datos
for(f=0;f<3;f++){ //fila
for(c=0;c<3;c++){ //columna
//diagonal principal
if(f==c){
sdp=sdp+mnum[f][c];
}
if((f+c)==2) {
sds=sds+mnum[f][c];
}
//acumulador de filas
sfila=sfila+mnum[f][c];
}
afila[f]=sfila;
sfila=0; //inicializar variable
//acumulador de columnas
sc1= sc1+mnum[f][0];
sc2= sc2+mnum[f][1];
sc3= sc3+mnum[f][2];
}
//salida de datos
cout<<"La suma de la diagonal principal es: "<<sdp<<endl;
cout<<"La suma de la diagonal secundaria es: "<<sds<<endl;
cout<<"La suma de fila 1: "<<afila [0]<<endl;
cout<<"La suma de fila 2: "<<afila [1]<<endl;
cout<<"La suma de fila 3: "<<afila [2]<<endl;
cout<<"La suma de comuna 1: "<<sc1<<endl;
cout<<"La suma de comuna 2: "<<sc2<<endl;
cout<<"La suma de comuna 3: "<<sc3<<endl;
getch();
}
3. Diseñar un algoritmo que permita registrar cinco personas dentro de una matriz de datos y
realizar una búsqueda de la persona por el DNI. Visualizando el nombre de la persona si la
búsqueda es satisfactoria sino un mensaje persona no existe.
Solución:
*Análisis de datos
E:DNI,nombre,xdni(dni a buscar)
S:xnombre
*Algoritmo
1.-inicio
2.-DNI='',nombre='',xdni='',xnombre='',i=0,adni[5]:'',pos=0
anombre[5]:'',m=''
3.-para i=0 hasta 4
leer DNI,nombre
adni[i]=DNI
anombre[i]=nombre
fin de para
4.-leer xdni
para i=0 hasta 4
si adni[i]=xdni entonces
pos=i //posición donde se encuentra el elemento buscado
i=5
sino
m='persona no existe'
fin de si
fin de para
5.-escribir
si pos>=0 entonces
escribir anombre [pos]
sino
escribir m
fin de si
6.-fin
Solución:
*Análisis de datos
E: nom(nombre del animal), clas(tipo de alimentación), n(número)
S: Datos de la especie con mayores egresos
*Algortimo
1.-inicio
2.-nom='', clas='', n=0.0, i=0, f=0, c=0, k=0, pos=0,
my=0.0, m[5,3]:0.0, cd[5]:0.0, anom[5]:''
aclas[5]:''
3.-para i=0 hasta 4
escribir 'ESPECIE'(i+1)
leer nom, clas
anom[i]=nom
aclas[i]=clas
fin de para
para f=0 hasta 4
escribir 'ESPECIE'(f+1)': PxPQT -> CANTIDAD'
para c=0 hasta 1
leer n
m[f,c]=n
fin de para
fin de para
4.-para k=0 hasta 4
cd[k]=m[k,0]*m[k,1]
fin de para
my=cd[0]
pos=0
si cd[1]>my entonces
my=cd[1]
pos=1
fin de si
si cd[2]>my entonces
my=cd[2]
pos=2
fin de si
si cd[3]>my entonces
my=cd[3]
pos=3
fin de si
si cd[4]>my entonces
my=cd[4]
pos=4
fin de si
5.-escribir 'ESPECIE'(pos+1)'/'anom[pos]'/'aclas[pos]
6.-fin
*Prueba de Escritorio
anom[5]: 'PUMA', 'OVEJA', 'CONDOR', 'MONO', 'JIRAFA'
aclas[5]: 'CARNIVORO', 'HERBIVORO', 'CARNIVORO', 'OMNIVORO', 'HERBIVORO'
n= 500, 10, 100, 8, 300, 9, 400, 6, 200, 8
'ESPECIE 1'
anom[pos]: 'PUMA'
aclas[pos]: 'CARNIVORO'
if(cd[4]>my){
my=cd[4];
pos=4;
}
//salida de datos
cout<<""<<endl;
cout<<"Genera mas egresos:"<<endl;
cout<<"****************** ESPECIE "<<(pos+1)<<" / "<<v1[pos]<<" / "<<v2[pos];
getch();
} //fin de procedimiento principal
Solución:
*Análisis de datos
E: cod(código de región), reg(región), cap(capital), xcod, xcap
S: m(mensaje)
*Algoritmo
1.-inicio
2.-cod='', reg='', cap='', acod[7]:'', areg[7]:'', acap[7]:'', i=0,
xcod='', xcap='', m=''
3.-para i=0 hasta 6
leer cod, reg, cap
acod[i]=cod
areg[i]=reg
acap[i]=cap
fin de para
4.-escribir 'PONTE A PRUEBA'
leer xcod
para i=0 hasta 6
si acod[i]=xcod entonces
pos=i
escribir areg[pos]
i=7
fin de si
fin de para
escribir '¿CUAL ES SU CAPITAL?'
leer xcap
para i=0 hasta 6
si acap[pos]=xcap entonces
m='Respuesta Correcta'
sino
m='Respuesta Incorrecta'
fin de si
fin de para
5.-escribir m
6.-fin
*Prueba de Escritorio
acod[7]: 1, 2, 3, 4, 5, 6, 7
areg[7]: 'LAMBAYEQUE', 'ANCASH', 'UCAYALI', 'LORETO', 'AMAZONAS', 'JUNIN',
'APURIMAC'
acap[7]: 'CHICLAYO', 'HUARAZ', 'PUCALLPA', 'IQUITOS', 'CHACHAPOYAS',
'HUANCAYO', 'ABANCAY'
xcod= '3'
areg[pos]='UCAYALI'
xcap= 'IQUITOS'
m='Respuesta Incorrecta'
for(i=0;i<=6;i++){
if(v3[pos]==xcap){
strcpy(m,"Respuesta Correcta");
}else{
strcpy(m,"Respuesta Incorrecta");
i=7;
}
}
//salida de datos
cout<<""<<endl;
cout<<"-------------"<<m;
getch();
} //fin de procedimiento principal
6. Diseñar un algoritmo que permita registrar en una matriz 4 líneas de transporte tomando en
cuenta su distrito de partida y su distrito de destino, en la ultima fila se debe registre NPA
(no podemos ayudarlo). Realizar una búsqueda con el distrito al que quiero dirigirme y
visualizar los datos de la ruta de transporte que puedo usar si la bùsqueda es satisfactoria
sino mostrar el mensaje NPA.
Solución:
*Análisis de datos
E: l(lìnea de transpote), dp(distrito de partida), dd(destrito de destino),
dqd(distrito a dirigirme)
S: Datos de la empresa o NPA
*Algortimo
1.-inicio
2.-l='', dp='', dd='', al[5]:'', adp[5]:'', add[5]:'', i=0, pos=0, dqd=''
3.-para i=0 hasta 4
leer l, dp, dd
al[i]=l
adp[i]=dp
add[i]=dd
fin de para
4.-escribir '¿A DONDE QUIERE DIRIGIRSE'
leer dqd
para i=0 hasta 4
si add[i]=dqd entonces
pos=i
i=5
sino
pos=4
fin de si
fin de para
5.-escribir al[pos], adp[pos], add[pos]
6.-fin
*Prueba de Escritorio
al[5]: 'SM-27', 'SO-16', 'SO-18','NO-01','NPA'
adp[5]:
'PACHACAMAC','SAN_BARTOLO','VILLA_EL_SALVADOR','VILLA_EL_SALVADO
R','-'
add[5]: 'BREÑA','SAN_MIGUEL','CARABAYLLO','COMAS','-'
dqd=LURIN
NPA: ---
//procedimiento principal
int main(){
//declarar variables
int n, f, c;
int a[2][2];
int b[2][2];
int s[2][2];
//entrada de datos
for(f=0;f<2;f++){ // filas
for(c=0;c<2;c++){ // columnas
cout<<"Matriz A. Ingresar numero de la fila "<<(f+1)<<": ";cin>>n;
a[f][c]=n;
}
}
for(f=0;f<2;f++){ // filas
for(c=0;c<2;c++){ // columnas
cout<<"Matriz B. Ingresar numero de la fila "<<(f+1)<<": ";cin>>n;
b[f][c]=n;
}
}
// proceso de datos
cout<<endl;
for(f=0;f<2;f++){ // filas
for(c=0;c<2;c++){ // columnas
s[f][c]=a[f][c]+b[f][c];
Solución:
*Analisis
E:m(matriz ingresada)
S:-----
*Algoritmo
1.-inicio
2.- n=0,i=0,j=0,m[3][3]:0
3.-//leer m
para i=1 hasta 3
para j=1 hasta 3
leer n
m[i][j]=n
fin para
fin para
4.- //imprimir matriz transpuesta
para j=1 hasta 3
para i=1 hasta 3
imprimir m[i][j]=n
fin para
fin para
5.- fin
*Prueba de escritorio
M =(/ 1 2 3 - 4 5 6 - 7 8 9 /)
MT =(/ 1 4 7 - 2 5 8 - 3 6 0/)
#include <iostream.h>
#include <conio.h>
//PROGRAMA PRINCIPAL
int main(){
//declaracion de variables
int n,m[3][3],i,j;
//entrada de la matriz
cout<<"Ingresar elementos de la matriz"<<endl;
for (i=1;i<=3;i++){
for (j=1;j<=3;j++){
cin>>n;
m[i][j]=n;
}//end for J
}//end for
for (j=1;j<=3;j++){
cout<<endl;
for (i=1;i<=3;i++){
cout<<m[i][j]<<" ";
}
}
getch();
}//FIN DE PROGRAMA
Solución:
*Analisis de datos
E:m1(matriz ingresada)
S:m2(matriz suma),m3(matriz producto)
*subrutina
procedimiento suma(m[3][3]:entero)
i=0,j=0,m2[3][3]:0
para i=0 hasta 2
para j=0 hasta 2
m2[i][j]=2*m[i][j]
imprimir m2[i][j]
fin para
fin para
procedimiento producto(m[3][3]:entero)
i=0,j=0,m3[3][3]:0
para i=0 hasta 2
para j=0 hasta 2
m3[i][j]=m[i][j]*m[i][j]
imprimir m3[i][j]
fin para
fin para
*Algoritmo
1.- inicio
2.- i=0,j=0,n=0,m1[3][3]:0
3.- //leer m1
para i=0 hasta 2
para j=0 hasta 2
leer n
m1[i][j]=n
fin para
fin para
4.- //llamando a las subrutinas
suma(m1)
producto(m1)
5.- fin
*Prueba de escritorio
m1= 1-2-3-4-5-6-7-8-9
M+M= 2-4-6-8-10-12-14-16-18
M*M= 1-4-9-16-25-36-49-64-81
#include <iostream.h>
#include <conio.h>
void suma(int m[3][3]){
int i,j,m2[3][3];
cout<<"La matriz suma M+M= "<<endl;
for (i=0;i<=2;i++){
cout<<endl;
for (j=0;j<=2;j++){
m2[i][j]=2*m[i][j];
cout<<m2[i][j]<<" ";
}//
}//end for
}//end sub
//programa principal
int main(){
//declarando variables
int i,j,n,m1[3][3];
//entrada de datos
cout<<"Infresar los elementos de la matriz"<<endl;
for (i=0;i<=2;i++){
for (j=0;j<=2;j++){
cin>>n;
m1[i][j]=n;
}//
}//end for
//salida de datos
suma(m1);
cout<<endl;
producto(m1);
getch();
}//fin de programa
10. Diseñar un algoritmo para un conjunto de 5 alumnos se desea almacenar las notas de sus
4 prácticas y presentar el promedio por alumno, sabiendo que este se calcula eliminando la
nota más baja.
Solución:
*Análisis de datos
E:nt(nota)
S:promedios
*Algoritmo
1.-inicio
2.-nt=0.0,s=0.0,min=0.0,f=0,c=0,nota[5,4]:0.0
3.-para f=0 hasta 4//fila
para c=0 hasta 3//columna
leer nt
nota[f,c]=nt
fin de para
fin de para
4.-para f=0 hasta 4
s=nota[f,0]
min=nota[f,0]
para c=1 hasta 3
si nota[f,c]<min entonces
min=nota[f,c]
fin de si
s=s+nota[f,c]
fin de para
escribir (s-min)/3
fin de para
5.-fin
*Prueba de Escritorio
notas del alumno 1 = 16-14-15-13
notas del alumno 2 = 17-14-20-13
notas del alumno 3 = 11-15-18-18
notas del alumno 4 = 14-15-18-19
notas del alumno 5 = 15-17-14-18
promedio de notas del alumno 1 = 15
promedio de notas del alumno 2 = 17
promedio de notas del alumno 3 = 17
promedio de notas del alumno 4 = 17.3333
promedio de notas del alumno 5 = 16.6667