Este documento presenta 9 ejercicios de algoritmos y programación en Pascal. Cada ejercicio describe un problema, su análisis, diseño de algoritmo y codificación en Pascal. Los ejercicios incluyen calcular el volumen de una esfera, convertir segundos a minutos y segundos, encontrar el máximo de 3 números, determinar si un número es positivo o negativo, intercambiar valores, verificar si números fueron ingresados en orden creciente, calcular descuentos en una factura, calcular la fecha siguiente y definir funciones para el máximo y m
0 calificaciones0% encontró este documento útil (0 votos)
57 vistas19 páginas
Este documento presenta 9 ejercicios de algoritmos y programación en Pascal. Cada ejercicio describe un problema, su análisis, diseño de algoritmo y codificación en Pascal. Los ejercicios incluyen calcular el volumen de una esfera, convertir segundos a minutos y segundos, encontrar el máximo de 3 números, determinar si un número es positivo o negativo, intercambiar valores, verificar si números fueron ingresados en orden creciente, calcular descuentos en una factura, calcular la fecha siguiente y definir funciones para el máximo y m
Este documento presenta 9 ejercicios de algoritmos y programación en Pascal. Cada ejercicio describe un problema, su análisis, diseño de algoritmo y codificación en Pascal. Los ejercicios incluyen calcular el volumen de una esfera, convertir segundos a minutos y segundos, encontrar el máximo de 3 números, determinar si un número es positivo o negativo, intercambiar valores, verificar si números fueron ingresados en orden creciente, calcular descuentos en una factura, calcular la fecha siguiente y definir funciones para el máximo y m
Este documento presenta 9 ejercicios de algoritmos y programación en Pascal. Cada ejercicio describe un problema, su análisis, diseño de algoritmo y codificación en Pascal. Los ejercicios incluyen calcular el volumen de una esfera, convertir segundos a minutos y segundos, encontrar el máximo de 3 números, determinar si un número es positivo o negativo, intercambiar valores, verificar si números fueron ingresados en orden creciente, calcular descuentos en una factura, calcular la fecha siguiente y definir funciones para el máximo y m
Descargue como DOCX, PDF, TXT o lea en línea desde Scribd
Descargar como docx, pdf o txt
Está en la página 1de 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
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.
Implementación Del Sistema Señalético para La Orientación Del Tráfico Humano en Los Espacios Institucionales de La Unidad Educativa Teniente Coronel "Lauro Guerrero"