GRY-Online.pl --> Archiwum Forum

Turbo Pascal - mały problem :P

12.10.2010
19:33
[1]

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

12.10.2010
19:38
[2]

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;

12.10.2010
19:41
[3]

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

12.10.2010
20:13
[4]

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.

12.10.2010
20:15
[5]

Revanisko [ Senator ]

Ja nie wiem jak wy możecie z takiego kodu coś wiedzieć ...

Bez wcięć się nie da :<

12.10.2010
20:18
[6]

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.

12.10.2010
20:24
[7]

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.
(...)


Turbo Pascal - mały problem :P - dzony600
12.10.2010
20:32
[8]

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.

12.10.2010
20:33
[9]

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

12.10.2010
20:40
[10]

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ą


Turbo Pascal - mały problem :P - dzony600
12.10.2010
20:45
[11]

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.

12.10.2010
20:56
[12]

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...

12.10.2010
21:01
[13]

redan [ Wiking ]

a próbowałeś jak zasugerowałem wyżej? (działa jak na obrazku)


Turbo Pascal - mały problem :P - redan
12.10.2010
21:03
[14]

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

12.10.2010
21:10
[15]

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


Turbo Pascal - mały problem :P - redan
12.10.2010
21:12
[16]

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

12.10.2010
21:13
[17]

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

12.10.2010
21:15
[18]

redan [ Wiking ]

jakie bloki?

[e] jeśli wg 2 przypadku to kod masz w [15]
[e2] a gdzie podajesz (ustalasz) liczbę tych "bloków"?

12.10.2010
21:18
[19]

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 :)

12.10.2010
21:21
[20]

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


Turbo Pascal - mały problem :P - redan
12.10.2010
21:28
[21]

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 :)

12.10.2010
21:44
[22]

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.

12.10.2010
22:24
[23]

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

© 2000-2024 GRY-OnLine S.A.