You are on page 1of 19

EJERCICIO 1

Desarrollar un algoritmo que calcule el volumen de aire que contiene


una pelota, perfectamente esfrica:

ANALISIS

DE(datos de entrada): Radio de la esfera
DS(datos de salida): Volumen de la esfera
Debo saber que: Volumen= 4/3 * PI * radio^3

DISEO

Algoritmo Vesfera
Lxico
Radio, volumen : R
Inicio
Escribir ("ingrese el valor del radio de la esfera" )
Leer (Radio)
Volumen 4/3 * * radio^3
Escribir ("El volumen de la esfera es", Volumen)
Fin

PASCAL

Program Ejuno;
Var Radio, Volumen, Con , con2 : Real;
Begin
Con := 3.14;
Con2:= 3/4;
Writeln ('Ingrese el valor del radio de la esfera');
Readln (Radio);
Volumen := Radio*Radio*Radio*con*con2;
Writeln ('El volumen de la esfera es', Volumen);
End.


EJERCICIO 2

Desarrollar un algoritmo que convierta un numero de segundos en su
equivalente en minutos y segundos. Por ejemplo dado 1300 segundos el
algoritmo deber calcular 21 minutos 40 segundos..

ANALISIS

DE: Segundos transcurridos
DS: Su equivalente en Min-Seg
Debo saber que: El DIV me devuelve el valor entero de la divisin, y el
MOD su resto.

DISEO

Algoritmo
Lxico
seg, seg2, min : Z
Inicio
Escribir ("Ingrese segundos" )
Leer (seg)
min seg div 60
seg seg mod 60
Escribir (" Los minutos y segundos equivalentes son " min "y" seg)
Fin

PASCAL

Program Minseg;
Uses crt;
Var
seg, seg2, min : Integer;
Begin
Clrscr;
Writeln ('Ingrese segundos');
Readln (seg);
min:= seg div 60;
seg2:= seg mod 60;
Writeln ('El equivalente en minutos y segundos es ', min, ' minutos
',seg2,' segundos');
End.


EJERCICIO 3

Desarrollar un algoritmo que encuentre el mximo entre 3 nmeros:
FORMULA mximo entre dos nmeros---> Mximo = ((a+b)+abs (a-b))/2

ANALISIS

DE: Tres nmeros reales
DS: 1 Numero real
Debo saber que: Mximo = ((a+b)+abs (a-b))/2

DISEO

Algoritmo Maximo;
Lxico
a,b,c,max,maximo : R
Inicio
Escribir (Ingrese tres nmeros)
Leer (a,b,c)
max ((a+b)+abs(a-b))/2
maximo ((max + c) + abs (a-b))/2
Escribir (El mximo es, maximo)
Fin

PASCAL

Program Maximi;
var
a,b,c,max,maximo : Real;
begin
Writeln ('Ingrese tres numeros');
Readln (a);
Readln (b);
Readln (c);
max:=((a+b)+abs(a-b))/2;
maximo:= ((max + c) + abs (max - c))/2;
Writeln ('El maximo es', maximo:10:2);
End.

EJERCICIO 4

Desarrollar un algoritmo que detecte si un numero dado es positivo o
negativo.

ANALISIS

DE: un numero real
DS: Un mensaje afirmativo si el numero es negativo

DISEO

Algoritmo Negativo
Lexico
a : R
Inicio
Escribir(Ingrese un numero)
Leer (a)
Si a >= 0 entonces
Escribir (El numero es negativo)
Sino
Escribir (Es positivo)
Fin

PASCAL

Program Negative;
Uses crt;
Var
a:real;
Begin
clrscr;
Writeln ('Ingrese un numero');
Readln (a);
If a<=0 then
Writeln ('El numero es negativo')
else
Writeln ('POSITIVO');
End.

EJERCICIO 5

Elaborar un algoritmo que lea dos nmeros desde el teclado y si el
primero es mayor que el segundo, intercambie sus valores.

ANLISIS

DE:dos nmeros reales
DS:dos nmeros reales
Debo saber que: En este caso debemos intercambiar los valores SIN
utilizar ningun tipo de variable auxiliar.

DISEO

Algoritmo Intercambiar
Lxico
a,b : R
Inicio
Escribir (Ingrese dos numero)
Leer (a,b)
Si a>b entonces
a a+b
b a-b
a a-b
Escribir (Los nmeros ingresados intercambiados son,a y, b)
Fin

PASCAL

program Intercambiar;
Uses crt;
Var
a,b : Real;
Begin
clrscr;
Writeln ('Ingrese dos numeros');
Readln (a);
Readln (b);
If a>b then
a := a+b;
b := a-b;
a := a-b;
Writeln ('Los valores intercambiados son ', a:10:2 , ' y ', b:10:2);
End.


EJERCICIO 6

Desarrollar un algoritmo que detecte si se han introducido tres numeros
en orden creciente.

ANALISIS
DE: tres numeros reales
DS: Un mensaje afirmativo si los numeros fueron ingresados en forma
creciente.

DISEO

Algoritmo creciente
Lxico
a,b,c : R
Inicio
Escribir (Ingrese tres nmeros)
Leer (a,b,c)
Si a < b < c entonces
Escribir (Los nmeros fueron ingresados en orden creciente)
sino
Escribir (No)
Fin

PASCAL

program creciente;
Uses crt;
var
a,b,c : Real;
begin
clrscr;
Writeln ('Ingrese tres numeros');
Readln (a);
Readln (b);
Readln (c);
If (a < b) and (b< c) then
Writeln ('Los numeros fueron ingresados en orden creciente')
else
Writeln ('No');
End.

EJERCICIO 7

Desarrollar un algoritmo que lea desde el teclado el importe bruto de una
factura y determine el importe neto segn los siguientes criterios:
-Importe bruto menor a 20.000 Sin descuento
-Importe bruto mayor a 20.000 15% de descuento

ANALISIS
DE: un numero real
DS: un numero real
Debo saber que:
-Importe bruto menor a 20.000 Sin descuento
-Importe bruto mayor a 20.000 15% de descuento


DISEO

Algoritmo Importe
Lxico
importe:R
Inicio
Escribir (Ingrese el importe bruto)
Leer (importe);
Si importe > 20.000 entonces
importe importe + (importe * 0,15)
Escribir (El importe mas el descuento es, importe)
sino
importe importe
Escribir (No hay descuento el importe es, importe)
Fin


PASCAL

Program Impor;
Uses crt;
var
importe:Real;
Begin
clrscr;
Writeln ('Ingrese el importe bruto');
Readln (importe);
If importe >= 20000 then
importe := importe - (importe * 0.15);
Writeln ('El importe mas el descuento es', importe:10:2);
If importe < 20000 then
Writeln ('El importe sin descuento es', importe:10:2);
End.



EJERCICIO 8
Desarrollar un algoritmo que una vez leda una Fecha en formato
dd/mm/aaaa, indique cual sera la fecha un da despus.

ANALISIS

DE: 3 variables correspondientes a dd mm y aaaa
DS: 3 variables, correspondientes a dd mm y aaaa pero un dia despues

PASCAL

Program gdosEjentr;

Var

Mes31, Mes30, Mes28, Mes12, aniobisiesto : Boolean;

dia, mes, anio : integer;

Begin

{Pre-Condicion: Dia > 0, mes > 0, anio > 0}

Writeln ('Ingrese el dia mes y ao en formato dd / mm / aaaa');

Readln (dia);

Readln (mes);

Readln (anio);

Mes31 := (mes= 01) or (mes= 03) or (mes= 05) or (mes= 07) or(mes= 08)
or(mes= 10);

Mes30 := (mes=04) or (mes=06) or (mes=09) or (mes=11);

Mes28 := (mes=02);

Mes12 := (mes=12);

Aniobisiesto := ((anio mod 4 =0) and (anio mod 100 <> 0)) or (anio mod
400=0);

If (dia < 31) and (mes31) then

Begin

dia := dia+1;

Writeln ('La fecha un dia despues es', dia,',', mes,',', anio)

End

else begin

If ( dia < 30) and (mes30) then

Begin

dia := dia+01;

Writeln ('La fecha un dia despues es', dia,',', mes,',', anio)

End

else begin

If (dia < 28) and (mes28) then

Begin

dia := dia+1;

Writeln ('La fecha un dia despues es', dia,',', mes,',', anio)

End

else begin

If (dia =31) and (mes31) then

Begin

dia := 01;

mes := mes +1;

Writeln ('La fecha un dia despues es', dia,',', mes,',', anio)

End

else begin

If (dia = 30) and (mes30) then

Begin

dia := 01;

mes := mes +1;

Writeln ('La fecha un dia despues es', dia,',', mes,',', anio)

End

else begin

If (dia = 28) and (mes28) and (Aniobisiesto) then

Begin

dia:= dia +1;

Writeln ('La fecha un dia despues es', dia,',', mes,',', anio)

End

else begin

If (dia = 31) and ( mes12) then

Begin

dia:= 01;

mes:= 01;

anio:= anio +1;

Writeln ('La fecha un dia despues es', dia,',', mes,',', anio)

End

else begin

If (dia < 31) and (mes12) then

Begin

dia:= dia +1;

Writeln ('La fecha un dia despues es', dia,',', mes,',', anio)

End

else begin

If (dia = 28) and (mes28) then

Begin

dia := 01;

mes := mes +1;

Writeln ('La fecha un dia despues es', dia,',', mes,',', anio)

End

else begin

If (dia = 29) and (mes28) and (Aniobisiesto) then

Begin

dia := 01;

mes := mes +1;

Writeln ('La fecha un dia despues es', dia,',', mes,',', anio)

End

Else begin

Writeln ('La fecha ingresada no es valida, ingrese otra');

End;



End;

End;

End;

End;

End;

End;

End;

End;

End;

{Post-Condicion : Si (dia < 31) ^ (mes31) entonces dia, mes, anio:
Resultado0

Si (dia < 30) ^ (mes30) entonces dia, mes, anio: Resultado1

Si (dia < 28) ^ (mes28) entonces dia, mes, anio: Resultado2

Si (dia = 31) ^ (mes31) entonces dia, mes, anio: Resultado3

Si (dia = 30) ^ (mes30) entonces dia, mes, anio: Resultado4

Si (dia = 28) ^ (mes28) ^ (aniobisiesto) entonces dia, mes, anio:
Resultado5

Si (dia = 31) ^ (mes12) entonces dia, mes, anio: Resultado6

Si (dia < 31) ^ (mes12) entonces dia, mes, anio: Resultado7

Si (dia = 28) ^ (mes28) entonces dia, mes, anio: Resultado8

Si (dia = 29) ^ (mes28) ^ (Aniobisiesto) entonces dia, mes, anio:
Resultado9

Sino La fecha ingresada es invalida}

End.

EJERCICIO 9

Desarrollar una funcin que permita encontrar el mximo y otra el mnimo
entre 4 nmeros reales

DISEO

Funcion Mximo (dato a,b,c,d : R ) R
Lexico local
max,maxi:R
Inicio
max:= ((a+b)+abs(a-b))/2
maxi:=((max+c)+abs(max-c))/2
((maxi+d)+abs(maxi-d))/2
Fin

Funcin Mnimo (dato a,b,c,d :R) R
Inicio
Si a<b<c<d entonces
a
sino
si b<a<c<d entonces
b
sino
si c<a<b<d entonces
c
sino
si d<a<b<c entonces
d
Fin

PASCAL
Esta es la funcion, ATENCIN ESTE CASO ESTA TRADUCIDA SOLAMENTE LA
FUNCION POR LO QUE FALTA UNA PARTE; QUE SERIA EL DISEO DE EL ALGORIMO
QUE VA A TENER LA FUNCION DENTRO DEL LEXICO O VAR. DE ESTA FORMA NO LES
VA A COMPILAR..

Function Maximo (a,b,c,d :Real): Real;
var max, maxi :R;
Begin
max:= ((a+b)+abs(a-b))/2;
maxi:=((max+c)+abs(max-c))/2;
Maximo := ((maxi+d)+abs(maxi-d))/2;
End.

Funcion MINIMO:

Function Minimo (a,b,c,d :Real):Real;
Begin
If a<b<c<d then
Minimo:= a;
If b<a<c<d then
Minimo:= b;
If c<a<b<d then
Minimo:= c;
If d<a<c<b then
Minimo:= d;
End.


EJERCICIO 10

Desarrollar un algoritmo que permita visualizar los numeros pares entre 1
y 25

DISEO
Algoritmo Paresentre
Lexico
Inicio
repetir
Si i mod 2 =0 entonces
Escribir (i)
i i+1;
Hasta (i=25)
Fin

PASCAL

Program Paresentre;

Var i: integer;

Begin

i:=1;

Repeat

If (i mod 2) = 0 then

begin

Writeln (i);

End;

i := i+1;



Until (i=25);

End.

EJERCICIO 10

Desarrollar un algoritmo que CALCULE EL MCM Y MCD de dos numeros:

PASCAL

Program MCMMCD;

Uses crt;

Var

a,b,a2,b2,MCM :real;

Begin

clrscr;

Repeat

Writeln ('Ingrese dos numeros');

Readln (a);

Readln (b);

until (a>0) and (b>0);

a2:=a; {Almaceno las variables para no perder el valor inicial,

esto es para calcular el mcm}

b2:=b;

repeat

If a>b then

Begin

a:=a-b;

b:=b;

end;

If a<b then

Begin

a:=a+b;

b:=a-b;

a:=a-b;

end;

Until (a=b);

Writeln ('El MCD entre los numeros es ', a:10:1);

MCM:=a2*b2/a; {El calculo del MCM se puede realizar haciendo

el producto de a * b y dividiendolo por el mcd}

Writeln ('El MCM entre los numeros es ', MCM:10:1);

End.


program MCM_DCM;(*Dado 2 numeros naturales da como resultado el maximo comun divisor y el
minimo comun multiplo entre ambos*)
uses crt;
var
num1,num2:integer;(*variable dato*)

function ValidezDatos(var x,y:integer):boolean;(*toma el valor de verdad de si los datos son validos,
es decir si son naturales=enteros positivos*)
begin
ValidezDatos:=(x>0)and(y>0);
end;

procedure CargarDatos(var x,y:integer);(*Carga los datos y evalua los datos*)
var
j:integer;(*variable de control, usada para restringir el ingreso erroneo de datos*)
procedure Cargar(var x,y:integer);(*lee los datos*)
begin
clrscr;
writeln('Ingrese el primer numero');
readln(x);
writeln('Ingrese el segundo numero');
readln(Y);
writeln('presione cualquier tecla para continuar');
readkey;
end;
begin
j:=3;(*numero de posibilidades de ingresar datos correctos*)
repeat
Cargar(x,y);
if not(ValidezDatos(x,y))then(*si los datos son incorrectos entra en el if*)
begin
clrscr;
j:=j-1;(*le resta 1 a variable de control*)
if j<>0 then(*si no se llego a la ultima posibilidad*)
begin(*escribe*)
writeln('ERROR');
writeln('El programa admite unicamente numeros naturales');
writeln('usted cuenta con ',j,' posibilidades para cargar bien sus numeros');(*muestra el numero de
oportunidades restantes*)
writeln('presione una tecla para volver a intentarlo');
end
else(*si las posibilidades llegan a 0*)
begin(*escribe*)
writeln('llego al limite de posibilidades para cargar bien sus numeros');
writeln('presione una tecla para continuar');
end;
readkey;
end;
until ValidezDatos(x,y)or(j=0);(*si los datos son validos o el numero de posibilidades es 0 sale*)
end;

function MaxCD(x,y:integer):integer;(*devuelve el valor del maximo comun divisor de dos numeros
dados*)
begin(*para 2 num. x<>0 y otro y=0, el MaxCD es x*)
while not(y=0) do(*mientras "y" sea distinto de 0 entra*)
begin
MaxCD:=y;(*teniendo en cuenta la definicion anterior, el MaxCD es el ultimo valor que toma Y
entes de ser 0*)
y:=(x mod MaxCD);(*a y le asigna el resto de la division x/Y*)
x:=MaxCD;(*x termina con el primer valor de y, MaxCD me sirve tambien de auxiliar*)
end;
end;


function MinCM(x,y:integer):integer;(*devuelve el valor del minimo comun multiplo*)
begin
MinCM:=(x*y)div(MaxCD(x,y));(*el producto de 2 num. div. su MCD da su MCM*)
end;

procedure MostrarResultados(x,y:integer);(*muestra los resultados en pantalla*)
begin
clrscr;
writeln('Entre los numeros ',x,' y ',y);
writeln('el maximo comun divisor es ',MaxCD(x,y));(*invocacion de la funcion resultado MaxCD*)
writeln('y el minimo comun multiplo es ',MinCM(x,y));(*invocacion de la funcion resultado MinCM*)
writeln('presione cualquier tecla para continuar');
readkey;
end;

function Salir:boolean;(*toma el valor de verdad de si se desea salir*)
var
si:char;(*variable de control*)
begin
clrscr;
writeln('Si desea salir presione "s" o "S", de lo contrario pulse cualquier otra tecla');
si:=readkey;
Salir:= (si='s')or(si='S');(*la funcion toma valor true si se oprime 'S' o 's'*)
end;

begin(*inicio del programa*)
repeat(*se repite el modulo hasta que Salir sea True*)
CargarDatos(num1,num2);(*Carga de Datos*)
if ValidezDatos(num1,num2) then(*si los datos son validos muestra el resultado por pantalla*)
mostrarResultados(num1,num2);
readkey;
until Salir;(*se ejecuta la funcion salir*)
end.


program MCM_DCM;(*Dado 2 numeros naturales da como resultado el maximo comun
divisor y el minimo comun multiplo entre ambos*)
uses crt;
var
num1,num2:integer;(*variable dato*)

function ValidezDatos(var x,y:integer):boolean;(*toma el valor de verdad de si los datos son
validos, es decir si son naturales=enteros positivos*)
begin
ValidezDatos:=(x>0)and(y>0);
end;

procedure CargarDatos(var x,y:integer);(*Carga los datos y evalua los datos*)
var
j:integer;(*variable de control, usada para restringir el ingreso erroneo de datos*)
procedure Cargar(var x,y:integer);(*lee los datos*)
begin
clrscr;
writeln('Ingrese el primer numero');
readln(x);
writeln('Ingrese el segundo numero');
readln(Y);
writeln('presione cualquier tecla para continuar');
readkey;
end;
begin
j:=3;(*numero de posibilidades de ingresar datos correctos*)
repeat
Cargar(x,y);
if not(ValidezDatos(x,y))then(*si los datos son incorrectos entra en el if*)
begin
clrscr;
j:=j-1;(*le resta 1 a variable de control*)
if j<>0 then(*si no se llego a la ultima posibilidad*)
begin(*escribe*)
writeln('ERROR');
writeln('El programa admite unicamente numeros naturales');
writeln('usted cuenta con ',j,' posibilidades para cargar bien sus numeros');(*muestra el
numero de oportunidades restantes*)
writeln('presione una tecla para volver a intentarlo');
end
else(*si las posibilidades llegan a 0*)
begin(*escribe*)
writeln('llego al limite de posibilidades para cargar bien sus numeros');
writeln('presione una tecla para continuar');
end;
readkey;
end;
until ValidezDatos(x,y)or(j=0);(*si los datos son validos o el numero de posibilidades es 0
sale*)
end;

function MaxCD(x,y:integer):integer;(*devuelve el valor del maximo comun divisor de dos
numeros dados*)
begin(*para 2 num. x<>0 y otro y=0, el MaxCD es x*)
while not(y=0) do(*mientras "y" sea distinto de 0 entra*)
begin
MaxCD:=y;(*teniendo en cuenta la definicion anterior, el MaxCD es el ultimo valor que toma
Y entes de ser 0*)
y:=(x mod MaxCD);(*a y le asigna el resto de la division x/Y*)
x:=MaxCD;(*x termina con el primer valor de y, MaxCD me sirve tambien de auxiliar*)
end;
end;


function MinCM(x,y:integer):integer;(*devuelve el valor del minimo comun multiplo*)
begin
MinCM:=(x*y)div(MaxCD(x,y));(*el producto de 2 num. div. su MCD da su MCM*)
end;

procedure MostrarResultados(x,y:integer);(*muestra los resultados en pantalla*)
begin
clrscr;
writeln('Entre los numeros ',x,' y ',y);
writeln('el maximo comun divisor es ',MaxCD(x,y));(*invocacion de la funcion resultado
MaxCD*)
writeln('y el minimo comun multiplo es ',MinCM(x,y));(*invocacion de la funcion resultado
MinCM*)
writeln('presione cualquier tecla para continuar');
readkey;
end;

function Salir:boolean;(*toma el valor de verdad de si se desea salir*)
var
si:char;(*variable de control*)
begin
clrscr;
writeln('Si desea salir presione "s" o "S", de lo contrario pulse cualquier otra tecla');
si:=readkey;
Salir:=(si='s')or(si='S');(*la funcion toma valor true si se oprime 'S' o 's'*)
end;

begin(*inicio del programa*)
repeat(*se repite el modulo hasta que Salir sea True*)
CargarDatos(num1,num2);(*Carga de Datos*)
if ValidezDatos(num1,num2) then(*si los datos son validos muestra el resultado por
pantalla*)
mostrarResultados(num1,num2);
readkey;
until Salir;(*se ejecuta la funcion salir*)
end.

You might also like