Partiendo de la base del programa de encriptación, pero invirtiendo los pasos para encriptar, se llega al programa que desencripta los textos encriptados, siempre y cuando la clave sea la misma que de encriptación.
program desencripta(input,output);
const
min=32;
max=126;
type
NomFich=string[50];
tpContador=1..maxint;
var
nom:NomFich;
codificado,decodificado:text;
aux:char;
contador:integer;
procedure Decodificar(VAR a:char; c:tpContador);
const
clave='AquiSeIntroduceLaClave';{debe ser la misma que la usada para encriptar}
var
n:integer;
begin {mirando en las tablas del codigo ASCII}
if (ord(a)>=min) and (ord(a)<=max) then begin
n:=((c-1) mod ord(clave[0])) + 1;
n:=ord(a)-ord(clave[n])+(max-min+1);
n:=(n mod (max-min+1))+min;
a:=chr(n)
end
end;
begin
write('Introduzca el nombre del fichero de texto a decodificar: ');
readln(nom);
assign(decodificado,nom);
assign(codificado,'decodificado.txt');
reset(decodificado); rewrite(codificado);
contador:=0;
while not eof(decodificado) do begin
while not eoln(decodificado) do
begin
contador:=contador+1;
read(decodificado,aux);
Decodificar(aux,contador);
write(codificado,aux)
end;
readln(decodificado);writeln(codificado)
end;
close(codificado); close(decodificado);
readln
end.
Resolución de distintos problemas en el ámbito de la ingenieria mediante el uso de la programación. Los programas abarcan todos los niveles de dificultad, así como la mayoría de las herramintas con las que contamos al programar. Si tienes cualquier duda a cerca de un programa, o quieres proponer alguna nueva entrada, no dudes en contactar escribiendo en cualquiera de las entradas del blog ¡Bienvenido!
Mostrando entradas con la etiqueta programacion. Mostrar todas las entradas
Mostrando entradas con la etiqueta programacion. Mostrar todas las entradas
viernes, 24 de febrero de 2012
Codificar fichero de texto
Este programa codifica con un método muy sencillo, y poco eficaz si la clave de codificación es corta, pero muy eficaz si es larga y se utilizan varias claves(intentare colgar otro programa que use varias claves). El programa, codifica un fichero de texto (extensión .txt) y el texto codificado lo guarda en un fichero que crea y se llama codificado.txt. Groso modo, el mecanismo consiste en sumar el valor de la letra a codificar y el de la letra que corresponda de la clave, usando valores del codigo ASCII. El programa resultante es el siguiente:
program encripta(input,output);
const
min=32;
max=126;
type
NomFich=string[50];
tpContador=1..maxint;
var
nom:NomFich;
codificado,decodificado:text;
aux:char;
contador:integer;
procedure Codificar(VAR a:char; c:tpContador);
const
clave='AquiSeIntroduceLaClave';{Aqui se pone el texto a usar como clave}
var
n:integer;
begin {mirando en las tablas del codigo ASCII}
if (ord(a)>=min) and (ord(a)<=max) then begin
n:=((c-1) mod ord(clave[0])) + 1;
{En la posicion 0 de la cadena clave se guarda su longitud}
n:=(ord(clave[n])+ord(a)-(min*2)) mod (max-min+1);
n:=n+min;
a:=chr(n)
end
end;
begin
write('Introduzca el nombre del fichero de texto a decodificar: ');{Se debe poner la extensión .txt}
readln(nom);
assign(decodificado,nom);
assign(codificado,'codificado.txt');
reset(decodificado); rewrite(codificado);
contador:=0;
while not eof(decodificado) do begin
while not eoln(decodificado) do
begin
contador:=contador+1;
read(decodificado,aux);
Codificar(aux,contador);
write(codificado,aux)
end;
readln(decodificado);writeln(codificado)
end;
close(codificado); close(decodificado);
readln
end.
Si alguien tiene alguna duda o quiere detalles sobre el método que pregunte por aquí.
Salud.
program encripta(input,output);
const
min=32;
max=126;
type
NomFich=string[50];
tpContador=1..maxint;
var
nom:NomFich;
codificado,decodificado:text;
aux:char;
contador:integer;
procedure Codificar(VAR a:char; c:tpContador);
const
clave='AquiSeIntroduceLaClave';{Aqui se pone el texto a usar como clave}
var
n:integer;
begin {mirando en las tablas del codigo ASCII}
if (ord(a)>=min) and (ord(a)<=max) then begin
n:=((c-1) mod ord(clave[0])) + 1;
{En la posicion 0 de la cadena clave se guarda su longitud}
n:=(ord(clave[n])+ord(a)-(min*2)) mod (max-min+1);
n:=n+min;
a:=chr(n)
end
end;
begin
write('Introduzca el nombre del fichero de texto a decodificar: ');{Se debe poner la extensión .txt}
readln(nom);
assign(decodificado,nom);
assign(codificado,'codificado.txt');
reset(decodificado); rewrite(codificado);
contador:=0;
while not eof(decodificado) do begin
while not eoln(decodificado) do
begin
contador:=contador+1;
read(decodificado,aux);
Codificar(aux,contador);
write(codificado,aux)
end;
readln(decodificado);writeln(codificado)
end;
close(codificado); close(decodificado);
readln
end.
Si alguien tiene alguna duda o quiere detalles sobre el método que pregunte por aquí.
Salud.
jueves, 23 de febrero de 2012
Triangularizar matriz
Programa que se utiliza como función en otros, como es el caso de resolución de sistemas mediante eliminación gaussiana, ortogonalización... Pienso que puede ser útil por si alguien lo quisiera utilizar como función en otro programa principal.
program triangulariza(input,output);
Const
tanMax=20;
precision=0.000001;
Type
tpVector=array[1..tanMax] of real;
tpMatriz=array[1..tanMax] of tpVector;
tpDimension=1..tanMax;
tpContador=1..MAXINT;
Var
matriz:tpMatriz;
min,pasoF,pasoC,filas,columnas:tpDimension;
cont:tpContador;
Procedure LeerDatos(VAR f,c:tpDimension; VAR m:tpMatriz);
Var
i,j:tpContador;
begin
writeln('Introduzca el numero de filas: '); readln(f); writeln;
writeln('Introduzca el numero de columnas: '); readln(c); writeln;
for i:=1 to f do begin
writeln('Termino de la fila ',i,': ');
for j:=1 to c do begin
write('Termino (',i,',',j,'): ');readln(m[i,j])
end;
writeln
end;
writeln
end;
Procedure SeleccionarFila(f,c,pF,pC:tpDimension; VAR m:tpMatriz);
Var
i,j:tpContador;
aux:real;
Begin
i:=pF;
while (m[i,pC]<precision) and (i<f) and (m[i,pC]>-precision) do
i:=i+1;
If i<>f then
begin
for j:=pC to c do begin
aux:=m[pF,j];
m[pF,j]:=m[i,j];
m[i,j]:=aux
end
end
end;
Procedure restarFilas(f,c:tpDimension; VAR pF:tpDimension; VAR pC:tpDimension; VAR m:tpMatriz);
var
i,j:tpContador;
aux:real;
begin
if m[pF,pC]<>0 then begin
for i:=(pF+1) to f do begin
aux:=m[i,Pc];
for j:=pC to c do
m[i,j]:=m[i,j]-aux*(m[pF,j]/m[pF,pC]);
end;
pF:=pF+1
end;
pC:=pC+1
end;
procedure MinDim(f,c:tpDimension; VAR mini:tpDimension);
begin
if c<f then mini:=c else mini:=f
end;
procedure EscribirMatriz(m:tpMatriz);
var
i,j:tpContador;
begin
for i:=1 to filas do begin
for j:=1 to columnas do
write(m[i,j]:7:2);
writeln
end
end;
begin
LeerDatos(filas,columnas,matriz);
MinDim(filas,columnas,min);
EscribirMatriz(matriz);writeln; writeln;
pasoF:=1; pasoC:=1;
for cont:=1 to min do
begin
SeleccionarFila(filas,columnas,pasoF,pasoC,matriz);
restarFilas(filas,columnas,pasoF,pasoC,matriz)
end;
EscribirMatriz(matriz);
readln
end.
Un saludo y que les sirva.
program triangulariza(input,output);
Const
tanMax=20;
precision=0.000001;
Type
tpVector=array[1..tanMax] of real;
tpMatriz=array[1..tanMax] of tpVector;
tpDimension=1..tanMax;
tpContador=1..MAXINT;
Var
matriz:tpMatriz;
min,pasoF,pasoC,filas,columnas:tpDimension;
cont:tpContador;
Procedure LeerDatos(VAR f,c:tpDimension; VAR m:tpMatriz);
Var
i,j:tpContador;
begin
writeln('Introduzca el numero de filas: '); readln(f); writeln;
writeln('Introduzca el numero de columnas: '); readln(c); writeln;
for i:=1 to f do begin
writeln('Termino de la fila ',i,': ');
for j:=1 to c do begin
write('Termino (',i,',',j,'): ');readln(m[i,j])
end;
writeln
end;
writeln
end;
Procedure SeleccionarFila(f,c,pF,pC:tpDimension; VAR m:tpMatriz);
Var
i,j:tpContador;
aux:real;
Begin
i:=pF;
while (m[i,pC]<precision) and (i<f) and (m[i,pC]>-precision) do
i:=i+1;
If i<>f then
begin
for j:=pC to c do begin
aux:=m[pF,j];
m[pF,j]:=m[i,j];
m[i,j]:=aux
end
end
end;
Procedure restarFilas(f,c:tpDimension; VAR pF:tpDimension; VAR pC:tpDimension; VAR m:tpMatriz);
var
i,j:tpContador;
aux:real;
begin
if m[pF,pC]<>0 then begin
for i:=(pF+1) to f do begin
aux:=m[i,Pc];
for j:=pC to c do
m[i,j]:=m[i,j]-aux*(m[pF,j]/m[pF,pC]);
end;
pF:=pF+1
end;
pC:=pC+1
end;
procedure MinDim(f,c:tpDimension; VAR mini:tpDimension);
begin
if c<f then mini:=c else mini:=f
end;
procedure EscribirMatriz(m:tpMatriz);
var
i,j:tpContador;
begin
for i:=1 to filas do begin
for j:=1 to columnas do
write(m[i,j]:7:2);
writeln
end
end;
begin
LeerDatos(filas,columnas,matriz);
MinDim(filas,columnas,min);
EscribirMatriz(matriz);writeln; writeln;
pasoF:=1; pasoC:=1;
for cont:=1 to min do
begin
SeleccionarFila(filas,columnas,pasoF,pasoC,matriz);
restarFilas(filas,columnas,pasoF,pasoC,matriz)
end;
EscribirMatriz(matriz);
readln
end.
Un saludo y que les sirva.
Etiquetas:
# PASCAL,
GAUSS,
matematicas,
matrix,
MATRIZ,
pascal,
programacion,
TRIANGULARIZAR
Cálculo del factorial de un número mediante función recursiva
Este programa esta creado con el único fin de servir de ejemplo para la programación mediante el uso de funciones recursivas, que puedan servir para posteriormente para programar otros como el programa del determinante expuesto en esta misma página.
program factorial(input,output);
var
n:integer;
function fact(m:integer):integer;
begin
if m>0 then
fact:=m*fact(m-1)
else
fact:=1;
end;
begin
write('Introduzca el numero: '); readln(n);
n:=fact(n);
write('El factorial vale: ',n);
readln
end.
Aqui les dejo un video con algo de explicacion:
Espero que les sirva. Salud.
program factorial(input,output);
var
n:integer;
function fact(m:integer):integer;
begin
if m>0 then
fact:=m*fact(m-1)
else
fact:=1;
end;
begin
write('Introduzca el numero: '); readln(n);
n:=fact(n);
write('El factorial vale: ',n);
readln
end.
Aqui les dejo un video con algo de explicacion:
Espero que les sirva. Salud.
Etiquetas:
# PASCAL,
FACTORIAL,
pascal,
programacion,
RECURSIVIDAD
Suscribirse a:
Entradas (Atom)