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

Pascal Discussion :

Somme des x^k de k >= 0 à n


Sujet :

Pascal

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 65
    Points : 18
    Points
    18
    Par défaut Somme des x^k de k >= 0 à n
    se programme doit faire ceci :
    somme des x^k de k>=0 a n.

    voici mon programme :
    pouvez vous me dire ou est l'ereur ou mem plutot ou sont les erreurs.

    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
    var
    p,x:real;
    i,k:integer;
     
    begin
    write('donnez k ');readln(k);
    write('donnez x ');readln(x);
     
    i:=1;
    p:=1;
    while i<=k do
    begin
         while i<=k do
         begin
              p:=p*x;
              p:=p+1;
     
    p:=p+p;
         end;
         end;
    write(p);
    end.

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    633
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 633
    Points : 711
    Points
    711
    Par défaut
    Bonjour,

    Il faut penser à mettre à jour la variable qui contrôle les boucles, et de plus, tu as 2 boucles imbriquées qui utilisent la même variable en contrôle, ce qui bien évidemment pose problème.

    Comme tu connais les limites des boucles avant d'y entrer, des boucles for seraient plus adaptées.

    Il serait sans doute bon d'écrire une fonction pour calculer tes x^k.

    A propos du calcul de la puissance, regarde bien ce que fait ton programme. A ton avis, c'est ok ?

    (Pour vérifier ce genre de calcul, tu le fais à la main, en choisissant des valeurs assez basses pour ne pas avoir des milliers de calculs à faire)
    Compilation sans erreur ne signifie pas programme sans erreur.
    L'indentation n'a pas été imaginée pour faire beau, mais pour faciliter la lecture des programmes.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 65
    Points : 18
    Points
    18
    Par défaut
    eu pour moi le calcul de puissance oui , mais je suppoe que non vu que vous me faite la remrque l'erreur est ou?
    puis pour mes boucle imbriquer , comem c'est une somme de spuissances il faut bien que j'utilise la meme variable non?

    est t'il possible d'avoir une correctiondu programme , et quelque explication pour que je vois ou sont mes erreurs?

  4. #4
    Expert confirmé
    Avatar de Loceka
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    2 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 2 276
    Points : 4 845
    Points
    4 845
    Par défaut
    comme l'a dit thewho, il y'a deux choses qui te simplifieraient la vie ici (surtout la compréhension) :
    - écrire une fonction calculant la k-ième puissance de x.
    - utiliser des boucles for au lieu des boucles while.

    Par contre, est-ce que tu es conscient que le 'k' de ton explication (somme des x^k de k>=0 a n.) et le 'k' que tu demandes à l'utilisateur de rentrer ne sont pas les mêmes ?

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 65
    Points : 18
    Points
    18
    Par défaut
    et pour la fonction puissance tu a totalement raison je n'y avaispas pensé.
    eu oui , a mon erreur doit etre ici , explique moi stp

  6. #6
    Expert confirmé
    Avatar de Loceka
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    2 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 2 276
    Points : 4 845
    Points
    4 845
    Par défaut
    Redonne-nous un code (bien indenté si possible) avec les indices qu'on t'a donné et on verra.

    Etant donné que ces programmes sont des programmes "de base", il n'y a aucun intérêt à te donner la solution directement. Le seul moyen que tu aies de comprendre comment faire, c'est d'y réfléchir un peu. En l'ocurrence, il faut que tu comprennes bien le processus d'imbrication des boucles.

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 65
    Points : 18
    Points
    18
    Par défaut
    en fait je revien plus vite que prevu , deja ma fonction puissance est t'elle bonne?

    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
    var
    d:real;
    a:real;
    b:integer;
    function puissance(x:real;k: integer):real;
    var
    i:integer;
    a:real;
    begin
    i:=1;
    a:=1;
    while i<=k do begin
    a:=a*x;
    i:=i+1;
    end;
    puissance:=a;
    end;
    par contre je ne vois pas comment monter en boucle cette fonction pour obtenir la somme; peut tu maiguillé?( et pr l'info je demandait pas le corriger , mais plutot une sorte d'algo simplifier pour que je vois comment sa fonctionne le but c'est de comprendre ) .

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 65
    Points : 18
    Points
    18
    Par défaut
    Voici mon programme au complet est il valable?

    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
     
    var
    x,d:real;
    a:real;
    b,k,y,i:integer;
    function puissance(x:real;k: integer):real;
    var
    i:integer;
    a:real;
    begin
    i:=1;
    a:=1;
    while i<=k do begin
    a:=a*x;
    i:=i+1;
    end;
    puissance:=a;
    end;
     
    begin
    readln(x);readln(k);
    i:=1;
    d:=1;
     
    while i<=k do begin
    d:=puissance(x,i)+d;
    i:=i+1;
    writeln(d,' ');
    end;
     
    end.

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    633
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 633
    Points : 711
    Points
    711
    Par défaut
    Bonjour,

    Apprends d'urgence à indenter ton code.

    Un exemple est
    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
    var
      d:real;
      a:real;
      b:integer;
     
    function puissance(x:real;k: integer):real;
    var
      i:integer;
      a:real;
    begin
      i:=1;
      a:=1;
      while i<=k do
      begin
        a:=a*x;
        i:=i+1;
      end;
      puissance:=a;
    end;
    C'est quand même plus clair à lire, n'est-ce pas ?


    Pourquoi persister avec les boucles while après ce qu'on t'a dit ?

    Il est également conseillé d'utiliser des noms explicites pour les variables:

    - i pour contrôler une boucle, ok

    - a pour le résultat d'une fonction n'est pas top, res serait plus clair, par exemple

    (Pour une petite fonction comme celle-ci, ce n'est pas vraiment un problème, mais il vaut mieux en prendre l'habitude. Tu verras que c'est utile quans tu feras des fonctions un peu plus compliquées.)

    Sinon, ta fonction fait son travail, si on admet que [k] sera toujours >= 0.

    Voici la version avec une boucle for
    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
    var
      a:real;
      b:integer;
     
    function puissance(x:real;k: integer):real;
    var
      i:integer;
      res:real;
    begin
      res:=1;
      for i:=1 to k do
      begin
        res:=res*x;
      end;
      puissance:=res;
    end;
    Compilation sans erreur ne signifie pas programme sans erreur.
    L'indentation n'a pas été imaginée pour faire beau, mais pour faciliter la lecture des programmes.

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 65
    Points : 18
    Points
    18
    Par défaut
    je m'obstine avec les boucle whiel car on n'a pas vue encore les for , donc comme je suis en revision la , ba je fait avec se qu'on a eu dans le cour.
    et pour la mise en page j'admet que tu a entierement raison.
    et je t'ai mis le programme fini plus haut di moi se que tu en pense stp.

  11. #11
    Expert confirmé
    Avatar de Loceka
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    2 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 2 276
    Points : 4 845
    Points
    4 845
    Par défaut
    Ca m'a l'air parfait (à part l'indentation ).

    Pour en être sûr, fais-toi des jeux de tests (qu'est-ce que ça donne pour k=0, k=1, k=15, ...) et vérifie que tu obtiens les bons résultats.

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 65
    Points : 18
    Points
    18
    Par défaut
    ok ok et selon toi ou je trouve l'erreur?et qu'entend tu par l'identation?

  13. #13
    Rédacteur/Modérateur
    Avatar de M.Dlb
    Inscrit en
    Avril 2002
    Messages
    2 464
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 464
    Points : 4 311
    Points
    4 311
    Par défaut
    Tu trouveras l'erreur si il y en a en déroulant ton algo ligne par ligne.

    L'indentation, c'est l'art de bien présenter son code, en décalant vers la droite (indenter) les blocs de programmes inclus dans d'autres :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    procedure X;
    begin
      while true
      begin
        writeln('salut');
      end;
    end;
    Tu vois le principe ? Quand un bloc est fini, on redécale vers la gauche. Ca ajoute de la clarté. Prend exemple sur les codes que les autres te présentent ici. Un code pas ou mal indenté te fera passer pour un boulet, alors qu'au contraire un joli code bien indeté fait pro
    M.Dlb - Modérateur z/OS - Rédacteur et Modérateur Pascal

  14. #14
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    633
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 633
    Points : 711
    Points
    711
    Par défaut
    Bonjour,
    Citation Envoyé par wormful_sickfoot
    Tu vois le principe ? Quand un bloc est fini, on redécale vers la gauche. Ca ajoute de la clarté. Prend exemple sur les codes que les autres te présentent ici. Un code pas ou mal indenté te fera passer pour un boulet, alors qu'au contraire un joli code bien indeté fait pro
    Ce n'est pas un probolème de boulet ou de "pro".

    Il s'agit d'indenter le code correctement, ne serait-ce que pour soi-même.

    On ne le perçoit pas toujours au début, car pour de petits programmes (c'est à dire pas plus de 15 ou 20 lignes !!), la lecture du code, même non ou mal indenté (et tant qu'à faire, il vaut mieux qu'il ne le soit pas plutôt que mal), ne pose pas vraiment de problème.

    Mais ensuite, quand le listing s'allonge... Il faut donc prendre cette habitude dès le début
    Compilation sans erreur ne signifie pas programme sans erreur.
    L'indentation n'a pas été imaginée pour faire beau, mais pour faciliter la lecture des programmes.

  15. #15
    Rédacteur/Modérateur
    Avatar de M.Dlb
    Inscrit en
    Avril 2002
    Messages
    2 464
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 464
    Points : 4 311
    Points
    4 311
    Par défaut
    Citation Envoyé par thewho
    Ce n'est pas un probolème de boulet ou de "pro".
    C'était de l'humour évidemment : )
    M.Dlb - Modérateur z/OS - Rédacteur et Modérateur Pascal

  16. #16
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 65
    Points : 18
    Points
    18
    Par défaut
    bas je ne vois pas d'ereur , enfin sauf pour quand c'es exposant zero et la je ne vois pas comment faire , mais sinon il ya un erreur c'est sur vue que tu la fait remarquer, mais ou est elle la j'avou je bug

  17. #17
    Expert confirmé
    Avatar de Loceka
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    2 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 2 276
    Points : 4 845
    Points
    4 845
    Par défaut
    Euh... quand je dis que le programme m'a l'air correct, ça signifie que je pense qu'il n'y a pas d'erreur !

    Pour n = 0, en effet, il faut faire un cas à part (genre if ... then ... else).

  18. #18
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    633
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 633
    Points : 711
    Points
    711
    Par défaut
    Bonjour,
    Citation Envoyé par superdj
    bas je ne vois pas d'ereur , enfin sauf pour quand c'es exposant zero et la je ne vois pas comment faire , mais sinon il ya un erreur c'est sur vue que tu la fait remarquer, mais ou est elle la j'avou je bug
    Là, ce sont des maths.

    Exposant = 0 ==> résultat = 1.

    Donc la fonction... fonctionne aussi dans ce cas.
    Compilation sans erreur ne signifie pas programme sans erreur.
    L'indentation n'a pas été imaginée pour faire beau, mais pour faciliter la lecture des programmes.

  19. #19
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    Soit x + x2 + x3 +..xn
    Multiplions par x-1
    J’ai x2-x+x3 –x2..xn+1-x.n
    Après simplification=(xn+1-x)
    Donc somme(x + x2 + x3 +..xn)=(xn+1 –x)/(x-1)
    Et ta solution vaut (xn+1 –x)/(x-1) - (xk+1 –x)/(x-1)

    ceci ne nécessite auncune boucle
    Elle est pas belle la vie ?

  20. #20
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 65
    Points : 18
    Points
    18
    Par défaut fonction puissance
    bonjours ,
    je rectifie le message j'aii trouvé pour les factorielles , mais mon probleme est en fait de savoir comment faire (-1)^k et x^(2k+1)

    je sait faire x^k mais les 2 autre je n'y arrive pas

Discussions similaires

  1. [Access] Combinatoire : Liste article dont la somme des prix
    Par enibris dans le forum Langage SQL
    Réponses: 14
    Dernier message: 17/03/2006, 10h03
  2. Somme des valeurs de certaines lignes
    Par Tartenpion dans le forum Langage SQL
    Réponses: 6
    Dernier message: 16/02/2006, 16h46
  3. somme des champs null
    Par s.rais dans le forum Access
    Réponses: 4
    Dernier message: 09/02/2006, 09h05
  4. Réponses: 2
    Dernier message: 09/01/2006, 16h10
  5. Somme des champs ? existe t il une fonction ...
    Par dark_vidor dans le forum Langage SQL
    Réponses: 6
    Dernier message: 02/01/2006, 11h57

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