IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C++ Discussion :

probleme de débutant


Sujet :

C++

  1. #1
    Candidat au Club
    Inscrit en
    Juin 2009
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 10
    Points : 4
    Points
    4
    Par défaut probleme de débutant
    Bonjour je débute en programmation et j'ai un petit problème avec un devoir.

    Je veux juste que l'on m'indique l'erreur pour que je puisse y remédier pas que l'on me mache le travail.
    Ça fait 2 heures que je suis dessus sans trouver la solution...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    #include <iostream>
    #include <cmath>
    using namespace std;
     
    //1. fonction retournant la valeur de f(x).
    int fonct(int x)
    {
    	int a;
    	a = (4*pow(x, 3)) - (3*pow(x, 2)) + 5;
    	return a;
    }
     
    //2. Approximation de l'intégrale de f sur sa borne inférieure
    int app_inf(int n, int a, int b)
    {
    	int v, d, t, q;
    	d = b-a;
    	t = 0;
    	q = d/n;
    	v = a;
     
    	while (v != (b-q) ) // ou v < b
    	{
    		t = t + q * fonct(v);
    		v = v + q;
    	}
    	return t;
    }
     
    //3. Approximation de l'intégrale de f sur sa borne supérieure
    int app_sup(int n, int a, int b)
    {
    	int v, d, t, q;
    	d = b - a;
    	t = 0;
    	q = d/n;
    	v = a + q;
     
    	while (v != b) // ou v < b+q
    	{
    		t = t + q * fonct(v);
    		v = v + q;
    	}
    	return t;
    }
     
    //4. Approximation de l'intégrale de f par la méthode des trapèzes
    int app_trap(int n, int a, int b)
    {
    	int v, d, t, q;
    	d = b - a;
    	t = 0;
    	q = d/n;
    	v = a + q;
     
    	while (v <= b)
    	{
    		t = t + (1/2*(fonct(v) + fonct(v-q))*q);
    		v = v + q;
    	}
    	return t;
    }
     
    //5. 
    int main(void)
    {
    	int n;
    	cout << "Calcul de l'integrale de la fonction f définie par :" << endl;
    	cout << "f(x) = 4x^3 - 3x^2 + 5" << endl;
    	cout << "Combien d'intervalle pour l'approximation ? (positif non nul)" << endl;
    	cin >> n;
     
    	cout << "Resultats des approximations :" << endl;
    	cout << "app_inf  : " << app_inf(n, 1, 2) << endl;
    	cout << "app_sup  : " << app_sup(n, 1, 2) << endl;
    	cout << "app_trap : " << app_trap(n, 1, 2) << endl;
     
    	return 0;
    }
    Ce code fait des approximations d'intégrales avec la méthode des rectangles (bornes supérieur et inférieur) et avec la méthode des trapèzes.
    L'exécution s'arrête à "Resultats des approximations" sans afficher le résultat.

    Pour info : je compile avec g++ sous linux avec l'excellent geany.

    Merci d'avance.

  2. #2
    Membre chevronné
    Avatar de Goten
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 580
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 580
    Points : 2 205
    Points
    2 205
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    while (v <= (b-q) ) // ou v < b
    {
    		t = t + q * fonct(v);
    		v = v + q;
    }

    v ne changera jamais donc toujours inférieur à b-q donc boucle infinie.
    C'est pas plutôt v += t; que tu voulais écrire?
    "Hardcoded types are to generic code what magic constants are to regular code." --A. Alexandrescu

  3. #3
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Bonjour,
    Tu ne sors jamais de ta boucle while.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    int app_inf(int n, int a, int b)
    {
    	int v, d, t, q;
    	d = b-a;
    	t = 0;
    	q = d/n;
    	v = a;
     
    	while (v != (b-q) ) // ou v < b
    	{
    		t = t + q * fonct(v);
    		v = v + q;
    	}
    	return t;
    }
    Avec un appel app_inf(n, 1, 2)
    Mettons n=5
    On a :
    n=5
    a=1
    b=2
    d=b-a=1
    t=0
    q=d/n=1/5=0 (calcul en entier !)
    v=1
    while(v!=(b-q)) -> while(1!=(2-0)->1!=2 toujours vrai
    b ne varie pas dans la boucle
    q ne varie pas dans la boucle
    et v =v +q -> v = v + 0 -> v ne varie pas dans la boucle.

    Un bon debugger, un point d'arrêt et une exécution pas à pas t'aurait permis de trouver ton problème

  4. #4
    Candidat au Club
    Inscrit en
    Juin 2009
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 10
    Points : 4
    Points
    4
    Par défaut
    Merci beaucoup de m'avoir indiqué mon erreur.

    q = d/n donnais 0 puisque q était considéré comme un entier.

    Il suffisait juste de remplacer les "int" par des "double".
    J'ai également dut modifier ma formule des trapèzes.

    Un grand merci à vous.

Discussions similaires

  1. Probleme de débutant
    Par Oxygan dans le forum Débuter
    Réponses: 4
    Dernier message: 18/05/2007, 10h13
  2. Probleme Flash + Débutant
    Par ganjaaw dans le forum Flash
    Réponses: 2
    Dernier message: 25/04/2007, 20h55
  3. probleme de débutant
    Par hachdotnet dans le forum ASP.NET
    Réponses: 2
    Dernier message: 13/03/2007, 15h17
  4. un probleme de débutant
    Par adel25 dans le forum MFC
    Réponses: 7
    Dernier message: 27/07/2005, 01h08
  5. probleme de débutant avec D3DXVECTOR3
    Par airseb dans le forum DirectX
    Réponses: 6
    Dernier message: 16/08/2003, 21h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo