segmentation fault

5 posts / 0 new
Last post
andrei
segmentation fault

de  ce da eroare Segmentation fault ?

#include
#include

int n;

int
are_divizor (int p, int d)
{
  if (d > sqrt (p))
    return 0;
  else if (p % d == 0)
    return 1;
  else
    are_divizor (p, d + 1);
}

void
prim (int p)
{
/*  if (!are_divizor (p, 2))
    {
      printf ("\n%i", p);
      return;
    }
  else
    prim (p + 1);*/

if (are_divizor(p,2))
prim(p+1);
else {
printf("\n%i", p);
return;
}
}

void
main ()
{
  printf ("n= ");
  scanf ("%i", &n);
  prim (n + 1);
}

cosmin
cosmin's picture
Re: segmentation fault

Ar trebui să pui
return are_divizor (p, d + 1);
în loc de
are_divizor (p, d + 1);

Altfel ţi se umple stiva şi de asta ai segmentation fault.
E cam ciudat programul, ce ar trebui să arate? Cel mai mic număr prim mai mare decât ceva?

[url=http://counter.li.org/]Linux registered user #368449[/url]

andrei
Re: segmentation fault

Programul este luat de la:
http://www.scribd.com/doc/327726/Culegere-probleme-de-informatica

la pg 46 citez:

4. Se citeşte n, să se găsească primul număr prim mai mare decît n. (Se presupune cunoscută demonstraţia faptului că există p-prim mai mare decît oricare n. Sîntem astfel siguri că algoritmul se opreşte! )

cosmin
cosmin's picture
Re: segmentation fault

Atunci este corect. Doar să nu uiţi de return acolo în funcţie.

Ca observaţie, funcţia main() ar trebui să întoarcă int, nu void. Ştiu că aşa se face la liceu, dar nu este conform standardului.

[url=http://counter.li.org/]Linux registered user #368449[/url]

Grunt
Grunt's picture
Re: segmentation fault

Si... daca pot sa mentionez... algoritmul e destul de ineficient. :)

"Prostilor! Nu mi se spune degeaba Maestrul Mortii! Victoria voastra va va fi infrangerea. Triumful vostru va va fi sicriul. Mi-am invins propria moarte, si din Abis am renascut..."