dzony600 [ Generaďż˝ ]
Turbo Pascal - mały problem :P
Polecenie jest takie, że tekst ma się po kolei wyświetlić ponumerowany, dodatkowo z ponumerowanymi linijkami odstępu. Jak naciśnie się coś to leci dalej z tym samym schematem... na razie zrobiłem tyle i nie mogę ruszyć z tym dalej. Tekst wyświetla się, ale tylko raz. Wiem, że jest jeszcze na początku problem z numeracją, ale to akurat dałoby radę ogarnąć, na razie męczy mnie ten tekst...
Dałem kolejną pętlę, ale do prawidłowej numeracji potrzebne jest (chyba) n:=n+k i mi to miesza całkowicie w tym przypadku. Więc, proszę o jakieś wskazówki :)
program tekst;
var
t:string;
n,k,i:longint;
begin
write('Podaj tekst: ');
readln(t);
write('Podaj ilosc powtorzen: ');
readln(n);
write('Podaj wielkosc odstepu: ');
readln(k);
for i:=1 to n do
begin
writeln(i,'. ',t);
readln;
for i:=n to n+k-1 do
writeln(i,'.');
n:=n+k;
writeln('Nacisnij ENTER');
end;
readln;
end.
sory za brak odstępów przy linijkach, ale usunęło spacje
tomazzi [ Flash YD ]
Pseudokod:
int numer;
numer=1;
LOOP1:
wypisz numer;
wypisz tekst;
numer=numer+1;
LOOP2:
wypisz numer;
wypisz odstęp;
numer=numer+1;
koniec LOOP2;
koniec LOOP1;
koniec programu;
redan [ Wiking ]
- po "writeln(i,'. ',t); " usuń "readln;"
- w 2 pętli zmień litery zmiennych dla licznika, bo "i" i "n" z 2 pętli nadpisuje zmienne z pierwszej pętli
dzony600 [ Generaďż˝ ]
OK, tylko teraz program zamiast dalej jechać zatrzymuje się przy jednej pętli :/ Z tym blokiem w ogóle można tak zrobić ? Jak wpisałem wyświetlanie tekstu do bloku to też nie grało.
program tekst;
var
t:string;
n,k,i,n2,i2:longint;
begin
write('Podaj tekst: ');
readln(t);
write('Podaj ilosc powtorzen: ');
readln(n);
write('Podaj wielkosc odstepu: ');
readln(k);
n2:=n;
for i:=1 to n do
writeln(i,'. ',t);
begin
for i2:=n2+1 to n2+k do
writeln(i2,'.');
n2:=n2+k;
writeln('Nacisnij ENTER');
end;
readln;
end.
Revanisko [ Senator ]
Ja nie wiem jak wy możecie z takiego kodu coś wiedzieć ...
Bez wcięć się nie da :<
tomazzi [ Flash YD ]
Nie wiem czego z mojego pseudokodu nie rozumiesz :/
Napisz jeszcze raz, co ten program ma dokładnie robić i najlepiej daj jakiś przykład.
dzony600 [ Generaďż˝ ]
No właśnie mam problem z tą drugą pętlą w pętli :/
Zadanie polega na tym, że ma zostać wczytany tekst i być powtórzony 'n' razy, do tego 'k' odstępów, wszystko z kolejną numeracją.
Jak naciśnie się coś to ma lecieć kolejny taki blok.
7.turbo
(...)
10.
(...)
tomazzi [ Flash YD ]
program tekst;
var
t:string;
n,k,i,licznik:longint;
begin
licznik:=1;
write('Podaj tekst: ');
readln(t);
write('Podaj ilosc powtorzen: ');
readln(n);
write('Podaj wielkosc odstepu: ');
readln(k);
for i:=1 to n do
begin
writeln(licznik,'. ',t);
licznik:=licznik+1;
end;
for i:=1 to k do
begin
writeln(licznik,'.');
licznik:=licznik+1;
end;
writeln('Nacisnij ENTER');
readln;
end.
Revanisko [ Senator ]
EE a jesteś pewien ,że ma to być na pętli for ?
Bo jedyne co mi przychodzi do głowy (poza użyciem innej pętli) jest instrukcja Go To
Chyba ,że dalej nie ogarniam polecenia ;p
dzony600 [ Generaďż˝ ]
No raczej tak, bo nie mieliśmy jeszcze na lekcji Go To.
tomazzi --> no właśnie, tak jak napisałeś to wyświetla się tylko raz, a potem jest koniec programu :/
to ma tak wyglądać, tylko tekst powinien być x3 i z numeracją dobrą
redan [ Wiking ]
spróbuj:
program tekst;
var
t:string;
n,k,i1, i2,licznik:longint;
begin
licznik:=1;
write('Podaj tekst: ');
readln(t);
write('Podaj ilosc powtorzen: ');
readln(n);
write('Podaj wielkosc odstepu: ');
readln(k);
for i1:=1 to n do
begin
writeln(licznik,'. ',t);
licznik:=licznik+1;
for i2:=1 to k do
begin
writeln(licznik,'.');
licznik:=licznik+1;
end;
end;
writeln('Nacisnij ENTER');
readln;
end.
dzony600 [ Generaďż˝ ]
zawsze wyświetla 1 linijkę tekstu i zatrzymuje się
wydaje mi się, że powinna być pętla w pętli, bo inaczej zatrzymuje się po jednym bloku, ale jak tak zrobię to wyświetla 1 wynik...
dzony600 [ Generaďż˝ ]
no próbowałem :) właśnie z tego co tłumaczył gościu to jak wpisałeś 2 do 'n' to "tekst testowy" powinien się wyświetlić 2x i potem dopiero odstęp
redan [ Wiking ]
jeśli ma działać jak teraz na obrazku tu:
program tekst;
var
t:string;
n,k,i1, i2,licznik:longint;
begin
licznik:=1;
write('Podaj tekst: ');
readln(t);
write('Podaj ilosc powtorzen: ');
readln(n);
write('Podaj wielkosc odstepu: ');
readln(k);
for i1:=1 to n do
begin
writeln(licznik,'. ',t);
licznik:=licznik+1;
end;
for i2:=1 to k do
begin
writeln(licznik,'.');
licznik:=licznik+1;
end;
writeln('Nacisnij ENTER');
readln;
end.
ps. jeśli teraz jest ok, to jak dla mnie to takie zadania trochę nie ma sensu
tomazzi [ Flash YD ]
Ponawiam, bo widzę kilka różnych obrazków: jak ma działać ten program?
Jak podam 2 i 5 to co on ma wypisać?
Tekst
.
.
.
.
.
Tekst
.
.
.
.
.
ENTER
czy:
tekst
tekst
.
.
.
.
.
ENTER
dzony600 [ Generaďż˝ ]
Dokładnie, tylko po Enterze powinny pojawiać się kolejne bloki. Kurde, chyba nie da się tego zrobić tylko z 'for'...
tomazzi ---> to drugie :)
redan ---> coś w stylu postu [10], po tym co się wyświetli powinien być kolejny blok
redan [ Wiking ]
jakie bloki?
[e] jeśli wg 2 przypadku to kod masz w [15]
[e2] a gdzie podajesz (ustalasz) liczbę tych "bloków"?
tomazzi [ Flash YD ]
program tekst;
var
t:string;
n,k,i,licznik:longint;
label tomazzi;
begin
licznik:=1;
write('Podaj tekst: ');
readln(t);
write('Podaj ilosc powtorzen: ');
readln(n);
write('Podaj wielkosc odstepu: ');
readln(k);
tomazzi;
for i:=1 to n do
begin
writeln(licznik,'. ',t);
licznik:=licznik+1;
end;
for i:=1 to k do
begin
writeln(licznik,'.');
licznik:=licznik+1;
end;
writeln('Nacisnij ENTER');
readln;
goto tomazzi;
end.
Edycja: błąd :)
redan [ Wiking ]
tu masz z "blokami" wg obrazka
program tekst;
var
t:string;
n,k,i1,i2,i3,licznik,bloki:longint;
begin
licznik:=1;
write('Podaj tekst: ');
readln(t);
write('Podaj ilosc blokow: ');
readln(bloki);
write('Podaj ilosc powtorzen: ');
readln(n);
write('Podaj wielkosc odstepu: ');
readln(k);
for i1:=1 to bloki do
begin
for i2:=1 to n do
begin
writeln(licznik,'. ',t);
licznik:=licznik+1;
end;
for i3:=1 to k do
begin
writeln(licznik,'.');
licznik:=licznik+1;
end;
end;
writeln('Nacisnij ENTER');
readln;
end.
[e] jale jeśli po każdej serii ma czekać na enter to raczej bez skoków się nie obędzie - program tomazzi'ego
dzony600 [ Generaďż˝ ]
tomazzi --> działa :)
redan --> też dzięki
jutro na lekcji zobaczę czy ten program idzie napisać bez 'goto', może faktycznie nie dopowiedział nam polecenia :P
ogólnie wielkie dzięki za pomoc :)
redan [ Wiking ]
tu masz bez skoków (goto), ale za to mało elegancko bo z użyciem nieskończonej pętli - nie powinno się programować takich pętli bo program nie ma możliwości poprawnego zakończenia działania - dla bezpieczeństwa trzeba by podać warunek przerwania pętli (skoków)
program tekst;
var
t:string;
n,k,i1,i2,licznik:longint;
begin
licznik:=1;
write('Podaj tekst: ');
readln(t);
write('Podaj ilosc powtorzen: ');
readln(n);
write('Podaj wielkosc odstepu: ');
readln(k);
while licznik > 0 do
begin
for i1:=1 to n do
begin
writeln(licznik,'. ',t);
licznik:=licznik+1;
end;
for i2:=1 to k do
begin
writeln(licznik,'.');
licznik:=licznik+1;
end;
write('Nacisnij ENTER');
readln;
end;
end.
Revanisko [ Senator ]
jak na mój gust to powinno być po prostu
wczytywanie tych tekstów itd
char x;
Readln(x)
while x=#64 (kod ascii entera nie pamietam jak to w pascalu sie pisalo)
Do
begin
tu dzialajacy jeden blok
readl(x);
end
i by śmigało :D
A jeśli rzeczywiście mieliście to zrobić tylko na forach i bez goto to albo nauczyciel coś porypał albo ty :D