Probleme de debutant ... Mais... !!
Bonjour a tous , voici le probleme : je dois faire un programme triant une liste de nombre de 10 caracteres (caracteres car s'exprime dans n'importe quelle base).
C'est une liste chainée. Voila le principe :
nombres a trier :
48081 97342 90287 90583 53202 65215 48801
premiere etape :
On cherche tous les nombres qui se terminent par 0, on les mets dans le seau 0.Dans cette etape , le seau 0 est vide car il n y apas de nombres se terminant par 0
ensuite on chertche les nombres qui se terminent par 1, on les met dans le seau 1. Donc 48081 et 48801 sont dans ce seau.
et ainsi de suite jusqu au seau 9
On relie ces seaux entre eux dans l ordre, on obtient la liste triée par le dernier nombre :
48081 48801 97342 53202 90583 65215 90287
On recommence avec l avant dernier nombre et ainsi de suite jusqu a obtenit la liste triée entierement.
La representation des seaux est fait par un tableau ou le nombre de lignes = la base.
Voici le programme :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132
|
#include <stdio.h>
#include <stdlib.h>
typedef struct elem {
char valeur[11];
struct elem *suivant;
}element;
typedef element* liste;
liste ajoutqueue(liste l)
{
element *e;
element *nouv;
nouv=(element*)malloc(sizeof(element));
printf ("Entrer la nouvelle valeur a ajouter\n");
scanf ("%s",nouv->valeur);
nouv ->suivant=NULL;
if (l!=NULL)
{
e=l;
while (e != NULL)
e=e->suivant;
e->suivant =nouv;
}
else
l=nouv;
return l;
}
liste tri(liste l,int b)
{
int i,j;
liste A[b];
element *e;
element *f;
for (i=0;i<10;i=i+1)
{
for (i=0;i<b;i=i+1)
{
A[i]=NULL;
}
e=l;
while (e->suivant !=NULL)
{
element *nouv;
nouv=(element*)malloc(sizeof(element));
memcpy(nouv->valeur,e->valeur,11*sizeof(char));
nouv->suivant=NULL;
j=e->valeur[i];
if (A[j] != NULL)
{
f=A[j];
while (f->suivant != NULL)
f=f->suivant;
f->suivant=nouv;
}
else
{
memcpy(A[j]->valeur,e->valeur,11*sizeof(char));
A[j]->suivant=NULL;
}
e=e->suivant;
}
l=A[0];
e=l;
for (i=0;i<b-1;i=i+1)
{
while (e->suivant!=NULL)
{
e=e->suivant;
}
e->suivant=A[i+1];
}
}
return l;
}
int main()
{
int choix,i,b;
element *l;
element *e;
e=l;
printf("Choisir la base\n");
scanf("%d",&b);
liste A[b];
for (i=0;i<b;i=i+1)
{
A[i]=NULL;
}
do
{
printf("1. Ajout d'une nouvelle valeur\n");
printf("2. Affichage des valeurs entrées\n");
printf("3. Trier la liste\n");
printf("4. Quitter\n");
printf("Entrez votre choix :\n");
scanf("%d",&choix);
switch(choix)
{
case 1 :
{
l=ajoutqueue(l);
break;
}
case 2 :
{
e=l;
while (e->suivant != NULL)
{
printf("%s",e->valeur);
e=e->suivant;
}
break;
}
case 3 :
{
l=tri(l,b);
break;
}
}
}
while (choix !=4);
return 0;
} |
et les erreurs : :(
Code:
1 2 3 4 5 6 7 8 9 10
| In function `ajoutqueue':
ligne 26 : syntax error before "else"
In function `tri':
ligne 46 : incompatible types in assignment
ligne 58 : incompatible types in assignment
ligne 59 : syntax error before '(' token
In function `main':
ligne 115 : syntax error before '(' token |
Voila tt , si ils manquent des infos demandez ,je repondrai rapidement mais aidez moi car j ai beau chercher je ne vois pas !! mais bon je debutes...
Merci !