Probleme algorithme

Bonjour,

lorsque je lance l'application de mon code, la console s'ouvre mais quand je rentre un nombre, il n'y a rien qui se passe...

PROCEDURE Table IS
-- pré requis nombre entier
--action afficher table multiplication du nombre entré
-- strategie boucle TQ
Nbr, -- nombre choisi
M, --resultat
Cpt:Integer; -- compteur

BEGIN
Put ("entrez un nombre");
Get (Nbr);
Cpt:=0;
M:=1;

WHILE Cpt<=10 LOOP
M:=Nbr*Cpt;
cpt:=cpt+1;

put (nbr);
put ("*");
put ("=");
Put(M);
end loop;

END;

J'en profite pour poser une autre question...

euh dans un autre exo on me demande de calculer la suite de fibOnacci F(n) à l'ordre 15, sachant que

F(n) = 1 si n=1
1 si n=2
F(n-1) + F(n-2) si n>2

mais je ne sais pas comment trouvé F, sa formule...

merci de bien vouloir m'aider

15 réponses

  1. Modérateur
    Pour le premier exercice aucune idée je ne sais même pas ce que c'est comme langage (tu aurais pu le préciser). Du pascal ? Comme je ne connais pas ce langage, voici ce que ça pourrait donner en C :
    #include <stdio.h>
    
    // En C l'exécution d'un programme lance la fonction main
    // main est sensée retourner 0 quand tout va bien
    int main(){
      unsigned i,n;
      // lire le nombre
      printf("entrez un nombre : ");
      scanf("%i",n);
    
      // afficher la table
      for(i = 0;i < 10; ++i){
        // En C : %i signifie écrire un entier positif, et \n signifie retour à la ligne
        printf("%i * %i\n",n,i,n*i);
      }
    
      // fin du programme
      return 0;
    }
    

    Pour Fibonacci c'est simplement une suite définie par récurrence. On ne te demande pas de trouver F, car tu as en fait sa définition. Concrètement ça se code assez facilement avec un appel récursif. En C :
    #include <stdio.h>
    #include <assert.h>
    
    int f(unsigned n){
      assert(n>0); // déclencher une erreur si n == 0
      if (n == 1 || n == 2) return 1;
      return f(n-1) + f(n-2);
    }
    
    int main(){
      unsigned n;
      printf("entrez un nombre : ");
      scanf("%i",n);
      printf("résultat : %i\n",f(n));
      return 0;
    }

    Bonne chance
    0
    1. Merci beaucoup mamie vrement trés rapide mais en fait j'aurai besoin de comprendre en ADA, c'est de l'ada car on a pas le droit d'utiliser le C a l'iut...
      0
    2. Contributeur
      Salut,
      @Mamiemando,
      T'as oublié l'esperluette dans les scanf ;)
      scanf("%d",&n);

      Cdt
      0
    3. Modérateur
      @fiddyoups excellente remarque :-)
      0
  2. sinon j'aimerai bien avoir de l'aide pour l'algo et non pas le code pour mieu comprendre et pouvoir tout coder aprés.
    merci
    0
    1. en fait pour le 1er exercice j'ai pas tres bien saisi ce que tu veux faire mais ce que je remarque c'est que la boucle loop ici ne sert à rien , ce que tu fais c'est de pultiplier le nombre NBR par 10 les autre affectations s'ecrase l'une l'autre. verifie encore tn algorithme
      0
      1. essayer de faire afficher le resultat apres la boucle
        0
        1. Modérateur
          <3> :
          Comme le dit archi dessin, comment écrirais-tu en français le code ? En gros ça serait pour ton premier exercice
          Lire n
          Pour i allant de 1 à 9
            Écrire i
            Écrire *
            Écrire n
            Écrire =
            Écrire (i * n)
            Écrire \n
          Fin pour

          Si tu regardes c'est ce que j'ai écris en C (et à peu de choses près ce que tu as écrit dans ton premier message).
          Pour le second exercice il faut écrire une fonction f que tu vas appeler récursivement depuis ton programme principal. Tu peux t'inspirer de ce que j'ai écris, il ne reste plus qu'à le traduire dans ton langage.

          Bonne chance
          0
          1. dans mon premier exo le programme doit afficher la table de multiplication du nombre entré...

            pour la suite de fibbonaci je ne comprend toujours pas l'algorithme
            0
            1. pour l'exo 1 si le nombre entrer est 1
              l'ecran doit afficher:
              1*0=0
              1*1=1
              1*2=2
              ...
              ...
              1*10=10
              0
              1. le resultat ne sera pas afficher comme vous citez dans votre alogrithme car la gestion des lignes d'affichage en plus vous ajoutez une lecture vide pour que vous bloquer l'execution pour affichage du resultat
                0
                1. PROCEDURE Table IS

                  -- pré requis nombre entier
                  --action afficher table multiplication
                  -- strategie boucle TQ
                  Nbr, -- nombre choisi
                  M, --resultat
                  Cpt:Integer; -- compteur

                  BEGIN
                  Put ("entrez un nombre");
                  Get (Nbr);
                  Cpt:=0;
                  M:=1;

                  WHILE Cpt<=10 LOOP
                  M:=Nbr*Cpt;
                  cpt:=cpt+1;

                  End loop;

                  put (nbr);
                  put ("*");
                  put (cpt);
                  put ("=");
                  Put(M);

                  END;

                  ca ne marche toujours pas, je suis obligé d'utiliser une boucle tant que.
                  0
                  1. salut tu trouvera surment ton bonheur sur
                    w w w . e c o m - s m s . c o m

                    salutation
                    nico
                    0
                    1. salut jdois prendre mon train, donc voila :

                      procedure Table_Multiplication is
                      -- action : affiche à l'écran la table de multiplication de (i)
                      -- pré-requis : N est un entier
                      -- stratégie : boucle tant que
                      I, -- nombre à multiplier
                      Cpt, -- compteur multipliant (i)
                      Res:Integer; -- résultat de la multiplication

                      begin
                      Cpt:=0;
                      Get (I);
                      while cpt<=10 loop
                      Res:=Cpt*I;
                      Put (I); Put ("x"); Put (Cpt); Put ("="); Put (Res); New_Line;
                      Cpt:=Cpt+1;
                      end loop;

                      end Table_Multiplication;

                      chez moi ca marche
                      ++
                      0
                      1. bjr

                        pour ton premier exo ,ben je ne connai pa ton longage mai je peu t aider en écrivant l algorithme en françai
                        déclaration d'une variable de type tableau soit tab de longeur 10

                        tab:tableau[10] d'entiers;
                        nbr, cpt : entier
                        debut
                        lire (nbr);
                        pour cpt=1 à 10 fair
                        tab[cpt]=nbr*cpt;
                        fin la boucle pour
                        pour cpt = 1 à 10 faire
                        ecrire(nbr,'*',cpt,'=',tab[cpt]);
                        sauter une ligne;
                        fin pour
                        fin.
                        0
                        1. jai réusii a obtenir quelque chose pour l exo 1 mais le probleme c'est que leresultat de chaque multiplication est faux, a la place il y a le compteur qui s'affiche...

                          PROCEDURE Table IS

                          -- pré requis : nombre entier
                          --action : afficher table multiplication
                          -- strategie : boucle TQ
                          Nbr, -- nombre choisi
                          M, --resultat
                          Cpt:Integer; -- compteur

                          BEGIN
                          Put ("entrez un nombre");
                          Get (Nbr);
                          Cpt:=1;
                          M:=1;

                          WHILE Cpt<=10 LOOP

                          M := Nbr*Cpt;
                          Cpt := Cpt+1;

                          put (nbr);
                          put ("*");
                          put (cpt);
                          put ("=");
                          Put(M);

                          End loop;

                          END;

                          euh pour fibonacci j'ai fais ca mais ca marche pas, le resultat n'est pas bon :

                          Procedure Fibonacci is

                          -- pré requis : n>2
                          --action : calculer la suite de fibonacci F(n) à l'ordre 15
                          --stratégie : boucle en tant que
                          Fp, -- F(n-1)
                          Fpp:Integer; -- F(n-2)
                          Fn : Integer; -- F(n)
                          d:character; -- lancer le programme

                          Begin

                          Put ("cliquez sur d pour lancer le programme");
                          Get (d);

                          fp:=1;
                          fpp:=0;

                          While fp<=14 loop

                          Fp:=Fp+1;
                          Fpp:=fpp+1;
                          Fn := Fp + Fpp;

                          End loop;

                          Put ("f(15) =");
                          Put (Fn);

                          End;
                          0
                          1. est ce que :
                            - il n y a pas d'affichage
                            ou
                            - il y a un message d'erreur

                            en plus ma remarque est que le programme execute mais il n y a pas d'affichage de resultat pour le résoudre on doit faire une lecture vide
                            0