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

Algorithmes et structures de données Discussion :

[ADA]Algorithme pyramide


Sujet :

Algorithmes et structures de données

  1. #1
    Membre du Club
    Inscrit en
    Septembre 2006
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 116
    Points : 41
    Points
    41
    Par défaut [ADA]Algorithme pyramide
    Bonjour, je cherche à realiser un programme sous ADA me permmettant de realiser une pyramide comme celle ci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
       1
                 232
               3 4543
             4567654
           567898765
         67890109876
       7890123210987
     890123454321098
    90123456765432109
    Les "-" sont en fait des espaces.


    j'ai réalisés plusieurs procedure

    D'abord celle-ci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    PROCEDURE Espace IS 
     
    Nb: Integer;
    I: Integer; 
     
    BEGIN 
     
    Nb:=1;
     
    while I<=Nb
    LOOP Put(' ');
    END LOOP;
    End;
    Puis ces deux autres :
    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
    PROCEDURE Nombre_Croissant IS 
     
    Nb: Integer;
    I: Integer;
    Chiffre: Integer;
    Nombre: Integer; 
     
    BEGIN 
     
    Nombre:=Nb;
    WHILE Nombre<=(2*Nb)-1
    LOOP Chiffre:=Nombre rem 10;
    Put(Chiffre);
    Nombre:=Nombre+1;
    END LOOP;
    end;
    Puis celle des nombres decroissant:




    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
    PROCEDURE Nombre_Decroissant IS
     
     
     
    Nb: Integer;
    I: Integer;
    Chiffre: Integer;
    Nombre: Integer;
     
     
     
    BEGIN 
     
    Nombre:=Nb;
    WHILE Nombre<=2*(Nb-1)
    LOOP Chiffre:=Nombre rem 10;
    Put(Chiffre);
    Nombre:=Nombre-1;
    END LOOP;
    end;
    Mais voila je n'arrive pas organiser le programme tout entié si quelq'un pouvais m'aider je lui en serait tres reconnaisant.
    Merci d'avance!

  2. #2
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Points : 9 818
    Points
    9 818
    Par défaut
    Le forum ADA, c'est ici :

    http://www.developpez.net/forums/forumdisplay.php?f=227

    Si c'est un problème d'algorithmique, reposte ton programme en pseudo langage algorithmique, parce que l'ADA...

    Edit : Ok, je viens de voir que tu l'as mis dans ce forum
    Je ne répondrai à aucune question technique en privé

  3. #3
    Membre du Club
    Inscrit en
    Septembre 2006
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 116
    Points : 41
    Points
    41
    Par défaut
    En fait voila ce que voudrais realisé
    a)
    Une procedure qui permet d'afficher Nb caractéres ' ' à partir de l'element courant.

    b)Une procedure NOMBRE_CROISSANT qui permet d'afficher à l'ecran sur une meme ligne les chiffres représentant les unites des nombres allant de Nb à (2*Nb)-1

    c) UNe procedure NOMBRE_DECROISSANT qui permet d'afficher a l'ecran sur une meme ligne les chiffres representant les unites des nombres allant de 2*(Nb-1) à Nb

    d) Enfin, à partir de ces procedures faut que jarive a realiser la pyramide

    MErci de m'aider pce la je desespere

  4. #4
    Membre éclairé
    Inscrit en
    Juin 2005
    Messages
    644
    Détails du profil
    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2005
    Messages : 644
    Points : 754
    Points
    754
    Par défaut
    --------1 !
    -------232 !
    ------3 4543 !
    -----4567654 !
    ----567898765 !
    ----67890109876
    ---7890123210987
    --890123454321098
    -90123456765432109
    0123456789876543210
    remarque : aux lignes marquées de ! il manque certainement un -
    qqchose du type
    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
     
    const S10 : string[9] = '         ';
    var s,s1 : string; i,j : integer;
    for i:=1 to 10 do
       begin
       if s < 10 then
          s:=copy(S10,1,10-i)
       else
          s:='';
       if i=1 then 
          s:=s + '1' 
       else
          begin
          s1:='';
          for j:=i to 2*i-1 do         
             s1 := s1 + char( 48 + j mod 10 );
          s:=s + s1;
          for j:= 2*i-2 downto i do
             s:= s + s1[j];
          end;
       writeln(s);
       end;

  5. #5
    Membre du Club
    Inscrit en
    Septembre 2006
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 116
    Points : 41
    Points
    41
    Par défaut
    Merci,mais je suis en apprentisage de programmation et je n'ai programmé que en language ADA alors si vous pouviez me le mettre en Algorithme simple ou en language ADA parce que meme si j'arrive a comprend l'essentil certaine chose m'echape

  6. #6
    Membre éclairé
    Inscrit en
    Juin 2005
    Messages
    644
    Détails du profil
    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2005
    Messages : 644
    Points : 754
    Points
    754
    Par défaut
    certaine chose m'echape
    quoi donc?

  7. #7
    Membre du Club
    Inscrit en
    Septembre 2006
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 116
    Points : 41
    Points
    41
    Par défaut
    Je vais noter en () ce que j ene comprend pas



    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
    const S10 : string[9] = '         ';  : (ce que cela definit)
     
     
    var s,s1 : string; i,j : integer;  (string cela correspond a quel type ?)
    for i:=1 to 10 do
       begin
       if s < 10 then
          s:=copy(S10,1,10-i)  (c'ets quoi la fonction copy ?)
       else
          s:='';   
       if i=1 then 
          s:=s + '1' 
       else
          begin
          s1:='';
          for j:=i to 2*i-1 do         
             s1 := s1 + char( 48 + j mod 10 );   (char et mod c'est quoi ?)
          s:=s + s1;
          for j:= 2*i-2 downto i do    (down to i do je comprend pas on plus ..)
             s:= s + s1[j];  (le [j] non plus)
          end;
       writeln(s);
       end;
    Merci, en fait le plus simple sa serai d'avoir l'algo. Parce que ce programme est peut etre tres bon mais je le comprend pas . Desolé je debute...

  8. #8
    Membre du Club
    Inscrit en
    Septembre 2006
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 116
    Points : 41
    Points
    41
    Par défaut
    En ada j'ai essayer de faire un squelette mais il manque la moitié des choses


    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
    PROCEDURE Pyramide IS
     
    S : Integer;
    S1: Integer;
    I : Integer;
    J : Integer;
     
    begin
     
    i:= 1;
          FOR I IN 1..10
             LOOP
                begin
          IF S<10 THEN 
             S:=
             ELSE S:=' ';
             IF I=1 THEN 
                S:=S+1;
                ELSE 
                BEGIN
                   S1:=' ';
                   J:=I;
                   FOR J IN I..2*I-1
                         LOOP
                      S1:=S1+(
                         S:=S+S1
                         FOR J:=2*I-2
                         S:=S+S1
                      END;
                      Put(S)
                         end;
    si quelq'un parvien a m'ecrie l'algo ou mele traduire en language Ada sa serai sympa.

  9. #9
    Membre éclairé
    Inscrit en
    Juin 2005
    Messages
    644
    Détails du profil
    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2005
    Messages : 644
    Points : 754
    Points
    754
    Par défaut
    Considérez en '1ère approximation' le string comme un tableau de 255 caractères et un string dimensionné comme string[n] un tableau de n caractères. Les éléments du string sont s[1], s[2], , ... , s[longueur du string]
    attention : cela ne commence pas à 0 comme char c[] en C

    Il y a quelques différences entre pascal, delphi mais passons pour le moment.

    const S10 : string[9] = '---------'; : (ce que cela définit) => un string do 9 caractères initialisé à '---------' soit 9 espaces ( ici j'ai mis - à la plaxe de espace car l'editeur ne semble pas permettre 9 space de suite.

    s:=copy(S10,1,10-i) (c'est quoi la fonction copy ?) on sélectionne dans S10 depuis la position 1 les 10-i caractères qui suivent et on stocke le tout dans s.

    s1 := s1 + char( 48 + j mod 10 ); (char et mod c'est quoi ?)

    char(n) n un byte de 0 à FF est le caractère ascii N° n. mod => modulo soit, en d’autres termes, reste de la division par exemple 9 mod 10 = 9 , 10 mod 10 =0, 11 mod 10 = 1, …

    (down to i do je comprend pas on plus ..)
    dans la boucle au lieu d'aller du chiffre le + petit vers le plus grand avec un incrément de 1 on va du plus grand vers le plus petit avec un décrément de 1

    s1[j]; (le [j] non plus
    caractère N° j de s1

  10. #10
    Membre éclairé
    Inscrit en
    Juin 2005
    Messages
    644
    Détails du profil
    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2005
    Messages : 644
    Points : 754
    Points
    754
    Par défaut
    Je ne pratique strictement pas ADA mais c'est un langage structuré comme les autres.
    Les outils de base en question string, string[n], modulo y sont présnts (ou ont leurs équivalent) :
    Je viens de les voir sur
    http://www.rfc1149.net/fcla_data/lang.html
    mais n'ayant jamais écri une ligne en ADA, je ne garenti pas que se site soit optimum

  11. #11
    Membre du Club
    Inscrit en
    Septembre 2006
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 116
    Points : 41
    Points
    41
    Par défaut
    Merci, j'ai compris les instructions mais je n'arrive pas a les traduires en language Ada comme la fonction copy ou encore les string[9] (peut etre je pexu initailiser a ' ' ?)
    Mais tout cela me smeble bien compliqué meme si pour vous cela doit etre simple
    En fait j'aimerais que vous m'aidiez a rendre cette algorithme valable svp:

    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
    Nb entier connu
    Nombre entier nombre initial
     
    debut
    Nb<-1
    Tant que I est inferieur ou egal à Nb
    faire Afficher ('  ')
    I<-I+1
    fin tant que
    nombre<-Nb
    Tant que nombre est inferieur ou egal a (2*Nb)-1
    faire chiffre<-nombre rem 10 (ce qui correspond au reste de la division par 10)
    AFFICHER(chiffre)
    nombre<-nombre+1
    fin tant que
    nombre<-Nb
    Pour i dans l'intervalle 2*(Nb-1)..Nb
    faire chiffre<-nombre rem 10
    Afficher (chiffre)
    nombre<-nombre-1
    fin pour
    fin
    A mon avis il y beaucoup de chose a modifier... .Est ce que je vais y parvenir en tout cas merci de m'accorder votre attention.

  12. #12
    Membre du Club
    Inscrit en
    Septembre 2006
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 116
    Points : 41
    Points
    41
    Par défaut
    Il existe sans nul doute mais c'est un exercice reelement simple (enfin pas pour moi) cela fais a peine deux semaine que je suis rentré en info et je n'ai jamais utlisé encore de telle fonction

  13. #13
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Points : 9 818
    Points
    9 818
    Par défaut
    Citation Envoyé par Argol
    debut
    Nb<-1
    Tant que I est inferieur ou egal à Nb
    faire Afficher (' ')
    I<-I+1
    fin tant que
    nombre<-Nb
    Tant que nombre est inferieur ou egal a (2*Nb)-1
    faire chiffre<-nombre rem 10 (ce qui correspond au reste de la division par 10)
    AFFICHER(chiffre)
    nombre<-nombre+1
    fin tant que
    nombre<-Nb
    Pour i dans l'intervalle 2*(Nb-1)..Nb
    faire chiffre<-nombre rem 10
    Afficher (chiffre)
    nombre<-nombre-1
    fin pour
    fin
    Utilise une balise Code pour prendre en compte l'indentation. Même remarque pour le premier post, tu peux mettre cette balise au lieu d'utiliser des "-" pour signaler des espaces.
    Je ne répondrai à aucune question technique en privé

  14. #14
    Membre du Club
    Inscrit en
    Septembre 2006
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 116
    Points : 41
    Points
    41
    Par défaut
    Uai c'est bon j'ai reusis merci pour tout :

    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
    with Ada.Integer_Text_Io; use Ada.Integer_Text_Io;
    with Ada.Text_IO; use Ada.Text_IO;
     
     
    procedure Pyramide is  
       procedure Affiche_Espace(Nb:in integer) is
       begin
             for X in 1..Nb loop
                Put(" ");
             end loop;
       end;
       procedure Affiche_Nombres_Croissants(From,To:in integer) is
       Nb:integer:=0;
       begin
          for X in From..To loop
             Nb:=X mod 10;
             Put(Nb,2);
          end loop;
       end;
       procedure Affiche_Nombres_Decroissants(From,To:in Integer) is
       Nb:integer:=0;
       begin
          for X in reverse To..From loop
             Nb:=X mod 10;
             Put(Nb,2);
          end loop;
       end;   
       begin
          for Y in 1..10 loop
             Affiche_Espace(20-2*Y);
             Affiche_Nombres_Croissants(Y,1+2*(Y-1));
             Affiche_Nombres_Decroissants(2*(Y-1),Y);
     
             new_line;
         end loop;
    end;

  15. #15
    Membre émérite

    Homme Profil pro
    Inscrit en
    Juillet 2003
    Messages
    2 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations forums :
    Inscription : Juillet 2003
    Messages : 2 075
    Points : 2 844
    Points
    2 844
    Par défaut
    Salut
    Lorsque tu formates ton message:
    -un titre claire et francais, pas un gloubi-glouba qui veut rien dire...
    -des balises codes (tu mets en surbrillance le dit code pis tu cliques sur # sinon tes posts sont illisbles...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Créer un algorithme en langage ADA
    Par kiimmy dans le forum Ada
    Réponses: 1
    Dernier message: 11/10/2011, 10h00
  2. Algorithme de LZ77 en Ada
    Par miomikio dans le forum Ada
    Réponses: 16
    Dernier message: 19/02/2008, 01h26
  3. Algorithme pyramidal en gestion
    Par ctl1970 dans le forum Algorithmes et structures de données
    Réponses: 1
    Dernier message: 15/11/2006, 18h44
  4. Algorithme de randomisation ... ( Hasard ...? )
    Par Anonymous dans le forum Assembleur
    Réponses: 8
    Dernier message: 06/09/2002, 14h25

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