[pascal] huiswerkopdr8 lukt niet :(

Pagina: 1
Acties:

  • C@SP
  • Registratie: Juni 2001
  • Laatst online: 03-08 17:02

C@SP

Biertje ??

Topicstarter
Hoi, ik ben bezig met een huiswerkopdr8 programmeren in Pascal maar ik kom er niet uit. Het is de bedoeling een textbestand in te lezen waarop op iedere regel, gescheiden door spaties de (afgeronde) practicumresultaten per persoon staan. Op elke regel staat één groep, variërend van 4 tot 6 personen. Het aantal groepen is onbekend. Gevraagd wordt een overzicht af te drukken in de volgende vorm:

Practicumresultaten
===================

Gemiddeld cijfer per groep
..........................
Groep 1: 5.9
Groep 2: 6.4
Groep 3: 7.2
............
............
Groep n: 4.5

Gemiddeld cijfer van alle studenten: 6.7

Frequentie van de cijfers
.........................
Cijfer 1: 0
Cijfer 2: 1

Cijfer 9: 1
Cijfer 10: 0

Ik heb het volgende al bedacht, maar het werkt niet:
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
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
program week1herh;
 { I_Love_Heineken }
 {$APPTYPE CONSOLE}

uses
  SysUtils;

var
  results: text;
  n, som, freq, i, cijfer: integer;
  gemgroep, gemstud : real;
  getalrij: array [1..100] of integer;
  cijfers: array [1..10] of integer;

begin
  n:=1;
  i:=1;
  som:=0;
  assign(results, 'c:\cijfers2.txt');
  reset(results);
  writeln('Prakticumresultaten');
  writeln('===================');
  writeln;
  writeln('Gemiddelde cijfers per groep');
  writeln('...........................');
  writeln;
  for i:=1 to 10 do cijfers[i]:=0;
  while not eof(results) do
    begin
    while not eoln(results) do
      begin
        readln(results, getalrij[i]);
        som:=som+getalrij[i];
        i:=i+1;
        gemgroep:=som/i;
        writeln('Groep',n, ':'  ,gemgroep:2:1);
        n:=n+1;
        cijfers[i]:=cijfers[i]+1;
      end;
    end;
  writeln;
  writeln('Het gemiddelde van alle studenten:' ,gemstud:2:1);
  writeln;
  writeln('Frequentie van de cijfers');
  writeln('.........................');
  writeln;
  writeln('Cijfer 1:' ,cijfers[1]);
  writeln('Cijfer 2:' ,cijfers[2]);
  writeln('Cijfer 3:' ,cijfers[3]);
  writeln('Cijfer 4:' ,cijfers[4]);
  writeln('Cijfer 5:' ,cijfers[5]);
  writeln('Cijfer 6:' ,cijfers[6]);
  writeln('Cijfer 7:' ,cijfers[7]);
  writeln('Cijfer 8:' ,cijfers[8]);
  writeln('Cijfer 9:' ,cijfers[9]);
  writeln('Cijfer 10:' ,cijfers[10]);
  close(results);
  readln;
end.

Wie weet er wat ik fout doe ???

[edit] De array die van elk cijfer het aantal telt werkt niet, en ook de gemiddelden die berekent worden uit de textfile kloppen niet.

"If you can't convince people with arguments, dazzle them with bullshit"


  • St@m
  • Registratie: December 2001
  • Laatst online: 22:36

St@m

@ Your Service

je vraagt of wij je huiswerk willen oplossen dat doe je fout..

Leuke spullen: CJ Collectibles


  • Klippy
  • Registratie: Oktober 2000
  • Laatst online: 00:52

Klippy

Still Game

Hmm, huiswerk is niet echt mijn hobby, maar wat werkt er niet?

Krijg je niks uit of verkeerde resultaten?
Is vrij simpele opdracht hoor.

Steam | SXQncyBhbGwgZ29vZCwgbWFuISDwn5iO


  • darkrain
  • Registratie: Augustus 2001
  • Laatst online: 22:56

darkrain

Moderator Discord / General Chat

Geniet. Punt.

wat doet et wel??

Tweakers Discord


  • C@SP
  • Registratie: Juni 2001
  • Laatst online: 03-08 17:02

C@SP

Biertje ??

Topicstarter
Op dinsdag 05 februari 2002 15:15 schreef LiquidSilver het volgende:
Hmm, huiswerk is niet echt mijn hobby, maar wat werkt er niet?

Krijg je niks uit of verkeerde resultaten?
Is vrij simpele opdracht hoor.
Post aangepast, array werkt niet, en er worden niet de goeie waarden uit de textfile gelezen :?

"If you can't convince people with arguments, dazzle them with bullshit"


  • C@SP
  • Registratie: Juni 2001
  • Laatst online: 03-08 17:02

C@SP

Biertje ??

Topicstarter
Op dinsdag 05 februari 2002 15:17 schreef Dark_Rain het volgende:
wat doet et wel??
De layout ziet er in ieder geval wel goed uit ;)

"If you can't convince people with arguments, dazzle them with bullshit"


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 12-09 21:31

Janoz

Moderator Devschuur®

!litemod

Mischien is het makkelijker om eerst de boel in te lezen en eventueel te verwerken, en pas later de boel af te drukken. Hierdoor kun je je probleem beter opsplitsen en kun je de simpelere deel problemen 1 voor 1 oplossen.

De deelproblemen die je dan op moet lossen zijn dan bijvoorbeeld:
-Hoe lees ik de getallen in
-Hoe bepaal ik het gemiddelde cijfer per groep
-Hoe bepaal ik de frequentie van de cijfers

(tipje.. als je een gemiddelde berekend, zorg dan wel dat je beginwaarden kloppen)

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • Klippy
  • Registratie: Oktober 2000
  • Laatst online: 00:52

Klippy

Still Game

Je doet een readln ipv een read zie ik op 2 seconden.
weet niet of dat het probleem is, maar in getal[i] een hele rij getallen zetten gaat niet werken denk ik.

Steam | SXQncyBhbGwgZ29vZCwgbWFuISDwn5iO


  • PromWarMachine
  • Registratie: Oktober 2001
  • Laatst online: 14-09 07:29

PromWarMachine

Forsaken Archer

Als je foute resultaten krijgt moeje hem gewoon ff door de debugger halen en dan wat watches adden bij oa dat array, dan zie je precies de waarden enzow, maar eik hoop ik voor je dat ik nu niets nieuws vertel :+

Dividend for Starters


  • dusty
  • Registratie: Mei 2000
  • Laatst online: 21-02 00:06

dusty

Celebrate Life!

ik zie nogal grove fouten in je logaritme.

Ga eerst eens persoonlijk opschrijven hoe JIJ een gemiddelde zou berekenen als je de getallen voor je krijgt, hoe zou JIJ het berekenen zonder computer ?

Back In Black!
"Je moet haar alleen aan de ketting leggen" - MueR


  • Knutselsmurf
  • Registratie: December 2000
  • Laatst online: 14-09 13:33

Knutselsmurf

LED's make things better

hint 1: tel per groep de som van de cijfers.
hint 2: tel per groep het totale aantal personen.
hint 3: haal die getalrij-array eruit.
hint 4: Leer debuggen. Ga eens precies na wat je in het binnenste lusje doet. Hiervoor heeft Delphi de trace-functie. Doe ook een watch op de variabelen die je gebruikt. Stap vervolgens door je code heen en kijk of de waarden die de variabelen aannemen correct zijn.

- This line is intentionally left blank -


  • C@SP
  • Registratie: Juni 2001
  • Laatst online: 03-08 17:02

C@SP

Biertje ??

Topicstarter
Op dinsdag 05 februari 2002 15:19 schreef LiquidSilver het volgende:
Je doet een readln ipv een read zie ik op 2 seconden.
weet niet of dat het probleem is, maar in getal[i] een hele rij getallen zetten gaat niet werken denk ik.
Als ik die readln vervang door read krijg ik hele rare resultaten. Hij geeft dan ineens gemiddelden van 26 groepen, terwijl er maar 3 regels in m'n textfile staan. :?

"If you can't convince people with arguments, dazzle them with bullshit"


  • Knutselsmurf
  • Registratie: December 2000
  • Laatst online: 14-09 13:33

Knutselsmurf

LED's make things better

Op dinsdag 05 februari 2002 15:23 schreef I_Love_Heineken het volgende:

[..]

Als ik die readln vervang door read krijg ik hele rare resultaten. Hij geeft dan ineens gemiddelden van 26 groepen, terwijl er maar 3 regels in m'n textfile staan. :?
Gebruik de debugtools en kijk welke getallen er in worden gelezen en of dat correct is.

- This line is intentionally left blank -


  • Klippy
  • Registratie: Oktober 2000
  • Laatst online: 00:52

Klippy

Still Game

Op dinsdag 05 februari 2002 15:23 schreef I_Love_Heineken het volgende:

[..]

Als ik die readln vervang door read krijg ik hele rare resultaten. Hij geeft dan ineens gemiddelden van 26 groepen, terwijl er maar 3 regels in m'n textfile staan. :?
Hmmm ja logisch, zijn wel meer aanpassingen nodig :)

Je gaat dan aantal de regel lezen :)

Je moet in de eoln steeds 1 cijfer inlezen toch?

Edit: Dus na inlezen van 1 cijfer doe je 1 karakter vooruit lezen en dan weer cijfer lezen etc. totdat je op end of line zit.

Dan ff gemiddelde berekening iets aanpassen en het zou goed moeten zijn.

Steam | SXQncyBhbGwgZ29vZCwgbWFuISDwn5iO


  • C@SP
  • Registratie: Juni 2001
  • Laatst online: 03-08 17:02

C@SP

Biertje ??

Topicstarter
Op dinsdag 05 februari 2002 15:20 schreef dusty het volgende:
ik zie nogal grove fouten in je logaritme.

Ga eerst eens persoonlijk opschrijven hoe JIJ een gemiddelde zou berekenen als je de getallen voor je krijgt, hoe zou JIJ het berekenen zonder computer ?
Alle getallen optellen en dan delen door het aantal getallen, maar dat doe ik toch ook :?
code:
1
2
3
som:=som+getalrij[i];
i:=i+1;
gemgroep:=som/i;

Damn volgens mij zie ik het nu, ik deel door het indexnr ipv door het totaal |:(

"If you can't convince people with arguments, dazzle them with bullshit"


  • dusty
  • Registratie: Mei 2000
  • Laatst online: 21-02 00:06

dusty

Celebrate Life!

Op dinsdag 05 februari 2002 15:31 schreef I_Love_Heineken het volgende:
[..]
Alle getallen optellen en dan delen door het aantal getallen, maar dat doe ik toch ook :?
Are you sure? ( Yes/No/Panic )

Back In Black!
"Je moet haar alleen aan de ketting leggen" - MueR


  • Klippy
  • Registratie: Oktober 2000
  • Laatst online: 00:52

Klippy

Still Game

Op dinsdag 05 februari 2002 15:31 schreef I_Love_Heineken het volgende:

[..]

Alle getallen optellen en dan delen door het aantal getallen, maar dat doe ik toch ook :?
code:
1
2
3
som:=som+getalrij[i];
i:=i+1;
gemgroep:=som/i;
Je kan toch niet die getallen zo in een regel inlezen he.... zijn toch meerdere getallen per regel!

Steam | SXQncyBhbGwgZ29vZCwgbWFuISDwn5iO


  • Klippy
  • Registratie: Oktober 2000
  • Laatst online: 00:52

Klippy

Still Game

Op dinsdag 05 februari 2002 15:33 schreef dusty het volgende:

[..]

Are you sure? ( Yes/No/Panic )
:D

Steam | SXQncyBhbGwgZ29vZCwgbWFuISDwn5iO


  • dusty
  • Registratie: Mei 2000
  • Laatst online: 21-02 00:06

dusty

Celebrate Life!

Op dinsdag 05 februari 2002 15:31 schreef I_Love_Heineken het volgende:
[..]
code:
1
2
3
som:=som+getalrij[i];
i:=i+1;
gemgroep:=som/i;

Damn volgens mij zie ik het nu, ik deel door het indexnr ipv door het totaal |:(
Zoals ik al zei, ik zie wel meer fouten. Wat staat er in getalrij[i] als je het optelt?

Back In Black!
"Je moet haar alleen aan de ketting leggen" - MueR


  • D2k
  • Registratie: Januari 2001
  • Laatst online: 31-08 10:19

D2k

*stof af blaast*
uit de oude doos :+

analyse is het belangijkste
als je niet weet hoe je iets moet maken heeft de code geen nut.
coden is het eenvoudige deel van programmeren
typen kan iedereen en de syntax is ook niet moeilijk.
maar de analyse dus eeeeerst doorkrijgen wat je wil en welke stappen dat je er voor moet doorlopen moet je het coden maar uit je hoofd zetten.
Dus beschrijf nu gewoon eens op papier (ja met een pen) hoe je dit probleem kan oplossen
en ga het dan omzetten in code
dus niet eerst coden en dan denken hoe zal ik het eens gaan doen

tot zover
D2k teaches programming part 1 :+

Doet iets met Cloud (MS/IBM)


  • jvdmeer
  • Registratie: April 2000
  • Laatst online: 00:11
while not eof(results) do
begin
while not eoln(results) do
begin
readln(results, getalrij[i]);
som:=som+getalrij[i];
i:=i+1;
gemgroep:=som/i;
writeln('Groep',n, ':' ,gemgroep:2:1);
n:=n+1;
cijfers[i]:=cijfers[i]+1;
end;
end;
De readln moet vervangen worden door een read. En zoals iemand anders al schreef, zal je zelf die ene spatie vooruit moeten lezen.

Waarom plaats je de waarde in een array? Je telt ze op voor een som en daarna overschrijf je de waarde weer met een volgende waarde. Dus de array kan weg.

Deze writeln-regel wordt 1 keer per groep getoond, en dient dus buiten de binnenste while-lus te staan. Net als het berekenen van het gemiddelde.

De i verhoog je alleen (kan ook met inc(i);) maar die teller zet je nooit meer omlaag.

Kort samengevat: Kijk eens heel goed naar je algoritme en teken het anders eens uit in een PSD.

  • Klippy
  • Registratie: Oktober 2000
  • Laatst online: 00:52

Klippy

Still Game

Idd, PSDtjes doen wonderen!

Scheelt soms toch wel wat werk moet ik zeggen.

Steam | SXQncyBhbGwgZ29vZCwgbWFuISDwn5iO


  • Jan Laros
  • Registratie: November 2001
  • Laatst online: 25-03 12:45

Jan Laros

Aerschtuner

Sorry, nix gezegd !

  • jvdmeer
  • Registratie: April 2000
  • Laatst online: 00:11
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
+----------------------------+
|                   |
+--+-------------------------+
|  |                 |
|  +-------------------------+
|  |                 |
|  +  -----------------------+
|  |  |             |
|  |  +----------------------+
|  |  |             |
|  |--+----------------------+
|  |                 |
|  +-------------------------+
|                   |
+----------------------------+
|                   |
+----------------------------+

De teksten uit dit PSD heb ik maar weggelaten om er nog enig niveau in te houden voor je. En sommige mensen geven er de voorkeur aan om de
code:
1
2
3
4
5
+------------+
|       |
|  +---------+
|  |       |
+--+---------+

te verwisselen met
code:
1
2
3
4
5
+------------+
|  |       |
|  +---------+
|       |
+--+---------+

of andersom.
Als je een if-instructie gebruikt, kan je de binnenste lus ook weglaten en wordt het dus:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
+----------------------------+
|                   |
+--+-------------------------+
|  |                 |
|  +-------------------------+
|  |    \      /      |
|  +-----------+-------------+
|  |         |       |
|  |-----------+-------------+
|  |         |       |
|  |-----------+-------------+
|  |         |       |
|  +-------------------------+
|                   |
+----------------------------+
|                   |
+----------------------------+

Veel plezier met dit (eigenlijk onzinnig) stukje. Met andere woorden zoals ik hierboven ook al typte, maak een goed ontwerp en je programma volgt vanzelf.

  • dusty
  • Registratie: Mei 2000
  • Laatst online: 21-02 00:06

dusty

Celebrate Life!

Op dinsdag 05 februari 2002 16:06 schreef jvdmeer het volgende:
[..]
En sommige mensen geven er de voorkeur aan om de
code:
1
2
3
4
5
+------------+
|       |
|  +---------+
|  |       |
+--+---------+

te verwisselen met
code:
1
2
3
4
5
+------------+
|  |       |
|  +---------+
|       |
+--+---------+

of andersom.
[..]
Sommige mensen horen ook nooit te programmeren >:)

Beiden betekenen in een PSD namelijk toch duidelijk iets anders dan elkaar. :P

Back In Black!
"Je moet haar alleen aan de ketting leggen" - MueR


  • C@SP
  • Registratie: Juni 2001
  • Laatst online: 03-08 17:02

C@SP

Biertje ??

Topicstarter
Bedankt, ik ben er nu bijna. Aleen het gescheiden houden per regel lukt me nog niet helemaal, maar we blijven proberen :)

"If you can't convince people with arguments, dazzle them with bullshit"


  • jvdmeer
  • Registratie: April 2000
  • Laatst online: 00:11
Op dinsdag 05 februari 2002 16:13 schreef dusty het volgende:

[..]

Sommige mensen horen ook nooit te programmeren >:)

Beiden betekenen in een PSD namelijk toch duidelijk iets anders dan elkaar. :P
Tuurlijk betekenen ze beiden iets anders, maar de ene is zonder problemen als de ander te herschrijven en andersom. Maar sommigen geven de voorkeur aan de eerste en anderen aan de tweede.

  • Jan Laros
  • Registratie: November 2001
  • Laatst online: 25-03 12:45

Jan Laros

Aerschtuner

misschien zoiets?

i:=1;
som:=0;
tot:=0;
m:=0;
assign(results, 'c:\cijfers.txt');
reset(results);
writeln('Prakticumresultaten');
writeln('===================');
writeln;
writeln('Gemiddelde cijfers per groep');
writeln('...........................');
writeln;
for i:=1 to 10 do cijfers[i]:=0;
while not eof(results) do
begin
while not eoln(results) do
begin
read(results, i);
som:=som+i;
m:=m+1;
cijfers[i]:=cijfers[i]+1;
end;
gemgroep:=som/m;
writeln('Groep',n, ':' ,gemgroep:2:1);
n:=n+1;
tot:=tot+som;
end;
gemstud:=tot/m;
writeln;
writeln('Het gemiddelde van alle studenten:' ,gemstud:2:1);
writeln;
writeln('Frequentie van de cijfers');
writeln('.........................');
writeln;
writeln('Cijfer 1:' ,cijfers[1]);
writeln('Cijfer 2:' ,cijfers[2]);
writeln('Cijfer 3:' ,cijfers[3]);
writeln('Cijfer 4:' ,cijfers[4]);
writeln('Cijfer 5:' ,cijfers[5]);
writeln('Cijfer 6:' ,cijfers[6]);
writeln('Cijfer 7:' ,cijfers[7]);
writeln('Cijfer 8:' ,cijfers[8]);
writeln('Cijfer 9:' ,cijfers[9]);
writeln('Cijfer 10:' ,cijfers[10]);
close(results);
readln;
end.

  • 0siris
  • Registratie: Augustus 2000
  • Laatst online: 13-09 19:02
Op dinsdag 05 februari 2002 15:20 schreef dusty het volgende:
k zie nogal grove fouten in je logaritme.
logaritme? zal wel algoritme wezen :+

ach...in een volgend leven lach je er om!


  • jvdmeer
  • Registratie: April 2000
  • Laatst online: 00:11
Op dinsdag 05 februari 2002 16:26 schreef Aerschtuner het volgende:
misschien zoiets?

[..]
Ten eerste is het volgens mij niet de bedoeling dat wij andermans huiswerk maken, evt. tips en dergelijke daargelaten. Ten tweede geeft jouw programma onjuiste resultaten! Sommige variabelen moeten tussendoor op 0 worden gesteld (m, gemgroep, som)

  • Knutselsmurf
  • Registratie: December 2000
  • Laatst online: 14-09 13:33

Knutselsmurf

LED's make things better

Op dinsdag 05 februari 2002 16:36 schreef jvdmeer het volgende:

[..]

Ten eerste is het volgens mij niet de bedoeling dat wij andermans huiswerk maken, evt. tips en dergelijke daargelaten. Ten tweede geeft jouw programma onjuiste resultaten! Sommige variabelen moeten tussendoor op 0 worden gesteld (m, gemgroep, som)
Bovendien zal geen enkele docent de laatste 10 regels goed rekenen.......

- This line is intentionally left blank -


Verwijderd

En waarom niet?

Verwijderd

Op zondag 10 februari 2002 23:31 schreef Achilles het volgende:
En waarom niet?
omdat dat netter is om dat met een fot loopje te doen!

  • TD-er
  • Registratie: Januari 2000
  • Laatst online: 28-08 16:22
Wat is de waarde van i na het for-loopje waarin je de array leegmaakt?
Dat is de eerste fout die ik zo gauw ff gezien heb. Kijk zo nog wel ff verder.

2e-stukje...
code:
1
2
3
4
5
6
7
8
9
10
while not eoln(results) do
      begin
        readln(results, getalrij[i]);
        som:=som+getalrij[i];
        i:=i+1;
        gemgroep:=som/i;
        writeln('Groep',n, ':'  ,gemgroep:2:1);
        n:=n+1;
        cijfers[i]:=cijfers[i]+1;
      end;

1) het lijkt me dat je niet een hele regel moet inlezen (readln) maar alleen een enkel item (is al eerder genoemd geloof ik)
dan krijg je iets zoals dit:
code:
1
2
3
4
5
6
7
8
while niet_einde_file do begin
  while niet_einde_regel do begin
    {bla} ....
     read(file);
    {bla}
  end;
  readln(file);
end;

Verder neem ik aan dat je het groepgemiddelde per ingelezen regel moet berekenen.
Dus per regel (na een readln() dus) zet je dat gemiddelde weer op een initiële waarde.

En inderdaad het afdrukken aan het eind doe je met een for-lusje.
code:
1
2
3
for i:=1 to 10 do begin
  writeln('groep ',i:2,'  bladiebla ',cijfer[i]:2);
end;

Verder nog een prettige avond, want ik neem aan dat je deadline ligt op 09 uur morgenochtend <very evil grinn>


nog ff een laatste aanvulling:
Ik weet niet of je in het Pascal-dialect waarin jij moet werken (waarschijnlijk Borland Pascal oid.) eerst nog een EndOfLine char moet definiëren. (bijv. EOL = chr(10) gevolgd door een chr(13) voor een DOS-textfile)
In HP-pascal wat we op de uni hier gebruikten moest dat ieg wel.
Kijk daar ook ff naar in je boeken en voorbeelden.

Een goedkope voeding is als een lot in de loterij, je maakt kans op een paar tientjes korting, maar meestal betaal je de hoofdprijs. mijn posts (nodig wegens nieuwe layout)

Pagina: 1