Documentos de Académico
Documentos de Profesional
Documentos de Cultura
1. Haga un programa que, dada una constante natural k, imprima los números k naturales
1.1. Análisis:
1.1.1. Abstraer:
* Números Naturales
1.1.2. Identificar:
imprimirNaturales
1.2.2. Diseño Procedimental:
Pascal:
program imprimirNaturales;
{$mode objfpc}{$H+}
uses
{$IFDEF UNIX}{$IFDEF UseCThreads}
cthreads,
{$ENDIF}{$ENDIF}
Classes, SysUtils;
var
i,k:integer;
begin
write('Ingrese el valor de k: ');
readln(k);
for i:=1 to k do
write(i,' ');
end.
2. Haga un programa que acepte como entrada un numero natural (n), e imprima los primeros n
naturales.
2.1. Análisis:
2.1.1. Abstraer:
Número natural
Atributos:
n
Comportamientos:
Imprimir los primeros n naturales
2.2. Diseño: Se tiene el número natural (n) y se debe imprimir los primeros n naturales.
{$mode objfpc}{$H+}
uses
{$IFDEF UNIX}{$IFDEF UseCThreads}
cthreads,
{$ENDIF}{$ENDIF}
Classes, SysUtils;
procedure ImprimirNaturales(n:integer);
var
i:integer;
begin
i:=1;
while i<=n do
begin
write(i,' ');
i:=i+1;
end;
end;
var
n:integer;
begin
write('Ingrese un numero natural: ');
readln(n);
ImprimirNaturales(n);
end.
3. Haga un programa que acepte como entrada un numero natural (n), y calcule la suma de los
primeros n naturales.
Análisis:
1.1. Abstraer:
Suma de los primeros n números naturales
Atributos:
n
Comportamientos:
Calcular suma
1.2. Diseño:
PP/
//Inicializando la Instancia
sumaN:=SumaNatural.Create();
sumaN.setN(10);
writeln('La suma de los primeros ',sumaN.getN(),' números naturales es: ', sumaN.calcularSuma());
sumaN.setN(5);
writeln('La suma de los primeros ',sumaN.getN(),' números naturales es: ', sumaN.calcularSuma());
Implementación:
2.1. Creando la unidad que contiene la Clase SumaNatural
Pascal:
unit uSumaNatural;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils;
type
{ SumaNatural }
SumaNatural=Class
private
n:integer;
public
constructor Create();
procedure setN(n1:integer);
function getN():integer;
function calcularSuma():integer;
end;
implementation
{ SumaNatural }
constructor SumaNatural.Create();
begin
n:=0;
end;
procedure SumaNatural.setN(n1: integer);
begin
n:=n1;
end;
function SumaNatural.getN(): integer;
begin
result:=n;
end;
function SumaNatural.calcularSuma(): integer;
var
suma,i:integer;
begin
suma:=0;
for i:=1 to n do
begin
suma:=suma+i;
end;
result:=suma;
end;
end.
//Programa Principal
program t1e3;
{$mode objfpc}{$H+}
uses
{$IFDEF UNIX}{$IFDEF UseCThreads}
cthreads,
{$ENDIF}{$ENDIF}
Classes, uSumaNatural
{ you can add units after this };
var
sumaN:SumaNatural;
begin
sumaN:=SumaNatural.Create();
sumaN.setN(10);
writeln('La suma de los primeros ',sumaN.getN(),' números naturales es: ', sumaN.calcularSuma());
sumaN.setN(5);
writeln('La suma de los primeros ',sumaN.getN(),' números naturales es: ', sumaN.calcularSuma());
end.
4. Haga un programa que acepte como entrada un numero natural (n), e imprima las n primeras letras
del alfabeto (1 <= n <= 26).
Análisis:
1.1. Abstraer:
Imprimir las primeras n letras del alfabeto
Atributos:
n (número natural)
Comportamientos:
imprimir letras del alfabeto
1.2. Diseño:
1.2.1. Diseño Formal:
Implementación:
2.1. Creando la unidad que contiene la Clase Alfabeto
Pascal:
unit uAlfabeto;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils;
type
{ Alfabeto }
Alfabeto=Class
private
n:integer;
public
constructor Create();
procedure setN(n1:integer);
function getN():integer;
function imprimirLetras():string;
end;
implementation
{ Alfabeto }
constructor Alfabeto.Create();
begin
n:=0;
end;
procedure Alfabeto.setN(n1: integer);
begin
n:=n1;
end;
function Alfabeto.getN(): integer;
begin
result:=n;
end;
function Alfabeto.imprimirLetras(): string;
var
letras:string;
i:integer;
begin
letras:='';
for i:=1 to n do
begin
letras:=letras+Chr(i+64)+' ';
end;
result:=letras;
end;
end.
//Programa Principal
program t1e4;
{$mode objfpc}{$H+}
uses
{$IFDEF UNIX}{$IFDEF UseCThreads}
cthreads,
{$ENDIF}{$ENDIF}
Classes, uAlfabeto
{ you can add units after this };
var
alfabeto:Alfabeto;
begin
alfabeto:=Alfabeto.Create();
alfabeto.setN(10);
writeln('Las primeras ',alfabeto.getN(),' letras del alfabeto son: ');
alfabeto.imprimirLetras();
alfabeto.setN(5);
writeln('Las primeras ',alfabeto.getN(),' letras del alfabeto son: ');
alfabeto.imprimirLetras();
end.
5. Haga un programa que acepte como entrada un numero natural (n), si n es par imprima los n primeros
pares sino los n primeros impares.
Análisis:
1.1. Abstraer:
Atributos:
n (número natural)
Comportamientos:
imprimir n primeros pares o impares
1.2. Diseño:
1.2.1. Diseño Formal:
n:=a;
Obtener N : (getN) ?=>[ F ]=>(int)
P/
retornar n;
PP/
//Inicializando la Instancia
numerosN:=Numeros.Create();
numerosN.setN(10);
writeln(numerosN.imprimirNumeros());
numerosN.setN(5);
writeln(numerosN.imprimirNumeros());
Implementación:
implementation
{ Numeros }
constructor Numeros.Create();
begin
n:=0;
end;
procedure Numeros.setN(n1: integer);
begin
n:=n1;
end;
function Numeros.getN(): integer;
begin
result:=n;
end;
procedure Numeros.imprimirNumeros();
var
i:integer;
begin
if (n mod 2 = 0) then // Si n es par, imprimir los n primeros números pares
begin
for i:=1 to n do
begin
writeln(2i);
end;
end
else // Si n es impar, imprimir los n primeros números impares
begin
for i:=1 to n do
begin
writeln(2i-1);
end;
end;
end;
end.
//Programa Principal
program t1e5;
{$mode objfpc}{$H+}
uses
{$IFDEF UNIX}{$IFDEF UseCThreads}
cthreads,
{$ENDIF}{$ENDIF}
Classes, uNumeros
{ you can add units after this };
var
numeros:Numeros;
begin
numeros:=Numeros.Create();
numeros.setN(10);
numeros.imprimirNumeros();
numeros.setN(5);
numeros.imprimirNumeros();
end.
6. Haga un programa que acepte como entrada dos números NATURALES (n y m) y devuelva como
resultado el producto de n x m, pero simule la operación empleando la suma y no el producto.
Análisis:
1.1. Abstraer:
Operación de multiplicación de dos números naturales empleando la suma.
Atributos:
n (número natural)
m (número natural)
Comportamientos:
PP/
//Inicializando la Instancia
producto:=ProductoSuma.Create();
producto.setN(5);
producto.setM(4);
writeln(producto.getN(),'x',producto.getM(),'=',producto.calcularProducto());
producto.setN(3);
producto.setM(2);
writeln(producto.getN(),'x',producto.getM(),'=',producto.calcularProducto());
Implementación:
2.1. Creando la unidad que contiene la Clase ProductoSuma
Pascal:
unit uProductoSuma;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils;
type
{ ProductoSuma }
ProductoSuma=Class
private
n,m:integer;
public
constructor Create();
procedure setN(n1:integer);
procedure setM(m1:integer);
function getN():integer;
function getM():integer;
function calcularProducto():integer;
end;
implementation
{ ProductoSuma }
constructor ProductoSuma.Create();
begin
n:=0;
m:=0;
end;
procedure ProductoSuma.setN(n1: integer);
begin
n:=n1;
end;
procedure ProductoSuma.setM(m1: integer);
begin
m:=m1;
end;
function ProductoSuma.getN(): integer;
begin
result:=n;
end;
function ProductoSuma.getM(): integer;
begin
result:=m;
end;
function ProductoSuma.calcularProducto(): integer;
var
suma,i:integer;
begin
suma:=0;
for i:=1 to m do
begin
suma:=suma+n;
end;
result:=suma;
end;
end.
7. Haga un programa que acepte como entrada dos números NATURALES (n y m) y devuelva como
resultado el cociente de n/m, pero simule la operación empleando la resta y no la división.
Análisis:
1.1. Abstraer:
Atributos:
n (número natural)
m (número natural)
Comportamientos:
calcular cociente
1.2. Diseño:
1.2.1. Diseño Formal:
Constructor //Inicializar los atributos con valor por defecto
setN // Fijar un valor en N
getN // Recuperar el valor de N
setM // Fijar un valor en M
getM // Recuperar el valor de M
calcularCociente // Calcular el cociente de N/M
PP/
//Inicializando la Instancia
divR:=DivisionResta.Create();
divR.setN(7);
divR.setM(3);
writeln('El cociente de ',divR.getN(),'/',divR.getM(),' es: ', divR.calcularCociente():0:2);
divR.setN(16);
divR.setM(4);
writeln('El cociente de ',divR.getN(),'/',divR.getM(),' es: ', divR.calcularCociente():0:2);
Implementación:
2.1. Creando la unidad que contiene la Clase DivisionResta
Pascal:
unit uDivisionResta;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils;
type
{ DivisionResta }
DivisionResta = class
private
n, m: integer;
public
constructor Create();
procedure setN(n1: integer);
function getN(): integer;
procedure setM(m1: integer);
function getM(): integer;
function calcularCociente(): real;
end;
implementation
{ DivisionResta }
constructor DivisionResta.Create();
begin
n := 0;
m := 0;
end;
end.
//Programa Principal
rogram t1e7;
{$mode objfpc}{$H+}
uses
{$IFDEF UNIX}{$IFDEF UseCThreads}
cthreads,
{$ENDIF}{$ENDIF}
Classes, SysUtils;
var
n, m: integer;
begin
Write('Ingrese n: ');
ReadLn(n);
Write('Ingrese m: ');
ReadLn(m);
if m = 0 then
WriteLn('Error: no se puede dividir por cero')
else
WriteLn('El cociente de ', n, ' / ', m, ' es: ', cociente(n, m));
end.
8. Haga un programa que acepte como entrada dos numero ENTEROS (n y m) y devuelva como
resultado el producto de n x m, pero simule la operación empleando la suma y no el producto.
¡CON SIGNO!
Análisis:
1.1. Abstraer:
Producto de dos números enteros (con signo) utilizando solamente sumas
Atributos:
n (número entero con signo)
m (número entero con signo)
Comportamientos:
calcular producto
1.2. Diseño:
PP/
//Inicializando la Instancia
productoEnteros:=ProductoEnteros.Create();
productoEnteros.setN(-3);
productoEnteros.setM(4);
writeln('El producto de ', productoEnteros.getN(), ' y ', productoEnteros.getM(), ' es: ',
productoEnteros.calcularProducto());
productoEnteros.setN(5);
productoEnteros.setM(-2);
writeln('El producto de ', productoEnteros.getN(), ' y ', productoEnteros.getM(), ' es: ',
productoEnteros.calcularProducto());
Implementación:
2.1. Creando la unidad que contiene la Clase ProductoEnteros
Pascal:
unit uProductoEnteros;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils;
type
{ ProductoEnteros }
ProductoEnteros=Class
private
n,m:integer;
producto:integer;
public
constructor Create();
procedure setN(n1:integer);
function getN():integer;
procedure setM(m1:integer);
function getM():integer;
function calcularProducto():integer;
end;
implementation
{ ProductoEnteros }
constructor ProductoEnteros.Create();
begin
n := 0;
m := 0;
end;
end.
//Programa Principal
program t1e8;
{$mode objfpc}{$H+}
uses
{$IFDEF UNIX}{$IFDEF UseCThreads}
cthreads,
{$ENDIF}{$ENDIF}
Classes, SysUtils, uProductoEnteros
{ you can add units after this };
var
producto: ProductoEnteros;
begin
producto := ProductoEnteros.Create();
producto.setN(5);
producto.setM(4);
writeln('El producto de ', producto.getN(), ' x ', producto.getM(), ' es: ', producto.calcularProducto());
producto.setN(-3);
producto.setM(2);
writeln('El producto de ', producto.getN(), ' x ', producto.getM(), ' es: ', producto.calcularProducto());
producto.setN(-6);
producto.setM(-8);
writeln('El producto de ', producto.getN(), ' x ', producto.getM(), ' es: ', producto.calcularProducto());
producto.setN(0);
producto.setM(10);
writeln('El producto de ', producto.getN(), ' x ', producto.getM(), ' es: ', producto.calcularProducto());
end.
9. Haga un programa que acepte como entrada dos números ENTEROS (n y m) y devuelva como
resultado el cociente de n / m, pero simule la operación empleando la resta y no la división.
¡CON SIGNO!
Análisis:
1.1. Abstraer:
Cociente de dos números enteros (con signo) utilizando solamente restas
Atributos:
n (número entero con signo)
m (número entero con signo)
Comportamientos:
calcular cociente
1.2. Diseño:
PP/
//Inicializando la Instancia
cocienteEnteros:=CocienteEnteros.Create();
cocienteEnteros.setN(10);
cocienteEnteros.setM(3);
writeln('El cociente de ', cocienteEnteros.getN(), ' y ', cocienteEnteros.getM(), ' es: ',
cocienteEnteros.calcularCociente());
cocienteEnteros.setN(-15);
cocienteEnteros.setM(4);
writeln('El cociente de ', cocienteEnteros.getN(), ' y ', cocienteEnteros.getM(), ' es: ',
cocienteEnteros.calcularCociente());
Implementación:
2.1. Creando la unidad que contiene la Clase CocienteEnteros
Pascal:
unit uCocienteEnteros;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils;
type
{ CocienteEnteros }
CocienteEnteros=Class
private
n,m:integer;
cociente:integer;
public
constructor Create();
procedure setN(n1:integer);
function getN():integer;
procedure setM(m1:integer);
function getM():integer;
function calcularCociente():integer;
end;
implementación:
program CocienteEnteros;
{$mode objfpc}{$H+}
uses
{$IFDEF UNIX}{$IFDEF UseCThreads}
cthreads,
{$ENDIF}{$ENDIF}
Classes, SysUtils;
type
{ CocienteEnteros }
CocienteEnteros = class
private
n, m: integer;
public
constructor Create();
procedure setN(n1: integer);
function getN(): integer;
procedure setM(m1: integer);
function getM(): integer;
function calcularCociente(): integer;
end;
{ CocienteEnteros }
constructor CocienteEnteros.Create();
begin
n := 0;
m := 0;
end;
var
cocienteEnteros: CocienteEnteros;
n, m: integer;
begin
cocienteEnteros := CocienteEnteros.Create();
writeln('El cociente de ', cocienteEnteros.getN(), ' y ', cocienteEnteros.getM(), ' es: ',
cocienteEnteros.calcularCociente());
readln;
end.
10. Haga un programa que acepte como entrada dos números NATURALES (n y m) y devuelva como
resultado n m empleando la multiplicación.
Análisis:
1.1. Abstraer:
Potencia de un número natural utilizando solamente multiplicaciones
Atributos:
n (número natural)
m (número natural)
Comportamientos:
calcular potencia
1.2. Diseño:
PP/
//Inicializando la Instancia
potenciaEnteros:=PotenciaEnteros.Create();
potenciaEnteros.setN(2);
potenciaEnteros.setM(3);
writeln(potenciaEnteros.getN(), ' elevado a la ', potenciaEnteros.getM(), ' es: ',
potenciaEnteros.calcularPotencia());
potenciaEnteros.setN(5);
potenciaEnteros.setM(0);
writeln(potenciaEnteros.getN(), ' elevado a la ', potenciaEnteros.getM(), ' es: ',
potenciaEnteros.calcularPotencia());
Implementación:
2.1. Creando la unidad que contiene la Clase PotenciaEnteros
Pascal:
unit uPotenciaEnteros;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils;
type
{ PotenciaEnteros }
PotenciaEnteros=Class
private
n,m:integer;
public
constructor Create();
procedure setN(n1:integer);
function getN():integer;
procedure setM(m1:integer);
function getM():integer;
function calcularPotencia():integer;
end;
implementación:
program PotenciaEnteros;
{$mode objfpc}{$H+}
uses
{$IFDEF UNIX}{$IFDEF UseCThreads}
cthreads,
{$ENDIF}{$ENDIF}
Classes, SysUtils;
type
{ PotenciaEnteros }
PotenciaEnteros = class
private
n, m: integer;
public
constructor Create();
procedure setN(n1: integer);
function getN(): integer;
procedure setM(m1: integer);
function getM(): integer;
function calcularPotencia(): integer;
end;
{ PotenciaEnteros }
constructor PotenciaEnteros.Create();
begin
n := 0;
m := 0;
end;
var
pe: PotenciaEnteros;
potencia: integer;
begin
pe := PotenciaEnteros.Create();
pe.setN(2);
pe.setM(4);
potencia := pe.calcularPotencia();
writeln(potencia);
readln;
end.
11. Haga un programa que acepte como entrada un numero naturales y devuelva como resultado n
m empleando la suma. ¿Puede emplear algo de lo ya hecho?
Análisis:
1.1. Abstraer:
Suma de potencias de un número natural
Atributos:
n (número natural)
m (número natural)
Comportamientos:
calcular suma de potencias
1.2. Diseño:
PP/
//Inicializando la Instancia
potenciaSuma:=PotenciaSuma.Create();
potenciaSuma.setN(2);
potenciaSuma.setM(3);
writeln('La suma de potencias de ', potenciaSuma.getN(), ' hasta ', potenciaSuma.getM(), ' es: ',
potenciaSuma.calcularSumaPotencias());
potenciaSuma.setN(3);
potenciaSuma.setM(2);
writeln('La suma de potencias de ', potenciaSuma.getN(), ' hasta ', potenciaSuma.getM(), ' es: ',
potenciaSuma.calcularSumaPotencias());
Implementación:
2.1. Creando la unidad que contiene la Clase PotenciaSuma
Pascal:
unit uPotenciaSuma;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils;
type
{ PotenciaSuma }
PotenciaSuma = class
private
n, m: integer;
public
constructor Create();
procedure setN(n1: integer);
function getN(): integer;
procedure setM(m1: integer);
function getM(): integer;
function calcularPotencia(): integer;
end;
implementation
{ PotenciaSuma }
constructor PotenciaSuma.Create();
begin
n := 0;
m := 0;
end;
end.
12. Haga un programa que acepte como entrada don números NATURALES (n y b, con 2 < b < 9) y
convierta el numero n al correspondiente numero en base b. recuerde que un numero puede
representarse con el siguiente polinomio:
n
S di ‘ b
i-1 donde di es el i-esimo digito del numero y b es la base.
i=1
Análisis:
1.1. Abstraer:
Convertir un número natural en una base dada a otra base utilizando polinomios
Atributos:
n (número natural): número a convertir
baseOrigen (número natural): base del número a convertir
baseDestino (número natural): base a la que se desea convertir el número
Comportamientos:
convertirBase: convierte el número a la nueva base
1.2. Diseño:
PP/
//Inicializando la Instancia
conversor:=Conversor.Create();
conversor.setN(156);
conversor.setBaseOrigen(10);
conversor.setBaseDestino(2);
writeln(conversor.getN(), ' en base ', conversor.getBaseOrigen(), ' es: ', conversor.convertirBase(), ' en base
', conversor.getBaseDestino());
Implementación:
2.1. Creando la unidad que contiene la Clase Conversor
Pascal:
unit uConversor;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils;
type
{ Conversor }
Conversor=Class
private
n,baseOrigen,baseDestino:integer;
public
constructor Create();
procedure setN(n1:integer);
function getN():integer;
procedure setBaseOrigen(base1:integer);
function getBaseOrigen():integer;
procedure setBaseDestino(base2:integer);
function getBaseDestino():integer;
function convertirBase():string;
end;
implementation
{ Conversor }
constructor Conversor.Create();
begin
n := 0;
b := 0;
end;
var
conv: Conversor;
num, base: integer;
begin
conv := Conversor.Create();
writeln('El número ', num, ' convertido a base ', base, ' es: ', conv.ConvertirABaseB());
readln;
end.
13. Haga un programa que acepte como entrada tres caracteres que deben ser algunos de los dígitos del
cero al nueve, y los convierta en el correspondiente número de tres dígitos y lo imprima. (Ejemplo:
sean los caracteres 3, 7, 5; deben ser convertidos en el número 375).
Análisis:
1.1. Abstraer:
Convertir tres caracteres que representan dígitos del 0 al 9 en su correspondiente número de tres dígitos
Atributos:
char1 (carácter): primer dígito a convertir
char2 (carácter): segundo dígito a convertir
char3 (carácter): tercer dígito a convertir
Comportamientos:
convertirNumeros: convierte los tres caracteres en su correspondiente número de tres dígitos
1.2. Diseño:
PP/
//Inicializando la Instancia
conversor:=Conversor.Create();
conversor.setChar1('3');
conversor.setChar2('7');
conversor.setChar3('5');
writeln('Los caracteres ', conversor.getChar1(), conversor.getChar2(), conversor.getChar3(), ' representan el
número ', conversor.convertirNumeros());
Implementación:
2.1. Creando la unidad que contiene la Clase Conversor
Pascal:
unit uConversor;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils;
type
{ Conversor }
Conversor=Class
private
char1,char2,char3:char;
public
constructor Create();
procedure setChar1(c1:char);
function getChar1():char;
procedure setChar2(c2:char);
function getChar2():char;
procedure setChar3(c3:char);
function getChar3():char;
function convertirNumeros():integer;
end;
implementation
{ Conversor }
constructor Conversor.Create();
begin
char1 := '0';
char2 := '0';
char3 := '0';
end;
var
conv: Conversor;
a, b, c: char;
begin
conv := Conversor.Create();
writeln('Ingrese tres caracteres que sean dígitos del cero al nueve:');
readln(a, b, c);
conv.setN(StrToInt(a + b + c));
conv.setBaseOrigen(10);
conv.setBaseDestino(10);
readln;
end.
14. Haga un programa que acepte como entrada tres caracteres, que deben ser algunos de los dígitos
del cero al nueve, y opcionalmente un carácter que represente un signo (+ o -) y los convierta en el
correspondiente número de tres dígitos y lo imprima. (Ejemplo: sean los caracteres + 3, 7, 5; deben
ser convertidos en el número +375).
program ConvertirDigitos;
var
dig1, dig2, dig3, signo: char;
num: integer;
begin
writeln('Ingrese tres dígitos del cero al nueve: ');
readln(dig1, dig2, dig3);
num := (ord(dig1) - ord('0')) * 100 + (ord(dig2) - ord('0')) * 10 + (ord(dig3) - ord('0'));
writeln('El número correspondiente es: ', num);
writeln('Ingrese un signo (+ o -) opcionalmente: ');
readln(signo);
if signo = '+' then
writeln('El número completo es: ', num)
else if signo = '-' then
writeln('El número completo es: -', num)
else
writeln('El signo ingresado no es válido.');
end.
15. Haga un programa que acepte como entrada uno más, pero no más de cinco caracteres, que deben
ser algunos de los dígitos del cero al nueve, y opcionalmente un carácter que represente un signo (+
o -) y los convierta en el correspondiente numero y lo imprima. (Ejemplo: sean los caracteres – 1, 3,
0, 7, 5; deben ser convertidos en el numero -13075). Tenga en cuenta que el máximo entero es
32767 y el menor – 32768.
program ConvertirNumero;
uses crt;
var
input: string;
numero, i, signo: integer;
begin
writeln('Ingrese los caracteres del numero:');
readln(input);
// aplicar signo
numero := numero * signo;
// imprimir resultado
writeln('El número convertido es: ', numero);
readkey;
end.
16. Realice el programa de la calculadora para que puedan entrarse dos ENTEROS y un OPERADOR, y
devuelva el resultado de la operación.
Análisis:
1.1. Abstraer:
Realizar operaciones aritméticas básicas (suma, resta, multiplicación, división) entre dos números
enteros
Atributos:
n1 (número entero): primer número de la operación
n2 (número entero): segundo número de la operación
operador (carácter): operador aritmético a utilizar (+,-,*,/)
Comportamientos:
realizarOperacion: realiza la operación aritmética entre los dos números
1.2. Diseño:
PP/
//Inicializando la Instancia
calculadora := Calculadora.Create();
calculadora.setN1(10);
calculadora.setN2(5);
calculadora.setOperador('-');
writeln(calculadora.getN1(), ' ', calculadora.getOperador(), ' ', calculadora.getN2(), ' = ',
calculadora.realizarOperacion());
Implementación:
2.1. Creando la unidad que contiene la Clase Calculadora
Pascal:
unit uCalculadora;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils;
type
{ Calculadora }
Calculadora = class
private
n1,n2:integer;
operador:char;
public
constructor Create();
procedure setN1(a:integer);
function getN1():integer;
procedure setN2(b:integer);
function getN2():integer;
procedure setOperador(c:char);
function getOperador():char;
function realizarOperacion():integer;
end;
implementation
{ Calculadora }
constructor Calculadora.Create();
begin
a := 0;
b := 0;
end;
procedure Calculadora.setA(a1: integer);
begin
a := a1;
end;
var
calc: Calculadora;
a, b: integer;
operador: char;
begin
calc := Calculadora.Create();
case operador of
'+': writeln('El resultado es: ', calc.sumar());
'-': writeln('El resultado es: ', calc.restar());
'*': writeln('El resultado es: ', calc.multiplicar());
'/': writeln('El resultado es: ', calc.dividir():0:2);
else
writeln('Operador inválido');
end;
readln;
end.
17. Modifique el programa de la calculadora para que puedan entrarse los números carácter a
carácter, no como tales. Decida cuántos dígitos soportará la calculadora, y de cuantos dígitos
será el resultado.
Análisis:
1.1. Abstraer:
Modificar una calculadora para que los números sean ingresados carácter a carácter, limitando el número
de dígitos a ingresar y el número de dígitos del resultado.
Atributos:
num1 (cadena de caracteres): primer número ingresado
num2 (cadena de caracteres): segundo número ingresado
operacion (carácter): operación a realizar
maxDigitos (número natural): máximo número de dígitos permitidos para ingresar
maxDigitosResultado (número natural): máximo número de dígitos permitidos en el resultado de la
operación
Comportamientos:
setNum1: fija el primer número ingresado
getNum1: retorna el primer número ingresado
setNum2: fija el segundo número ingresado
getNum2: retorna el segundo número ingresado
setOperacion: fija la operación a realizar
getOperacion: retorna la operación a realizar
setMaxDigitos: fija el máximo número de dígitos permitidos para ingresar
getMaxDigitos: retorna el máximo número de dígitos permitidos para ingresar
setMaxDigitosResultado: fija el máximo número de dígitos permitidos en el resultado de la operación
getMaxDigitosResultado: retorna el máximo número de dígitos permitidos en el resultado de la operación
calcular: realiza la operación especificada y retorna el resultado
1.2. Diseño:
suma:=dig+suma;
// Si el resultado tiene menos dígitos que el máximo, agrega 0s al inicio hasta que tenga el mismo número
de dígitos que el resultado
while Length(resultado) < digitosResultado do
begin
resultado:='0'+resultado;
end;
// Si el resultado tiene más dígitos que el máximo, acorta el resultado para que tenga el mismo número
18. Haga un programa que acepte como entrada un número natural ( n , donde 1<n < 2000 ) y lo
convierta en el correspondiente número romano.
Análisis:
1.1. Abstraer:
Convertir un número natural en notación decimal a notación romana.
Atributos:
n (número natural): número a convertir en notación romana.
Comportamientos:
convertirARomano: convierte el número a notación romana.
1.2. Diseño:
1.2.1. Diseño Formal:
var i: integer;
resultado: string;
begin
i:=1;
while n > 0 do
begin
if decimales[i] <= n then
begin
n := n - decimales[i];
resultado := resultado + romanos[i];
end
else
i := i + 1;
end;
convertirARomano:=resultado;
end;
PP/
//Inicializando la Instancia
conversor:=Conversor.Create();
conversor.setN(1998);
writeln(conversor.getN(), ' en notación romana es: ', conversor.convertirARomano());
Implementación:
2.1. Creando la unidad que contiene la Clase Conversor
Pascal:
unit uConversor;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils;
type
{ Conversor }
Conversor=Class
private
n:integer;
public
constructor Create();
procedure setN(n1:integer);
function getN():integer;
function convertirARomano():string;
end;
implementation
{ Conversor }
constructor Conversor.Create();
begin
n := 0;
end;
var
conv: Conversor;
num: integer;
begin
conv := Conversor.Create();
readln;
end.
19. Realizar un proceso que me convierta una fracción decimal ( 0.551 ) decimal a Binario.
Análisis:
1.1. Abstraer:
Convertir una fracción decimal a binario
Atributos:
fraccion (número decimal): fracción decimal a convertir
Comportamientos:
convertirABinario: convierte la fracción decimal a binario
1.2. Diseño:
PP/
//Inicializando la Instancia
conversor:=Conversor.Create();
conversor.setFraccion(0.551);
writeln(conversor.getFraccion(), ' en binario es: ', conversor.convertirABinario());
Implementación:
2.1. Creando la unidad que contiene la Clase Conversor
Pascal:
unit uConversor;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils;
type
{ Conversor }
Conversor=Class
private
fraccion:double;
public
constructor Create();
procedure setFraccion(f:double);
function getFraccion():double;
function convertirABinario():string;
end;
implementation
{ Conversor }
constructor Conversor.Create();
begin
fraccion := 0;
end;
var
conv: Conversor;
fraccion: double;
begin
conv := Conversor.Create();
readln;
end.
type
{ Conversor }
Conversor = class
private
n: double;
baseOrigen, baseDestino: integer;
public
constructor Create();
procedure setN(n1: double);
function getN(): double;
procedure setBaseOrigen(base1: integer);
function getBaseOrigen(): integer;
procedure setBaseDestino(base2: integer);
function getBaseDestino(): integer;
function convertirBase(): string;
end;
implementation
{ Conversor }
constructor Conversor.Create();
begin
n := 0;
baseOrigen := 0;
baseDestino := 0;
end;
Result := octal;
end;
var
conversor: Conversor;
begin
conversor := Conversor.Create();
conversor.setN(12.125);
conversor.setBaseOrigen(10);
conversor.setBaseDestino(8);
writeln(conversor.getN(), ' en base ', conversor.getBaseOrigen(), ' es: ', conversor.convertirBase(), ' en base
', conversor.getBaseDestino());
end.
21. Hallar los dos Mayores Dígitos de un número. C=3924112435 Primer Digito: 9 Segundo Digito:5
Análisis:
1.1. Abstraer:
Dado un número, encontrar los dos mayores dígitos en él.
Atributos:
num (entero positivo): número del cual se quieren encontrar los dos mayores dígitos
Comportamientos:
encontrarMayoresDigitos: busca y devuelve los dos mayores dígitos en el número dado
1.2. Diseño:
encontrarMayoresDigitos := 'Primer dígito: ' + IntToStr(primero) + ' Segundo dígito: ' + IntToStr(segundo);
PP/
//Inicializando la Instancia
numero:=Numero.Create();
numero.setNum(3924112435);
writeln(numero.encontrarMayoresDigitos());
Implementación:
2.1. Creando la unidad que contiene la Clase Numero
Pascal:
unit uNumero;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils;
type
{ Numero }
Numero=Class
private
num:integer;
public
constructor Create();
procedure setNum(num1:integer);
function getNum():integer;
function encontrarMayoresDigitos():string;
end;
implementation
{ Numero }
constructor Numero.Create();
begin
num := 0;
end;
Result := 'Primer dígito: ' + IntToStr(primero) + ' Segundo dígito: ' + IntToStr(segundo);
end;
var
num: Numero;
begin
num := Numero.Create();
num.setNum(3924112435);
writeln(num.encontrarMayoresDigitos());
var
numero: integer;
resultado: string;
begin
numero := 3924112435;
resultado := dosMayoresDigitos(numero);
WriteLn(resultado);
end.
22. Hallar los dos Menores Dígitos de un número. C=3924112435_Primer Digito: 1 Segundo Digito:2
Análisis:
1.1. Abstraer:
Encontrar los dos menores dígitos de un número dado.
Atributos:
n (número entero): número al que se le buscarán los dígitos
Comportamientos:
encontrarMenores: encuentra los dos menores dígitos del número
1.2. Diseño:
PP/
//Inicializando la Instancia
numero:= Numero.Create();
numero.setN(3924112435);
writeln(numero.encontrarMenores());
Implementación:
2.1. Creando la unidad que contiene la Clase Numero
Pascal:
unit uNumero;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils;
type
{ Numero }
Numero=Class
private
n:integer;
public
constructor Create();
procedure setN(n1:integer);
function getN():integer;
function encontrarMenores():string;
end;
implementation
{ Numero }
constructor Numero.Create();
begin
n := 0;
end;
var
num: Numero;
begin
num := Numero.Create();
num.setN(3924112435);
writeln(num.encontrarMenores());
readln;
end.
23. Realizar la unión de dos números enteros en un tercer de la siguiente manera: A=3924 B=112435
C=3924112435
Análisis:
1.1. Abstraer:
Unir dos números enteros en un tercer número
Atributos:
num1 (número entero): primer número a unir
num2 (número entero): segundo número a unir
Comportamientos:
unirNumeros: une los dos números en un tercer número
1.2. Diseño:
PP/
//Inicializando la Instancia
union:=Union.Create();
union.setNum1(3924);
union.setNum2(112435);
writeln('Uniendo ', union.getNum1(), ' y ', union.getNum2(), ': ', union.unirNumeros());
Implementación:
2.1. Creando la unidad que contiene la Clase Union
Pascal:
unit uUnion;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils;
type
{ Union }
Union=Class
private
num1,num2:integer;
public
constructor Create();
procedure setNum1(a1:integer);
function getNum1():integer;
procedure setNum2(a2:integer);
function getNum2():integer;
function unirNumeros():integer;
end;
implementation
{ Union }
constructor Union.Create();
begin
num1 := 0;
num2 := 0;
end;
readln;
end.
var
A, B, C: string;
i, j: integer;
begin
A := '3924';
B := '112435';
C := '';
for i := 1 to length(A) do
begin
C := C + A[i];
for j := 1 to length(B) do
begin
C := C + B[j];
end;
end;
readln;
end.