Problème Programmation : Erreur segmentation
Jerem6464
-
fiddy Messages postés 11069 Date d'inscription Statut Contributeur Dernière intervention -
fiddy Messages postés 11069 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
Nous voyons en cours actuellement la récursivité, je me suis donc essayé à l'implémenter en Pascal avec FreePascal. J'ai tenté d'implémenter le tri rapide ou QuickSort mais je trouvais toujours à l'execution ce code-ci : erreur de segmentation
après plusieurs recherches, je ne voyais pas où mon algorithme buggait, j'ai donc tenté d'implémenter une fonction plus simple utilisant la récursivité comme la fonction factorielle. Voici mon code :
program factrecursif;
function fact(x:Integer):Integer;
begin
if (x=1) and (x=0) then
fact:=1
else
fact:=x*fact(x-1)
end;
var x:Integer;
begin
writeln('combien?');
readln(x);
writeln(fact(x))
end.
Et la on m'affiche erreur de segmentation alors que je compile très bien. Ne comprenant d'ou venait l'erreur j'ai tenté de le coder en C.
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int fact(int x)
{
if (x==1 and x==0)
return 1;
else
return x*fact(x-1);
}
int main()
{
int x,resultat;
printf( "combien?\n");
scanf("%d",&x);
resultat=fact(x);
printf(" %d ",resultat);
}
Et la de nouveau pareil erreur de segmentation malgré une compilation encore une fois OK.
Je ne comprend pas ou est le problème que ce soit en Pascal et en C dans mon code...
Pour information, j'utilise Ubuntu 9.04 et je suis sous KDE. Je ne sais pas si cela vient peut etre de la...Je suis assez desespéré^^
Merci de m'eclairer
Jerem6464
Nous voyons en cours actuellement la récursivité, je me suis donc essayé à l'implémenter en Pascal avec FreePascal. J'ai tenté d'implémenter le tri rapide ou QuickSort mais je trouvais toujours à l'execution ce code-ci : erreur de segmentation
après plusieurs recherches, je ne voyais pas où mon algorithme buggait, j'ai donc tenté d'implémenter une fonction plus simple utilisant la récursivité comme la fonction factorielle. Voici mon code :
program factrecursif;
function fact(x:Integer):Integer;
begin
if (x=1) and (x=0) then
fact:=1
else
fact:=x*fact(x-1)
end;
var x:Integer;
begin
writeln('combien?');
readln(x);
writeln(fact(x))
end.
Et la on m'affiche erreur de segmentation alors que je compile très bien. Ne comprenant d'ou venait l'erreur j'ai tenté de le coder en C.
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int fact(int x)
{
if (x==1 and x==0)
return 1;
else
return x*fact(x-1);
}
int main()
{
int x,resultat;
printf( "combien?\n");
scanf("%d",&x);
resultat=fact(x);
printf(" %d ",resultat);
}
Et la de nouveau pareil erreur de segmentation malgré une compilation encore une fois OK.
Je ne comprend pas ou est le problème que ce soit en Pascal et en C dans mon code...
Pour information, j'utilise Ubuntu 9.04 et je suis sous KDE. Je ne sais pas si cela vient peut etre de la...Je suis assez desespéré^^
Merci de m'eclairer
Jerem6464
A voir également:
- Problème Programmation : Erreur segmentation
- Application de programmation - Guide
- Programmation envoi sms - Guide
- Programmation vb - Télécharger - Langages
- Programmation binaire - Guide
- Programmation télécommande porte de garage brico depot - Forum Matériel & Système
1 réponse
Salut,
Et la de nouveau pareil erreur de segmentation malgré une compilation encore une fois OK.
Le segfault apparaît que lorsque la compilation est ok puisque c'est une erreur d'exécution ;-))).
if (x==1 and x==0)
C'est OR qu'il faut mettre (|| en C). Un nombre ne peut pas être égal à 0 ET 1 à la fois, donc il y a donc appel infini de fonctions. La pile va donc se remplir jusqu'à provoquer un crash.
Même remarque pour Pascal.
Cdlt
Et la de nouveau pareil erreur de segmentation malgré une compilation encore une fois OK.
Le segfault apparaît que lorsque la compilation est ok puisque c'est une erreur d'exécution ;-))).
if (x==1 and x==0)
C'est OR qu'il faut mettre (|| en C). Un nombre ne peut pas être égal à 0 ET 1 à la fois, donc il y a donc appel infini de fonctions. La pile va donc se remplir jusqu'à provoquer un crash.
Même remarque pour Pascal.
Cdlt