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

Langage Pascal Discussion :

[Débutant autodidacte] Explication sur quelques notions (tableau, procedure, ...)


Sujet :

Langage Pascal

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 9
    Points : 1
    Points
    1
    Par défaut [Débutant autodidacte] Explication sur quelques notions (tableau, procedure, ...)
    Bonjour à tous

    Je débute (en solitaire) dans l'apprentissage du langage Pascal. J'ai un livre d'exercices que j'ai acheté et j'ai besoin d'un peu voire beaucoup d'aide pour avancer dans ma formation.
    Quelqu'un peut-il m'expliquer à quoi correspondent ces lignes ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Program PG
    const max=100
    type tableau=array[1...max] of integer;
    var n,i,k : integer;
    t : tableau;
    Pour moi ceci correspond à un tableau d'une ligne avec 100 cases.

    Merci par avance

  2. #2
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 942
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 942
    Points : 5 654
    Points
    5 654
    Par défaut
    Lai,

    Oui, c'est bien ça.

    définit une constante numérique max = 100

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    type tableau=array[1...max] of integer;
    définit un type tableau de Integer, indices de 1 à max, donc 1 à 100

    définit 3 variables n,i,k de type Integer

    dans la section var du code,
    définit une variable t du type tableau défini auparavant.
    Si les cons volaient, il ferait nuit à midi.

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    maintenant à quoi correspond la procédure

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    procédure titi  (var m : tableau) ;
    var j :integer ;
    begin
     for j : =1 to n do m[j] : j ;
    end ;

  4. #4
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 14
    Points : 18
    Points
    18
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    procédure titi (var m : tableau) ;
    var j :integer ;
    begin
    for j : =1 to n do m[j] : j ;
    end ;
    cette procedure initialise un tableau a partir de m[1] jusqu'à m[j].
    la valeur de m[1] vaudra 1.
    la valeur de m[2] vaudra 2.
    .......
    la valeur de m[j] vaudra j.

    Il y a cependant une erreur. m[j] := j
    car m[j] : j ne veux, a mon sens, rien dire ^^

  5. #5
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    pour m[j] := j c'est ce qui est écrit dans l'énnoncé.

    j'ai une nouvelle procédure

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    procédure toto (var w : tableau ;i ,j : integer ) ;
    var p :integer ;
    begin
    p  : =w[i];w[i] : w[j];w[j] :=p;
    end ;

  6. #6
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 14
    Points : 18
    Points
    18
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    procédure toto (var w : tableau ;i ,j : integer ) ;
    var p :integer ;
    begin
    p : =w[i]; w[i] := w[j]; w[j] :=p;
    end ;
    c'est un échange entre les valeurs de w[i] et w[j]

    p est une valeur intermédiaire pour stocker la valeur de w[i].

    Exemple:
    si w[i] = 5 et que w[j] = 10,

    apres ta procedure, w[i]=10 et w[j] = 5

  7. #7
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    merci pour moi ce n'était pas évident à trouver

    une autre procédure un peu plus longue
    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
     
    procédure tata(h : tableau) ;
         var j :integer ;
         begin
                for j :=1 to n do write(h[j])
         end ;
     
    begin 
         readln(n) ; randomize ;
         toto(t) ;
         for k :n downto 1 do
              begin i : :=random(k)+1
                      toto(t,i,k) ;
             end;
         titi(t)
    end.

  8. #8
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 942
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 942
    Points : 5 654
    Points
    5 654
    Par défaut
    Foa,
    Citation Envoyé par novice60 Voir le message
    merci pour moi ce n'était pas évident à trouver
    Pour trouver ce que ça fait, retour aux méthodes primaires (ce qui n'est pas péjoratif) : papier + crayon, petits dessins si nécessaire (ici, quelques cases représentant un tableau, avec une valeur dans chaque case), suivre pas à pas le programme, en notant l'évolution de toutes les variables.
    Si les cons volaient, il ferait nuit à midi.

  9. #9
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    j'ai essayé avec papier et crayon mais je n'y arrive pas

  10. #10
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    7 937
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2003
    Messages : 7 937
    Points : 59 417
    Points
    59 417
    Billets dans le blog
    2
    Par défaut
    Bonjour et bienvenue !

    En complément de ton livre d'exercices, tu disposes d'un choix de cours qui s'adressent aux débutants :
    http://pascal.developpez.com/cours/

    Règles du forum
    Cours et tutoriels Pascal, Delphi, Lazarus et Assembleur
    Avant de poser une question, consultez les FAQ Pascal, Delphi, Lazarus et Assembleur
    Mes tutoriels et sources Pascal

    Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]
    La tolérance atteindra un tel niveau que les personnes intelligentes seront interdites de toute réflexion afin de ne pas offenser les imbéciles. [Fiodor Mikhaïlovitch Dostoïevski]

  11. #11
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    merci pour les infos, mais je bloque sur ce problème depuis 2 jours et j'aimerais bien le terminer ce soir surtout qu'il y a d'autres questions après

  12. #12
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    7 937
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2003
    Messages : 7 937
    Points : 59 417
    Points
    59 417
    Billets dans le blog
    2
    Par défaut
    Très pédagogiques, les noms des procédures !

    Revoici le programme complet avec des commentaires qui devraient t'aider à comprendre :
    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
    Program PG;
    const max=100;
    type tableau = array [1...max] of integer;
    var n,i,k : integer;
        t : tableau;
     
    procedure titi (var m : tableau);
    (* Initialise le tableau *)
    var j : integer;
    begin
      for j := 1 to n do m[j] := j;
    end ;
     
    procedure toto (var w : tableau ; i ,j : integer);
    (* Inverse les éléments w[i] et w[j] *)
    var p : integer;
    begin
      p := w[i];
      w[i] := w[j];
      w[j] := p;
    end ;
     
    procedure tata(h : tableau);
    (* Affiche le tableau *)
    var j : integer;
    begin
      for j := 1 to n do write(h[j])
    end ;
     
    begin
      (* Lit le nombre d'éléments utiles du tableau *)
      readln(n);
      (* Initialise le générateur de nombres aléatoires *)
      randomize;
      (* Initialise le tableau *)
      titi(t) ;
      (* Inverse n fois des éléments du tableau *)
      for k := n downto 1 do
        begin 
          i := random(k) + 1;   (* 1 <= i <= k *)
          toto(t,i,k);   (* Inverse le i.ème et le k.ème éléments *)
        end;
      (* Affiche le tableau *)
      tata(t)
    end.
    N.B. Si, dans le programme principal, on ne remplace pas respectivement toto(t) et titi(t) par titi(t) et tata(t) [ j'ai l'impression de faire du morse ], le programme n'a pas beaucoup de sens.

    Règles du forum
    Cours et tutoriels Pascal, Delphi, Lazarus et Assembleur
    Avant de poser une question, consultez les FAQ Pascal, Delphi, Lazarus et Assembleur
    Mes tutoriels et sources Pascal

    Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]
    La tolérance atteindra un tel niveau que les personnes intelligentes seront interdites de toute réflexion afin de ne pas offenser les imbéciles. [Fiodor Mikhaïlovitch Dostoïevski]

  13. #13
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 942
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 942
    Points : 5 654
    Points
    5 654
    Par défaut
    Mai,
    Citation Envoyé par novice60 Voir le message
    merci pour les infos, mais je bloque sur ce problème depuis 2 jours et j'aimerais bien le terminer ce soir surtout qu'il y a d'autres questions après
    Inutile d'essayer d'aller trop vite, il faut avoir compris une étape avant de passer à la suivante, sinon tu seras assez rapidement bloqué, et probablement dégoûté de la programmation.
    Si les cons volaient, il ferait nuit à midi.

  14. #14
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    merci c'est beaucoup plus clair avec les annotations, c'est vrai qu'il faut y aller doucement étape par étape.

    maintenant je dois écrire une fonction : function inv(a) : tabeau) : integer; qui calcule le nombre d'inversions d'un tableau a

  15. #15
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    Pour moi j'écrirais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    procedure tableinv (a : tableau; var inv : tableau);
    var i, j : integer;
    begin
      for i := 1 to n do 
        begin
          inv[a[i]] := 0;
          for j := (i + 1) to n do
            if a[i] > a[j] then
              inv[a[i]] := inv[a[i]] + 1;
        end;
    end;

  16. #16
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    7 937
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2003
    Messages : 7 937
    Points : 59 417
    Points
    59 417
    Billets dans le blog
    2
    Par défaut
    Exécuté sur papier, ton algorithme met à 0 tous les éléments du tableau inv à l'exception de certains, dont la valeur est indéterminée. En effet, lorsque s'exécute
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    inv[a[i]] := inv[a[i]] + 1;
    inv[a[i]] a une valeur indéterminée.

    Je pense qu'il vaudrait mieux que tu postes l'énoncé entier.
    Règles du forum
    Cours et tutoriels Pascal, Delphi, Lazarus et Assembleur
    Avant de poser une question, consultez les FAQ Pascal, Delphi, Lazarus et Assembleur
    Mes tutoriels et sources Pascal

    Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]
    La tolérance atteindra un tel niveau que les personnes intelligentes seront interdites de toute réflexion afin de ne pas offenser les imbéciles. [Fiodor Mikhaïlovitch Dostoïevski]

  17. #17
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    l'énoncé est

    écrire une fonction : function inv(a) : tabeau) : integer; qui calcule le nombre d'inversions d'un tableau a

  18. #18
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 942
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 942
    Points : 5 654
    Points
    5 654
    Par défaut
    Qie,
    Citation Envoyé par novice60 Voir le message
    l'énoncé est

    écrire une fonction : function inv(a) : tabeau) : integer; qui calcule le nombre d'inversions d'un tableau a
    Ça ne veut absolument rien dire tel quel.

    Il doit y avoir avant des définitions. Au minimum : qu'appelle-t-on "inversion" dans ce cadre ?

    En plus, ton code utilise une variable globale n : à proscrire. Une procédure/fonction doit recevoir en paramètres tout ce dont elle a besoin.
    Si les cons volaient, il ferait nuit à midi.

Discussions similaires

  1. brêve explication sur quelques notions basiques
    Par I'm_HERE dans le forum Scripts/Batch
    Réponses: 7
    Dernier message: 15/02/2010, 20h01
  2. Brève explication sur quelques notions basiques
    Par I'm_HERE dans le forum FAQs Windows
    Réponses: 7
    Dernier message: 15/02/2010, 20h01
  3. [Débutant] Explications sur quelques instructions en Assembleur
    Par voodka2007 dans le forum x86 32-bits / 64-bits
    Réponses: 4
    Dernier message: 01/01/2009, 21h47
  4. explication sur les notions de commande et de requête !
    Par bnuitrare dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 11/02/2007, 18h20
  5. explication sur quelques login sql server 2k
    Par Bba_M dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 14/07/2006, 09h23

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