A continuacion voy a compartir ejercicios de resolucion de algoritmos, que aprendi hasta ahora, aplicando distintos metodos, y conceptos de la materia. ( Introduccion a la algoritmica y la programacion)
Antes que nada me gustaría aclarar, que los ejercicios fueron resueltos por mi, por lo tanto pido disculpas por algún error que pueda haber cometido!!
También contarles que hay ciertas convenciones que no pude seguir por problemas con la pc. Por ejemplo el tema de identar.
Cada ejercicio esta compuesto de tres partes, una es el análisis, el cual nos va a ayudar a resolver el problema del algoritmo, el diseño del mismo y su traducción a Pascal.
QUE LO DISFRUTEN!!
EJERCICIO 1
Desarrollar un algoritmo que calcule el volumen de aire que contiene una pelota, perfectamente esférica:
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
DISEÑO
Algoritmo Vesfera
Léxico
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 división, y el MOD su resto.
DISEÑO
Algoritmo
Léxico
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 máximo entre 3 números:
FORMULA máximo entre dos números---> Máximo = ((a+b)+abs (a-b))/2
ANALISIS
DE: Tres números reales
DS: 1 Numero real
Debo saber que: Máximo = ((a+b)+abs (a-b))/2
DISEÑO
Algoritmo Maximo;
Léxico
a,b,c,max,maximo : R
Inicio
Escribir (“Ingrese tres números”)
Leer (a,b,c)
max ← ((a+b)+abs(a-b))/2
maximo ← ((max + c) + abs (a-b))/2
Escribir (“El máximo 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
DISEÑO
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 números desde el teclado y si el primero es mayor que el segundo, intercambie sus valores.
ANÁLISIS
DE:dos números reales
DS:dos números reales
Debo saber que: En este caso debemos intercambiar los valores SIN utilizar ningun tipo de variable auxiliar.
DISEÑO
Algoritmo Intercambiar
Léxico
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 números 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.
DISEÑO
Algoritmo creciente
Léxico
a,b,c : R
Inicio
Escribir (“Ingrese tres números”)
Leer (a,b,c)
Si a < b < c entonces
Escribir (“Los números 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 según 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
DISEÑO
Algoritmo Importe
Léxico
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 leída una Fecha en formato dd/mm/aaaa, indique cual sera la fecha un día después.
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 año 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 función que permita encontrar el máximo y otra el mínimo entre 4 números reales
DISEÑO
Funcion Máximo (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
Función Mínimo (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, ATENCIóN ESTE CASO ESTA TRADUCIDA SOLAMENTE LA FUNCION POR LO QUE FALTA UNA PARTE; QUE SERIA EL DISEÑO 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
DISEÑO
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.
MI PROXIMO POST, EN MUY POCO TIEMPO SERA, COMO INSTALAR PLACA WIFI EN UBUNTU!!
SALUDOS Y COMENTEEEEN!!

