🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: be.comp.programming
Article #17633

Re: wat is mjn fout bij volgend C-programma

#17633
From: Lieven Marchand
Date: Thu, 18 Nov 1999 00:00
102 lines
2661 bytes
"Joris Van Droogenbroeck" <Joris.Van.Droogenbroeck@pandora.be> writes:

> Voor school moet ik een C-programma schrijven die alle priemgetallen
> afdrukt. Doch na compilatie en uitvoerig doet hij niets buiten af te

Moet het ooit stoppen? Er zijn nogal veel priemgetallen ;-)

> printen: "Dit zijn de priemgetallen"? Kan iemand mijn fout vinden, ik vind
> ze niet !
> 
> #include <stdio.h>
> #include <conio.h>

De header conio.h is niet standaard C.

> 
> void priem(int getal)
> { int i, test,uitk;
>   i=getal-1;
>   test=1;
>   do
> 

Ik veronderstel dat hier een { ontbreekt. Probeer ook wat meer
indentatie en ruimte te laten.

> 
>     uitk=getal%i;
>     if (uitk<test) { test=0; }
>     i--;
>   }
>   while ((i>=2) || (test!=0));
>   if (test!=0)
>   { printf ("%d ",getal);  }
> }
> 

Je pakt dit nogal omslachtig aan. Wat wil je eigenlijk doen: testen of
een van de getallen kleiner dan getal een deler is. Gebruik een for
loop en break wanneer je succes hebt. Het heeft ook geen zin de even
getallen te proberen als deler.

void priem( int getal )
{
int index;

/* 2 is priem */
if(getal==2)
  {
     printf("%d ", getal);
     return;
  }

/* andere even getallen niet */
if(getal%2==0)
  return;

for(index=3;index<getal;index+=2)
  {
     if(getal%index==0) /* we hebben een deler gevonden */
       return;
  }

/* als we hier aankomen hebben we geen deler gevonden */
printf("%d ", getal);
return;
}

Deze routine heeft net als de jouwe problemen met negatieve
argumenten. Als je het idee van even getallen vermijden verder
uitwerkt kom je op de Zeef van Eratosthenes wat een efficientere
manier is om je probleem op te lossen.

> void main()

In C kan main 2 prototypes hebben:
int main() en int main(int, char *[]). void main() is niet toegelaten.

> {
>  clrscr();

niet standaard functie

>  printf ("Dit zijn de priemgetallen\n");
>  for (int i=2; i<=100; i++)

C++ syntax. In standaard C moet je de variable i te voren declareren.

>  {
>   priem (i);
>  }
>  getch();

niet standaard functie

> }
> 
> 

-- 
Lieven Marchand <mal@bewoner.dma.be>
If there are aliens, they play Go. -- Lasker
Technical Details
Message-ID: <m366yzmoiw.fsf@localhost.localdomain>
Path: arc1-ca.pugleaf.net!unknown!not-for-mail
References: <5sXY3.1067$UW4.29942@afrodite.telenet-ops.be>

Show Full Headers
Complete Article Headers
X-Google-Language: DUTCH,ASCII-7-bit
X-Google-Thread: fcea4,d68fc8b5c744907e
X-Google-Attributes: gidfcea4,public
From: Lieven Marchand <mal@bewoner.dma.be>
Subject: Re: wat is mjn fout bij volgend C-programma
Date: 1999/11/18
Message-ID: <m366yzmoiw.fsf@localhost.localdomain>
X-Deja-AN: 550618479
References: <5sXY3.1067$UW4.29942@afrodite.telenet-ops.be>
Organization: Only under extreme pressure
Newsgroups: be.comp.programming