Pascal/Turbo Pascal - Agregar simbolo al mensaje

 
Vista:

Agregar simbolo al mensaje

Publicado por Andrés (7 intervenciones) el 07/11/2006 04:08:46
Hola en realidad es asi bien el programa:

Me pide escribir un programa que ingrese texto escrito en teclado telefónico y despliegue su traducción tecla por tecla.
Cada tecla del 0 al 9 tienen diferentes caracteres,por ejemplo:
Tecla Caracteres
1 . , - ; ¿ ? ¡ ! 1
2 a b c á 2
Yo hasta ahora hice esto:

VAR
car:char;
termina:boolean;

Procedure multi(tecla:char;VAR fin_de_linea:boolean);
Const
centinela='$';
MaxMensaje=50;
Type
secuencia=ARRAY[0..10] OF char;
mensaje=ARRAY[1..MaxMensaje] OF char;
Var
primero:char;
let:secuencia;
mens:mensaje;
ind:integer;
contador_mens:integer;

Procedure LeerCaracter(VAR c:char;VAR fin:boolean);
BEGIN
IF eoln THEN
BEGIN
fin:=TRUE;
readln;
END
ELSE
BEGIN
fin:=FALSE;
read(c);
END;
END;

PROCEDURE BuscarSimbolosTecla(tecla:char;VAR letras:secuencia);
BEGIN

CASE tecla OF
'0':BEGIN
letras[0]:=' ';
letras[1]:='0';
letras[2]:=centinela;
END;
'1':BEGIN
letras[0]:='.';
letras[1]:=',';
letras[2]:='-';
letras[3]:=';';
letras[4]:=':';
letras[5]:='¿';
letras[6]:='?';
letras[7]:='!';
letras[8]:=1;
letras[9]:=centinela;
END;
'2':BEGIN
letras[0]:='a';
letras[1]:='b';
letras[2]:='c';
letras[3]:='á';
letras[4]:='2';
letras[5]:=centinela;
END;
'3':BEGIN
letras[0]:='d';
letras[1]:='e';
letras[2]:='f';
letras[3]:= '‚';
letras[4]:= '3';
letras[5]:= centinela;
END;
'4': BEGIN
letras[0]:= 'g';
letras[1]:= 'h';
letras[2]:= 'i';
letras[3]:= '¡';
letras[4]:= '4';
letras[5]:= centinela;
END;
'5': BEGIN
letras[0]:= 'j';
letras[1]:= 'k';
letras[2]:= 'l';
letras[3]:= '5';
letras[4]:= centinela;
END;
'6': BEGIN
letras[0]:= 'm';
letras[1]:= 'n';
letras[2]:= 'o';
letras[3]:= '¢';
letras[4]:= '¤';
letras[5]:= '6';
letras[6]:= centinela;
END;
'7': BEGIN
letras[0]:= 'p';
letras[1]:= 'q';
letras[2]:= 'r';
letras[3]:= 's';
letras[4]:= '7';
letras[5]:= centinela;
END;
'8': BEGIN
letras[0]:= 't';
letras[1]:= 'u';
letras[2]:= 'v';
letras[3]:= '£';
letras[4]:= '';
letras[5]:= '8';
letras[6]:= centinela;
END;
'9': BEGIN
letras[0]:= 'w';
letras[1]:= 'x';
letras[2]:= 'y';
letras[3]:= 'z';
letras[4]:= '9';
letras[5]:= centinela;
END;
END;
END;

PROCEDURE MostrarMensaje(VAR msj:mensaje);
BEGIN
IF contador_mens <= 50 THEN
BEGIN
msj[contador_mens]:= let[ind];

END
ELSE
fin_de_linea:=true;
END;
BEGIN
contador_mens:= 0;
Leercaracter(tecla,fin_de_linea);
WHILE NOT fin_de_linea DO
BEGIN
ind:= 0;
(* Comienza repeticion *)
primero:=tecla;
BuscarSimbolosTecla(primero,let);
(* Mostrar primer simbolo *)
writeln(tecla,' ->',mens[contador_mens] + let[ind] );
LeerCaracter(tecla,fin_de_linea);
WHILE NOT fin_de_linea AND (tecla = primero) DO
BEGIN
(* Sigue repetici¢n *)
ind:=ind + 1;
IF let[ind] = centinela THEN
ind:= 0;
(* Mostrar siguiente simbolo *)
writeln(tecla,' ->',mens[contador_mens] + let[ind]);
LeerCaracter(tecla,fin_de_linea);
END;
(* Termino repeticion *)
contador_mens:=contador_mens + 1;
MostrarMensaje(mens);

END;
END;

BEGIN
{programa principal}

read(car);
IF car = 'M' THEN
BEGIN
termina:=false;
multi(car,termina);
END
ELSE
writeln;

END.

Mi duda esta en como guardar el simbolo al mensaje,sabiendo que al repetir teclas t cuentan solo 1 al mensaje,y despues quiero leer de vuelta cosa que me aparescar el simbolo anterior que tenia guardado en el mensaje mas el que leo en el momento,t doy un ejemplo de salida del programa.
la primera linea que aparece a continuacion es lo que leo y despues despliega su traduccion.

>>> M777766699903-3305552022244488323
7 ->p
7 ->q
7 ->r
7 ->s
6 ->sm
6 ->sn
6 ->so
9 ->sow
9 ->sox
9 ->soy
0 ->soy
3 ->soy d
- ->soy d
3 ->soy dd
3 ->soy de
0 ->soy de
5 ->soy de j
5 ->soy de k
5 ->soy de l
2 ->soy de la
0 ->soy de la
2 ->soy de la a
2 ->soy de la b
2 ->soy de la c
4 ->soy de la cg
4 ->soy de la ch
4 ->soy de la ci
8 ->soy de la cit
8 ->soy de la ciu
3 ->soy de la ciud
2 ->soy de la ciuda
3 ->soy de la ciudad
>>>

Muchas gracias.
Saludos.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder