Pascal/Turbo Pascal - Ayuda con pascal!

 
Vista:

Ayuda con pascal!

Publicado por vale (2 intervenciones) el 29/08/2011 00:17:27
Hola! necesito ayuda con free pascal ya que tengo que hacer un programa que use el método multitap para teclado de teléfonos celulares, es decir si yo pongo 2 = a, 22=b, 222=c, 2222=2 y que al volver a poner 22222 me vuelva a la a. (que sea algo cíclico). La verdad que no tengo idea como poder hacerlo, si me conviene usar el comando repeat o el while para que se repita el procedimiento en caso de pasarme de 2222 por ejemplo.
La mínima ayuda me sirve! Al menos que declaración de variables me conviene y como usar repeat o de que otra forma sería más viable.
Y una última cosa! Me gustaría también como hacer para definir lo siguiente:
Si tengo que escribir "casa": (la cual tiene dos teclas seguidas que corresponden al número 2) tendré que poner: 222P277772L (siendo L el fin de línea) pero ¿cómo hago para definir esa P =pausa?
Cualquier ayuda me sirve gracias a todos la atención!
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

Ayuda con pascal!

Publicado por ramon (2158 intervenciones) el 02/09/2011 22:07:06
program tecatele;
uses
crt;
const
nume : array[1..12] of char = ('0','1','2','3','4','5','6','7','8','9',
'#','*');
var
tecla : char;
datoen : string[4];
todo : string;
x0, y0, tt, x3, y3 : integer;



procedure teclado;
var
y, x : integer;
begin
textcolor(15);
x := 5;
y := 3;
gotoxy(x,y);write('teclado de telefono celular');
x := 10;
gotoxy(x,y + 3);write('[','0',']',' ','[','1',']',' ','[','2',']');
textcolor(10);
gotoxy(x,y + 4);write(' 0 ',' .,?',' abc');
textcolor(15);
gotoxy(x,y + 6);write('[','3',']',' ','[','4',']',' ','[','5',']');
textcolor(10);
gotoxy(x,y + 7);write('def',' ghi',' jkl');
textcolor(15);
gotoxy(x,y + 9);write('[','6',']',' ','[','7',']',' ','[','8',']');
textcolor(10);
gotoxy(x,y + 10);write('mno',' pqrs',' tuv');
textcolor(15);
gotoxy(x,y + 12);write('[','9',']',' ','[','#',']',' ','[','*',']');
textcolor(10);
gotoxy(x,y + 13);write('wxyz',' esp.',' m/M');
end;

procedure entradas;
var
linea, az, cual, dd, x1, y1 : integer;
letra, ante : char;
no, mayu : boolean;
begin
teclado;
mayu := false;
no := false;
dd := 1;
x1 := 10;
y1 := 18;
az := 1;
textcolor(12);
gotoxy(x1,y1);write('Entrada Texto Teclado Numerico');
textcolor(15);
y1 := 19;
x3 := x1;
y3 := y1;
gotoxy(x1,y1);
cual := 0;
linea := 0;
ante := ' ';
letra := ' ';
repeat
tecla := readkey;
if tecla in[#48..#57,#35,#42] then
begin
ante := tecla;
tecla := #0;
cual := cual + 1;
az := 1;
repeat
if keypressed then
tecla := readkey;
if tecla = ante then
begin
az := 1;
cual := cual + 1;
ante := tecla;
tecla := #0;
end;
delay(3);
az := az + 1;
until az > 60;
end;
case ante of
#48 : letra := '0';
#49 : begin
letra := ' ';
case cual of
1 : letra := '.';
2 : letra := ',';
3 : letra := '?';
4 : letra := '1';
end;
end;
#50 : begin
letra := ' ';
case cual of
1 : letra := 'a';
2 : letra := 'b';
3 : letra := 'c';
4 : letra := '2';
end;
end;
#51 : begin
letra := ' ';
case cual of
1 : letra := 'd';
2 : letra := 'e';
3 : letra := 'f';
4 : letra := '3';
end;
end;
#52 : begin
letra := ' ';
case cual of
1 : letra := 'g';
2 : letra := 'h';
3 : letra := 'i';
4 : letra := '4';
end;
end;
#53 : begin
letra := ' ';
case cual of
1 : letra := 'j';
2 : letra := 'k';
3 : letra := 'l';
4 : letra := '5';
end;
end;
#54 : begin
letra := ' ';
case cual of
1 : letra := 'm';
2 : letra := 'n';
3 : letra := 'o';
4 : letra := '6';
end;
end;
#55 : begin
letra := ' ';
case cual of
1 : letra := 'p';
2 : letra := 'q';
3 : letra := 'r';
4 : letra := 's';
5 : letra := '7';
end;
end;
#56 : begin
letra := ' ';
case cual of
1 : letra := 't';
2 : letra := 'u';
3 : letra := 'v';
4 : letra := '8';
end;
end;
#57 : begin
letra := ' ';
case cual of
1 : letra := 'w';
2 : letra := 'x';
3 : letra := 'y';
4 : letra := 'z';
5 : letra := '9';
end;
end;
#35 : letra := #32;
#42 : begin
if mayu = false then
mayu := true
else
mayu := false;
no := true;
letra := ' ';
end;
end;
cual := 0;
if (no = false) and (tecla <> #13) then
begin
if mayu = false then
letra := letra
else
letra := upcase(letra);
todo[dd] := letra;
todo[0] := chr(dd);
gotoxy(x1 + linea,y1);write(todo[dd]);
dd := dd + 1;
linea := linea + 1;
if linea > 15 then
begin
y1 := y1 + 1;
x1 := x3;
gotoxy(x1,y1);
linea := 0;
todo[dd] := #13;
todo[0] := chr(dd);
dd := dd + 1;
end;
end
else
begin
no := false;
end;
until tecla = #13;
end;

begin
clrscr;
entradas;
gotoxy(x3,y3);clreol;
textcolor(10);
x0 := x3 - 1;
y0 := y3;
for tt := 1 to length(todo) do
begin
if todo[tt] = #13 then
begin
y0 := y0 + 1;
x0 := x3 - 1;
end;
gotoxy(x0,y0);write(todo[tt]);
x0 := x0 + 1;
end;
readln;
end.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Ayuda con pascal!

Publicado por vale (2 intervenciones) el 02/09/2011 23:24:14
Mil gracias!!!!!!!!!!!!!!!!!!!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Ayuda con pascal!

Publicado por nacho (3 intervenciones) el 04/09/2011 03:52:28
vale!! necesito hacer la misma tarea q vos!!... para programacion de FING.
te funciono todo eso???
espero q veas el msje asi me ayudas xq no tngo ni las bases!! estoy aprendiendo recien.
vi q averiguaste x otros foros tambien! es lo unico q encontre en todo internet sobre esto.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Ayuda con pascal!

Publicado por nacho (3 intervenciones) el 04/09/2011 03:54:17
necesito ayuda tb!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Ayuda con pascal!

Publicado por vale (3 intervenciones) el 04/09/2011 14:52:51
Nacho si funciona el programa esta correctísimo pero también está re avanzado y la verdad que no nos sirve no porque esté mal sino por los comandos que usa, capaz podemos extraer un poco la idea y pensar como puede salir con lo que nos piden pero nosé! Yo también estoy bastante perdida... Saludos!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Ayuda con pascal!

Publicado por nico (1 intervención) el 05/09/2011 02:54:12
jaja chicos estamos todos en la misma, alguien sabe si al poner el read(algo) y ese algo es 223667L va a leer uno x uno los caracteres( es decir primero el dos despues el otro 2 y asi...) o lo lee todo de una??? esa es mi duda nc si los diferencia o n u.u
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Ayuda con pascal!

Publicado por Ceinome (2 intervenciones) el 04/09/2011 10:02:49
sos un genioo locoo!
pero en la tarea nos piden q no usemos procedimientos!
y goto q nose bn q es tampoco se recomineda.
Nos recomienda la funcion ord y chr y no tengo mucha idea d como funcionan.
Si puedes ayudarmeee m salvarias la vida.
Gracias y un dia cuando cresca queiro ser igual a ti
Saudos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Ayuda con pascal!

Publicado por nacho (3 intervenciones) el 04/09/2011 21:55:13
y lo probe y esta muy bueeno!! pero tenes razon con eso de las funciones q piden. yo voy a tratar de ver q le puedo hacer a este y si me sale algo bn lo subo. saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Ayuda con pascal!

Publicado por ramon (2158 intervenciones) el 05/09/2011 22:27:23
Muchachos las funciones gotoxy solo posicionan el testo en la pantalla co tienen otra función
los readkey en sustitución a read ya que asegura la pulsación de las teclas correctas es básico
si no lo enseñan es porque los profes están dormidos ya que el trabajo requiere de seguridad de entrada de datos de verían de enseñar primero y después pedir que haga algo como esto.
No se vuestro nivel pero pensé que seria mas avanzado lo siento pero con read lo tenéis mas complicado de realizar bien suerte.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Ayuda con pascal!

Publicado por Ceinome (2 intervenciones) el 06/09/2011 01:53:43
muchas gracias igual. Vamo ver si sale algoo. Alguna idea no podes tirarme.
Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Ayuda con pascal!

Publicado por ramon (2158 intervenciones) el 07/09/2011 17:13:21
{Espero esto sirva}

program teclmovi;
uses
crt;
var
tex, opcion : char;
tecla : string[5];
cont : integer;
texto : string[50];
i, pos : integer;
mayu : boolean;

procedure teclado;
begin
textcolor(15);
writeln(' teclado de telefono celular');
writeln;
writeln(' [','0',']',' ','[','1',']',' ','[','2',']');
writeln(' 0 ',' .,?',' abc');
writeln;
writeln(' [','3',']',' ','[','4',']',' ','[','5',']');
writeln(' def',' ghi',' jkl');
writeln;
writeln(' [','6',']',' ','[','7',']',' ','[','8',']');
writeln(' mno',' pqrs',' tuv');
writeln;
writeln(' [','9',']',' ','[','#',']',' ','[','*',']');
writeln(' wxyz',' esp.',' m/M');
writeln;
writeln(' [','@',']','<Terminar Entrada>');
writeln;
writeln('Pulse el numero las veces correspondientes y [Enter]');
writeln;
end;

procedure pulsada;
var
lon : integer;
begin
tecla := ' ';
tecla[0] := chr(5);
readln(tecla);
clreol;
lon := length(tecla);
if lon > 5 then
lon := 5;
case lon of
1 : cont := 1;
2 : cont := 2;
3 : cont := 3;
4 : cont := 4;
5 : cont := 5;
end;
opcion := tecla[1];
end;



begin
clrscr;
teclado;
pos := 1;
texto[0] := chr(0);
repeat
pulsada;
clrscr;
teclado;
if (opcion <> '@') or (opcion in['0'..'9','#','*']) then
begin
case opcion of
'0' : begin
tex := ' ';
tex := '0';
end;
'1' : begin
tex := ' ';
case cont of
1 : tex := '.';
2 : tex := ',';
3 : tex := '?';
4 : tex := '1';
end;
end;
'2' : begin
tex := ' ';
case cont of
1 : tex := 'a';
2 : tex := 'b';
3 : tex := 'c';
4 : tex := '2';
end;
end;
'3' : begin
tex := ' ';
case cont of
1 : tex := 'd';
2 : tex := 'e';
3 : tex := 'f';
4 : tex := '3';
end;
end;
'4' : begin
tex := ' ';
case cont of
1 : tex := 'g';
2 : tex := 'h';
3 : tex := 'i';
4 : tex := '4';
end;
end;
'5' : begin
tex := ' ';
case cont of
1 : tex := 'j';
2 : tex := 'k';
3 : tex := 'l';
4 : tex := '5';
end;
end;
'6' : begin
tex := ' ';
case cont of
1 : tex := 'm';
2 : tex := 'n';
3 : tex := 'o';
4 : tex := '6';
end;
end;
'7' : begin
tex := ' ';
case cont of
1 : tex := 'p';
2 : tex := 'q';
3 : tex := 'r';
4 : tex := 's';
5 : tex := '7';
end;
end;
'8' : begin
tex := ' ';
case cont of
1 : tex := 't';
2 : tex := 'u';
3 : tex := 'v';
4 : tex := '8';
end;
end;
'9' : begin
tex := ' ';
case cont of
1 : tex := 'w';
2 : tex := 'x';
3 : tex := 'y';
4 : tex := 'z';
5 : tex := '9';
end;
end;
'#' : begin
tex := ' ';
end;
'*' : begin
tex := '*';
if mayu = false then
mayu := true
else
mayu := false;
end;
end;
end;
if (tex = '*') or (opcion = '@') then
begin
tex := ' ';
end
else
begin
if mayu = true then
begin
texto[pos] := upcase(tex);
end
else
begin
texto[pos] := tex;
end;
texto[0] := chr(pos);
write(texto);
pos := pos + 1;
end;
until opcion = '@';
clrscr;
for i := 1 to pos - 1 do
write(texto[i]);
readln;
end.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Ayuda con pascal!

Publicado por vale (4 intervenciones) el 07/09/2011 17:49:25
Una pregunta: en lugar de usar string que se puede usar? Gracias!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Ayuda con pascal!

Publicado por ramon (2158 intervenciones) el 07/09/2011 19:59:10
Puedes usar un array de char o sinple char siempre que solo lo presentes en pantalla letra a letra
las variables pueden ser

var
texto : array[1..50] of char;
texto : char;
pexto : string[x] {el numero que va a qui es la longitud del string}
pero ten en cuenta que el array y el string son casi lo mismo pero se les trata de diferente manera
ojo con eso.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Ayuda con pascal!

Publicado por vale (4 intervenciones) el 07/09/2011 20:33:11
Ramon, gracias por toda tu ayuda pero te cuento... Nos mandan a hacer el programa donde solo podemos usar: write, writeln, read, readln, for, while, repeat -until, if, case y con char, boolean e integer. Si tenes alguna idea te agraezco!

Gracias!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Ayuda con pascal!

Publicado por vale (4 intervenciones) el 07/09/2011 21:54:01
Si podés agregame: [email protected] y hablamos por ahi, gracias! y disculpa la molestia
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Ayuda con pascal!

Publicado por ramon (2158 intervenciones) el 08/09/2011 18:53:42
{Esto es lo menos a ver si te vale}

program teclmovi;
uses
crt;
var
entra : integer;
letra : char;
termina, sal, mayu : boolean;

procedure teclado;
begin
textcolor(15);
writeln(' teclado de telefono celular');
writeln;
writeln(' [','0',']',' ','[','1',']',' ','[','2',']');
writeln(' 0 ',' .,?',' abc');
writeln;
writeln(' [','3',']',' ','[','4',']',' ','[','5',']');
writeln(' def',' ghi',' jkl');
writeln;
writeln(' [','6',']',' ','[','7',']',' ','[','8',']');
writeln(' mno',' pqrs',' tuv');
writeln;
writeln(' [','9',']',' ','[','#',']',' ','[','*',']');
writeln(' wxyz',' esp.',' m/M');
writeln;
writeln(' [','@',']','<Terminar Entrada>');
writeln;
writeln('Pulse el numero las veces correspondientes y [Enter]');
writeln;
end;


function entrada : char;
var
pulsa, cont : integer;
begin
sal := false;
cont := 0;
repeat
read(letra);
if (ord(letra) <> 13) or (letra = #10) then
begin
if (ord(letra) = 35) or (ord(letra) = 42) or (letra = #10) then
begin
end
else
begin
cont := cont + 1;
end;
pulsa := ord(letra);
end
else
begin
sal := true;
end;
until sal = true;
case pulsa of
48 : begin
case cont of
1 : entrada := '0';
end;
end;
49 : begin
case cont of
1 : entrada := '.';
2 : entrada := ',';
3 : entrada := '?';
4 : entrada := '1';
end;
end;
50 : begin
case cont of
1 : entrada := 'a';
2 : entrada := 'b';
3 : entrada := 'c';
4 : entrada := '2';
end;
end;
51 : begin
case cont of
1 : entrada := 'd';
2 : entrada := 'e';
3 : entrada := 'f';
4 : entrada := '3';
end;
end;
52 : begin
case cont of
1 : entrada := 'g';
2 : entrada := 'h';
3 : entrada := 'i';
4 : entrada := '4';
end;
end;
53 : begin
case cont of
1 : entrada := 'j';
2 : entrada := 'k';
3 : entrada := 'l';
4 : entrada := '5';
end;
end;
54 : begin
case cont of
1 : entrada := 'm';
2 : entrada := 'n';
3 : entrada := 'o';
4 : entrada := '6';
end;
end;
55 : begin
case cont of
1 : entrada := 'p';
2 : entrada := 'q';
3 : entrada := 'r';
4 : entrada := 's';
5 : entrada := '7';
end;
end;
56 : begin
case cont of
1 : entrada := 't';
2 : entrada := 'u';
3 : entrada := 'v';
4 : entrada := '8';
end;
end;
57 : begin
case cont of
1 : entrada := 'w';
2 : entrada := 'x';
3 : entrada := 'y';
4 : entrada := 'z';
5 : entrada := '9';
end;
end;
35 : entrada := ' ';
42 : begin
if mayu = true then
mayu := false
else
mayu := true;
end;
64 : termina := true;
end;
end;


begin
clrscr;
teclado;
termina := false;
repeat
if mayu = true then
write(upcase(entrada))
else
write(entrada);
until termina = true;
end.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Ayuda con pascal!

Publicado por VALE (3 intervenciones) el 09/09/2011 01:26:27
MUCHISIMAS GRACIAS infinitamente agradecida.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Ayuda con pascal!

Publicado por VALE (4 intervenciones) el 12/09/2011 02:12:32
Ramon disculpa la molestia pero tengo algunas dudas sobre el programa pascal y estoy bastante trancada si puedes y tienes ganas de ayudarme mi mail es: [email protected]. Son exclusivamente preguntas del programa! Estaría infinitamente agradecida, gracias!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar