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 :

Créer un tableau/liste d'objets


Sujet :

Langage Pascal

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

    Informations forums :
    Inscription : Avril 2008
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Créer un tableau/liste d'objets
    Tout d'abord bonjour les gens.

    Voila, j'ai un projet a faire. Il faut creer un rectangle sur le graphe (rectangle qui symbolise un champs) et des animaux ( en objet).

    Les animaux se déplacent alors aléatoirement dans le champs et on comptabilise le nombre de fois qu'ils ont heurté le mur.

    Jusque la pas de problemes. J'ai créé une unitée pour "gerer les deplacements d'un animal" une autre pour rentrer ses caractéristiques.

    L'utilisateur est alors libre de choisir le nombre d'animaux qu'il veut... simplement je n'arrive a appliquer l'ensemble de mes fonctions/procedures a seulement un seul animal.

    En fait je voudrais savoir comment creer un tableau/liste d'objet sous pascal.


    ps : j'utilise ipcute comme compilateur

  2. #2
    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 peux faire un tableau de n'importe quoi, avec la déclaration habituelle :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var animaux: array[1..10] of TAnimal;
    Utilises-tu des pointeurs ?
    M.Dlb - Modérateur z/OS - Rédacteur et Modérateur Pascal

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

    Informations forums :
    Inscription : Avril 2008
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    voila mon programme, en fait il ne veut pas me prendre en compte des tableaux, ils ne passent pas avec le animal.init et animal.new

    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
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    unit U_questions_animaux;    // on va creer les procedures/fonctions qui nous permettent de rentrer les caractéristiques d'un animal en vérifiant que l'utilisateur rentre bien les bonnes données
     
    interface
     
    procedure couleur_animal;
    procedure taille_animal;
    procedure vitesse_animal;
    procedure position_x;
    procedure position_y;
     
    implementation
     
     
    procedure Saisir_entier(a:string; var x:real);     //procedure privée qui vérifie si l'utilisateur rentre bien un nombre entier (pour les coordonnées, le nombre d'animaux dans la ferme, la taille etc...)
    var s:string; code:integer;
    begin
        repeat
            write(a);
            readln(s);
                val(s,x,code);
                if code > 0 then
                    writeln('Cette donnée n''est pas un entier ! ')
                else
                    x:=trunc(x);
        until code = 0;
    end;
     
    procedure taille_animal; // demandons une taille entre 3 et 10
    var taille1:real;
    begin
         repeat
               saisir_entier('quelle est la taille de l''animal ? (merci de choisir une valeur entre 3 et 10)',taille1);
               if (taille1<3) and (taille1>10) then
                  writeln('la taille ne respecte pas les valeurs demandées.');
         until (taille1>=3) and (taille1<=10);
    end;
     
    procedure couleur_animal; // demandons une valeur pour la couleur
    var couleur1:real;
    begin
         repeat
               saisir_entier('quelle est la couleur de l''animal ? (choisir un entier entre 0 et 15)',couleur1);
               if (couleur1<0) and (couleur1>15) then
                  writeln('les valeurs pour les couleurs ne respectent pas les valeurs demandées.');
         until (couleur1>=3) and (couleur1<=15);
    end;
     
    procedure vitesse_animal; // demandons une vitesse (nous n'imposerons aucune contrainte sur la vitesse).
    var couleur1:real;
    begin
         saisir_entier('quelle est la vitesse de l''animal ? (de préférence un entier proche de la taille)',couleur1);
    end;
     
    procedure position_x; // positionnons l'animal vis a vis de x
    var x:real;
    begin
         repeat
               saisir_entier('quelle est la position vis a vis de x ? (choisir un nombre entre 10 et 600)',x);
               if (x<10) and (x>600) then
                  writeln('la valeur pour x ne respecte pas les valeurs demandées.');
         until (x>=10) and (x<=600);
    end;
     
    procedure position_y; // positionnons l'animal vis a vis de x
    var y:real;
    begin
         repeat
               saisir_entier('quelle est la position vis a vis de y ? (choisir un nombre entre 10 et 450)',y);
               if (y<10) and (y>450) then
                  writeln('la valeur pour y ne respecte pas les valeurs demandées.');
         until (y>=10) and (y<=450);
    end;
     
    end.
     
     
     
     
    //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
     
     
     
    unit U_FARM;
     
    interface
    uses graph;
     
    const xmin=10; // on définit les bords du champ
    const xmax=600;
    const ymin=10;
    const ymax=450;
     
    type animal = class   // creation de la classe animal
         private
                taille:integer; //taille du cercle qui représente l'animal
                couleur:integer;// couleur de l'animal sur l'ecran graphique
                vitesse:integer; // vittesse de deplacement de l'animal
                cri:string; // le cri de l'animal
                x:integer; // position vis a vis de x
                xtest:boolean; // pour savoir si l'animal peut se deplacer par rapport a x
                y:integer; // position vis a vis de y
                ytest:boolean;// pour savoir si l'animal peut se deplacer par rapport a y
                nb_colisions:integer; // nombre de fois que la bestiole a cogné le mur
                genre:string;// genre de l'animal (cochon, vache...)
                nom:string;// nom de l'animal (Benjamin, Malabar... )
         public
                procedure init(a_taille,a_couleur,a_vitesse,a_x,a_y: integer; a_genre,a_nom,a_cri:string ); override; overlook; // procedure pour initialiser l'animal avec ttes ses caractéristiques
                procedure tr_a_inst_t;
                procedure deplacement;
                procedure test_mvt_x;
                procedure test_mvt_y;
                procedure deplacement1;
                procedure deplacement2;
                procedure deplacement3;
                procedure place_bord;
         end;
     
    implementation
     
     
    procedure animal.init(a_taille,a_couleur,a_vitesse,a_x,a_y: integer; a_genre,a_nom,a_cri:string );
    begin
    super.init;
    cri:=a_cri;
    taille := a_taille;
    couleur := a_couleur;
    vitesse := a_vitesse;
    x := a_x;
    xtest:=true;
    ytest:=true;
    y := a_y;
    nb_colisions := 0;
    genre := a_genre;
    nom := a_nom;
    end;
     
    procedure animal.tr_a_inst_t; // procedure pour représenter a un instant t l'animal sur le graphique
    begin
    setcolor(couleur);
    circle(x,y,taille);
    outtextxy(x,(y-2*taille),nom);
    end;
     
    procedure animal.test_mvt_x; // procedure pour tester si l'animal peut se déplacer par rapport a "x". (savoir s'il va sortir du cadre)
    begin
    if (x-taille<=xmin) or (x+taille>=xmax) then
        xtest:=false
    else
        xtest:=true;
    end;
     
    procedure animal.test_mvt_y; // procedure pour tester si l'animal peut se déplacer par rapport a "y". (savoir s'il va sortir du cadre)
    begin
    if (y-taille<=ymin) or (y+taille>=ymax) then
        ytest:=false
    else
        ytest:=true;
    end;
     
    procedure animal.deplacement; // procedure qui va déplacer l'animal suivant sa vitesse.(deplacement de ce type seulement si le deplacement precedent n'a pas créé de colision)
    begin
    if (xtest=true) and (ytest=true) then
       begin
            x:= x+((1-random(3))*vitesse); //par rapport à sa position "x" l'animal bouge d'une unitée(vitesse) à gauche ou à droite ou reste sur place (pour brouter de l'herbe?!)
            y:= y+((1-random(3))*vitesse); // de meme par rapport a y
       end;
    end;
     
    procedure animal.place_bord; // procedure pour placer un animal sur le bord quand le deplacement dépasse le cadre
    begin
    if (x-taille<=xmin) then
       begin
            x:=xmin;
            nb_colisions:=nb_colisions+1;
       end;
    if (x+taille>=xmax) then
       begin
            x:=xmax;
            nb_colisions:=nb_colisions+1;
       end;
    if (y-taille<=ymin) then
       begin
            y:=ymin;
            nb_colisions:=nb_colisions+1;
       end;
    if (y+taille>=ymax) then
       begin
            y:=ymax;
            nb_colisions:=nb_colisions+1;
       end;
    end;
     
    procedure animal.deplacement3;  // procedure pour deplacer un animal quand il est dans un coin
    begin
    if (xtest=false) and (ytest=false) then
       begin
            if (x=xmax) and (y=ymax) then
               begin
                    x:=x-taille-vitesse;
                    y:=y-taille-vitesse;
               end;
            if (x=xmax) and (y=ymin) then
               begin
                    x:=x-taille-vitesse;
                    y:=y+taille+vitesse;
               end;
            if (x=xmin) and (y=ymin) then
               begin
                    x:=x+taille+vitesse;
                    y:=y+taille+vitesse;
               end;
            if (x=xmin) and (y=ymax) then
               begin
                    x:=x+taille+vitesse;
                    y:=y-taille-vitesse;
               end;
       end;
    end;
     
    procedure animal.deplacement1; //procedure qui déplace l'animal quand il a heurté un bord en "x"
    begin
    if (xtest=false) and (ytest=true) then
       begin
            if x=xmax then
               x:=x-taille-vitesse;
            if x=xmin then
               x:=x+taille+vitesse;
            y:= y+((1-random(3))*vitesse);
       end;
    end;
     
    procedure animal.deplacement2; //procedure qui déplace l'animal quand il a heurté un bord en "y"
    begin
    if (xtest=true) and (ytest=false) then
       begin
            if y=ymax then
               y:=y-taille-vitesse;
            if y=ymin then
               y:=y+taille+vitesse;
            x:= x+((1-random(3))*vitesse);
       end;
    end;
    end.
     
     
     
     
    ///////////////////////////////////////////////////////////////////////////////////////////////////:
     
     
     
     
    program  farm;
    uses graph,U_FARM,U_QUESTIONS_ANIMAUX;
     
     
    var lamina:animal;
        n,i,size1,color,x1,y1,speed,j:integer;
        typee,name,cry:string;
     
    begin
    writeln('all animals are equals but some animals are more equal than other');
    writeln('');
    writeln('********* animal farm *********');
    writeln('');
    writeln('combien voulez vous d''animaux dans votre ferme? (merci de ne pas en choisir plus de 4');
    readln(n);
    for i:=1 to n do
        begin // on supposera que l'utilisateur est apte a rentrer les bonnes données
             lamina:= animal.new;
             writeln('quel est le type de l''animal ? (cochon...)');
             readln(typee);
             writeln('quel est le nom de l''animal ?');
             readln(name);
             taille_animal;
             readln(size1);
             couleur_animal;
             readln(color);
             vitesse_animal;
             readln(speed);
             position_x;
             readln(x1);
             position_y;
             readln(y1);
             writeln('quelle est le cri de l''animal ?');
             readln(cry);
             lamina.init(size1,color,speed,x1,y1,typee,name,cry);
        end;
    cleardevice;
    setcolor(10);
    {setfillstyle(7,13);}
    rectangle(10,10,600,450);
    for j:=1 to 1000 do
    begin
    lamina.tr_a_inst_t;
    lamina.test_mvt_x;
    lamina.test_mvt_y;
    lamina.deplacement;
    lamina.deplacement1;
    lamina.deplacement2;
    lamina.deplacement3;
    lamina.place_bord;
    end;
    end.

  4. #4
    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
    Euh, ce que tu fais n'a pas de sens. Veux-tu utiliser New ? New alloue de l'espace mémoire sur le tas, c'est à utiliser avec des pointeurs. Si tu utilises des tableaux d'objets, tu n'as pas besoin de faire de New, puisque l'espace mémoire est déjà alloué (dans le segment data).
    M.Dlb - Modérateur z/OS - Rédacteur et Modérateur Pascal

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

    Informations forums :
    Inscription : Avril 2008
    Messages : 3
    Points : 1
    Points
    1
    Par défaut re
    a ce moment la, je veux bien passer par les poiteurs, mais je ne sais pas trop comment faire.

    merci de votre réponse

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

    Informations forums :
    Inscription : Avril 2008
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    salut, je suis dans ta classe de L2 math.
    je suppose que tu a télécharger ipcute a partir du site du prof.
    Si c'est le cas, ca explique le message d'erreur qui s'affiche, j'ai eu le meme.
    Il se peut que le probleme ne vienne pas de ton programme mais d'ipcute. la version téléchargable ne pren pas en compte les classes.

    Je ne te garanti pas que ca marchera après mais en tout cas j'avai les memes message d'erreur...

Discussions similaires

  1. Créer une liste d'objet spécifiques
    Par Lidden dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 03/02/2008, 10h26
  2. créer un tableau d'objets
    Par abiraa dans le forum C++
    Réponses: 36
    Dernier message: 15/04/2007, 11h51
  3. Créer un tableau de liste de string
    Par nobeone dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 06/04/2007, 14h58
  4. Créer un tableau de listes en c++
    Par Dark-Water dans le forum C++
    Réponses: 15
    Dernier message: 26/06/2006, 21h16
  5. Créer une liste d'objets statiques dans une classe
    Par crossbowman dans le forum C++
    Réponses: 3
    Dernier message: 13/03/2006, 09h11

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