potrebujem pomoct s prikladom, ktory je zrejme dost jednoduchy, pretoze by som ho mala napisat v prienehu niekolkych minut. ide o to, ze sa pokusam scrollovat text dolava. prvy priklad, kde text urcite nepresahuje riadok, uz mam ako tak spraveny (vo verzii, ktoru vidite, zbehne otocenie iba raz, ale to je jedno). teraz ho mam prerobit tak, aby fungoval aj pre dlhsie texty. vymyslela som niekolko algoritmov, ale programovanie kazdeho sa zda byt dlhsia zalezitost. nemohli by ste mi ukazat, ako ho riesit jednoducho a rychlo? zrejme mi stale cosi unika... mam stale pocit, ze to zbytocne komplikujem...
uses crt;
const c=80;
var pt,ut:string;
i,ii:integer;
procedure posun(t:string;n:integer);
var di:integer;
begin
ut:='';
for di:=n to length(t) do ut:=ut+t[di];
for di:=1 to c-length(t) do ut:=ut+' ';
for di:=1 to (n-1) do ut:=ut+t[di];
end;
begin
clrscr;
pt:='abcdefghijklmnopqrstuvwxyz';
for ii:=1 to c-length(pt) do
begin
for i:=1 to c-length(pt)-ii do write(' '); write(pt);
delay(250); clrscr;
end;
for i:=1 to length(pt) do
begin
posun(pt,i);
writeln(ut); delay(200); clrscr;
end;
readkey;
end.
Fórum › Pascal
Scrolling textu
No sláva, konečně zajímavé téma!
Když už voláš jednotku Crt, tak je rozumné využít funkci GotoXY, která přemístí kurzor na určenou lokaci. Tímto způsobem se celá věc radikálně zjednodušší. Co ale GotoXY neumí je přesun na záporné souřadice - jestli to chceš využít, tak to musíš obejít.
V každém případě je způsobů jak tvůj problém naprogramovat hodně. Tohle je jeden z nich:
uses crt;
const SIRKA_OBRAZOVKY = 80;
veta='V dětství jsem plakal mnoho. Jako chlapec '+
'méně. Jako mladý muž dvakrát. '+
'Poprvé to bylo těsně před válkou. Večer. '+
'Řekl jsem dívce, ktreou jsem tehdy miloval: '+
'"Hm, tak to asi znamená konec"';
Procedure Cekej;
begin
readkey;while keypressed do readkey;
end;
Procedure WriteXY(x,y:integer;s:string);
begin
if x<1 then
begin
delete(s,1,1-x);
x:=1;
end;
GotoXY(x,y);
writeln(s);
end;
var n,x,l:integer;
begin
ClrScr;
l:=Length(veta);
n:=SIRKA_OBRAZOVKY-l;
if n<1 then n:=1;
WriteXY(n,1,veta);
Cekej;
for x:=n downto -l do
begin
WriteXY(x,1,veta+' ');
if keypressed then Break;
delay(250);
end;
Cekej;
end.
(Jednotka Crt je mimochodem multiplatformní. Tzn. tento program bude fungovat i v jiných systémech než DOS/Windows)
no... stazka tomu rozumiem, ale ani tvoj program asi neviem pekne upravit aj pre dlhsie texty, teda aby program vypisoval text len do jedneho riadku a az potom, ked konecne dojde na koniec, ho zacal vypisovat od zaciatku. mam to uz nejak spravene, ale je to dlhsia praca a toto je taky cvicny maturitny prikladik, teda nieco, co by som mala zlvadnut za 15 minut...
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Infinite scrolling + masonry nefunguje — založil Lukeluha
Skrytí textu na základě jiného textu — založil czsars
Vyrezanie textu s textu... — založil kotlas6667
Zakodovani textu — založil TrixCZE
Přeuspořádání textu — založil Ondra_AS
Moderátoři diskuze