Liste chainé bugé

Résolu
armasousou Messages postés 1268 Date d'inscription   Statut Membre Dernière intervention   -  
armasousou Messages postés 1268 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour à tous,

Je programmais la fonction d'ackerman en algo pour le "fun" et mon programme se plante je comprend pas pourquoi ><

La fonction d'ackerman est défini par A(m, n)
Si m = 0 => A(m,n) = n+1
Si n = 0 => A(m,n) = A(m-1, 1)
Sinon A(m,n) = A(m-1, A(m, n-1))


J'ai pris le programme par une liste chainé avec deux int, un element suivant et un precedant.

Voila mon programme :

#include <stdio.h> 
#include <stdlib.h> 

typedef struct sA{ 
int m; 
int n; 
struct sA* next; 
struct sA* prev; 
}Ack; 

Ack* allouer(int, int); 
void calc(Ack*); 
void aff(Ack); 

int main(int argc, char **argv) 
{ 
int m, n, i, j; 
Ack* A; 

//~ printf("Donne ton m et n\n"); 
//~ scanf("%d", &m); 
//~ scanf("%d", &n); 

m=2; 
n=1; 

A = allouer(m, n); 

while( A->m != 0 ) 
{ 
Ack* tmp; 

aff(*A); 
tmp = A; 

while(tmp->next != NULL) 
{ 
tmp = tmp->next; 
} 
calc(tmp); 
} 

printf("\n"); 
printf("Ton Ackerman (%d,%d) est égal à %d :)\n", m, n, A->n); 

return 0; 
} 

Ack* allouer(int m, int n) 
{ 
Ack* pA; 
pA = malloc(sizeof(Ack)); 
pA->m=m; 
pA->n=n; 
pA->next = NULL; 
pA->prev = NULL; 
return pA; 
} 

void calc(Ack* pA) 
{ 
int m = pA->m; 
int n = pA->n; 

if( n == 0	) 
{ 
pA->m = m -1; 
pA->n = 1; 
} 
else if( m == 0 ) 
{ 
pA->prev->n = n+1; 
pA->prev->next = NULL; 
free(pA); 
} 
else 
{ 
pA->next = allouer(m, n-1); 
pA->next->prev = pA; 
pA->m =m-1; 
} 
} 

void aff(Ack A) 
{ 
int j, i=0; 

while(A.next != NULL) 
{ 
printf("A(%d, ", A.m);	
i++; 
A= *(A.next); 
} 

printf("A(%d, %d", A.m, A.n);	
i++; 

for(j=0 ; j<i ; j++) 
{ 
printf(")"); 
} 
printf("\n"); 
} 
A voir également:

2 réponses

ajp55 Messages postés 426 Date d'inscription   Statut Membre Dernière intervention   23
 
qu'est ce que tu faire exactement? calculer la valeur de akerman pour deux valeur données? pourquoi ne pas simplement utilisé une fonction recursive??
0
armasousou Messages postés 1268 Date d'inscription   Statut Membre Dernière intervention   83
 
Trop simple et dans ce cas je laurai fait en scheme pas en c ^^
0