aide !!!!!!!!!

aide !!!!!!!!! - Algo - Programmation

Marsh Posté le 13-02-2006 à 14:42:16    

Code :
  1. var t[100],i,n,ns,s,j,v[100];           /* n est le nombre de valeur à saisire dans le tab */
  2. début
  3. /*le remplissage du tableau*/
  4. ecrire ("donnez le nbr de valeur à supp" );            lire(ns);
  5. pour ( j de 1 à ns ) faire
  6.    ecrire ("l'indice de la",j,"eme valeur à supprimé :" );     lire (s);
  7.    pour ( i de 0 à n-1 ) faire
  8.       si  i<s   alors        v[i]:=t[i];
  9.       sinon si  i>s     alors        v[i-1]:=t[i];
  10.    finpour i
  11. finpour j
  12. pour     i  de  0  à  (n-1-ns)        faire
  13. ecrire (v[i]);
  14. finpour
  15. FIN


 
 
 
 
cette algo doit permetre à l'utilisateur de supprimé des valeur de ce tab , en introduisant leurs indise (position) .
mais ca ne marche pas _POURQUOI???_
 
 :jap:  :jap:  :jap:  

Reply

Marsh Posté le 13-02-2006 à 14:42:16   

Reply

Marsh Posté le 13-02-2006 à 15:35:54    

olivier318 a écrit :


cette algo doit permetre à l'utilisateur de supprimé des valeur de ce tab , en introduisant leurs indise (position) .
mais ca ne marche pas _POURQUOI???_
 
 :jap:  :jap:  :jap:


L'algo ne marche pas parce qu'il n'a pas de jambes  :pt1cable:  
 
Plus sérieusement :
1. Change le titre pour le rendre plus explicite.
2. Explique un peu ce qui ne "marche pas"
 :hello:

Reply

Marsh Posté le 13-02-2006 à 16:10:35    

:lol:  :lol:  :lol:  belle blague .
 
cette algo doit permetre à l'utilisateur de supprimé des valeur de ce tab ,l'utilisateur dois donnez tout dabord combien de val il souhéte supprimer de ce tab , ensuite il doit introduire leurs indice (position).
 
 

Reply

Marsh Posté le 13-02-2006 à 16:18:53    

ca ne marche que si le nombre d'indice est 1 .       càd: que si l'utilisateur souhaite supprimé une seul valeur selement !!!
 
le probléme est dans cette partie (je ne sais pas exactement ou):

Code :
  1. pour ( j de 1 à ns ) faire
  2. ecrire ("l'indice de la",j,"eme valeur à supprimé :" );   
  3. lire (s);   
  4.    pour ( i de 0 à n-1 ) faire     
  5.        si  i<s   alors        v[i]:=t[i];     
  6.        sinon si  i>s     alors        v[i-1]:=t[i];   
  7.    finpour i
  8. finpour j


Reply

Marsh Posté le 13-02-2006 à 16:22:49    

Parce-que tu as supprimé une valeur dans ton tableau et que tu recopies les valeurs d'un autre qui lui n'a pas bougé? [:moule_bite]


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 13-02-2006 à 16:26:56    

je n'ai pas bien compri ce que tu veut dire !!!!   :heink:

Reply

Marsh Posté le 13-02-2006 à 16:28:06    

Tu remplis V à-partir de T. Si tu supprimes une valeur dans V, V devient différent de T, donc à la valeur supprimée suivante les indices sont foireux.:o


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 13-02-2006 à 16:28:42    

Bref, tu es censé le faire avec un seul tableau, à mon humble avis.;)


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 13-02-2006 à 16:30:27    

j'ai essayer avec cette algo :

Code :
  1. #include<stdio.h>
  2. main() {
  3. int t[20],i,n,ns,s,j,v[20],h=-1;
  4. printf("combien de val dans le tab " );  scanf("%d",&n);
  5. for(i=0;i<=n-1;i++)
  6. {printf("donnez la valeur du rang %d   ",i);  scanf("%d",&t[i]);}
  7. printf("combien de valeur à supprimé " );  scanf("%d",&ns);
  8. for(j=1;j<=ns;j++)
  9. {
  10. printf("l'indice de la %deme valeur à suprimé : ",j);  scanf("%d",&s);
  11. for(i=0;i<=n-1;i++)
  12. if(t[i]!=t[s])  { h++;  v[h]=t[i]; }
  13. }
  14. printf("le nouveau tablau est :\n" );
  15. for(i=0;i<=h;i++)   printf(" %d ",v[i]);
  16. }


 
mes c'est toujours le même problemme     :pfff:  
 
aidez mois svp :jap:  :jap:  :jap:

Reply

Marsh Posté le 13-02-2006 à 16:33:34    

ça c'est pas un algo, c'est du code C.
Et j'ai franchement la flemme d'essayer de comprendre ce que tu essaies d'y faire, ou pourquoi tu y utilises deux tableaux.


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 13-02-2006 à 16:33:34   

Reply

Marsh Posté le 13-02-2006 à 17:04:21    

je n'ai trouvé aucune sollution en utilisant 1 seul tab ,  
coment je doit procéder ?   :love:

Reply

Marsh Posté le 13-02-2006 à 17:06:32    

euh, t'as essayé? :??:
C'est la solution la plus "naturelle", à priori...


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 14-02-2006 à 15:18:50    

olivier318 a écrit :

ca ne marche que si le nombre d'indice est 1 .       càd: que si l'utilisateur souhaite supprimé une seul valeur selement !!!
 
le probléme est dans cette partie (je ne sais pas exactement ou):

Code :
  1. pour ( j de 1 à ns ) faire
  2. ecrire ("l'indice de la",j,"eme valeur à supprimé :" );   
  3. lire (s);   
  4.    pour ( i de 0 à n-1 ) faire     
  5.        si  i<s   alors        v[i]:=t[i];     
  6.        sinon si  i>s     alors        v[i-1]:=t[i];   
  7.    finpour i
  8. finpour j



Normal. en fait, tu dois obtenir en résultat la suppression du dernier élément demandé :
On a un tableau t[0,1,2,3,4], n=5
On veut supprimer 2 valeurs, le 2 puis le 3.
* Premier passage : s=2.
   v[0]=t[0]
   v[1]=t[1]
   v[2]=t[3]
   v[3]=t[4]
v=[0,1,3,4]
 
* Deuxième passage : s=3
   v[0]=t[0]
   v[1]=t[1]
   v[2]=t[2]
   v[3]=t[4]
v=[0,1,2,4]
 
Comme tu utilises 2 tableaux,  et que ton tableau de référence (t[]) n'est pas modifié, ton algo te donne ça :

Code :
  1. pour ( j de 1 à ns ) faire
  2.    lire (s);
  3.    v[] = t[] - t[s]
  4. finpour j


Tu ne cumules pas les suppressions, alors forcément...
-----
[Edit] En utilisant un seul tableau, c'est plus simple : Pour chaque valeur à supprimer, tu prends ton tableau et tu enlèves la  valeur à supprimer...


Message édité par macgawel le 14-02-2006 à 15:21:59
Reply

Marsh Posté le 14-02-2006 à 15:19:35    

Merci de venir confirmer ce que je disais hier.[:dawa]


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 14-02-2006 à 17:46:34    

OK merci je vais reesayer avec ca  :ange:

Reply

Marsh Posté le 21-02-2006 à 16:38:27    

PS: si tu codes ton algo en C,  pense à utiliser la fonction memmove().
 
En travaillant sur le même tableau, tu peux bouger la fin du tableau en écrasant le milieu, genre:

Code :
  1. déplacer longueur_tab-(indice_suppr+longeur_suppr) entiers de indice_suppr+longeur_suppr vers indice_suppr


 
En travaillant sur une copie du tableau, tu peut utiliser de la même façon deux fois la fonction memcpy(): tu copie le début jusqua indice_suppr-1, puis la fin de indice_suppr+longueur_suppr à longueur_tab.
La taille du tableau résultat est longueur_tab-longueur_suppr.
 
L avantage de ces fonctions est que les micro processeurs possèdent des instructions spéciales de déplacement/copie de blocs mémoire qui sont plus rapides qu une boucle ordinaire.
 

Reply

Marsh Posté le 21-02-2006 à 16:47:27    

Aussi:
Si tu connais par avance les indices à supprimer par ordre croissant, tu peux optimiser ton algo en changeant longueur_suppr lorsque deux indices sont cote à cote, et en ne déplaçant/copiant que des blocs mémoires intermédiares entre les indices à supprimer.
 
 

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed