begin process at 2012 05 29 00:13:34
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Algorithme

 > 

Maths

 > 

code ecris de la croissance


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

code ecris de la croissance

mercredi 13 mai 2009 à 01:21:04 | code ecris de la croissance

Flopy21

Salut, en fait j'ai ecris le code avec beaucoup de difficultes et quelques aides de part et d'autres personnes. Mais j'ai rencontrer des problemes lors de l'analyse des donnees obtenues:
- j'aimerai obtenir les rayons de départ (ie initiaux) en fonction du nombre d'itérations pour pouvoir etablir un histogramme
- Calculer la moyenne des rayons de départ = rm qui est le rayon moyen de la distribution
- j'ai un sérieux problèmes pour effectuer des itérations dans tout le programme (contenant les procedures A,B,C,D,H,I,J) le programme doit se repeter I fois
  s.v.p j'ai besoin de votre aide ...


/* Déclaration des directives*/
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <ctime>
#include <math.h>
#include <string.h>

/*Déclaration des constantes*/
#define K 8.614e-5 //1.3807e-23J/K
#define Gamma 8.0836e14  //1.295J/Cm2
#define Omega 1e-23
#define PI  3.1415926535897932384626433832795
#define Ec 0.01

/*procedure permettant de generer les rayons dans 1 tableau t avec la formule de tchebytchev*/
double * GenererRayon(double moyenne,int N){
     int i;
     double *t;  // pointeur vers tableau t contenant les rayons generés
     double a=moyenne-Ec,  // Ec : écart type
            b=moyenne+Ec;
     t=new double[N];  // tableau contenent les n rayons
     for(i=0;i<N;i++){
      t[i]=(a+b)/2+((a-b)/2)*cos(((2*i+1)*PI)/(2*(N+1)));
     }
     return t;                
    
}
//-----------procedure calculant le retrécissement Dri pour un rayon donné------
double DeltaRayon(double ri, int T,double Dt){
 double DvCeq_v,
       Dri;
 DvCeq_v=0.6*expl(-46784.30462/T);
 Dri=-1*Dt*(1/ri)*DvCeq_v*expl((2*Gamma*Omega/K)*(1/(ri*T)));
 return Dri;
}
//---------Nouveaux rayons(rp)obtenus après rétrecissement----------------------
double * NouveauRayon(double ri[],int T,int N,double Dt){
   double *rp=new double[N];
   int i;
   for(i=0;i<N;i++){
     rp[i]=ri[i]+DeltaRayon(ri[i],T,Dt); //calcule les rayons apres retrecicement pour tous les Dri
     if(rp[i]<0)rp[i]=0;
   }
   return rp;
}

//--DN---nombre de lacunes libérées---------------------------------------------
double DeltaN(int N, double rp[],int T,double Dt){
 double Dn=0;
 int i,j;              
  for(i=0;i<N;i++)
  {
   if(rp[i]!=0)
   {
    Dn+=(DeltaRayon(rp[i],T,Dt)*4*PI*rp[i]*rp[i])/Omega;
   }
  }
 return Dn;
}
//----------condition de tronquage----------------------------------------------
double* VerifierRayon(double rp[], int N, double &Dn,double moyenne){
     int i;
     double *r=rp;
     for(i=0;i<N;i++)
      {
       if(rp[i]<(moyenne/3))
       {
        Dn+=((4*PI*rp[i]*rp[i]*rp[i])/Omega);
        rp[i]=0;                   
       }                      
      }
      return r;
}
//--dri exprimant la croissancce, calculée à partir des nouveaux rayons rp------
double * driResultat(int N, double rp[],double Dn){
 double *dri,s=0;
 int i;
 dri=new double[N];
  for(i=0;i<N;i++)
   s+=rp[i];            
  for(i=0;i<N;i++)
  {
   if(rp[i]!=0)
   dri[i]=(rp[i]/s)*Dn*(Omega/(4*PI*rp[i]*rp[i]));
   else dri[i]=0;
  }
 return dri;
}
//-------rayons des cavités à la fin du recuit----------------------------------
double * RayonsFinaux(double rp[],double dri[],int N, double &s){
   double *rf=new double[N];
   s=0;
   int i;
   for(i=0;i<N;i++){
     rf[i]=rp[i]-dri[i]; //Nous avons pris le signe - pour mieux exprimer la croissance car dri est négatif
     s+=rf[i];
   }
   s/=N;
   return rf;
}
//---nombre de rayons restants après condition-----------------------------------
int RayonRestant(double rp[],int N){
   int i, k=N;
   for(i=0;i<N;i++){
     if(rp[i]==0)k--;           
   }  
   return k;
}

//------------------------------------------------------------------------------
void RayonDepart(char *c,double ri[],int N,char*s){
 char nom[80]="";
 strcpy(nom,s);  //strcpy: copie s dans nom
 strcat(nom,"\\rayon");  //strcat: concatène deux chaines de caractere
 strcat(nom,c);
 strcat(nom,".txt");
 FILE *f=fopen(nom,"w+t");
 int i;
 fprintf(f,"RAYONS DEPART:\n\n");
 for(i=0;i<N;i++)
  fprintf(f,"%20.10lf\n",ri[i]);
 fclose(f);
}
//------------------------------------------------------------------------------
void RayonNew(char *c,double rp[],int N,char* s){
 char nom[80]="";
 strcpy(nom,s);
 strcat(nom,"\\nouveaurayon");
 strcat(nom,c);
 strcat(nom,".txt");
 FILE *f=fopen(nom,"w+t");
 int i;
 fprintf(f,"Nouveaux Rayons:\n\n");
 for(i=0;i<N;i++)
  if(rp[i]!=0)
  fprintf(f,"%20.10lf\n",rp[i]);
 fclose(f);
}
//------------------------------------------------------------------------------
void rayonrester(double r,char*s){
 char nom[80]="";
 strcpy(nom,s);
 strcat(nom,"\\Rayons Restants.txt");
 FILE *f=fopen(nom,"w+t");
  fprintf(f,"%20.10lf\n",r);
 fclose(f);
}

//------------------------------------------------------------------------------
void moyenneRayonFinaux(char *c,double r,char*s){
 char nom[80]="";
 strcpy(nom,s);
 strcat(nom,"\\moyenneRayonFinaux");
 strcat(nom,c);
 strcat(nom,".txt");
 FILE *f=fopen(nom,"w+t");
  fprintf(f,"%20.10lf\n",r);
 fclose(f);
}
//------------------------------------------------------------------------------
void afficheRF(char *c,double rf[],int N,char*s){
 char nom[80]="";
 strcpy(nom,s);
 strcat(nom,"\\Rayons Finaux");
 strcat(nom,c);
 strcat(nom,".txt");
 FILE *f=fopen(nom,"w+t");
 int i;
 fprintf(f,"Rayons Finaux:\n\n");
 for(i=0;i<N;i++)
  if(rf[i]!=0)
  fprintf(f,"%40.17lf\n",rf[i]);
 fclose(f);
}

/*Programme principale*/
int main(){
 system("mkdir c:\\resultat");
 double *Rayon,*NewRayon,
        *Deltarayon,*RayonFinaux,
         moyenne,
        *dri,
        Dt,
        s1,
        I,
        Dn;
 int T=973,
     i,j,k=0,p=1,
     t,
     N=250,
     N1;
 char *c,s[5],rep1[30],rep[30],rep2[30],rep3[30],make[30],make1[30],make2[30],make3[30];
 
 moyenne=0.499;
 
// 0. Temps de recuit t, temps d'icrementation dt et nombre d'itérations I=t/dt
 t=100; // temps de recuit
 
 Dt=1e-3;  // temps d'incrémentation
 
 I=t/Dt;

// 2.  Boucle  de 1 a I
 while(Dt<100)
 {
  // Creation des noms des fichiers resultats
  itoa(p,s,10);
  strcpy(rep,"c:\\resultat\\Dt");
  strcat(rep,s);

  strcpy(make,"mkdir ");
  strcat(make,rep); 
  system(make);


  strcpy(rep1,rep);
  strcat(rep1,"\\nouveau");
  strcpy(make1,"mkdir ");
  strcat(make1,rep1); 
  system(make1);
 
  strcpy(rep2,rep);
  strcat(rep2,"\\finaux");
  strcpy(make2,"mkdir ");
  strcat(make2,rep2); 
  system(make2);
 
  strcpy(rep3,rep);
  strcat(rep3,"\\depart");
  strcpy(make3,"mkdir ");
  strcat(make3,rep3); 
  system(make3);
  //////////////////////////////
 
 
  // Initialisation de la temperature de recuit
  T=973;
 
  //Parametres d'affichage
  k=0;
  itoa(k,c,10);
  ////////////////
 
   // A. moyenne des rayons
  moyenne=moyenne+0.001;
 
  // 1. Distribution de N bulles de differents rayons
  Rayon=GenererRayon(moyenne,N);//generer les rayons et les rayons sont envoyer dans le tableau Rayon
 
  // B. Calcul du retrecissement intervient dans le calcul des nouveaux rayons
 
  // C. Calcul des nouveaux rayons apres retrecissement
  NewRayon=NouveauRayon(Rayon,T,N,Dt); //callcule les nouveaux rayons et sont mis dans le tableau NewRayon
 
  //Calcul du nomre total DN des lacunes liberees
  Dn=DeltaN(N,NewRayon ,T,Dt);//Calul de DN
 
  // E. Tronquer toutes les cavités dont le rayon est inferieur a un rayon seuil fixé
  NewRayon=VerifierRayon(NewRayon, N,Dn,moyenne);//Verifier les rayons qui ont retrecis et les elimine
 
  // Calcul du nombre de cavites restantes
  N1=RayonRestant(NewRayon,N);
  rayonrester(N1,rep); //affiche le nombre de rayons restants apres troncature
 
  // F. Calcul de l'augmentation des rayons des cavites restantes
  dri=driResultat(N,NewRayon,Dn);//calcul des dri a afficher
 
  // G. Calcul des nouveaux rayons des cavités restantes
  RayonFinaux=RayonsFinaux(NewRayon,dri,N,s1);
 
 
  // Affichage des resultats
  RayonDepart(c,Rayon,N,rep3);//afficher les rayon initiaux
 
  RayonNew(c,NewRayon,N,rep1);//afficher les nouveaux rayons
   
  afficheRF(c,RayonFinaux,N,rep2);//afficher les rayons finaux
 
  moyenneRayonFinaux(c,s1,rep2);//afficher la moyenne des rayons finaux
  /////////////////// 
 
  //Parametres d'affichage
  k++;
  itoa(k,c,10);
 
  // H. Solution au probleme numerique soulevé par EVANS
  if(N1<=(N/2)){
    T=973;
   
  // J. On pose N=N1 si H est verifiée  
    N=N1;
 
  //Parametres d'affichage 
    k=0;
    itoa(k,c,10);
    ///////////////
   }
  }
 
 return 0;
}
 


Cette discussion est classée dans : int, double, strcat, rp, rayons


Répondre à ce message

Sujets en rapport avec ce message

Aide [ par eikonos ] Je travail sur une dll appellé psfg.dllj'ai ces lignes suivant de codetypedef struct CAMERAPARAM_tag{int nGain;int nOffset;int bOffsetFix;int nUpperLi cosinus [ par anek971 ] Bonjour ,ben avt de demander de l'aide j'ai chercher sur le forum mais ya pas le programme en c.Et en faite c juste pr une verification car mon progra tableau a double entrée alloué dynamiquement [ par amortlintelligence ] Voila j'aurais voulu utiliser un tableau (tableau de tableau) dans une fonction. Je pense qu'il faut donc que je le crée dynamiquement avec un code du probleme cast [ par morgandetoi06 ] svp aidez moi...j utilise la fonction pow qui renvoie un doubledonc je fait double b; // nombredouble j; // exposantdouble n; // reponsen=pow(b,j);don Segmentation Fault....en traitement d'image [ par psysta ] Bonjour,je suis nouveau dans la programmation en C. J'ai un programme Matlab qui marche bien, et je souhaiterais l'implémenter en C. Le pgm compile bi class matrice [ par flaky ] Slt à tousJ'utilise une classe "matrice" (celle de nicolas aunai, téléchargée sur le site) qui fonctionne très bien. Mais j'ai du mal à manipuler l'ob C++ de merde...enfin je veux dire... [ par brindillee ] Salut,J'ai un petit soucis qui me cause des grands soucis...Voila j'ai choppé une fonction de décomposition (svd...) en C++ sur le net mais je n'arriv probleme reallocation memoire vecteur [ par savoyard ] double *b;//fction allocation memoire: (permet d'allouer pas obligatoirement à partir de b[0] mais d ou on veut:double *dvector(int nl,int nh){double Lecture d'un fichier quelconque [ par jb60 ] Bonjour,J'aimerais savoir si il est possible de lire les données d'un fichier quelconque lorsqu'on ne connait pas le format du fichier d'origine... Je aide sur un algorithme en dec-C++ [ par viagra ] je souhaiterais être aidé sur un algorithme sur lequel j'éprouve des problemes. en effet lorsque je compile aussi bien au niveau de dev-c++ et MSYS, l


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,296 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales