Dtruire les élément d'un tableaux.

ffnajia Messages postés 30 Date d'inscription mercredi 12 avril 2006 Statut Membre Dernière intervention 17 avril 2007 - 25 juil. 2006 à 17:52
ffnajia Messages postés 30 Date d'inscription mercredi 12 avril 2006 Statut Membre Dernière intervention 17 avril 2007 - 28 juil. 2006 à 12:42
Bonjour ;
j'ai un problème!!
dans une boucle je cherche à déterminer les éléments d'un tableau, je passe à vérifier si ils sont tous nul, je les accépte, mais si je trouve des éléments négatif, il faut éliminer ces éléments crée par des itérations.
alors comment faire pour les détruire???
merci d'avance.

Merci à tous
Najia

8 réponses

BunoCS Messages postés 15472 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 mars 2024 103
25 juil. 2006 à 18:18
On ne "détruit" pas la case d'un tableau, on la "vide".
Ce que tu veux faire, c'est décaler les cases d'après pour éviter la case vide? Soit tu le codes, soit tu utilises des listes chainées ou des vecteurs

Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Le site de mon mariage
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
25 juil. 2006 à 22:20
BruNews a publié un snippet ici qui supprimme les retour chariots en décalant la chaine. Suffit de modifier le code à tes besoins.

C++ (@++)
___________________________________________
Les plus grands esprits trouvent toujours une solution

http://programmationdebat.discutforum.com
0
steve_clamage Messages postés 475 Date d'inscription dimanche 3 octobre 2004 Statut Membre Dernière intervention 11 août 2006 5
25 juil. 2006 à 23:01
En C++, std::remove_if est trés pratique pour ca.
0
ffnajia Messages postés 30 Date d'inscription mercredi 12 avril 2006 Statut Membre Dernière intervention 17 avril 2007
26 juil. 2006 à 10:09
Bonjour ;
Merci beaucoup pour vos réponses, mais malheureusement je trouve ça trés compliquer!!
voila mon programme: mon problème est dans la partie en bleu, je veux qu'il vide à chaque fois le tableau capi??

#include
#include<cmath>


using namespace std;


double puis(double x, double y){
       double z;
       z=exp(y*log(x));
       return  z;
       }


double fonct(double x,double n, int i){
       double y;
       if(i==0) y=3*puis(x,n);
       if(i==1) y=1;
       if(i>1) y=0;
       return y;
       }
double uti(double x, int i){
       double y;
       if(i==0) y=log(x);
       if(i==1) y=1./x;
       return y;
       }
double grad(double delta, double x, double z, int n, int j, double h){
       double y;
       y=-((h*exp((n-delta)*j*h))/x)-z*h;
       return y;
       }


int main(){
   
 double delta,h,lambda,capifinal,utilite,ro,epsi,capi0,cd,cg;
    double consom,cap,cap1,alpha,gama,taux,d,p;
    int nb,n,m,ok,iter,compter,number,Maxiter,Maxcompter;
       
    FILE* Ecriture = fopen("donnees_E","w");
    fprintf(Ecriture,"%lf %lf %lf %lf %lf %lf %lf %lf %d %d %d %d",.005,.05,100000.,.8,20.,0.,0.1,0.1,100,8,50,80);
 fclose(Ecriture);
  
    FILE* Lecture = fopen("donnees_E","r");
    fscanf(Lecture,"%lf %lf %lf %lf %lf %lf %lf %lf %d %d %d %d",&alpha,&gama,&capi0,&delta,&lambda,&capifinal,&ro,&epsi,&nb,&n,&Maxiter,&Maxcompter);
    fclose(Lecture);
   
    double* capi = new double [nb];
    double* R=new double [nb];
    double* S=new double [nb];
    double* I=new double [nb];
  
   
    double* mu = new double [nb];
       
    double** conso = new double* [Maxiter+1];
 
     for(int j=0;j<Maxiter;j++) {conso[j]=new double [nb];}
  
    h=1./nb;
    cg=0.; cd=40*capi0;
    capi[0]=capi0;
 


    compter=0;
    cap1=capi[0];
    taux=.05; d=10.; p=10.;
    S[0]=1000.; I[0]=1.; R[0]=0.;
    
    while(compter<Maxcompter  and cap1-capifinal>epsi){
       
         consom=cg+((cd-cg)/2.);             


         for(int i=0;i<nb-1;i++){
    //    if    int i=0;    
            capi[i+1]=capi[i]+h*(fonct(capi[i],.3,0)*fonct(S[i]+R[i],.7,0)-consom-d*I[i]-p*taux*S[i]);
            S[i+1]=S[i]*(1-h*(alpha*I[i]+taux));
            I[i+1]=I[i]*(1+h*(alpha*S[i]-gama));
            R[i+1]=R[i]+h*(gama*I[i]+taux*S[i]);
           
      //      if(capi[i+1]>0.){i+=1;}
          
     //       else break;
          printf("%d %lf %lf %lf \n ",i,capi[i],capi[i+1],capi[nb-1]);  
          
            }


         if(capi[nb-1]>capifinal)cg=consom,cap1=capi[nb-1];
         else cd=consom, cap1=capi[0];
         printf("%lf\n",consom);
        
        


       
        
      //  printf("%lf\n",S[0]);
        
      //   printf("%lf\n",capi[0]);     
        
         compter++;
        
         printf("\n%d\n",compter);
         }
 getchar();
 
    return 0;
}

bonne journée.





Merci à tous
Najia
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
steve_clamage Messages postés 475 Date d'inscription dimanche 3 octobre 2004 Statut Membre Dernière intervention 11 août 2006 5
26 juil. 2006 à 20:16
Tu peux remplacer

double* capi = new double [nb];


par

std::vector<double> capi(nb);


ensuite tu parcours capi avec un itérateur

for(std::vector<double>::iterator i = capi.begin(); i != capi.end(); ++i)


et dans la boucle pour supprimer un élément c'est (de mémoire)

i = capi.erase(capi.begin() + i);
0
ffnajia Messages postés 30 Date d'inscription mercredi 12 avril 2006 Statut Membre Dernière intervention 17 avril 2007
27 juil. 2006 à 10:30
bonjour ;
quand je fais ça, il me dit dans un message d'erreur que vector is not a member of std!!!!

Merci 
Najia
0
lolo38550 Messages postés 30 Date d'inscription mardi 25 juillet 2006 Statut Membre Dernière intervention 12 janvier 2010
27 juil. 2006 à 16:14
Salut!

Il faut penser à inclure la classe vector qui appaartient à la librairie standard (STL):
#include <vector>

plus d'info: http://www.sm.u-bordeaux2.fr/~parisy/C++/stl.php
0
ffnajia Messages postés 30 Date d'inscription mercredi 12 avril 2006 Statut Membre Dernière intervention 17 avril 2007
28 juil. 2006 à 12:42
Bonjour ;


Je vous remercie beaucoup de tout, à ce moment je suis entrain de voir les cours sur le lien que tu m'a passer. c'est trés bien.





Merci à tous
Najia
0
Rejoignez-nous