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 :

Programme C calcul taux d'interet


Sujet :

C

  1. #41
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 23
    Points : 1
    Points
    1
    Par défaut
    bon ok je m'occupe de trouver un compilateur ^^...en faite j'utilise la où j'étudie à l'université mais chez moi je l'ai pas encore télécharger :s

    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
     
    #include<stdio.h>
    #include<math.h>
    #include <stdlib.h>
     
    float var (float, int, int);
    float valremb(float, int, int, int, float);
     
    int main (void) 
    {
    float montantemprunt, nombreremboursement, valeur1mensualite, Valeurrembourse, X, Y, Z, r;
    int duree;
     
    printf("Montant du pret ? \n"); 
    scanf("%f", &montantemprunt);
    printf("Nombre de remboursements annuels ? \n");
    scanf("%f", &nombreremboursement);
    printf("Sur une durée (en annees)? \n");
    scanf("%d", &duree);
    printf("Valeur d'une mensualité ? \n");
    scanf("%f", &valeur1mensualite);
     
    X = 0;
    Y = 1;
     
    do {
     
    r = valremb(Y, nombreremboursement, duree, montantemprunt);
    if (r>Valeurrembourse)
    {
    Z = Y + fabs((X-Y)/2);
    }
    else{
    Z = Y - fabs((X-Y)/2);
    }
     
    }
     
    r = valremb(Y, nombreremboursement, duree, montantemprunt);
     
    }while (fabs(valeur1mensualite-r)<(1./100));
    X=Y;
    Y=Z;
    Z = Y + fabs((X-Y)/2);
    r = valremb(Y, nombreremboursement, duree, montantemprunt);
     
     
    }
     
    printf("Le taux est donc de :" \n);
    scanf("%f", &Y);
     
     
    float var (float Y, int nombreremboursement, int duree)
     
    {
    float v;
    v = pow((1+Y/nombreremboursement),(nombreremboursement*duree));
    return v;
    }
     
    float valremb (float Y, int nombreremboursement, int duree, int montantemprunt, float v)
     
    {
    float v, r;
    v = var(Y, nombreremboursement, duree);
    r = (Y*montantemprunt*v)/(nombreremboursement*(v - 1));
    return r;
    }
    Mais après dans la boucle il y a quelque chose qui bloque..je l'ai essayé hier la où je bosse et voila :s...

  2. #42
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    Comme dit précédemment, je te conseille de revenir à la version de ton message #31, qui était bien moins buguée, mais qui souffre toujours de ces deux bugs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (r>Valeurrembourse) // TEST FAUX
    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    }while (fabs(valeur1mensualite-r)<(1./100)); // CONDITION DE SORTIE DE BOUCLE INVERSEE
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

  3. #43
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 23
    Points : 1
    Points
    1
    Par défaut
    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
     
    #include<stdio.h>
    #include<math.h>
    #include <stdlib.h>
     
    float var (float, int, int);
    float valremb(float, int, int, int, float);
     
    int main (void) 
    {
    float montantemprunt, nombreremboursement, valeur1mensualite, Valeurrembourse, X, Y, Z, r;
    int duree;
     
    printf("Montant du pret ? \n"); 
    scanf("%f", &montantemprunt);
    printf("Nombre de remboursements annuels ? \n");
    scanf("%f", &nombreremboursement);
    printf("Sur une durée (en annees)? \n");
    scanf("%d", &duree);
    printf("Valeur d'une mensualité ? \n");
    scanf("%f", &valeur1mensualite);
     
    X = 0;
    Y = 1;
     
    do {
     
    if (r>valeur1mensualite)
    {
    Z = Y + fabs((X-Y)/2);
    }
    else{
    Z = Y - fabs((X-Y)/2);
    }
    X=Y
    Y=Z
    }
     
    r = valremb(Y, nombreremboursement, duree, montantemprunt);
     
    }while (fabs(r-valeur1mensualite)>(1./100));
     
    r = valremb(Y, nombreremboursement, duree, montantemprunt);
     
     
    }
     
    printf("Le taux est donc de :" \n)
    scanf("%f", &Y)
     
     
    float var (float Y, int nombreremboursement, int duree)
     
    {
    float v;
    v = pow((1+Y/nombreremboursement),(nombreremboursement*duree));
    return v;
    }
     
    float valremb (float Y, int nombreremboursement, int duree, int montantemprunt, float v)
     
    {
    float v, r;
    v = var(Y, nombreremboursement, duree);
    r = (Y*montantemprunt*v)/(nombreremboursement*(v - 1));
    return r;
    }

  4. #44
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    C'est presque bon :
    - vérifie avec ton formulaire, car ce test n'est toujours pas bon (les données utilisées sont correctes, mais l'opérateur de comparaison est incorrect) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (r>valeur1mensualite)
    - indente correctement, tu trouveras des erreurs d'accolade
    - rends cohérent la déclaration, la définition et l'usage de valremb (au niveau du nombre de paramètre)
    - ajoute quelques ; en fin de ligne (ceux qui manquent)
    - ... corrige les dernières erreurs de compilation
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

  5. #45
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 23
    Points : 1
    Points
    1
    Par défaut
    bon voila j'ai beaucoup réfléchis mais je ne vois pas... j'arrete de m'y pencher pour ce soir je suis crevé...
    peux tu me donner les solutions a tous mes problemes (voir le programme qui t'as permit a obtenir les résultats de ton message de mercredi a 9h06)??ca m'avancerai beaucoup...sachant que je dois expliquer toutes les étapes du programme, je n'ai pas encore fini...j'espere que tu me comprends ca serait gentil et comme j'ai peu de temps de le finir :s

    bon j'espere que tu pourras m'aider (au moins a résoudre les dernieres erreurs)
    merci


    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
     
     
    #include<stdio.h>
    #include<math.h>
    #include <stdlib.h>
     
    float var (float, int, int);
    float valremb(float, int, int, int, float, float);
     
    int main (void) 
    {
    float montantemprunt, nombreremboursement, valeur1mensualite, Valeurrembourse, X, Y, Z, r;
    int duree;
     
    printf("Montant du pret ? \n"); 
    scanf("%f", &montantemprunt);
    printf("Nombre de remboursements annuels ? \n");
    scanf("%f", &nombreremboursement);
    printf("Sur une durée (en annees)? \n");
    scanf("%d", &duree);
    printf("Valeur d'une mensualité ? \n");
    scanf("%f", &valeur1mensualite);
     
    X = 0;
    Y = 1;
     
    do {
     
    if (r<valeur1mensualite)
    {
    Z = Y + fabs((X-Y)/2);
    }
    else{
    Z = Y - fabs((X-Y)/2);
    }
    X=Y;
    Y=Z;
    }
     
    r = valremb(Y, nombreremboursement, duree, montantemprunt);
     
    }while (fabs(r-valeur1mensualite)>(1./100));
     
    r = valremb(Y, nombreremboursement, duree, montantemprunt);
     
     
    }
     
    printf("Le taux est donc de :" \n);
    scanf("%f", &Y);
     
     
    float var (float Y, int nombreremboursement, int duree)
     
    {
    float v;
    v = pow((1+Y/nombreremboursement),(nombreremboursement*duree));
    return v;
    }
     
    float valremb (float Y, int nombreremboursement, int duree, int montantemprunt, float v, float r)
     
    {
    float v, r;
    v = var(Y, nombreremboursement, duree);
    r = (Y*montantemprunt*v)/(nombreremboursement*(v - 1));
    return r;
    }

  6. #46
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    Tu n'as toujours pas choisi d'indenter correctement ton programme, ce qui fait que tu n'as pas vu que tu tes accolades n'étaient pas correctement fermée (ni au bon endroit).

    Je te retourne donc ton programme, corrigé des erreurs de compilation suivantes :
    - accolade fermante après Y=Z; en trop
    - accolade fermante avant les printf de la fin en trop
    - les paramètres v et r déclaré et défini pour valremb sont inutiles et inutilisés lors de l'appel (donc supprimés)
    - le printf de la fin à son caractère \n en dehors de la chaine délimitée par des guillemets et le scanf qui suit devrait être un printf. Les deux lignes sont donc remplacées par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    printf("Le taux est donc de : \n");
    printf("%8.5f %%", Y*100); /* multiplié par 100 pour obtenir des % */
    - le dernier calcul de r (après la boucle et avant les printf de la fin) est inutile, donc supprimé
    Enfin, il reste une erreur fonctionnelle : le calcul de r doit se faire impérativement AVANT de l'utiliser (c'est à dire avant le test if (r<valeur1mensualite) ).

    Résultat qui fonctionne :
    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
    #include <stdio.h>
    #include <math.h>
    #include <stdlib.h>
     
    float var (float, int, int);
    float valremb(float, int, int, int);
     
    int main (void) 
    {
        float montantemprunt, nombreremboursement, valeur1mensualite, Valeurrembourse, X, Y, Z, r;
        int duree;
     
        printf("Montant du pret ? \n"); 
        scanf("%f", &montantemprunt);
        printf("Nombre de remboursements annuels ? \n");
        scanf("%f", &nombreremboursement);
        printf("Sur une durée (en annees)? \n");
        scanf("%d", &duree);
        printf("Valeur d'une mensualité ? \n");
        scanf("%f", &valeur1mensualite);
     
        X = 0;
        Y = 1;
     
        do {
            r = valremb(Y, nombreremboursement, duree, montantemprunt);
            if (r<valeur1mensualite) {
                Z = Y + fabs((X-Y)/2);
            }
            else {
                Z = Y - fabs((X-Y)/2);
            }
            X=Y;
            Y=Z;
     
            printf("Approximation remboursement = %10.2f\n", r);
            printf("Approximation interet       = %8.6f %% (precision atteinte : %8.5f)\n", Y, fabs(r-valeur1mensualite));
        } while (fabs(r-valeur1mensualite)>(1./100));
     
        printf("Le taux est donc de : \n");
        printf("%8.5f %%", Y*100); /* multiplié par 100 pour obtenir des % */
    } 
     
    float var (float Y, int nombreremboursement, int duree)
    {
        float v;
        v = pow((1+Y/nombreremboursement),(nombreremboursement*duree));
        return v;
    }
     
    float valremb (float Y, int nombreremboursement, int duree, int montantemprunt)
    {
        float v, r;
        v = var(Y, nombreremboursement, duree);
        r = (Y*montantemprunt*v)/(nombreremboursement*(v - 1));
        return r;
    }
    Par contre, si les données d'entrée fournies au programme peuvent conduire à ce que l'algorithme ne converge pas :
    - lorsque le rembourse total sur la durée n'atteint pas le capital initial
    - ou lorsque le taux est supérieur à 2 * la valeur de i(1) c'est à dire pour Y=1, si le taux d'intérêt est supérieur à 200%.

    Pour limité les problèmes, il faut envisager ceci :
    - contrôler lors de la saisie que duree*nombreremboursement*valeur1mensualité >= montantemprunt
    - initialiser Y à 10 (ce qui correspond à 1000%)

    J'ai ajouté au programme, des printf pour tracer l'avancement de l'algorithme, ce qui permet de voir lorsqu'il diverge ou ne se termine pas.
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

  7. #47
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 23
    Points : 1
    Points
    1
    Par défaut
    Je te remercie encore pour ton aide c'est vraiment gentil.
    Désolé pour t'avoir répondu en retard!!
    Merci encore
    Bonne fin de weekend.

Discussions similaires

  1. Réponses: 16
    Dernier message: 13/01/2008, 21h28
  2. programme pour calculer la date
    Par zoheir13 dans le forum Delphi
    Réponses: 3
    Dernier message: 05/05/2007, 19h33
  3. Recherche langage et logiciel pour programme de calcul
    Par guismoman33 dans le forum Basic
    Réponses: 8
    Dernier message: 01/02/2007, 14h04
  4. Programme de calcul d'une factorielle
    Par hassen_I3 dans le forum Assembleur
    Réponses: 1
    Dernier message: 14/12/2006, 18h35
  5. comment faire un programme qui calcul la somme ?
    Par jahjouna dans le forum C++
    Réponses: 18
    Dernier message: 13/12/2006, 00h33

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