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 -
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 :
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:
- Liste chainé bugé
- Liste déroulante excel - Guide
- Chaine tnt gratuite sur mobile - Guide
- Liste déroulante en cascade - Guide
- Liste code ascii - Guide
- Chaine radio - Télécharger - Médias et Actualité