Votre question

[Résolut]Aide algorithme en C

Tags :
  • element
  • Programmation
Dernière réponse : dans Programmation
2 Avril 2008 14:08:22

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 :D  !

Autres pages sur : resolut aide algorithme

2 Avril 2008 14:21:32

rien compris.
2 Avril 2008 14:29:36

Lol! pourtant j'ai fait clair !

J'explique pour l'affichage C plus simple je pense!

Pour afficher les élémnet de R par ordre croissant, on affiche dans l'odre:
R[var] R[1] R[0] R[2]
autrement dit:
R[var] R[T[var]] R[T[1]] R[T[0]]

Plus clair ?
Contenus similaires
a b L Programmation
2 Avril 2008 21:57:04

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 ?
3 Avril 2008 11:49:15

Cool je croit que tu a compris le truc :D  !

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:
  1. ./TPnote2 <releves.d3
  2. Combien de jour ? Jour 1:
  3. Température min: Température max: Hygrométrie: Pluie:
  4. Jour 2:
  5. Température min: Température max: Hygrométrie: Pluie:
  6. Jour 3:
  7. Température min: Température max: Hygrométrie: Pluie:
  8. Jour 4:
  9. Température min: Température max: Hygrométrie: Pluie:
  10. Jour 5:
  11. Température min: Température max: Hygrométrie: Pluie:
  12. Jour 6:
  13. Température min: Température max: Hygrométrie: Pluie:
  14. Jour 7:
  15. Température min: Température max: Hygrométrie: Pluie:
  16. Jour 8:
  17. Température min: Température max: Hygrométrie: Pluie:
  18. Jour 9:
  19. Température min: Température max: Hygrométrie: Pluie:
  20. Jour 10:
  21. Température min: Température max: Hygrométrie: Pluie:
  22. Jour 11:
  23. Température min: Température max: Hygrométrie: Pluie:
  24. Jour 12:
  25. Température min: Température max: Hygrométrie: Pluie:
  26. temp min temp max hygrométrie pluie
  27. 4.30 7.40 86 0.00
  28. 0.60 2.80 78 0.00
  29. -1.40 4.70 83 0.20
  30. 2.60 10.30 85 9.00
  31. 6.00 9.90 86 0.20
  32. 4.90 9.60 87 1.00
  33. 7.90 11.90 79 1.00
  34. 5.40 8.20 87 0.00
  35. 5.40 10.20 82 0.80
  36. 3.50 11.20 85 1.00
  37. 8.60 11.30 82 3.00
  38. 4.90 8.90 75 0.00
  39.  
  40. 0 | -1 75 0 0 10 -1080060228 274200272 0 0 12 -1080060168 134514691
  41.  
  42. 1 | -1 0 0 0 0 0 0 0 0 0 0 0
  43.  
  44. 2 | -1 0 1 0 0 0 0 0 0 0 0 0
  45.  
  46. 2 | -1 3 1 0 0 0 0 0 0 0 0 0
  47.  
  48. 2 | -1 3 1 4 0 0 0 0 0 0 0 0
  49.  
  50. 2 | -1 3 1 5 0 4 0 0 0 0 0 0
  51.  
  52. 2 | -1 3 1 5 6 4 0 0 0 0 0 0
  53.  
  54. 2 | -1 3 1 5 6 7 0 4 0 0 0 0
  55.  
  56. 2 | -1 3 1 5 6 7 0 8 4 0 0 0
  57.  
  58. 2 | -1 3 1 9 6 7 0 8 4 5 0 0
  59.  
  60. 2 | -1 3 1 9 6 7 10 8 4 5 0 0
  61.  
  62. 2 | -1 3 1 9 6 11 10 8 4 5 0 7
  63. Ranger par température minimun croissante:
  64. temp min temp max hygrométrie pluie
  65. -1.40 4.70 83 0.20
  66. 0.60 2.80 78 0.00
  67. 2.60 10.30 85 9.00
  68. 3.50 11.20 85 1.00
  69. 4.90 9.60 87 1.00
  70. 4.90 8.90 75 0.00
  71. 5.40 8.20 87 0.00
  72. 5.40 10.20 82 0.80
  73. 6.00 9.90 86 0.20
  74. 7.90 11.90 79 1.00
  75. 8.60 11.30 82 3.00
  76. 4.30 7.40 86 0.00
  77. [ggauthier@l12 TPnote2]$ gcc -std=c99 TPnote2.c -o TPnote2
  78. [ggauthier@l12 TPnote2]$ ./TPnote2 <releves.d3
  79. Combien de jour ? Jour 1:
  80. Température min: Température max: Hygrométrie: Pluie:
  81. Jour 2:
  82. Température min: Température max: Hygrométrie: Pluie:
  83. Jour 3:
  84. Température min: Température max: Hygrométrie: Pluie:
  85. Jour 4:
  86. Température min: Température max: Hygrométrie: Pluie:
  87. Jour 5:
  88. Température min: Température max: Hygrométrie: Pluie:
  89. Jour 6:
  90. Température min: Température max: Hygrométrie: Pluie:
  91. Jour 7:
  92. Température min: Température max: Hygrométrie: Pluie:
  93. Jour 8:
  94. Température min: Température max: Hygrométrie: Pluie:
  95. Jour 9:
  96. Température min: Température max: Hygrométrie: Pluie:
  97. Jour 10:
  98. Température min: Température max: Hygrométrie: Pluie:
  99. Jour 11:
  100. Température min: Température max: Hygrométrie: Pluie:
  101. Jour 12:
  102. Température min: Température max: Hygrométrie: Pluie:
  103.  
  104. temp min temp max hygrométrie pluie
  105. 4.30 7.40 86 0.00
  106. 0.60 2.80 78 0.00
  107. -1.40 4.70 83 0.20
  108. 2.60 10.30 85 9.00
  109. 6.00 9.90 86 0.20
  110. 4.90 9.60 87 1.00
  111. 7.90 11.90 79 1.00
  112. 5.40 8.20 87 0.00
  113. 5.40 10.20 82 0.80
  114. 3.50 11.20 85 1.00
  115. 8.60 11.30 82 3.00
  116. 4.90 8.90 75 0.00
  117.  
  118. 0 | -1 75 0 0 10 -1081035316 274200272 0 0 12 -1081035256 134514691
  119.  
  120. 1 | -1 0 0 0 0 0 0 0 0 0 0 0
  121.  
  122. 2 | -1 0 1 0 0 0 0 0 0 0 0 0
  123.  
  124. 2 | -1 3 1 0 0 0 0 0 0 0 0 0
  125.  
  126. 2 | -1 3 1 4 0 0 0 0 0 0 0 0
  127.  
  128. 2 | -1 3 1 5 0 4 0 0 0 0 0 0
  129.  
  130. 2 | -1 3 1 5 6 4 0 0 0 0 0 0
  131.  
  132. 2 | -1 3 1 5 6 7 0 4 0 0 0 0
  133.  
  134. 2 | -1 3 1 5 6 7 0 8 4 0 0 0
  135.  
  136. 2 | -1 3 1 9 6 7 0 8 4 5 0 0
  137.  
  138. 2 | -1 3 1 9 6 7 10 8 4 5 0 0
  139.  
  140. 2 | -1 3 1 9 6 11 10 8 4 5 0 7
  141. Ranger par température minimun croissante:
  142. temp min temp max hygrométrie pluie
  143. -1.40 4.70 83 0.20
  144. 0.60 2.80 78 0.00
  145. 2.60 10.30 85 9.00
  146. 3.50 11.20 85 1.00
  147. 4.90 9.60 87 1.00
  148. 4.90 8.90 75 0.00
  149. 5.40 8.20 87 0.00
  150. 5.40 10.20 82 0.80
  151. 6.00 9.90 86 0.20
  152. 7.90 11.90 79 1.00
  153. 8.60 11.30 82 3.00
  154. 4.30 7.40 86 0.00

Code:
  1. #include <stdio.h>
  2.  
  3. struct jour{
  4. float min;
  5. float max;
  6. int hyg;
  7. float pluie;
  8. };
  9.  
  10. typedef struct jour jour;
  11.  
  12. void lit(int n, jour R[n]){
  13. for(int i=0;i<n;i++){
  14. printf("Jour %d:\n",i+1);
  15. printf("Température min: ");
  16. scanf("%f",&R[i].min);
  17. printf("Température max: ");
  18. scanf("%f",&R[i].max);
  19. printf("Hygrométrie: ");
  20. scanf("%d",&R[i].hyg);
  21. printf("Pluie: ");
  22. scanf("%f",&R[i].pluie);
  23. printf("\n");
  24. }
  25. }
  26.  
  27. void table(int n, int T[n], int var){
  28. printf("\n");printf("%d | ",var);
  29. for(int i=0;i<n;i++){
  30. printf("%d ",T[i]);
  31. }printf("\n");}
  32.  
  33. void affiche(int n, jour R[n]){
  34. printf("\ntemp min temp max hygrométrie pluie\n");
  35. for(int i=0;i<n;i++){
  36. printf(" %6.2f %6.2f %d %8.2f\n" ,R[i].min, R[i].max, R[i].hyg, R[i].pluie);
  37. }
  38. }
  39.  
  40. void range(int n, jour R[n], int T[n], int *var){
  41. /*var=0; T[0]=-1;
  42. for(int i=0;i<n;i++){
  43. if(R[i].min>R[*var].min){
  44. T[i]=T[*var];
  45. T[*var]=i;printf("%d ok ",i);
  46. }
  47. else{
  48. int j=*var;
  49. while(j!=-1){
  50. if(R[i].min>R[j].min || T[j]!=-1){
  51. T[i]=T[j];
  52. T[j]=i;
  53. }printf("|%d| ",i,i);j=T[j];
  54. }
  55. }
  56. }
  57. }*/
  58.  
  59. *var=0; T[0]=-1;table(n,T,*var);
  60. for(int i=1;i<n;i++){
  61. T[i]=0;
  62. }
  63. for(int i=1;i<n;i++){
  64. if(R[i].min<R[*var].min){ //comparaison au premier
  65. T[i]=*var;
  66. *var=i;
  67. }
  68. else{
  69. int j=T[*var];
  70. int precedant=*var;
  71. while(j!=-1){
  72. if(R[i].min<R[j].min || T[j]==-1){
  73. T[i]=j;
  74. T[precedant]=i;
  75. j=-1;
  76. }
  77. else{
  78. precedant=j;
  79. j=T[j];
  80. }
  81. }
  82. }table(n,T,*var);
  83. }}
  84.  
  85. void afficheranger(int n, jour R[n], int T[n], int *var){
  86. printf("temp min temp max hygrométrie pluie\n");
  87. int i=*var;
  88. while(i!=-1){
  89. printf(" %6.2f %6.2f %d %8.2f\n" ,R[i].min, R[i].max, R[i].hyg, R[i].pluie);
  90. i=T[i];
  91. }
  92. }
  93.  
  94. int main(){
  95. int n;
  96. printf("Combien de jour ? ");
  97. scanf("%d",&n);
  98. jour R[n];
  99. lit(n,R);
  100. affiche(n,R);
  101. int T[n];
  102. int var;
  103. range(n,R,T,&var);
  104. printf("Ranger par température minimun croissante:\n");
  105. afficheranger(n,R,T,&var);
  106. }


Oui ça fait beaucoup de printf mais ya que ça pour trouver le bug :lol:  !
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 :lol:  !
3 Avril 2008 12:15:19

C BON!!!!!!!!!!
J'ai trouver le truc :D  !!!!!!!!!!!!!!
Enfin! :bounce:  :bounce: 

Merci quand même lol!
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS