[Résolut]Aide algorithme en C
Dernière réponse : dans Programmation
Bonjour!
Alors je galère depuis un bon petit moment sur un algorithme, je vai tenté de vous expliquer mais c'est pas simple lol !
J'ai un tableau non trier (R), je doit avec une variable (var) et un autre tableau (T) de même taile que le premier détermner un ordre d'affichage:
-var a pour valeur l'indice de R où se trouve la première valeur dans l'ordre trier
-à T[var] il y a la seconde, à T[T[var]] la troisième: chaque élément de T a pour valeur
l'indice suivant dans R où se trouve la valeur suivante dans l'ordre.
ex
rangement croissant)
R=|4|3|7|1|
après passage dans l'algorithme on doit récupéré:
var=3
T=|2|0|-1|1|
détail: -1 signifie qu'il n'y a plus de valeur après, on doit initialiser var a 0 et T[0] à -1 au début de l'algorithme.
Je béniré tout ceux qui m'aideront
!
Alors je galère depuis un bon petit moment sur un algorithme, je vai tenté de vous expliquer mais c'est pas simple lol !
J'ai un tableau non trier (R), je doit avec une variable (var) et un autre tableau (T) de même taile que le premier détermner un ordre d'affichage:
-var a pour valeur l'indice de R où se trouve la première valeur dans l'ordre trier
-à T[var] il y a la seconde, à T[T[var]] la troisième: chaque élément de T a pour valeur
l'indice suivant dans R où se trouve la valeur suivante dans l'ordre.
ex
rangement croissant)R=|4|3|7|1|
après passage dans l'algorithme on doit récupéré:
var=3
T=|2|0|-1|1|
détail: -1 signifie qu'il n'y a plus de valeur après, on doit initialiser var a 0 et T[0] à -1 au début de l'algorithme.
Je béniré tout ceux qui m'aideront
! Autres pages sur : resolut aide algorithme
Lassé par la pub ? Créez un compte
Non ce n'est pas clair.
T'as de la chance je comprends les explications bancales.
Je résume:
- Entrée:
R: un tableau non trié contenant des valeurs entière
- Objectif:
Obtenir un chemin pour parcourir le tableau non trié dans l'ordre
- Sorties
var: indice de la plus petite valeur trouvée
T: tableau indicé i (en parallèle avec R) contenant l'indice j sur la valeur suivante de R (indice sur la plus petite valeur supérieure à R)
Sinon, qu'est-ce que tu n'arrives pas à faire ?
T'as de la chance je comprends les explications bancales.
Je résume:
- Entrée:
R: un tableau non trié contenant des valeurs entière
- Objectif:
Obtenir un chemin pour parcourir le tableau non trié dans l'ordre
- Sorties
var: indice de la plus petite valeur trouvée
T: tableau indicé i (en parallèle avec R) contenant l'indice j sur la valeur suivante de R (indice sur la plus petite valeur supérieure à R)
Sinon, qu'est-ce que tu n'arrives pas à faire ?
Cool je croit que tu a compris le truc
!
En faite c'est plus un problème de mettre T[j]ds T ou j ou i ou T[T[j]] ou de i ....
LOOL!!
Plus ssérieusement la j'ai réussit a tout trier saut R[0] qui reste toujour dernier :?
Affichage a l'éxécution:
Code:
Oui ça fait beaucoup de printf mais ya que ça pour trouver le bug
!
Les lignes avec plein de chiffre c'est le tableau T avec la valeur de la variable devant ( var | T[0] T[1] .....).
Comme ça tu a le contexte!
La fonction qui pose problème c'est range().
A mon avis je doit effectuer une autre séquence d'instruction si T[j]==-1 pour placer l'ince i après j (contrairement a ce que fait le if ligne 72, il le place avant).
C le seul problème maintenant mais je rame encore un peu dessus!
Bonne lecture
!
!En faite c'est plus un problème de mettre T[j]ds T ou j ou i ou T[T[j]] ou de i ....
LOOL!!
Plus ssérieusement la j'ai réussit a tout trier saut R[0] qui reste toujour dernier :?
Affichage a l'éxécution:
./TPnote2 <releves.d3 Combien de jour ? Jour 1: Température min: Température max: Hygrométrie: Pluie: Jour 2: Température min: Température max: Hygrométrie: Pluie: Jour 3: Température min: Température max: Hygrométrie: Pluie: Jour 4: Température min: Température max: Hygrométrie: Pluie: Jour 5: Température min: Température max: Hygrométrie: Pluie: Jour 6: Température min: Température max: Hygrométrie: Pluie: Jour 7: Température min: Température max: Hygrométrie: Pluie: Jour 8: Température min: Température max: Hygrométrie: Pluie: Jour 9: Température min: Température max: Hygrométrie: Pluie: Jour 10: Température min: Température max: Hygrométrie: Pluie: Jour 11: Température min: Température max: Hygrométrie: Pluie: Jour 12: Température min: Température max: Hygrométrie: Pluie: temp min temp max hygrométrie pluie 4.30 7.40 86 0.00 0.60 2.80 78 0.00 -1.40 4.70 83 0.20 2.60 10.30 85 9.00 6.00 9.90 86 0.20 4.90 9.60 87 1.00 7.90 11.90 79 1.00 5.40 8.20 87 0.00 5.40 10.20 82 0.80 3.50 11.20 85 1.00 8.60 11.30 82 3.00 4.90 8.90 75 0.00 0 | -1 75 0 0 10 -1080060228 274200272 0 0 12 -1080060168 134514691 1 | -1 0 0 0 0 0 0 0 0 0 0 0 2 | -1 0 1 0 0 0 0 0 0 0 0 0 2 | -1 3 1 0 0 0 0 0 0 0 0 0 2 | -1 3 1 4 0 0 0 0 0 0 0 0 2 | -1 3 1 5 0 4 0 0 0 0 0 0 2 | -1 3 1 5 6 4 0 0 0 0 0 0 2 | -1 3 1 5 6 7 0 4 0 0 0 0 2 | -1 3 1 5 6 7 0 8 4 0 0 0 2 | -1 3 1 9 6 7 0 8 4 5 0 0 2 | -1 3 1 9 6 7 10 8 4 5 0 0 2 | -1 3 1 9 6 11 10 8 4 5 0 7 Ranger par température minimun croissante: temp min temp max hygrométrie pluie -1.40 4.70 83 0.20 0.60 2.80 78 0.00 2.60 10.30 85 9.00 3.50 11.20 85 1.00 4.90 9.60 87 1.00 4.90 8.90 75 0.00 5.40 8.20 87 0.00 5.40 10.20 82 0.80 6.00 9.90 86 0.20 7.90 11.90 79 1.00 8.60 11.30 82 3.00 4.30 7.40 86 0.00 [ggauthier@l12 TPnote2]$ gcc -std=c99 TPnote2.c -o TPnote2 [ggauthier@l12 TPnote2]$ ./TPnote2 <releves.d3 Combien de jour ? Jour 1: Température min: Température max: Hygrométrie: Pluie: Jour 2: Température min: Température max: Hygrométrie: Pluie: Jour 3: Température min: Température max: Hygrométrie: Pluie: Jour 4: Température min: Température max: Hygrométrie: Pluie: Jour 5: Température min: Température max: Hygrométrie: Pluie: Jour 6: Température min: Température max: Hygrométrie: Pluie: Jour 7: Température min: Température max: Hygrométrie: Pluie: Jour 8: Température min: Température max: Hygrométrie: Pluie: Jour 9: Température min: Température max: Hygrométrie: Pluie: Jour 10: Température min: Température max: Hygrométrie: Pluie: Jour 11: Température min: Température max: Hygrométrie: Pluie: Jour 12: Température min: Température max: Hygrométrie: Pluie: temp min temp max hygrométrie pluie 4.30 7.40 86 0.00 0.60 2.80 78 0.00 -1.40 4.70 83 0.20 2.60 10.30 85 9.00 6.00 9.90 86 0.20 4.90 9.60 87 1.00 7.90 11.90 79 1.00 5.40 8.20 87 0.00 5.40 10.20 82 0.80 3.50 11.20 85 1.00 8.60 11.30 82 3.00 4.90 8.90 75 0.00 0 | -1 75 0 0 10 -1081035316 274200272 0 0 12 -1081035256 134514691 1 | -1 0 0 0 0 0 0 0 0 0 0 0 2 | -1 0 1 0 0 0 0 0 0 0 0 0 2 | -1 3 1 0 0 0 0 0 0 0 0 0 2 | -1 3 1 4 0 0 0 0 0 0 0 0 2 | -1 3 1 5 0 4 0 0 0 0 0 0 2 | -1 3 1 5 6 4 0 0 0 0 0 0 2 | -1 3 1 5 6 7 0 4 0 0 0 0 2 | -1 3 1 5 6 7 0 8 4 0 0 0 2 | -1 3 1 9 6 7 0 8 4 5 0 0 2 | -1 3 1 9 6 7 10 8 4 5 0 0 2 | -1 3 1 9 6 11 10 8 4 5 0 7 Ranger par température minimun croissante: temp min temp max hygrométrie pluie -1.40 4.70 83 0.20 0.60 2.80 78 0.00 2.60 10.30 85 9.00 3.50 11.20 85 1.00 4.90 9.60 87 1.00 4.90 8.90 75 0.00 5.40 8.20 87 0.00 5.40 10.20 82 0.80 6.00 9.90 86 0.20 7.90 11.90 79 1.00 8.60 11.30 82 3.00 4.30 7.40 86 0.00
Code:
#include <stdio.h> struct jour{ float min; float max; int hyg; float pluie; }; typedef struct jour jour; void lit(int n, jour R[n]){ for(int i=0;i<n;i++){ printf("Jour %d:\n",i+1); printf("Température min: "); scanf("%f",&R[i].min); printf("Température max: "); scanf("%f",&R[i].max); printf("Hygrométrie: "); scanf("%d",&R[i].hyg); printf("Pluie: "); scanf("%f",&R[i].pluie); printf("\n"); } } void table(int n, int T[n], int var){ printf("\n");printf("%d | ",var); for(int i=0;i<n;i++){ printf("%d ",T[i]); }printf("\n");} void affiche(int n, jour R[n]){ printf("\ntemp min temp max hygrométrie pluie\n"); for(int i=0;i<n;i++){ printf(" %6.2f %6.2f %d %8.2f\n" ,R[i].min, R[i].max, R[i].hyg, R[i].pluie); } } void range(int n, jour R[n], int T[n], int *var){ /*var=0; T[0]=-1; for(int i=0;i<n;i++){ if(R[i].min>R[*var].min){ T[i]=T[*var]; T[*var]=i;printf("%d ok ",i); } else{ int j=*var; while(j!=-1){ if(R[i].min>R[j].min || T[j]!=-1){ T[i]=T[j]; T[j]=i; }printf("|%d| ",i,i);j=T[j]; } } } }*/ *var=0; T[0]=-1;table(n,T,*var); for(int i=1;i<n;i++){ T[i]=0; } for(int i=1;i<n;i++){ if(R[i].min<R[*var].min){ //comparaison au premier T[i]=*var; *var=i; } else{ int j=T[*var]; int precedant=*var; while(j!=-1){ if(R[i].min<R[j].min || T[j]==-1){ T[i]=j; T[precedant]=i; j=-1; } else{ precedant=j; j=T[j]; } } }table(n,T,*var); }} void afficheranger(int n, jour R[n], int T[n], int *var){ printf("temp min temp max hygrométrie pluie\n"); int i=*var; while(i!=-1){ printf(" %6.2f %6.2f %d %8.2f\n" ,R[i].min, R[i].max, R[i].hyg, R[i].pluie); i=T[i]; } } int main(){ int n; printf("Combien de jour ? "); scanf("%d",&n); jour R[n]; lit(n,R); affiche(n,R); int T[n]; int var; range(n,R,T,&var); printf("Ranger par température minimun croissante:\n"); afficheranger(n,R,T,&var); }
Oui ça fait beaucoup de printf mais ya que ça pour trouver le bug
!Les lignes avec plein de chiffre c'est le tableau T avec la valeur de la variable devant ( var | T[0] T[1] .....).
Comme ça tu a le contexte!
La fonction qui pose problème c'est range().
A mon avis je doit effectuer une autre séquence d'instruction si T[j]==-1 pour placer l'ince i après j (contrairement a ce que fait le if ligne 72, il le place avant).
C le seul problème maintenant mais je rame encore un peu dessus!
Bonne lecture
! Lassé par la pub ? Créez un compte
- Contenus similaires :
- Forumaide pour la resolution d'un algorithme en langage pascal
- Forumexercice d'algorithme: aide
- ForumFaire un algorithme de Seconde: Svp aidez moi
- Forum [Blender] besoin d'aide pour texture SVP.[RESOLUT]
- ForumAide pour algorithme
- ForumSalut j'aimerais avoir de l'aide sur l'algorithme et la programmation
- ForumBesoin d'aide pour Pseudocode/Algorithme !!
- ForumBesoin aide algorithme
- ForumAide pour algorithme
- Voir plus