• Jueves 28 de Marzo de 2024, 17:47

Autor Tema:  Programa Desifrar  (Leído 1503 veces)

bLaCkHanD

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
Programa Desifrar
« en: Sábado 19 de Enero de 2008, 19:55 »
0
buenas amigos tengo que hacer un programa aunque me se todos los comandos y todo creo que estoy pensando mal en la logica del programa....

el programa se trata de:

TEngo que crear un programa que va a terminar cuando Consiga un *, cada linea tiene un maximo de 60 caracteres y se encuentra un mensaje Escondido..(todo eso ya va a estar en un archivo .TXT guardado que tendremos que abrir para leerlo.

para decifrar el mensaje...

las palabras que pertencen al mensaje estan escondida en una pared que va a ser un numero ese va indicar cuatos carcteres vamos a tomar el mensaje que obtenga sera colocado en un texto diferente creado por mi, y no puede pener mas de 20 carcteres por linea.

Este mi algoritmo..

Citar
Program Cadena;
uses crt;
var
cadena60:string[60];
cadena20:string[20];
cadenaux:string[20];
arch1,arch2:text;i,long,num:integer;
begin
clrscr;
i:=1;
assign(arch1,'C:\Documents and Settings\Administrador\Mis documentos\Funboy\Programas\sample.txt');
reset(arch1);
assign(arch2,'C:\Documents and Settings\Administrador\Mis documentos\Funboy\Programas\saliente.txt');
readln(arch1,cadena60);
while (not(EOF(arch1))) do
long:=length(cadena60);
For i:=1 to long do
while cadena60 <> '*' do
num:=ord(cadena60) - 48;
if (num >= 1) and (num <=9) then
cadenaux:=cadenaux + copy(cadena60,i+1,num);
end.

no pido que me digan nada solo expliquenme bien  la logica del programa y que estoy haciendo mal :(... :S

Saludos y Gracias de antemano.
Si no somos capaces de vivir enteramente como personas, hagamos lo posible para no vivir enteramente como animales...

Enko

  • Miembro de PLATA
  • *****
  • Mensajes: 1562
  • Nacionalidad: 00
    • Ver Perfil
Re: Programa Desifrar
« Respuesta #1 en: Lunes 21 de Enero de 2008, 13:01 »
0
Citar
as palabras que pertencen al mensaje estan escondida en una pared que va a ser un numero ese va indicar cuatos carcteres vamos a tomar el mensaje que obtenga sera colocado en un texto diferente creado por mi, y no puede pener mas de 20 carcteres por linea.
Estoy un poco fuera de práctica, no logro entender esa parte.
En lo posible tambien mostrame como es el archivo encriptado.

bLaCkHanD

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
Re: Programa Desifrar
« Respuesta #2 en: Viernes 25 de Enero de 2008, 04:33 »
0
disculpa que no me habia aparecido por aka.. bueno.. por ejemplo si en el texto parece esto 7lugares el 7 va a hacer la pared y la cadena va a tomar 7 carcatesres que seria Lugares hasta que encuentre un * .. y lo va a guardar en otro archivo saliente (.txt) osea lo que va a quedar en el archivo saliente es el mensaje desfrado.. el codigo que puse arriba esta mal :S tiene logica mal ya pude arreglar uno fllao sin embargo no entiendo como mandarlo a escribir en el archivo saliente..... editare el codigo de arriba

PD. Edite el Algoritmo de Arriba(Verlo).. hasta ahi voy bien        sin ningun error ahora lo que me cuesta es mandarlo a escribir.. en el archivo saliente si me puediera ayudar :P

Saludos!
Si no somos capaces de vivir enteramente como personas, hagamos lo posible para no vivir enteramente como animales...

midnesis

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
Re: Programa Desifrar
« Respuesta #3 en: Domingo 3 de Febrero de 2008, 03:59 »
0
yo agarraria la linea del archivo y la pongo en un string ... { readln(arch,str1)}.. como el pirmer char del string es la cantidad de letras que vas a agarrar de vez en vez hasta que encuentres el asterisco pues mandar a pasar ese char a entero con la funcion val
{ val( str1[1] , a, b )} .. ya teniendo ese entero b puedes controlar un for desde i:= 2 to b que te vaya recorriendo cada posicion de la cadena ...tienes que validar cada char de la cadena porque no sabes en que momento encontraras el * ...ese for deberia  de ir dentro de otro ciclo que se repita ( longitud de la cadena/b) veces para que puedas recorrer la cadena y dentro comparar de b veces en b  veces los caracteres .. en el ejemplo que pusiste seria algo como
for i:=1 to (length(str1) div 2) do
for j:=2 to 7 do

asi serian los for anidados .. para descifrar el mensaje pues no has esclarecido ningun tipo de clave .. asi que me supongo que solo esta pegado y lo que necesitas es separar la palabra en varias lineas e imprimirla en el archivo ... de ser asi fijate que el segundo for lo que hacer es picarte la palabra en b caracteres cada vez y una vez los valides pues guardalos en otro string2 auxiliar  y lo imprimes en el archivo {writeln(arch,str2) si es linea a linea o write(arch,str2+'  ') si es en la misma linea}.. espero haber sido de ayuda....









Val (Cadena, Numero, Código)
Cadena contiene la cadena que será procesada.
Numero es la variable de tipo numérico donde se guardará el valor de la cadena.
Código es una variable de tipo entero (Integer) que contendrá el valor de 0 si no hubo errores y un valor diferente en caso de que no se haya podido convertir la cadena, el valor de Código representa la posición de la cadena donde ocurrió el error.