PDA

Visualizza la versione completa : [PASCAL] Scrivere carattere per carattere


Kilin
23-11-2003, 19:39
Salve!

Solitamente non posto in queste sezioni, ma solo in quelle riguardanti PHP o JS... ma adesso mi trovo alle prese con Pascal, un po' per diletto, un po' per obbligo scolastico... E mi servirebbe una mano... Spero di non aver sbagliato posto!

Devo scrivere una stringa, e vorrei che venisse scritta carattere per carattere, con una certa velocità da impostare...

Cioè, se metto:

writeln('Stringa da scrivere');

Ottengo:

Stringa da scrivere

Tutto in un sol botto.

Io vorrei invece che venisse scritta carattere per carattere, possibilmente impostando anche la velocità di scrittura!

Potete aiutarmi??

Grazie!

Ciao

alka
23-11-2003, 20:00
La WriteLn si chiama così perchè scrive una linea intera apponendo un ritorno a capo alla fine.

La procedura Write è quella che fa al caso tuo: scrive un carattere singolo nel dispositivo di output predefinito, spostando il cursore al carattere successivo.

Se vuoi introdurre un effetto di rallentamento, ti basta separare una Write dalla successiva con la generazione di un ritardo, ottenuto con un "ciclo visioso" o, ancora meglio, con l'uso della procedura Delay, se non ricordo male.

Lardoman
23-11-2003, 20:50
In pratica in questo modo:

program QuelloCheVuoi;
uses Crt;
begin
write ('S');
delay (1000);
write ('T');
delay (1000);
write ('R');
delay (1000);
write ('I');
delay (1000);
write ('N');
delay (1000);
write ('G');
delay (1000);
write ('A');
end.

La funzione delay rallenta l'esecuzione del programma per N millisecondi (quindi 1000 significa 1 secondo)

Kilin
23-11-2003, 20:55
Quindi ad esempio come uso Delay in combinazione con write?

Ok ho capito la differenza tra writeln e write, ma nn so come usare delay!

Grazie! :ciauz:

Kilin
23-11-2003, 20:58
Ok si erano incrociati i messaggi! Ora provo, grazie! :ciauz:

in ogni caso è un po' scomodo fare così.. se dovessi scrivere un testo molto lungo sarebbe laborioso! Nessuna via più rapida???

Grazie ancora per le dritte!

:ciauz:

Lardoman
23-11-2003, 21:03
Allora...
Delay è una funzione predefinita che permette bloccare l'esecuzione di un programma per un certo numero di millisecondi (millesimi di secondo)

Quindi se scrivi:

write ('A');
delay (3000);
write ('B');

il programma prima stampa A , poi aspetta 3 secondi e stampa B
Alla fine l'output sarà comunque:

AB

Capito?

Per usarlo però devi dichiarare il modulo Crt
Quindi appena dopo aver definito il nome del programma devi scrivere:

uses Crt;

Se non lo scrivi delay non funziona...

$$$
23-11-2003, 21:05
begin

for i:=1 to Length( stringa ) do
begin
Write( stringa[i] );
Delay( 1000 );
end;

end.

Lardoman
23-11-2003, 21:05
Scomodo? beh certo

Ma se vuoi scrivere carattere per carattere devi fare così

Ovviamente è molto più semplice fare

write ('Testo');

Kilin
23-11-2003, 21:10
Ragazzi non so che dirvi, ma non mi funziona! Vi posto il codice

program PROVA;

uses
crt;
begin
clrscr;
textcolor(Green);
write ('S');
delay (1000);
write ('T');
delay (1000);
write ('R');
delay (1000);
write ('I');
delay (1000);
write ('N');
delay (1000);
write ('G');
delay (1000);
write ('A');


repeat until keypressed;

end.

Che ottengo? STRINGA, ma non scrive le lettere a distanza di un secondo l'una dall'altra!

Dove sbaglio?? :master:

Grazie!

Lardoman
23-11-2003, 21:17
non capisco dovrebbe funzionare...
comunque vedo alcuni errori

-uses Crt; si scrive su una sola riga

-TextColor che io sappia prefede solo i numeri corrispondenti ma non i nomi dei colori

-l'ultima istruzione prima dell' end. non ha bisogno del punto e virgola


Per quanto riguarda il problema adesso che ci penso forse il numro all'interno di delay () deve essere messo tra virgolette o apici...
Non mi ricordo ,prova...

Loading