Voici un code en c++ svp vérifiez pour quoi il ne marche pas

Fermé
mustang ouss Messages postés 4 Date d'inscription samedi 16 février 2013 Statut Membre Dernière intervention 23 février 2013 - Modifié par mamiemando le 20/02/2013 à 19:48
ReganDryke Messages postés 13 Date d'inscription samedi 8 décembre 2012 Statut Membre Dernière intervention 22 février 2013 - 22 févr. 2013 à 23:49
Bonjour,
je veux que mon code s'arrête lorsque T[i+1]=T[i] et qu'il me renvoie juste le T[i+1] et là c'est pas ce qu'il fait svp aidez moi
voici mon code

#include <iostream> 
#include <iomanip> 
#include <cmath> 

using namespace std; 
double fonction (double M, double a, double b, double G) 
{ 
float T[27],t[27]; 
T[0]=1; 
t[0]=0; 
int n; 
for (int i=0;i<27;i++) 
{ 
    int j=0; 
                 T[i+1]=sqrt(M/((a+(b*t[j])/2)+(G)*T[i])); 
                 if (T[i]==T[i+1])   
                       { 
                         T[i+1]=T[i]; 
                         n=i+1;  
                         break; 
                       }   
                             t[j+1]=t[j]+T[i];  
              cout<<"t["<<j+1<<"] ="<<setprecision (5) <<t[j+1]<<"  "<<"T["<<i<<"] ="<<setprecision (5) <<T[i]<<endl; 
                             j++;  
}             
                     
            system("pause");  
} 
int main() 
{ 
    double M,a,b,G; 
    cout<<"donnez M,a,b,G:"<<endl; 
    cin>>M>>a>>b>>G; 
    fonction (M,a,b,G); 
} 


merci.


A voir également:

1 réponse

mamiemando Messages postés 33097 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 13 mai 2024 7 752
Modifié par mamiemando le 20/02/2013 à 20:02
Plusieurs choses ne vont pas :
- fonction devrait retourner void (ou un double)
- la variable n ne sert à rien
- il faut éviter d'utiliser "system" qui engendre du code spécifique à un OS (par exemple windows ou linux). Dans ton cas "getchar();" peut faire l'affaire.
- il manque l'entier retourner par main (0 si tout va bien par convention)
- essaye de soigner l'indentation et d'aérer le code

Voici à quoi ça pourrait ressembler :

#include <iostream> 
#include <iomanip> 
#include <cmath> 

using namespace std; 

// type de retour invalide
void fonction(double M, double a, double b, double G) {
    float T[27], t[27];
    //int n; // pas utilisé ?
    T[0] = 1;
    t[0] = 0;
    for (int i = 0; i < 27; i++) {
        int j = 0;
        T[i + 1] = sqrt(M / ((a + (b * t[j]) / 2) + (G) * T[i]));
        if (T[i] == T[i + 1]) {  
            T[i + 1] = T[i];
            //n = i + 1; // pas utilisé ?
            break; 
        }   
        t[j + 1] = t[j] + T[i];
        cout << setprecision (5)
             << "t[" << j + 1 << "] = " 
             << t[j + 1] << ' '
             << "T[" << i << "] = "     
             << T[i]     << endl;
        j++;    
    }          
    // system("pause");
} 

int main()  {
    double M, a, b, G;
    cout << "donnez M, a, b, G:" << endl;
    cin >> M >> a >> b >> G;
    cout << "fonction(" << M << ", " << a << ", "
         << b << ", " << G << ")" << endl; 
    fonction(M, a, b, G);
    return 0; // oubli
}


... ce qui donne :

donnez M, a, b, G:
1
2
3
4
fonction(1, 2, 3, 4)
t[1] = 1 T[0] = 1
t[1] = 0.40825 T[1] = 0.40825
t[1] = 0.52465 T[2] = 0.52465
t[1] = 0.49395 T[3] = 0.49395
t[1] = 0.50152 T[4] = 0.50152
t[1] = 0.49962 T[5] = 0.49962
t[1] = 0.50009 T[6] = 0.50009
t[1] = 0.49998 T[7] = 0.49998
t[1] = 0.50001 T[8] = 0.50001
t[1] = 0.5 T[9] = 0.5
t[1] = 0.5 T[10] = 0.5
t[1] = 0.5 T[11] = 0.5


Bonne chance
0
merci beaucoup je vais l'essayer pour voir s'il marche encore une fois merci beaucoup
0
mais moi je veux qu'il me renvois juste la valeur 0.5 dans le tableau T[1]
et là c 'est pas le cas
0
ReganDryke Messages postés 13 Date d'inscription samedi 8 décembre 2012 Statut Membre Dernière intervention 22 février 2013 6
22 févr. 2013 à 23:49
float fonction(double M, double a, double b, double G) {
    float T[27], t[27];
    //int n; // pas utilisé ?
    T[0] = 1;
    t[0] = 0;
    for (int i = 0; i < 27; i++) {
        int j = 0;
        T[i + 1] = sqrt(M / ((a + (b * t[j]) / 2) + (G) * T[i]));
        if (T[i] == T[i + 1]) {  
            T[i + 1] = T[i];
            //n = i + 1; // pas utilisé ?
            break; 
        }   
        t[j + 1] = t[j] + T[i];
        j++;    
    }  
    // il t'affiche T[1]
    cout << setprecision (5) << "T[1] = " << T[1] << endl;    
    // system("pause");
    return T[1]; // Le return te permet de recuperer T[1] a la sortie de la 
    // fonction sous la forme float variable = fonction(M,a,b,G)
} 


Se qui donne en partant du code ci dessus :
donnez M, a, b, G:
1
2
3
4
fonction(1,2,3,4)
T[1] = 0,40825
0