[C] 3 verschillende problemen in code*

Pagina: 1
Acties:

  • Yokidrink
  • Registratie: November 2000
  • Laatst online: 24-06 10:17
Hoi,

Ik zit een beetje errug vast met onderstaand programma

er zijn 3 delen waar een of meerdere fouten in zitten en ik kan niet vinden wat het is. ik heb de delen waar de fout moet zitten gemarkeerd:
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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
-------------------------------------------------------
/*
 *  Program to work out the number of temperatures in
 *  each of 7 temperature bands
 */

#include <conio.h>
#include <stdio.h>

float in_float(void);
void wait(void);

/*
 * main() function
 * ===============
 */
main()
{
int bands[7];
int i,number=0;
float temp;
clrscr();
/*
 * First clear the temperature band array
 * DIT DEEL!! hoe krijg ik het gecleared
 */
for (i=0; i<6; i++)
{
bands[7]=0;
}

/* TOT HIER
 * Display prompt and read in first temperature
 */
cprintf("Enter temperatures greater than -100.0\r\n");
cprintf("Enter a temperature of -100.0 or less to stop the program\r\n");
temp = in_float();
cprintf("\r\n");
/*
 * Main loop
 * TWEEDE DEEL... DE LOOP, CORRECT of NIET
 */
while (temp >-100.0)
{
number++;

/*
 * Determine the temperature band
 * DERDE DEEL... how to determine the band

while ((temp >=0.0) && (i<6))
{
temp=temp - 10.0;
i++;
}
bands[i];
/*
 * Read in next temperature
 */
temp = in_float();
cprintf("\r\n");
}
/*
 * Display the results
 */
cprintf("\r\n%i temperatures were entered",number);
cprintf("\r\n%i was/were less than 0.0", bands[0]);
cprintf("\r\n%i was/were 0.0 or over and less than 10.0", bands[1]);
cprintf("\r\n%i was/were 10.0 or over and less than 20.0", bands[2]);
cprintf("\r\n%i was/were 20.0 or over and less than 30.0", bands[3]);
cprintf("\r\n%i was/were 30.0 or over and less than 40.0", bands[4]);
cprintf("\r\n%i was/were 40.0 or over and less than 50.0", bands[5]);
cprintf("\r\n%i was/were 50.0 or over", bands[6]);
wait();
}
/*
 * end of main()
 */

/*
 * function in_float()
 * ===================
 * inputs a floating-point number from the keyboard
 */

float in_float(void)
{
char tbuff[12];
float d;
tbuff[0] = 10;
cgets(tbuff);
if (sscanf(&tbuff[2],"%f",&d) < 1)
{
d = 0.0;
}
return(d);
}
/*
 * end of in_float()
 */

/*
 * function wait()
 * ===============
 * waits for a keypress
 */

void wait(void)
{
cprintf("\r\nPress any key to terminate");
getche();
}
/*
 * end of wait()
 */
--------------------------------------------------

Degene die het weet.... je bent een ster!!

[edit van dusty: Ondanks de vraag om code tags toe te voegen, heeft meneer de topic starter dat toch niet gedaan. Dan doe ik het maar omdat meneer te lui is om het zelf te doen.]

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 09-09 11:02
LEES DE FAQ!

* Soultaker kan 's avonds laat geen beleefdheden meer opbrengen

  • Yokidrink
  • Registratie: November 2000
  • Laatst online: 24-06 10:17
Op vrijdag 22 maart 2002 02:17 schreef Soultaker het volgende:
LEES DE FAQ!

* Soultaker kan 's avonds laat geen beleefdheden meer opbrengen
Well.. duh.... dank je voor deze informatieve reactie
net wat ik nodig heb na een paar uur bloed sweet en tranen.

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 09-09 11:02
Op vrijdag 22 maart 2002 02:30 schreef thoth het volgende:
Well.. duh.... dank je voor deze informatieve reactie
net wat ik nodig heb na een paar uur bloed sweet en tranen.
Dan kon even de FAQ lezen er dus niet van af?

* Nette code: code tussen [code]-tags!

* Maak een duidelijke omschrijving van je probleem.

* Geef aan wat je al geprobeerd hebt.

* Geef aan wat er fout gaat, wat voor foutmelding je te zien krijgt en op welke regel de fout staat.

* Zorg dat je topic-title duidelijk is, (maak een duidelijke omschrijving) en zet vooraan tussen haakjes om welke taal het gaat.

* Denk na voor je replied; (als ik zeg dat je de FAQ moet lezen; doe dat dan!)

Misschien heb je hier meer aan of moet ik 't nog verder voor je uitkauwen? Een antwoord op je vraag krijg je van mij sowieso niet meer.

edit:
Jesus he, het is ook wel ontzettend obvious allemaal. Huiswerk zeker? En geen zin om zelf wat te leren?

  • Dido
  • Registratie: Maart 2002
  • Laatst online: 10-09 17:04

Dido

heforshe

for (i=0; i<6; i++)
{
bands[7]=0;
}

HINT: ik denk dat bands[7] ondertussen wel op nul staat, maar met de rest doe je niets?

Wat betekent mijn avatar?


  • Yokidrink
  • Registratie: November 2000
  • Laatst online: 24-06 10:17
Soultaker

1> ja ik had die faq niet goed gelezen.. admitted
2> ja ik had mijn probleem niet goed uitgelegd

Maar dan nog, ik gaf af op het feit dat je me de virtuele trap onder mijn kont geeft.. whatever.

Dido,
band[7]=0 ik dacht ook dat ie dan wel gecleared was maar ik moest een if constructie gebruiken om alle bands te clearen en daar ging ik dus fout, het moest zijn band[i]=0

Het tweede deel:
while (temp >-100.0)
{
number++;
zit volgens mij wel goed aangezien de output het juiste aantal nummers weergeeft.

Het derde deel:

/*
* Determine the temperature band
* DERDE DEEL... how to determine the band

while ((temp >=0.0) && (i<6))
{
temp=temp - 10.0;
i++;
}
bands[i];

Hier moet een while constructie staan die de temperatuur input assigned in de juiste band.
Ben hier compleet op stuk gelopen en heb gister van 's middags tot 's nachts mijn tanden kapot gebeten en kan d'r gewoon geen oplossing voor vinden.

de output die ik krijg na de temp 1,40 en -100 ingevoerd te hebben is als volgt:

Enter temperatures greater than -100.0
Enter a temperature of -100.0 or less to stop the program
1
40
-100

2 temperatures were entered
0 was/were less than 0.0
0 was/were 0.0 or over and less than 10.0
0 was/were 10.0 or over and less than 20.0
0 was/were 20.0 or over and less than 30.0
0 was/were 30.0 or over and less than 40.0
0 was/were 40.0 or over and less than 50.0
5294 was/were 50.0 or over <<<<<<<<<<---------!!
Press any key to terminate

  • Sjaaky
  • Registratie: Oktober 2000
  • Laatst online: 03-09 23:48
als 1e:
code:
1
2
3
for (i=0; i<7; i++){  //LET OP: i < 7
  bands[i]=0;
}

als 2e:
code:
1
2
3
4
5
while ((temp >=0.0) && (i<6)) {
  temp=temp - 10.0;
  i++;
}
bands[i]++;  //LET OP: ++

Dit zou het ongeveer moeten zijn. :)

Verwijderd

gebruik svp code tags, deze code is echt onleesbaar...
code:
1
2
3
4
5
6
7
/* zo dus */

int
main()
{
  blablabla;
}

:Y)

  • Yokidrink
  • Registratie: November 2000
  • Laatst online: 24-06 10:17
Op vrijdag 22 maart 2002 13:25 schreef Sjaaky het volgende:
als 1e:
code:
1
2
3
for (i=0; i<7; i++){  //LET OP: i < 7
  bands[i]=0;
}

als 2e:
code:
1
2
3
4
5
while ((temp >=0.0) && (i<6)) {
  temp=temp - 10.0;
  i++;
}
bands[i]++;  //LET OP: ++

Dit zou het ongeveer moeten zijn. :)
Tnx
dit lost inderdaad het probleem gedeeltelijk op. Ik snap hem nu van die bands[i]++
enig probleem is dat de temeperatuur nog steeds niet opgeslagen wordt in de juiste band
ie
output voor temp 1.0 zou hem in bands[2] moeten plaatsen maar de waardes blijven 0

ps... sorry about de tags, het maakt het er inderdaad niet duidelijker op

  • Sjaaky
  • Registratie: Oktober 2000
  • Laatst online: 03-09 23:48
hint: je kan je post editten :Y)

  • Sjaaky
  • Registratie: Oktober 2000
  • Laatst online: 03-09 23:48
Oh wacht dat ben ik er vergeten bij te zeggen. Je moet i weer op 0 zetten na bands[i]++;

  • Yokidrink
  • Registratie: November 2000
  • Laatst online: 24-06 10:17
Op vrijdag 22 maart 2002 13:48 schreef Sjaaky het volgende:
Oh wacht dat ben ik er vergeten bij te zeggen. Je moet i weer op 0 zetten na bands[i]++;
Je bent een ster!!
het werkt :-)
owe u one m8 *D

  • Yokidrink
  • Registratie: November 2000
  • Laatst online: 24-06 10:17
hij werkt op een 'klein' detail na:
kijkend naar de output wanneer je 100 temps hebt ingevoerd krijg je het volgende resultaat:

100 temperatures were entered
12 was/were less than 0.0
8 was/were 0.0 or over and less than 10.0
17 was/were 10.0 or over and less than 20.0
16 was/were 20.0 or over and less than 30.0
19 was/were 30.0 or over and less than 40.0
17 was/were 40.0 or over and less than 50.0
10 was/were 50.0 or over
Press any key to terminate

hij plaats de eerste waarde niet in een band, de overige 99 wel.

  • Sjaaky
  • Registratie: Oktober 2000
  • Laatst online: 03-09 23:48
i op 0 zetten voor de 2e while lus ipv na bands[i]++; ?
Maar voor dit soort dingen zijn debuggers uitgevonden.

  • Yokidrink
  • Registratie: November 2000
  • Laatst online: 24-06 10:17
<close pls>

bedankt voor de hulp, ik weet een ding... ik blijf ver van programeren :)

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 09-09 11:02
Op vrijdag 22 maart 2002 15:48 schreef thoth het volgende:
ik blijf ver van programeren :)
Blijf dan ook weg van programmeerfora.

(PS. Code tags hebben ook niet zoveel nut meer als je de layout al verneukt hebt.)
Pagina: 1