Dtruire les élément d'un tableaux.

Signaler
Messages postés
30
Date d'inscription
mercredi 12 avril 2006
Statut
Membre
Dernière intervention
17 avril 2007
-
Messages postés
30
Date d'inscription
mercredi 12 avril 2006
Statut
Membre
Dernière intervention
17 avril 2007
-
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

Messages postés
14973
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
15 février 2021
94
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
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
15
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
Messages postés
475
Date d'inscription
dimanche 3 octobre 2004
Statut
Membre
Dernière intervention
11 août 2006
3
En C++, std::remove_if est trés pratique pour ca.
Messages postés
30
Date d'inscription
mercredi 12 avril 2006
Statut
Membre
Dernière intervention
17 avril 2007

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
Messages postés
475
Date d'inscription
dimanche 3 octobre 2004
Statut
Membre
Dernière intervention
11 août 2006
3
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);
Messages postés
30
Date d'inscription
mercredi 12 avril 2006
Statut
Membre
Dernière intervention
17 avril 2007

bonjour ;
quand je fais ça, il me dit dans un message d'erreur que vector is not a member of std!!!!

Merci 
Najia
Messages postés
30
Date d'inscription
mardi 25 juillet 2006
Statut
Membre
Dernière intervention
12 janvier 2010

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
Messages postés
30
Date d'inscription
mercredi 12 avril 2006
Statut
Membre
Dernière intervention
17 avril 2007

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