Toon posts:

[Pascal] loop en 'pauze' vraagje (beetje n00b...)

Pagina: 1
Acties:

Verwijderd

Topicstarter
hoi :)

Ok, even een klein verhaaltje, zodat niet meteen mijn topic dichtgegooid wordt met "newb vraag, utfs"

Ik ben gisternacht (niet afgelopen nacht, maar die daarvoor) begonnen met het leren van Pascal. (Dit staat nml in mijn Informatica-boek)
Ik kwam toen op het idee een klok te 'programmeren', dus ben meteen begonnen aan een PSD, en zelfs al aan een code.
Nu heb ik alleen twee vraagjes.

1. na de end. stopt alles, hoe kan ik zorgen dat dit door blijft lopen
2. als het door blijft lopen, dan gaat dat waarschijnlijk zo snel dat je het niet bijhoudt, het blijft maar tellen... Hoe zorg ik dat hij 60 sec wacht tot hij alles herhaalt?

mijn PSD en code hieronder
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
| Lees M            | 
| Lees H            |
___________________________
|        M=59       |
___________________________
|      /     \   |
|     Ja    |   Nee     |
___________________________
| M:=00  | M:=M+1    |
| H:=H+1    |        |
___________________________
| Lees H            |
___________________________
|        H=24       |
___________________________
|    /      \   |
|     Ja        nee     |
___________________________
| H:=00  | H Blijft  |
|        | hetzelfde | 
___________________________
| Schrijf H:M        |
___________________________


code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
program klok;
var H,M:integer;
begin
 readln (M);
 readln(H)
if M=59 then
begin
 M:=00;
 H:=H+1
end
else
begin
 M:=M+1
end;
 readln(H);
if H=24 then
begin 
 H:=00
end
else 
begin H:=H  -> Weet niet hoe te zeggen, H gelijk, dus zeg H wordt H, is hetzelfde.
end;
writeln (H':'M);
end.

ik hoop dat de vragen, de code, en alles een beetje ok is, en een beetje duidelijk...

op of aanmerkingen hoor ik graag, en als iemand me zou willen helpen, helemaal perfect.

zoals ik al zei, ik ben er pas een dag geleden mee begonnen, dus weet nog niet zo veel. :{ :)
Ik heb btw de search gebruikt, maar kreeg steeds geen results op mijn zoekacties, dus het kan zijn dat ik op de verkeerde dingen gezocht heb... :{
Als iemand wel een dergelijk topic weet, waar zulke vragen worden behandeld, linkje? :)

Verwijderd

Hmmm... ik geloof dat dat iets met delay is, maar dan moet zeker weer zo'n library importeren: system of dos ?

Het is al lang geleden sinds ik nog een regel Pascal heb geschreven.

Verwijderd

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
program klok;
var H,M:integer;
begin
   readln (M);
   readln(H)
   if M=59 then
   begin
    M:=00;
    H:=H+1
   end else
   begin
    M:=M+1
   end;
   if H=24 then
   begin 
    H:=0
   end;
   writeln (H':'M);
end.

Dit heb ik er even van gemaakt. Ik heb die else er bij de laatste if even uitgegooid. Want als je toch niks doet dan moet je die else ook niet gebruiken :) Verder vraag je 2x om H en waarom weet ik niet :?

Wat jij wilt is dat hij doorloopt. Daarvoor zijn lussen bedacht. Nou vraag ik mij af: Waneer moet hij stoppen? Je kunt hem waarschijnlijk door laten lopen, maar ik weet niet of je dat wilt. Als je hem wilt laten herhalen moet hij niet steeds opnieuw om H en M vragen neem ik aan? Je wilt toch een klok die vanzelf loopt hebben? Dan moet je die twee readlines verplaatsen naar het begin en daaronder een repeat lus gebruiken (of een while lus, dat maakt nu niet echt uit):
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
program klok;
var H,M:integer;
begin
   readln (M);
   readln(H)
   while true do { zo lang 'het waar is' (en dat is altijd zo) doe dit: }
   begin
    if M=59 then
    begin
       M:=00;
       H:=H+1
    end else
    begin
       M:=M+1
    end;
    if H=24 then
    begin 
       H:=0
    end;
    writeln (H':'M);
    delay(60*1000);
   end; { while }
end.

Die while moet ik misschien uitleggen. Een while lus loopt zolang de expessie die volgt na 'while' waar is. En welke expressie is altijd waar? True, natuurlijk. Dus deze lus blijft in het oneindige doorlopen. Verder is alleen de delay nieuw, en omdat het nogal even geleden is dat ik die gebruikt heb (weet niet eens of hij wel delay heet, het kan ook pause zijn, probeer dat ook als het niet werkt). delay geeft je het aantal milliseconden mee dat hij moet wachten. Jij wilt 60 seconden wachten -> 60 * 1000 milliseconden :)

Verwijderd

Topicstarter
Op zaterdag 02 maart 2002 11:14 schreef Zef het volgende:
Dit heb ik er even van gemaakt. Ik heb die else er bij de laatste if even uitgegooid. Want als je toch niks doet dan moet je die else ook niet gebruiken :) Verder vraag je 2x om H en waarom weet ik niet :?
owjah, bij readln moet je een waarde ingeven als gebruiker he?
ok, dan is het |:( van me geweest om het 2 x te vragen
jij wilt is dat hij doorloopt. Daarvoor zijn lussen bedacht. Nou vraag ik mij af: Waneer moet hij stoppen? Je kunt hem waarschijnlijk door laten lopen, maar ik weet niet of je dat wilt. Als je hem wilt laten herhalen moet hij niet steeds opnieuw om H en M vragen neem ik aan? Je wilt toch een klok die vanzelf loopt hebben?
Yup, ik was dus (zie boven) alleen ff vergeten dattie bij readln waardes vraagt om in te voeren, dat'ie die niet zelf even uit het proggie afleest...
Dan moet je die twee readlines verplaatsen naar het begin en daaronder een repeat lus gebruiken (of een while lus, dat maakt nu niet echt uit):
*code*
Die while moet ik misschien uitleggen. Een while lus loopt zolang de expessie die volgt na 'while' waar is. En welke expressie is altijd waar? True, natuurlijk. Dus deze lus blijft in het oneindige doorlopen. Verder is alleen de delay nieuw, en omdat het nogal even geleden is dat ik die gebruikt heb (weet niet eens of hij wel delay heet, het kan ook pause zijn, probeer dat ook als het niet werkt). delay geeft je het aantal milliseconden mee dat hij moet wachten. Jij wilt 60 seconden wachten -> 60 * 1000 milliseconden :)
thx, hier heb ik zwaar wat aan!
uuhm, ik ga dan eens zoeken op pascal en delay hier in de search... als je er nog iets over ziet/leest oid, zou je dan het even kunnen melden aan me? :)
bvd :*

dan ga ik nu eens kijken wat ik kan vinden... :)

[edit]
als nog iemand anders andere opmerkingen heeft, be my guest en vertel :)

Verwijderd

Satoshi zegt ook dat het delay is, dus dan zal dat wel. Werk je met Turbo Pascal of echt pascal? Ik heb zelf alleen met TP gewerkt en daar deed de delay het wel meen ik, ik weet niet of het een standaard functie is. Het kan zijn dat je in TP nog even:
code:
1
2
uses
   Crt;

onder de program ... regel moet zetten.

Verwijderd

Topicstarter
uuuhm, ik geloof gewoon pascal hoor... :)
ow, ik heb dat scriptje van je toenet proberen te compilen, maar
ERROR: (6,4) :; expected
ERROR: (20,17) :; expected
ERROR : (22,7) :; expected
:?

[edit]
ik lees dit rond etenstijd pas weer, ga nu naar vriendinnetje... O+
geen antwoord meer van mij dus eventjes...

Verwijderd

:z Dit moest het wezen:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
program klok;
var H,M:integer;
begin
   readln (M);
   readln(H);
   while true do { zo lang 'het waar is' (en dat is altijd zo) doe dit: }
   begin
    if M=59 then
    begin
       M:=00;
       H:=H+1;
    end else
    begin
       M:=M+1;
    end;
    if H=24 then
    begin 
       H:=0;
    end;
    writeln (H':'M);
    delay(60*1000);
   end; { while }
end.

Verwijderd

Topicstarter
Op zaterdag 02 maart 2002 11:40 schreef Zef het volgende:
:z Dit moest het wezen:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
program klok;
var H,M:integer;
begin
   readln (M);
   readln(H);
   while true do { zo lang 'het waar is' (en dat is altijd zo) doe dit: }
   begin
    if M=59 then
    begin
       M:=00;
       H:=H+1;
    end else
    begin
       M:=M+1;
    end;
    if H=24 then
    begin 
       H:=0;
    end;
    writeln (H':'M);
    delay(60*1000);
   end; { while }
end.
nog steeds ongeveer dezelfde errors

en ik heb het even nagekeken
20,17 == : van die writeln (H':'M);
en 22 is dus end; { while }

daar zitten dus fouten in...
de code die ik nu probeer te compilen is diegene die jij me gegeven hebt:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
program klok;
var H,M:integer;
begin
   readln (M);
   readln(H);
   while true do
   begin
    if M=59 then
    begin
       M:=00;
       H:=H+1;
    end else
    begin
       M:=M+1;
    end;
    if H=24 then
    begin 
       H:=0;
    end;
    writeln (H':'M);
    delay(60*1000);
   end; { while }
end.

Verwijderd

Toen ik WriteLn(H':'M); zag dacht ik al :? Maar ik nam aan dat je dat al getest had en werkte :o Dit moet het zijn denk ik:
code:
1
writeln (H+':'+M);

Verwijderd

Toen ik WriteLn(H':'M); zag dacht ik al Maar ik nam aan dat je dat al getest had en werkte Dit moet het zijn denk ik:
fout die plusjes moeten komma's worden.

Zo is het goed volgens mij:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
program klok;
var Uren,Minuten:integer;
begin
  write ('Voer de minuten in: ');
  readln (Minuten);
  write ('Voer de uren in: ');
  readln(Uren);
  while true do
  begin
    if Minuten=59 then
    begin
     Minuten:=0;
     Uren:=Uren+1;
    end 
    else
     Minuten:=Minuten+1;
    if Uren=24 then
     Uren:=0;
    clrscr;
    write(Uren,':',Minuten);
    delay(100);
  end; 
end.

Je kunt het ook zo doen:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
program klok;
uses crt;

var Uren,Minuten:integer;

begin
  clrscr;
  write('Voer de minuten in: ');
  readln(Minuten);
  write('Voer de uren in: ');
  readln(Uren);
  repeat
    inc(Minuten);
    if (Minuten=59) then
    inc(Uren);
    Uren:= Uren mod 24;
    Minuten:= Minuten mod 59;
    clrscr;
    write(Uren,':',Minuten);
    delay(60*1000);
  until keypressed;
end.

Verwijderd

Dat is dan een verschil tussen standaard pascal en TP denk ik, in TP kon je ook +-jes gebruiken.

Verwijderd

als je + gebruikt, moeten ze van hetzelfde type zijn, bij , niet

Verwijderd

Ah ja, dat zou idd kunnen (het is lang geleden :z )

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Als het programma moet draaien onder dos dan zou je er ook voor kunnen kiezen om een eigen functie aan de timer interupt te hangen.

Verwijderd

Topicstarter
de komma's werkten inderdaad, dat wist ik ook nog niet dus :)
thx :)

ok, hij doet het!! (Alleen jammer dat ik nog geen "always on top" functie weet te maken :P )

en hier staat'ie: hier dus
uuuhm, tjeh, ik ben trots? :) *D

  • ThePriest
  • Registratie: Mei 2000
  • Laatst online: 30-01-2024

ThePriest

the one, the only

klok.ivm??
Riiiiight...
en nu op naar je volgende programmeurklusje, gefeliciteerd in elk geval! :)

Verwijderd

Topicstarter
uurhm, idd, het is een .ivm

een hoop mensen heb ik al van gehoord dat ze het niet kunnen openen :?
vreemd, want ik heb het hier gewoon open staan

een dos-prompt venstertje... en daar staat de tijd in, steeds een nieuwe regel enzow...

vreemd dattie het niet kan openen bij anderen...
ligt misschien aan de compiler?
ik ga ff een ander proggie zoeken

  • ThePriest
  • Registratie: Mei 2000
  • Laatst online: 30-01-2024

ThePriest

the one, the only

Ehm, ik wil zeker niet lullig doen, maar er moet gewoon een .exe of een .com uitkomen hoor! DIE zijn namelijk executable.

Verwijderd

Topicstarter
tjeh, maar als ik dus die .ivm open dan opent'ie dat dus met een proggie dat bij mijn compiler zit

daar ligt het aan...

ik ga het ff met een andere comiler inpakken enzow... :)
Pagina: 1