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 :

Notions d'enregistrement en Pascal


Sujet :

Langage Pascal

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 12
    Points : 6
    Points
    6
    Par défaut Notions d'enregistrement en Pascal
    Bonjour. J'ai un projet d'informatique (sous Pascal) à rendre pour la semaine prochaine. J'ai déja programmé quand j'étais plus jeune sous VB, les deux langages n'ont pas l'air enormement different pour ce dont j'ai besoin. Le problème c'est que j'ai d'autres projets (non informatique) assez en retard...J'ai donc ecrit mon programme un peu comme en VB, mais je n'arrive pas à l'adapter en Pascal. Je n'y ai pas encore passé beaucoup de temps, mais je sais que galerer sur des petits problèmes de langage peut etre tres long (comparé à quelqu'un qui maitrise le langage). Donc voila, si vous maitrisez le langage, ca serait sympa d'adapter ma procedure...(j'ai surtout un problème pour déclarer des variables du type : Joueur[i].nom...)
    D'avance merci.

    C'est une procédure de saisie de données (un score de tennis)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Procedure Nom_equipe 
     If Nbre_joueur =  4 then 
      For i from 1 to 2 do 
      Equipe[i].nom=”l’équipe”  Joueur[i].nom + Joueur[i+1].nom 
      End ; 
     
     If Nbre_joueur =  2 then 
      For i from 1 to 2 do 
      Equipe[i].nom=Joueur[i].nom 
      End ; 
    End ;



    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
     
    Procedure Saisie_score 
    begin 
     
     h :=Nbre_set 
     for j from 1 to Nbre_set do 
     begin 
      If h<Nbre_set then  
       Halt (arrête  la boucle for ??!) 
      Else  
       For i from 1 to 2 do 
       Begin  
        Repeat 
        Writeln(« combien de jeux à gagné » Equipe_nom[i] «dans le set» j « ?») 
        Writeln(« 1, 2, 3, 4, 5, 6, 7, T pour Tie Break, P si le set numéro » j « n’a pas encore commencé») 
        Readln(equipe[i].set[j].jeu) 
        Until equipe[i].set[j].jeu IN [1, 2, 3, 4, 5, 6, 7, T, P] 
        If equipe[i].set[j].jeu = P then 
         h:=j-1 
     
       End; 
     
     End;

    Commentaire : h correspond au numéro de set qui est en train de se jouer.

    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
    For k from 1 to 2 do 
     Begin 
      If equipe[k].set[h].jeu=T then 
       Repeat  
       Writeln (« Nombre de point marqué par » Equipe_nom[k] « dans le Tie Break » ) 
       Readln(equipe[k].point) 
       UNTIL équipe[k].point IN integer 
      Else  
       Repeat  
       Writeln (« Score » Equipe_denom[k] « dans le dernier jeu en cours ») 
       Writeln (0, 15, 30, 40, E pour égalité, A pour avantage, D pour avantage à l’adversaire) 
       Readln (equipe[k].point IN (0, 15, 30, 40, E, A, D) 
     
      If equipe[1].point = E then 
       equipe[2].point = E 
       halt  (sortie de la boucle for ?!!) 
     
     
      If equipe[1].point = A then 
       equipe[2].point = D 
       halt  
     
      If equipe[1].point = D then 
       equipe[2].point = A 
       halt  
     
     End; 
    End.

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    203
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2007
    Messages : 203
    Points : 146
    Points
    146
    Par défaut
    En bref, (très bref )

    comme vous le savez déjà votre variable équipe ou joueur sont des variables de type structure, un tableau de structure plus précisement.

    en pascal, une structure ce déclare comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    type NomDeStructure = record
      Membre1 : integer;
      Membre2 : string;
    end;
    Pour un tableau du type de votre structure :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    var Joueur : array[0..10] of NomDeStructure
     
    Joueur[0].Membre1 := 0;
    N.B : cela est à voir selon vos besoin (statique ou dynamique)

    et

    arrêter une boucle, c'est l'instruction :

    Après lecture rapide de votre code, le reste me semble ok

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 12
    Points : 6
    Points
    6
    Par défaut
    OK merci beaucoup !

  4. #4
    Rédacteur
    Avatar de darrylsite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 299
    Points : 2 501
    Points
    2 501
    Par défaut
    Ce ne code ne marche en aucun cas. la syntaxe de l' ecriture en pascal n' est pas respecté, pas de point virgule, ecriture des boucles for, ...
    je crois plutot que tu dois revoir ton cours sur le pascal sinon tu auras de serieux problemes.

  5. #5
    Membre éclairé Avatar de Tuxico
    Profil pro
    Étudiant
    Inscrit en
    Août 2003
    Messages
    662
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2003
    Messages : 662
    Points : 770
    Points
    770
    Par défaut
    arrêter une boucle, c'est l'instruction :

    Code :

    Break;

    déconseillé
    ★ Pascal/Java/C/xhtml,css/SQL/Mips
    ★ Linux/unix

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 12
    Points : 6
    Points
    6
    Par défaut
    déconseillé ?!
    Pourquoi ?

  7. #7
    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
    Foe,
    Citation Envoyé par emileprosky Voir le message
    déconseillé ?!
    Pourquoi ?
    Même question.
    Si les cons volaient, il ferait nuit à midi.

  8. #8
    Membre éclairé Avatar de Tuxico
    Profil pro
    Étudiant
    Inscrit en
    Août 2003
    Messages
    662
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2003
    Messages : 662
    Points : 770
    Points
    770
    Par défaut
    Sortir d'une boucle avant la fin de la condition d'arrêt rends par exemple plus difficile la maintenance ou la correction de programme.
    Le "break" rend faux l'invariant de boucle (c'est-à-dire c’est-à-dire une propriété qui est valide avant l’exécution d’un tour de boucle, est aussi valide au dernier tour de l’exécution du tour et pendant).

    Exemple basique:

    while(i<=10) do
    begin
    i++;
    end;

    Une partie serait : 1<=i<=10, hors i devrait valoir 11 après la boucle, ce qui devient faux avec le break

    Ce n'est que purement par soucis de propreté et/ou de lisibilité évidemment, au niveau du code en lui-même cela ne pose pas de problème

    De plus, il n'est pas plus difficile de mettre la condition d'arrêt à true
    ★ Pascal/Java/C/xhtml,css/SQL/Mips
    ★ Linux/unix

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 12
    Points : 6
    Points
    6
    Par défaut
    Bonjour. J'ai justement peut-être un problème avec ces fameux "break" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    begin
    procedure1;
    procedure2;
    procedure3;
    procedure4;
    end.
    Lorsque je lance mon programme, les procédures 1 et 2 s'executent sans problème, mais le programme refuse de passer à la suite (ici à la procédure 3).
    D'où est-ce que cela peut venir ? (sachant que dans la procédure 2, il y a quelques "break" ; mais je ne pense pas que cela intervienne en dehors de la procédure mais bon).

  10. #10
    Membre éclairé Avatar de Tuxico
    Profil pro
    Étudiant
    Inscrit en
    Août 2003
    Messages
    662
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2003
    Messages : 662
    Points : 770
    Points
    770
    Par défaut
    non cela ne doit pas venir des break

    peut-on voir ton code?
    ★ Pascal/Java/C/xhtml,css/SQL/Mips
    ★ Linux/unix

  11. #11
    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
    Gie,

    pour Tuxico :

    Je ne suis pas convaincu.

    Dans ton exemple, si tu veux forcer la sortie en mettant la condition de sortie à vrai, tu dois mettre i = 11.
    Et à la sortie de la boucle, plus rien ne te dis que la boucle a tourné sur tous les indices prévus. Bien sûr, on peut éviter ça en utilisant une autre variable... mais ça ne fait qu'alourdir.

    D'autre part, je ne dis pas qu'il faut l'utiliser systématiquement.
    Si les cons volaient, il ferait nuit à midi.

  12. #12
    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
    Dao,
    Citation Envoyé par Tuxico Voir le message
    peut-on voir ton code?
    +1, car avec ce que tu as posté au début...
    Si les cons volaient, il ferait nuit à midi.

  13. #13
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 12
    Points : 6
    Points
    6
    Par défaut
    Je voulais justement copier mon code. Mais je n'y arrive pas. J'utilise turbo pascal version 7 (ecran bleu, je m'y connais pas du tout). J'arrive pas a copier mon code et a le coller en dehors du logiciel turbo pascal. Comment il faut faire ?

  14. #14
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 12
    Points : 6
    Points
    6
    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
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    uses crt;  {clrscr; }
     
    type NomDeStructure = record
     
     
    nom : string ;
    point : integer;
    points_tie_break : integer ;
    sett :array [0..5] of integer ;   {equipe[i].set[j]=nbre de jeu de l'equipe i dans le j-iŠme set}
     
    end;
     
     
    var Joueur : array[0..4] of NomDeStructure;
    var equipe : array[0..2] of NomDeStructure;
    var Nbre_set : integer;
     
    var Nbre_joueur : integer;
    var h : integer;
     
    {**************************************************************************************}
     
    Procedure Nom_equipe;
    var i :integer;
    begin
     
              if Nbre_joueur = 4 then
     
                             Equipe[1].nom:= 'l''‚quipe '+ Joueur[1].nom + '/' + joueur[2].nom;
                             Equipe[2].nom:= 'l''‚quipe '+ Joueur[3].nom + '/' + joueur[4].nom;
     
              If Nbre_joueur = 2 then
                             for i:=1 to 2 do begin
                             Equipe[i].nom:=joueur[i].nom
                             end;
    writeln('fin Nom_equipe');
    end;
     
     
    {**************************************************************************************}
    Procedure Initialisation_score; {0 jeux marqu‚s}
    var i,j : integer;
    begin
        for j := 1 to Nbre_set do begin
            for i := 1 to 2 do begin
                equipe[i].sett[j]:=0;
            end;
        end;
    writeln('fin initialisation_score');
    end;
     
     
     
    {**************************************************************************************}
     
    Procedure Saisie_score; {saisie des jeux gagn‚s dans chaques sets}
    var i,j,l : integer;
    begin
    h:=Nbre_set;
    for j := 1 to Nbre_set do begin
        for i := 1 to 2 do begin
            equipe[2].sett[j]:=10; {empeche de quitter la boucle ; voir en dessous}
            If h<Nbre_set then
               begin
               break;
               end
               Else
               begin
               repeat
               writeln('combien de jeux ', Equipe[i].nom, ' a gagn‚ dans le set',j,'?');
               writeln('1,2,3,4,5,6,7, 9 si le set numero ',j,' n''a pas encore commenc‚');
               readln(equipe[i].sett[j])
               until equipe[i].sett[j] IN [1,2,3,4,5,6,7,9];
     
               if equipe[1].sett[j] = 9 then begin
                  equipe[2].sett[j]:= 9;
                  h:=j-1;
               end;
     
               if (equipe[1].sett[j]<6) and (equipe[2].sett[j]<6) then begin
                  h:=j;
               end;
     
               if (equipe[1].sett[j] = equipe[2].sett[j]) and  (equipe[1].sett[j]= 6) then begin
                  equipe[1].sett[j]:=8;    {8 egal tie break}
                  equipe[2].sett[j]:=8;
                  h:=j;
               end;
     
            end;
        end;
    end;
    writeln('fin saisie_score');
    end;
     
     
    {**************************************************************************************}
     
     
         Procedure Saisie_score_point; {saisie du nbre de point ds le dernier jeux ou tie break}
         var k : integer;
         begin
         for k:= 1 to 2 do begin
         If equipe[k].sett[h]=8  then
            repeat
            writeln ('Score', 'Equipe.nom[k]' , 'dans le dernier jeu en cours?');
            writeln ('0,15,30,40,1 pour egalite,2 pour avantage, 3 pour avantage a l''adversaire');
            Readln (equipe[k].point)
            until equipe[k].point in [0,15,30,40,1,2,3];
     
         if equipe[1].point = 1 then
            equipe[2].point := 3;
            break;
     
         if equipe[1].point = 2 then
            equipe[2].point := 3 ;
            break;
     
         If equipe[1].point = 3 then
            equipe[2].point := 2 ;
            break;
         end;
     
    end;
     
    {**************************************************************************************}
    Procedure Synthese_score; {affiche le score}
    var i,j :integer;
    begin
    writeln('bonjour la synthese');
        for j := 1 to Nbre_set do begin
            for i := 1 to 2 do begin
                writeln('set ', 'j','   ','equipe[i].sett[j]', ' jeux');
            end;
        end;
    writeln('fin synthese_score');
    end;
     
     
     
     
     
    {**************************************************************************************}
     
     
     
    BEGIN
    clrscr;
    Nbre_set :=5;
    Nbre_joueur :=4;
    Joueur[1].nom := 'olivier';
    Joueur[2].nom := 'laura';
    Joueur[3].nom := 'ANTOINE';
    Joueur[4].nom := 'jfb';
    writeln('bienvenue');
    Initialisation_score;
    Nom_equipe;
    Saisie_score;
    Synthese_score;
    END.

  15. #15
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 12
    Points : 6
    Points
    6
    Par défaut
    (désolé, j'ai pas su faire marcher la balise code apparemment)
    Sinon, c'est apres la procedure "Saisie_score" que ca s'arrete.
    Merci.

  16. #16
    Membre éclairé Avatar de Tuxico
    Profil pro
    Étudiant
    Inscrit en
    Août 2003
    Messages
    662
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2003
    Messages : 662
    Points : 770
    Points
    770
    Par défaut
    @droggo: oui, je me suis mal exprimé, je ne voulais pas dire qu'il ne faut jamais l'utiliser mais dans son cas cela me semble impropre.
    ★ Pascal/Java/C/xhtml,css/SQL/Mips
    ★ Linux/unix

Discussions similaires

  1. [TP] La structure d'enregistrement en Turbo Pascal
    Par Iheb Design dans le forum Turbo Pascal
    Réponses: 1
    Dernier message: 08/10/2007, 17h48
  2. [VB6] [Crystal] Selection enregistrement
    Par littlecow dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 11/01/2005, 13h08
  3. [BDD] Enregistrer le résultat d'une requête
    Par Mowgly dans le forum C++Builder
    Réponses: 5
    Dernier message: 19/06/2002, 15h26
  4. enregistrer dans un fichier avec une appli mdi
    Par ferrari dans le forum C++Builder
    Réponses: 4
    Dernier message: 05/05/2002, 15h17

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