Tom's Guide > Forum > Programmation > [Résolut]Aide algorithme en C

[Résolut]Aide algorithme en C

Forum Programmation : [Résolut]Aide algorithme en C

TomsGuide.com : 800 000 inscrits répondent à toutes vos questions high-tech et informatique. Pour obtenir de l'aide, inscrivez-vous gratuitement !
Mot :    Pseudo :           
 

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 !


Message édité par Vermoute le 03-04-2008 à 12:16:05
Liens sponsorisés
Inscrivez-vous ou connectez-vous pour masquer ceci.

rien compris.

------------------------------ Don't panic!
mouths91 à dit : "[...]des rageux comme kelnem"
Répondre à Vinz42

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 ?

Répondre à Vermoute

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[i])

 

Sinon, qu'est-ce que tu n'arrives pas à faire ?


Message édité par CRicky le 02-04-2008 à 21:59:41
------------------------------ 6800A007B81300CD10B00131C989CF26880541
81F900FA750230EDBADA03ECA80875FBECA808
74FBE4603C0175DFB80300CD10B8004CCD21
Répondre à CRicky

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

En faite c'est plus un problème de mettre T[j]ds T[i] 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 :
  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. 0 | -1 75 0 0 10 -1080060228 274200272 0 0 12 -1080060168 134514691
  40. 1 | -1 0 0 0 0 0 0 0 0 0 0 0
  41. 2 | -1 0 1 0 0 0 0 0 0 0 0 0
  42. 2 | -1 3 1 0 0 0 0 0 0 0 0 0
  43. 2 | -1 3 1 4 0 0 0 0 0 0 0 0
  44. 2 | -1 3 1 5 0 4 0 0 0 0 0 0
  45. 2 | -1 3 1 5 6 4 0 0 0 0 0 0
  46. 2 | -1 3 1 5 6 7 0 4 0 0 0 0
  47. 2 | -1 3 1 5 6 7 0 8 4 0 0 0
  48. 2 | -1 3 1 9 6 7 0 8 4 5 0 0
  49. 2 | -1 3 1 9 6 7 10 8 4 5 0 0
  50. 2 | -1 3 1 9 6 11 10 8 4 5 0 7
  51. Ranger par température minimun croissante:
  52. temp min  temp max  hygrométrie  pluie
  53.   -1.40        4.70      83              0.20
  54.   0.60        2.80      78              0.00
  55.   2.60        10.30      85              9.00
  56.   3.50        11.20      85              1.00
  57.   4.90        9.60      87              1.00
  58.   4.90        8.90      75              0.00
  59.   5.40        8.20      87              0.00
  60.   5.40        10.20      82              0.80
  61.   6.00        9.90      86              0.20
  62.   7.90        11.90      79              1.00
  63.   8.60        11.30      82              3.00
  64.   4.30        7.40      86              0.00
  65. [ggauthier@l12 TPnote2]$ gcc -std=c99 TPnote2.c -o TPnote2
  66. [ggauthier@l12 TPnote2]$ ./TPnote2 <releves.d3
  67. Combien de jour ? Jour 1:
  68. Température min: Température max: Hygrométrie: Pluie:
  69. Jour 2:
  70. Température min: Température max: Hygrométrie: Pluie:
  71. Jour 3:
  72. Température min: Température max: Hygrométrie: Pluie:
  73. Jour 4:
  74. Température min: Température max: Hygrométrie: Pluie:
  75. Jour 5:
  76. Température min: Température max: Hygrométrie: Pluie:
  77. Jour 6:
  78. Température min: Température max: Hygrométrie: Pluie:
  79. Jour 7:
  80. Température min: Température max: Hygrométrie: Pluie:
  81. Jour 8:
  82. Température min: Température max: Hygrométrie: Pluie:
  83. Jour 9:
  84. Température min: Température max: Hygrométrie: Pluie:
  85. Jour 10:
  86. Température min: Température max: Hygrométrie: Pluie:
  87. Jour 11:
  88. Température min: Température max: Hygrométrie: Pluie:
  89. Jour 12:
  90. Température min: Température max: Hygrométrie: Pluie:
  91. temp min  temp max  hygrométrie  pluie
  92.   4.30        7.40      86              0.00
  93.   0.60        2.80      78              0.00
  94.   -1.40        4.70      83              0.20
  95.   2.60        10.30      85              9.00
  96.   6.00        9.90      86              0.20
  97.   4.90        9.60      87              1.00
  98.   7.90        11.90      79              1.00
  99.   5.40        8.20      87              0.00
  100.   5.40        10.20      82              0.80
  101.   3.50        11.20      85              1.00
  102.   8.60        11.30      82              3.00
  103.   4.90        8.90      75              0.00
  104. 0 | -1 75 0 0 10 -1081035316 274200272 0 0 12 -1081035256 134514691
  105. 1 | -1 0 0 0 0 0 0 0 0 0 0 0
  106. 2 | -1 0 1 0 0 0 0 0 0 0 0 0
  107. 2 | -1 3 1 0 0 0 0 0 0 0 0 0
  108. 2 | -1 3 1 4 0 0 0 0 0 0 0 0
  109. 2 | -1 3 1 5 0 4 0 0 0 0 0 0
  110. 2 | -1 3 1 5 6 4 0 0 0 0 0 0
  111. 2 | -1 3 1 5 6 7 0 4 0 0 0 0
  112. 2 | -1 3 1 5 6 7 0 8 4 0 0 0
  113. 2 | -1 3 1 9 6 7 0 8 4 5 0 0
  114. 2 | -1 3 1 9 6 7 10 8 4 5 0 0
  115. 2 | -1 3 1 9 6 11 10 8 4 5 0 7
  116. Ranger par température minimun croissante:
  117. temp min  temp max  hygrométrie  pluie
  118.   -1.40        4.70      83              0.20
  119.   0.60        2.80      78              0.00
  120.   2.60        10.30      85              9.00
  121.   3.50        11.20      85              1.00
  122.   4.90        9.60      87              1.00
  123.   4.90        8.90      75              0.00
  124.   5.40        8.20      87              0.00
  125.   5.40        10.20      82              0.80
  126.   6.00        9.90      86              0.20
  127.   7.90        11.90      79              1.00
  128.   8.60        11.30      82              3.00
  129.   4.30        7.40      86              0.00


Code:

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



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

Répondre à Vermoute

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

Merci quand même lol!

Répondre à Vermoute
Tom's Guide > Forum > Programmation > [Résolut]Aide algorithme en C
Aller à :

Il y a 2840 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici.

Attention

Vous allez répondre sur un sujet resté inactif pendant plus de 6 mois.
Assurez-vous d'apporter des éléments nouveaux à la discussion avant de poursuivre.

Répondre Annuler
Liens