Pascal/Turbo Pascal - introducir texto

 
Vista:

introducir texto

Publicado por patry (9 intervenciones) el 03/09/2008 17:52:49
hola, tengo que introducir un texto por teclado, pero no se como hacer para que pare, un amigo me hizo un trozo de codigo que a el le funcionaba, pero a mi no me funciona. os lo pongo:

procedure entradaporteclado(var texto:tTexto);
var
caracter:char;
begin
while not Eof do
begin
read(caracter);
crearListaDeTexto(texto,caracter); //hay que meter cada caracter en una
//lista de caracteres, y hay que meter
//'eof' o lo que es el final de texto
end;
end;

por favor, es urgente que consiga una respuesta hoy. gracias de antemano y saludos a todos los que os pasais por el foro!!!
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

RE:introducir texto

Publicado por Diego Romero (996 intervenciones) el 03/09/2008 18:08:33
Para que pare qué... ¿Qué es lo que tiene que pararse?.
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

RE:introducir texto

Publicado por patry (9 intervenciones) el 03/09/2008 18:11:53
aver, por ejemplo, yo yego a ese procedimiento y pongo: 'hola que tal. soy patry.' y le doy a intro y se piensa que es una linea mas en la que quiero escribir. como hago para que pare de leer y continue con el programa??
gracias por responderme!!
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

RE:introducir texto

Publicado por Miguel (159 intervenciones) el 03/09/2008 18:36:51
No entendi bien patry. El caracter que lees para que lo lees? Por que hablas de texto y es un solo caracter el que debes ingresar en esa variable. crearListaDeTexto que hace??...
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

RE:introducir texto

Publicado por patry (9 intervenciones) el 03/09/2008 18:45:53
la cuestion es que yo tengo que meter una frase del tiron. y cuando acabe de meterla, pues letra a letra la tiene que meter en una lista de caracteres.
el caso es que no puedo hacer 'mientras que el caracter no sea punto, leer', porque si quiero meter dos frases separadas por un punto me lo tiene que aceptar, entonces seria que leyera hasta que le diera a intro. y que no viera intro como que quiero seguir escribiendo en la linea siguiente, no se si me explico...

ejemplo : yo meto: 'hola. que tal.'

la lista seria: |h|-->|o|-->|l|-->|a|-->|.|-->| |-->|q|-->|u|-->|e|-->|t|-->|a|-->|l|

no se si me he explicado. si no, por favor contestar, aunq parezca una tonteria de problema, es bastante importante...
y gracias por contestar
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

RE:introducir texto

Publicado por Diego Romero (996 intervenciones) el 03/09/2008 20:35:46
A ver si entendimos.
Lo que quieres es introducir un texto para luego formar una lista de las letras que componen ese texto.

Lo que no entendemos es cuál es la condición que marca que se ha alcanzado el final del texto ¿presionar la tecla "enter"?, ¿poner un punto (.)?, ¿cuál es esa condición?.

En principio te diría que es mucho más fácil si pides un tipo string con writeln si la condición de fin de texto es la tecla "enter", pero tú dirás.
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

RE:introducir texto

Publicado por patry (9 intervenciones) el 03/09/2008 20:50:18
la condicion de fin de texto ideal seria un enter, pero no puedo poner string porque el texto puede tener o 10 letras o 10.000 perfectamente, y como lo recorreria despues??? no se exactamente su limite
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

RE:introducir texto

Publicado por Diego Romero (996 intervenciones) el 03/09/2008 21:36:53
Me lo temía xD.

Para un texto tan largo el string no sirve (al menos en Pascal estandar), aquí lo ideal sería usar un tipo PChar que es un puntero a caracter.

El pedazo de código que has puesto no funciona por diferentes motivos, en especial porque la función Eof() no está asociada a ningún archivo, ni siquiera la pantalla y por lo tanto siempre devuelve false.

Algo que sí funcionaría sería esto:

uses crt;

var
c: char;
begin
repeat
c:=readkey;
if (c <> #13) then
begin
write(c);
ProcesarCaracter(c);
end; { if }
until c = #13;
...

Aquí "c" es una variable de tipo caracter. Readkey es una función (en la unidad crt) que lee un solo caracter por teclado sin importar cuál sea. Luego se pregunta si "c" es distinto de la tecla "enter" (la cual genera el caracter #13), si lo es, entonces se llama al procedimiento ProcesarCaracter después de mostrar ese mismo caracter por pantalla (para que el usuario vea que el programa aceptó el caracter), el cual incluiría ese caracter en la lista (ese trabajo te lo dejo a ti).
Todo esto se repite hasta que el usuario presione "enter" la cual es la condición de fin de entrada de texto.

Pero esto tiene un problema, el más obvio es que no puedes corregir el texto, es decir, si presionas "backspace" el programa lo toma como un caracter más (el #7) y lo incluirá en la lista.

Tú me dirás si esto es aceptable o no. De no serlo, me temo que tendrás que escribir una función o procedimiento muchísimo más sofisticado.
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

RE:introducir texto

Publicado por patry (9 intervenciones) el 03/09/2008 23:40:06
muchisimas gracias por tu respuesta, es verdaderamente buena. lo que pasa es que como el procedimiento ese es para un trabajo, no estoy segura de que pueda usar la unidad crt, ademas de que es un problema importante lo de que si te confundes no puedas darle a borrar la letra. entonces yo voy a dejar el procedimiento como lo tengo (que es que siga leyendo hasta que se encuentre el caracter '*'. puse ese porque creo que es el menos comun que pueda contener un texto) y si me suspenden por eso pues ya lo intento con tu solucion
de todas maneras, un millon de gracias, y que sepas que me ha servido de mucho
un saludo!!!
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

RE:introducir texto

Publicado por Diego Romero (996 intervenciones) el 03/09/2008 23:53:34
Comprende que nadie te puede dar un trabajo cuya solución es imposible. Si la persona que te encargó esto (supongo que es un profesor) sabe algo de Pascal entonces sabe que no hay una forma directa de pedir una cadena más larga que 255 caracteres por teclado. Al menos no en Turbo Pascal. Otra cosa sería si el trabajo lo tienes que hacer en Delphi o Free Pascal donde puedes usar AnsiString o PChar.

De todas formas he escrito para mi una rutina que trata de solucionar el tema del "backspace" entre otros pero hace fuerte uso de la unidad crt y de listas dinámicas.
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

RE:introducir texto

Publicado por patry (9 intervenciones) el 04/09/2008 00:01:12
pues si, es en free pascal. tu me podrias decir como usar AnsiString o Pchar???
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

RE:introducir texto

Publicado por Diego Romero (996 intervenciones) el 04/09/2008 17:42:47
AnsiString se usa igual que un string, tiene capacidad ilimitada ya que no cuenta con un contador de caracteres sino que internamente es un puntero a una estructura de memoria. Para todo caso desde el punto de vista del programador funciona casi igual que un string, excepto en algunos casos, por ejemplo, como la capacidad es ilimitada y no hay un contador de caracteres, la posición cero no dice cuántos caracteres hay en el string; para obtener ese dato debes usar la función Length(). De manera opuesta, para establecer un tamaño para el AnsiString debes usar la función SetLength().
El otro punto importante son las asignacione entre AnsiString, como internamente son punteros a memoria, suponiendo que A y B son AnsiString, algo como esto:

A:=B;

No copia el contenido de B en A sino que hace que B apunte al mismo contenido de A, entonces si haces:

A[10]:='g';

B[10] también valdrá lo mismo.

Y una precaución. Como el tamaño es ilimitado, bajo ciertas condiciones, es posible agotar la memoria (en realidad el tamaño no es ilimitado, está limitado por el tamaño del registro de direcciones del CPU, el cual en un CPU de 32 bits es de 4 GB teóricos).

Todo esto que te digo está en el manual de referencia de Free Pascal.
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

RE:introducir texto

Publicado por Vanessa Gutiérrez (1 intervención) el 02/06/2009 14:54:10
Hola... quisiera saber cual funcion de pascal me permite mientras un ciclo repite detenerlo pulsando la tecla "Intro" o "Enter"... Gracias, necesito esa ayuda con urgencia...
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