Está en la página 1de 21

Trabajo colaborativo 2

Elaboracin de Flujo gramas en DFD y Pseint

Por:
David Fernando Rosero Guerreo

A:
Ernesto Orlando Parra Can.

Curso de Algoritmos

Universidad Nacional Abierta y a Distancia UNAD


Abril 8 2015
Solucin de ejercicios.

1. Se pide desarrollar el algoritmo del juego Adivina un Nmero, con las siguientes
caractersticas:
a) El nmero debe estar en el rango de 1 a 1000 (generado aleatoriamente) Debe tener dos
niveles nivel bsico y nivel experto,, el nivel bsico no tendr restricciones en nmero de
oportunidades, adems se le dar indicaciones como Caliente, Frio.. El Nivel experto
solo tendr 5 oportunidades con mensajes de ayuda lejos, cerca
b) Al finalizar debe informar el nmero de intentos realizados antes de encontrar la
respuesta correcta.
Proceso Adivina_el_nmero
Escribir ('Ingresa el dificaultad. 1.Para Basico y 2. para Experto')
Leer dif
Si dif=1 Entonces
ran<-azar(1000)
int<-0
cont<-0
Escribir ('Intente adivinar el nmero en el que el computador esta pensando... el rango es de
1 a 1000')
Mientras cont=0 Hacer
int<-int+1
Leer num
Si num=ran Entonces
cont<-1
Sino
Si num<ran Entonces
Escribir ('Caliente!!! le falta...')
Sino
Escribir ('Frio!!! el numero se paso...')
FinSi
FinSi
FinMientras
Escribir ('Excelente lo logr el numero es '),(ran),(' lo hizo en '),(int),(' intentos.')
Sino
Si dif=2 Entonces
ran<-azar(1000)
int<-0
cont<-0
Escribir ('Intente adivinar el nmero en el que el computador esta pensando....el rango es 1
a 1000')
Mientras cont=0 Hacer
int<-int+1

Leer num
Si num=ran Entonces
cont<-1
Sino
Si num<ran Entonces
Escribir ('Cerca!!! le falta...')
Sino
Escribir ('Lejos !!! el numero se paso...')
FinSi
FinSi
Si int=5 Entonces
cont<-1
FinSi
FinMientras
Si int=5 Entonces
Escribir ('Perdiste. Intentos permitidos 5... ser la proxima')
Sino
Escribir ('Excelente lo logr el numero es '),(ran),(' lo hizo en '),(int),(' intentos.')
FinSi
Sino
Escribir ('Por favor ingrese: 1.Facil 2. Dificil')
FinSi
FinSi
FinProceso
Este Algoritmo pide que ingrese una dificultad, bsico y experto, luego toma un valor al
azar de 1 a 1000 que almacena en una variable llamada ran, luego pide adivinar el nmero,
almacena el numero en la variable num, luego la compara, y le dice que si num es menor
que ran le dice que le falta y si es al contrario le dice que se paso, el nivel bsico no tiene
limites de intentos, en cambio el nivel experto tiene 5 intentos, esto se hace con un
acumulador mediante el ciclo mientas. Si adivina el nmero termina diciendo el nmero de
intentos y el numero a adivinar.

2. Es necesario realizar un algoritmo que funcione como una calculadora con las 4
funciones bsicas (opcional puede incluir otra funcin). El algoritmo termia y entrega el
resultado al presionar la tecla =
Proceso sin_titulo
Escribir ('Ingrese la operacin que desea hacer: 1.Suma 2.Resta 3.Multiplicacin 4.Division
5. Potenciacin.')
Leer op
Si op=1 Entonces
Escribir ('Ingrese los valores a sumar')
Leer a,b
c<-a+b

Escribir ('El resultado de la suma es '),c


Sino
Si op=2 Entonces
Escribir ('Ingrese los valores a restar')
Leer a,b
c<-a-b
Escribir ('El resultado de la resta es '),c
Sino
Si op=3 Entonces
Escribir ('Ingrese los valores a multiplicar')
Leer a,b
c<-a*b
Escribir ('El resultado de la multipliacin '),c
Sino
Si op=4 Entonces
Escribir ('ingrese los valores a dividir')
Leer a,b
c<-a/b
Escribir ('El resultado de la division es '),c
Sino
Si op=5 Entonces
Escribir ('Ingrese 2 numeros, el segundo ser el valor de la potencia')
Leer a,b
c<-a^b
Escribir ('La potencia de '),a,(' elevado a la '),b,(' es '),c
FinSi
FinSi
FinSi
FinSi
FinSi
FinProceso
Aqu se hizo un men, hay 5 opciones que le pide al usuario, cuando el usuario digita,
entonces lo almacena en la variable op, luego pie 2 nmeros con los que va a hacer
operaciones y hace los clculos y los almacena en dichas variables. Por ltimo los muestra
los resultados.

3. Se requiere que solo con la utilizacin de ciclos y condicionales, usted pueda convertir
un nmero decimal < a 5000 a nmero Romano.
Proceso dav
Escribir ("Ingrese entre 1 y 5000 y pasar a Romano");
Leer n
si n<=5000 entonces
mile<-TRUNC(n/1000);
x<-n%1000;
cent<-TRUNC(x/100);
m<-TRUNC(n/10);
dece=m%10;
unid=n%10;
NR="";
Sino
Escribir ("El nmero debe ser menor a 5000");
FinSi
si n=0 entonces
Escribir ("El nmero 0 no tiene equivalencia en romanos");
FinSi
Segun mile Hacer
1:NR<-NR+"M";
2:NR<-NR+"MM";
3:NR<-NR+"MMM";
4:NR<-NR+"IV";
5:NR<-NR+"V";
Fin Segun
Segun Cent Hacer
1:NR<-NR+"C";
2:NR<-NR+"CC";
3:NR<-NR+"CCC";
4:NR<-NR+"CD";
5:NR<-NR+"D";
6:NR<-NR+"DC";
7:NR<-NR+"DCC";

8:NR<-NR+"DCCC";
9:NR<-NR+"CM";
FinSegun
Segun dece Hacer
1:NR<-NR+"X";
2:NR<-NR+"XX";
3:NR<-NR+"XXX";
4:NR<-NR+"XL";
5:NR<-NR+"L";
6:NR<-NR+"LX";
7:NR<-NR+"LXX";
8:NR<-NR+"LXXX";
9:NR<-NR+"XC";
FinSegun
Segun unid Hacer
1:NR<-NR+"I";
2:NR<-NR+"II";
3:NR<-NR+"III";
4:NR<-NR+"IV";
5:NR<-NR+"V";
6:NR<-NR+"VI";
7:NR<-NR+"VII";
8:NR<-NR+"VIII";
9:NR<-NR+"IX";
FinSegun
Escribir n,(" en Romano "), NR;
FinProceso
En Este algoritmo se hizo que el usuario ingresara un nmero decimal que se almacena en
la variable n, luego se limit esa variable que se menor a 5000, se defini variables a dividir
de manera exacta con enteros, funcin trunc, se defini variables para determinar los miles,
centenas, decenas y unidades, de este modo se determin el valor posicional de una cifra,
luego a cada valor se le asign una letra que representa el numero romano y por ltimo que
muestre ese resultado, en la variable NR.

4. Debe desarrollar un algoritmo que contenga el siguiente men

(1) Convertir de Decimal a Binario


(2) Convertir de Decimal a Octal
(3) Convertir de Binario a Decimal
(4) Salir
Proceso Bin_Octa_Deci
Escribir ("1.Para trasformar de Decimal a Binario");
Escribir ("2.Para trasformar de Decimal a Octal");
Escribir ("3.Para trasformar de Binario a Decimal");
Escribir ("4.Salir");
leer op
oc<-0;
i<-0;
si op=0 entonces
Escribir ("Digite unicamente del 1 al 4");
Sino
si op<0 Entonces
Escribir ("Digite unicamente del 1 al 4");
Sino
si op=1 Entonces
Escribir ("Digite un numero decimal para trasformarlo a Binario");
leer m
nm<-m
m<-TRUNC(m)
In<-"";
si m>0 entonces
Mientras m>0 Hacer
bin<-m%2=0;
si bin Entonces
In<-"0"+In;
Sino
In<-"1"+In;
FinSi
m<-TRUNC(m/2);
Fin Mientras
Escribir ("El nmero decimal es "),nm,(" en Binario sera "), In;
sino
si m=0 entonces
Escribir ("0")
Sino
Escribir ("Ingrese solo nmeros postivos");
FinSi
FinSi

Sino
si op=2 Entonces
Escribir ("Digite un numero decimal para trasformarlo a Octal");
leer n
on<-n
si n>0 entonces
repetir
r<-n MOD 8
oc<-oc+10^i*r
i<-i+1
n<-trunc(n/8)
Hasta Que n<8
Sino
si n=0 Entonces
Escribir ("0");
Sino
Escribir ("Ingrese solo nmeros postivos");
FinSi
finsi
oc<-oc+10^i*n
Escribir ("El nmero decimal es "), on, (" su Octal sera "), oc
;
Sino
si op=3 Entonces
Escribir ("Digite un numero Binario para trasformarlo a Decimal");
Leer n
ps<-n
Mientras n>0 Hacer
si n>0 Entonces
c<-n
res<-1
dec<-0
Mientras c>1 Hacer
dec<-dec+(c%10)*res
c<-trunc(c/10)
res<-res*2
Fin Mientras
dec<-dec+(c%10)*res
Escribir ("El nmero binario es "),ps,(" en decimales sera "), dec
n=0
FinSi
Fin Mientras
Sino
si op=4 Entonces
Escribir ("Fin")

Sino
si op>4 Entonces
Escribir ("Digite unicamente del 1 al 4");
FinSi
FinSi
FinSi
FinSi
FinSi
FinSi
FinSi
FinProceso
Se trabaj este Algoritmos de manera que el usuario pueda escoger de un men 4 opciones,
dependiendo de la opcin con el comando si entonces, se pudo delimitar las operaciones,
para el caso de binarios, se us la variable m, as mediante divisiones en su parte entera
poder pasar de la base diez a la dos, y asignar a cada residuo un cero si es exacta o un uno
si hay residuo, para la trasformacin del decimal a octal, se us lo miso, la variable fue, n,
con divisiones exactas y mediante repeticiones hasta que el residuo se menor a 8, por
ultimo pasar de binario a decimal se us la variable n, con un ciclo mientras para ir
multiplicando los residuos por 2, hasta obtener el numero decimal, por ltimos se muestra
los resultados.

5. Realizar un Algoritmo que permita simular el juego de Dados, el algoritmo debe


permitir ingresar los nombres de los jugadores (2) y la cantidad de dinero a apostar
(ejemplo $ 2000 por jugador), teniendo en cuenta que en cada jugada puede ganar o perder
$500. Se permite el lanzamiento jugador 1 generando el numero aleatorios (1..6), luego
jugador 2. El algoritmo lleva el acumulado de ganancia por cada uno de los jugadores. El
programa termina cuando uno de los jugadores ha quedado en Banca Rota o decidan no
continuar.
Proceso sin_titulo
nom1<-"";
nom2<-"";
Escribir ("Bienvenidos al Juego de azar de Dados")
Escribir ("Ingrese el nombre del Jugador 1");
Leer nom1
Escribir ("Ingrese el nombre del Jugador 2");
leer nom2
Definir bote_jug1 como entero
Definir bote_jug2 como entero
repetir
Escribir ("Ingrese el bote inicial de apuesta de "), nom1;
leer bote_jug1
si bote_jug1>500 entonces
Escribir ("El Bote de "), nom1, (" es de $"),bote_jug1, (" Recuerde que en cada
lanzamiento se apostar $500");
Sino
Escribir ("la apuesta minima es $500");
finsi
hasta que bote_jug1>500
repetir
Escribir ("Ingrese el bote inicial de apuesta de "), nom2;
leer bote_jug2
si bote_jug2>500 entonces

Escribir ("El Bote de "), nom2, (" es de $"),bote_jug2, (" Recuerde que en cada
lanzamiento se apostar $500");
Sino
Escribir ("la apuesta minima es $500");
finsi
hasta que bote_jug2>500
Repetir
x<-azar(6)+1;
z<-azar(6)+1;
Repetir
Escribir ("Jugador "), nom1, (" Desea lanzar los dados s/n");
int_jug1="";
leer int_jug1
si int_jug1="s" O int_jug1="S" Entonces
Escribir ("El dado muestra el numero "), x, (" para el jugador "), nom1
Sino
Escribir ("desea lanzar los dados s/n");
FinSi
Hasta Que int_jug1="s" o int_jug1="S";
Repetir
Escribir ("Jugador "), nom2, (" Desea lanzar los dados s/n");
int_jug2="";
leer int_jug2
si int_jug2="s" O int_jug2="S" Entonces
Escribir ("El dado muestra el numero "), z, (" para el jugador "), nom2
Sino
Escribir ("desea lanzar los dados s/n");
FinSi
Hasta Que int_jug2="s" o int_jug2="S";
si x=z entonces
Escribir ("Es un empate");
Sino
si x>z Entonces
Escribir ("Gana el jugador "), nom1
bote_jug1<-bote_jug1+500
bote_jug2<-bote_jug2-500
Escribir ("el bote de "), nom1, (" es de $"), bote_jug1
Escribir ("el bote de "), nom2, (" es de $"), bote_jug2
Sino
Escribir ("Gana el Jugador "), nom2
bote_jug1<-bote_jug1-500
bote_jug2<-bote_jug2+500
Escribir ("el bote de "), nom1, (" es de $"), bote_jug1
Escribir ("el bote de "), nom2, (" es de $"), bote_jug2

FinSi
FinSi
Hasta Que bote_jug1<500 o bote_jug2<500;
si bote_jug1>500 entonces
Escribir ("El ganador es "), nom1
FinSi
si bote_jug2>500 entonces
Escribir ("El ganador es "), nom2
FinSi
FinProceso
En este algoritmo se define 2 variables como texto, para ingresar los nombre, luego se pide
que cada jugador ingrese lo que desea apostar, se verifica que la apuesta sea mayor a 500, a
dos variables x,y se le asignan valores al azar, se utiliza el comando de repeticin con el
objetivo de comparar las apuestas de cada jugador, si uno gana se le aumenta 500, si pierde
se le quita, cuando uno de los dos jugadores tiene menos de 500 pierde el juego. Por ultimo
me muestra quien gano y con cunta plata.

6. Cree un algoritmo que capture un mes en nmeros y el software muestre un mensaje que
indique cuantos das tiene ese mes. Ejemplo: si se digita "07", el algoritmo debe mostrar
"Julio, tiene treinta un das". El algoritmo debe tambin advertir que si se trata de febrero
tiene 28 das, pero si el ao fuera bisiesto tendra 29
Proceso mes
m<-0
abi<-''
res<-''
Repetir
Escribir ('Escribir el numero del mes')
Leer m
Si m>0 Y m<13 Entonces
Si m=2 Entonces
Escribir ('el ao es biciesto s/n')
Leer abi
Si abi='s' O abi='S' Entonces
Escribir ('El mes es Febero y por ser ao biciesto tiene 29 das')
FinSi
Si abi='n' O abi='N' Entonces
Escribir ('El mes es Febero y tiene 28 das')
FinSi
FinSi
Sino
Escribir ('recuerde que los meses son 12')
FinSi
Si m=1 Entonces
Escribir ('El mes es Enero y tiene 31 das')
FinSi
Si m=3 Entonces
Escribir ('El mes es Marzo y tiene 31 das')
FinSi
Si m=4 Entonces
Escribir ('El mes es Abril y tiene 30 das')
FinSi
Si m=5 Entonces
Escribir ('El mes es Mayo y tiene 31 das')
FinSi
Si m=6 Entonces
Escribir ('El mes es Junio y tiene 30 das')
FinSi
Si m=7 Entonces
Escribir ('El mes es Julio y tiene 31 das')
FinSi

Si m=8 Entonces
Escribir ('El mes es Agosto y tiene 31 das')
FinSi
Si m=9 Entonces
Escribir ('El mes es Septiembre y tiene 30 das')
FinSi
Si m=10 Entonces
Escribir ('El mes es Octubre y tiene 31 das')
FinSi
Si m=11 Entonces
Escribir ('El mes es Noviembre y tiene 30 das')
FinSi
Si m=12 Entonces
Escribir ('El mes es Diciembre y tiene 31 das')
FinSi
Escribir ('Desea Intentarlo otra ves? s/n')
Leer res
Hasta Que res='n' O res='N'
FinProceso
Este algoritmo almacena un nmero del 1 al 12 luego se le pide que compare los nmeros y
en particular cuando el mes es 02 o sea, febrero el programa pregunta si ese ao es bisiesto,
esto permite determinar si febrero tendr 29 das, el flujo grama continua hasta que el
usuario determine, puesto que tiene una repeticin de genera un ciclo que finaliza si el
usuario ingresa la letra n

7. Realizar un algoritmo que permita validar una clave de 5 dgitos con 3 intentos de
acceso, en caso de ingresar de manera errada debe generar el mensaje Intente
Nuevamente, una vez concluidos los el sistema debe generar un mensaje de bloqueo
Proceso Contra
clave<-12345
int<-0;
cont<-3
Repetir
Escribir ("Ecriba la Contrasea, !!!RECUERDE SON 3 INTENTOS");
leer int
si int=clave entonces
Escribir ("Bienvenido al sistema_curso de Algortimos");
int=4
Sino
int=int+1
cont<-cont-1
Escribir ("Intente nuevamente tiene "), cont, (" intentos");
FinSi
Hasta Que cont=0 O int=4
si cont=0 entonces
Escribir ("ACCESO DENEGADO");
Escribir ("adios;)")
FinSi
FinProceso
Este algoritmo tiene predeterminado un numero en una variable, llamada Clave, posee una
repeticin que es un ciclo que se lo pone con el fin de que mediante un contador determine
el nmero de intentos que el usuario hace, se pide que el usuario haga mximo 3 intentos,
estos intentos o nmeros que ingresa se acumulan en la variable int, que se compara con la
variable clave, si coinciden el mensaje ser de bienvenido, sino luego de 3 intento hay un
mensaje que dice acceso denegado.

9. Desarrollar un algoritmos que permita realizar la sumatoria de los primeros 100 nmeros
utilizando los 3 ciclos (para, repita, mientras)
Proceso Sumar100numeros
Repetir
suma<-0;
I<-0;
Para I<-1 Hasta 100 Con Paso 1 Hacer
Escribir "Introduce el numero ",I;
Leer Num;
suma<-suma+Num;
Fin Para
Escribir "La suma total es ", suma;
Escribir " ";
Escribir "?Quieres volver a empezar. S/N";
Leer seguir;
Mientras seguir<>"n" y seguir<>"N" y seguir<>"s" y seguir<>"S" Hacer
Escribir "Tiene que escribir S o N.";
Leer seguir;
FinMientras
Hasta Que seguir = "n" o seguir = "N"
FinProceso
Este algoritmo usa varios tipos de ciclos, el ciclo para que se lo usa con el objetivo de ir
contando el nmero de veces que se debe ingresar nmeros a sumar, tambin se usa el
comando mientras, con el objetivo de volver a comenzar el programa. Y se utiliza adems
un ciclo de repeticin si se quiere comenzar con el juego otra vez.

10. Encontrar el mayor y el promedio de una serie de nmeros, donde solo se permiten
ingreso de nmeros positivos, (en caso de negativos indicar con un mensaje que es
negativo), el programa entrega el resultado cuando el valor ingresado sea 0.
Proceso sin_titulo
Escribir ('ingrese una serie de 3 nmeros')
x<-0
w<-0
z<-0
Leer x,w,z
t<-x+w+z
p<-t/3
Si x>0 Y w>0 Y z>0 Entonces
Si x>w Y x>z Entonces
Escribir ('El mayor de los 3 nmeros es el Primero '),x,(' el promedio es '),p
FinSi
Si w>x Y w>z Entonces
Escribir ('El mayor de los 3 nmeros es el Segundo '),w,(' el promedio es '),p
FinSi
Si z>w Y z>x Entonces
Escribir ('El mayor de los 3 nmeros es el Tercero '),z,(' el promedio es '),p
FinSi
Sino
Escribir ('No ingrese nmeros negativos')
FinSi
FinProceso
Este algoritmos primero define tres variables, las cuales sern utilizadas para distintas
operaciones, como por ejemplo determina con el comando si entonces cul de los tres
valores ingresados es el superior y cul es el promedio de esos 3 nmeros.

11. Realizar un programa que le presente un men al usuario con las siguientes opciones:
1. Leer dos nmeros enteros positivos nicamente,
2. Sumar los dos nmeros ledos,
3. Restarle al primer nmero el segundo (siempre y cuando el primero sea mayor que l
segundo, en caso contrario indicar con un mensaje que la operacin no es posible realizarla
y volver al men principal,
4. Multiplicar los dos nmeros (siempre y cuando ninguno de los nmeros sea igual a
cero, , en caso contrario indicar con un mensaje que la operacin no es posible realizarla y
volver al men principal,),
5. Dividir el primer nmero dado por el segundo,
6 Salir Nota: Se debe garantizar que el usuario haya ingresado los dos nmeros antes de
poder realizar cualquier operacin y que no se puede escribir un resultado sin la realizacin
de una operacin
Proceso sin_titulo
Repetir
Escribir ("Ingrese 2 nmeros");
leer n,m
suma<-n+m
resta<-n-m
mult<-n*m
div<-n/m
r<-"";
Escribir ("1.suma")
escribir ("2.Resta")
Escribir ("3.Multiplicacin");
Escribir ("4.Division");
Escribir ("5.Salir");
leer op
si op=1 Entonces
escribir ("la suma es "), suma;
FinSi
si op=2 Entonces
si n>m entonces
Escribir ("la resta es "), resta;
sino
Escribir ("la operacin no se puede hacer");
Escribir ("desea volver al menu? s/n")
leer r
FinSi
FinSi
si op=3 Entonces
Escribir ("la multiplicacin es "), mult
si n=0 o m=0 entonces

Escribir ("la operacion no se puede hacer");


FinSi
FinSi
si op=4 Entonces
Escribir ("la division es "), div;
FinSi
si op=5 Entonces
Escribir ("fin");
r="n"
FinSi
Hasta Que r="n" o r="N"
FinProceso
Este algoritmo pide ingresar 2 valores que son almacenadas en las variables n,m
respectivamente, lugo hace las 4 operaciones bsicas, pero no las muestra, porque hay que
cumplir con ciertas condiciones, luego aparece un men del 1 al 5, y esos numero ingresan
a la variable op, la cual dependiendo de su respuesta hace operacions, adems en la resta se
compara que n se a mayor que m, sino no se da una respuesta, lo mismo en la
multiplicacin en caso de que algn valor sea cero.

Anexo 3.
Estudian Ejercicio
te
revisado
lvaro
Ordoez

1,2,3

Observaciones
1.Ejercicio 2 trabajo normalmente
2.Ejericio 3 no funciona el algoritmo
problemas con la definicin de
variables