c-taal prob

Alle vragen m.b.t digitale schakelingen m.b.v. losse i.c's
en oplossingen m.b.v. PIC processoren.
Plaats reactie
alexander
Berichten: 53
Lid geworden op: za 12 mar 2005, 21:46

c-taal prob

Bericht door alexander »

ik heb een c-taal probleem.. hieronder staand programma klopt, en werkt, maar de vraag luidt :

op machines met een woordlengte van 2 bytes loopt het programma incorrect. waarom ?
wat moet er met het programma gebeuren om het probleem bloot te leggen, ook in het geval u met een woordlengte werkt van 4 bytes. probeer het uit. <ar moet er gedaan worden opdat het programma op de meeste machines hetzelfde resultaat levert, onafhankelijk van hun woordlengte .

ik sta hier voor een raadsel, weet namelijk niet hoe het op te lossen ..

kan jij mij helpen ?

alvast bedankt ! alex.



/****************************************
*Naam: Heyman
*Voornaam: Alexander
*datum:
*beschrijving:
****************************************/


#include <stdio>

#define OPPERVL 179680425
#define VIERK_MIJL_PER_VIERK_KM 0.3861021585424458
#define VIERK_VOET_PER_VIERK_MIJL (5280*5280)
#define VIERK_INCH_PER_VIERK_VOET 144
#define ACRES_PER_VIERK_MIJL 640

int main(int argc, char* argv[]){

const int pacific_sea = OPPERVL; /* in vierkante kilometers */
double acres,vierk_mijl,vierk_voet,vierk_inch;

printf("\n De pacific sea heeft een oppervlakte van\n");
printf("%d vierkante kilometer.\n", pacific_sea);
vierk_mijl = VIERK_MIJL_PER_VIERK_KM * pacific_sea;
vierk_voet = VIERK_VOET_PER_VIERK_MIJL * vierk_mijl;
vierk_inch = VIERK_INCH_PER_VIERK_VOET * vierk_voet;
acres = ACRES_PER_VIERK_MIJL * vierk_mijl;
printf("in andere eenheden wordt dit:\n\n");
printf("%22.7e acres\n", acres);
printf("%22.7e vierkane mijl\n", vierk_mijl);
printf("%22.7e vierkante voet\n",vierk_voet);
printf("%22.7e vierkante inch\n", vierk_inch);
}
Laatst gewijzigd door alexander op ma 22 okt 2007, 20:29, 2 keer totaal gewijzigd.
betonac
Berichten: 27
Lid geworden op: di 9 okt 2007, 20:58
Locatie: . .. .

Bericht door betonac »

Op welke machine werkt het wel ?
Op welke machine werkt het niet ?
Op welke machines moet het programma werken ?

Gebruik je twee verschillende compilers ?
Welke compiler(s) gebruik je ?

Dit omdat de grootte van de datatypes van compiler en van machine afhangen.
alexander
Berichten: 53
Lid geworden op: za 12 mar 2005, 21:46

Bericht door alexander »

normaal zou dit programma moeten werken op een machine met 4 byte.. en niet werken op een machine met 2 byte.

waarom werkt het niet op een machine met 2 byte ?

wat moet er met het programma gebeuren om het probleem bloot te leggen, ook in het geval u met een woordlengte werkt van 4 bytes. wat moet er gedaan worden opdat het programma op de meeste machines hetzelfde resultaat levert, onafhankelijk van hun woordlengte .

ik werk met djgpp is een compiler voor in de Dos omgeving.

groet alex.
betonac
Berichten: 27
Lid geworden op: di 9 okt 2007, 20:58
Locatie: . .. .

Bericht door betonac »

> waarom werkt het niet op een machine met 2 byte ?

Zal wel iets zijn met de grootte van de datatypes.

> wat moet er met het programma gebeuren om het probleem bloot te leggen, ook in het geval u met een woordlengte werkt van 4 bytes. wat moet er gedaan worden opdat het programma op de meeste machines hetzelfde resultaat levert, onafhankelijk van hun woordlengte .

Je moet voor elke machine een aparte code schrijven in je programma.
En de datatypes aanpassen zodat je gegevens in de variabelen passen.
betonac
Berichten: 27
Lid geworden op: di 9 okt 2007, 20:58
Locatie: . .. .

Bericht door betonac »

Wat is de uitvoer van het programma op de machine waar het niet werkt ?
alexander
Berichten: 53
Lid geworden op: za 12 mar 2005, 21:46

Bericht door alexander »

dat weet ik niet, dat is de opgave die in mijn boek staat, bij mijn pc werkt het..

dus het boek zegt je dat het niet werkt op een machine 2 byte.. en dus wat moet er verandert worden om diet wel te doen werken ?

groet
betonac
Berichten: 27
Lid geworden op: di 9 okt 2007, 20:58
Locatie: . .. .

Bericht door betonac »

Dat kan ik moeilijk zeggen, ik weet niet wat er allemaal in jouw boek staat.
Maar djgpp is een 32-bit compiler. Dit wil zeggen dat je integer (int) in je code 32-bit is (dus 4 bytes).
Als je nu een computer/compiler hebt die die 16 bit is, dan is je integer ook 16 bits groot.
Dus dan zal je resultaat niet in die integer passen van 16 bit.
Daarom zal het programma waarschijnlijk niet werken.

zie ook hier voor meer informatie over datatypes in C :

http://nl.wikibooks.org/wiki/Programmer ... /Datatypes
Plaats reactie