Pascal Objet, au secours !!!

Pascal Objet, au secours !!! - Programmation

Marsh Posté le 02-05-2001 à 13:26:42    

Comment fait-on pour déclarer une structure "record" dans une classe ? et comment l'affecter à un tableau ? J'ai fait cet exemple que je n'arrive pas à compiler :
 
unit bibstock;
 
interface
uses crt, drivers;
 
type
 
        cVehic = object
 
 stockVehic : record
  modele : string[20];
  marque : string[20];
  immatr : string[20];
  anImmatr : integer;
  prixVente : real;
 end;
 
 
 typTabVeh : array[1..500] of stockVehic;
 
 
 procedure saitab(var tabVeh : typTabVeh);
 procedure affichSuivModel(tablo : typTabVeh);
 procedure affichSuivPrix(tablo : typTabVeh);
 procedure insert;
 procedure delete;
end;
 
implementation
 
procedure cVehic.saitab(var tabVeh : typTabVeh);
var
 i, n : integer;
 rep : string;
begin
 i := 1;
 n := 500;
 while i <= n do
  begin
   with tabVeh[i] do
    begin
     write ('MODELE : '); readln (modele);
     write ('MARQUE : '); readln (marque);
     write ('IMMATRICULATION : '); readln (immatr);
     write ('ANNEE D'IMMATRICULATION : '); readln (anImmatr);
     write ('PRIX DE VENTE : '); readln (prixVente);
    end;
   repeat
    write ('Voulez-vous référencer un autre véhicule ? (O/N) '); readln (rep);
   until (rep='O') or (rep='o') or (rep='n') or (rep='N');
   if (rep='n') or (rep='N') then
    begin
     n := i;
    end;
   i := i+1;
  end;
end;
end.

Reply

Marsh Posté le 02-05-2001 à 13:26:42   

Reply

Marsh Posté le 02-05-2001 à 20:16:34    

Huh?? :??:  
 
Dis donc, désolé de commencer par critiquer, mais ça serait bien de l'indenter un peu mieux, ton programme. Parce que j'ai mis un certain temps à comprendre où commençaient et où finissaient certains blocs...
 
Ca c'est un peu mieux... :D

Code :
  1. unit bibstock;
  2. interface
  3. uses crt, drivers;
  4. type cVehic = object
  5.                 stockVehic : record
  6.                                modele    : string[20];
  7.                                marque    : string[20];
  8.                                immatr    : string[20];
  9.                                anImmatr  : integer;
  10.                                prixVente : real;
  11.                              end; { record }
  12.                 typTabVeh :array[1..500] of stockVehic;
  13.                 procedure saitab(var tabVeh : typTabVeh);
  14.                 procedure affichSuivModel(tablo : typTabVeh);
  15.                 procedure affichSuivPrix(tablo : typTabVeh);
  16.                 procedure insert;
  17.                 procedure delete;
  18.               end; { object }
  19. implementation
  20. procedure cVehic.saitab(var tabVeh : typTabVeh);
  21. var i, n : integer;
  22.     rep : string;
  23. begin
  24.    i := 1;
  25.    n := 500;
  26.    while (i <= n) do begin
  27.       write ('MODELE : ');                   readln (tabVeh[i].modele);
  28.       write ('MARQUE : ');                   readln (tabVeh[i].marque);
  29.       write ('IMMATRICULATION : ');          readln (tabVeh[i].immatr);
  30.       write ('ANNEE D''IMMATRICULATION : '); readln (tabVeh[i].anImmatr);
  31.       write ('PRIX DE VENTE : ');            readln (tabVeh[i].prixVente);
  32.       repeat
  33.          write ('Voulez-vous référencer un autre véhicule ? (O/N) ');
  34.          readln (rep);
  35.       until (rep='O') or (rep='o') or (rep='n') or (rep='N');
  36.       if (rep='n') or (rep='N') then begin
  37.          n := i;
  38.       end; { if }
  39.       i := i + 1;
  40.    end; { while }
  41. end; { cVehic.saitab }
  42. end. { unit }


En reformattant le code, j'ai remarqué j'ai remarqué qu'il manquait une apostrophe dans le "write ('ANNEE D''IMMATRICULATION : ');" Eh, oui, l'apostrophe doit être doublée pour pouvoir être affichée.
 
Sinon, je n'aime pas trop les types anonymes. Je te conseille fortement de définir un type nommé pour ton tableau et ton enregistrement dans ton objet. Evite aussi les "with", contrairement à ce qu'on pourrait croire, ça ne facilite pas la lisibilité (au contraire).
 
Au fait, question bête : c'est quoi, ton erreur de compilation ? :D

 

[edit]--Message édité par BifaceMcLeOD--[/edit]

Reply

Marsh Posté le 02-05-2001 à 20:40:19    

J'ai regardé un peu ton code (enfin, celui que j'ai reformatté), et je me dis qu'il y a quand même un petit problème... de conception.
Et effectivement, j'ai compris l'erreur de compilation.
 
A quoi il te sert ton objet ? Pourquoi tu passes un tableau à une des méthodes de l'objet, alors que tu l'as déjà dans l'objet, le tableau en question. A mon avis, le code correct aurait été de définir 2 objets : un "Vehicule" et un "StockVehicule", comme suit :

Code :
  1. unit bibstock;
  2. interface
  3.    uses crt, drivers;
  4.    const maxStock = 500;
  5.    type cVehic = object
  6.                     modele    : string[20];
  7.                     marque    : string[20];
  8.                     immatr    : string[20];
  9.                     anImmatr  : integer;
  10.                     prixVente : real;
  11.                     procedure saisie;
  12.                  end; { object }
  13.    type cStockVehic = object
  14.                          stock    : array[1..maxStock] of stockVehic;
  15.                          numVehic : integer;
  16.  
  17.                          procedure saisieTab;
  18.                          procedure affichSuivModel;
  19.                          procedure affichSuivPrix;
  20.                          procedure insert;
  21.                          procedure delete;
  22.                       end; { object }
  23. implementation
  24.    procedure cVehic.saisie;
  25.    begin
  26.       write ('MODELE : ');                   readln (self.modele);
  27.       write ('MARQUE : ');                   readln (self.marque);
  28.       write ('IMMATRICULATION : ');          readln (self.immatr);
  29.       write ('ANNEE D''IMMATRICULATION : '); readln (self.anImmatr);
  30.       write ('PRIX DE VENTE : ');            readln (self.prixVente);
  31.    end; { cVehic.saisie }
  32.    procedure cStockVehic.saisieTab;
  33.    var fin : boolean;
  34.        rep : string;
  35.    begin
  36.       fin           := false;
  37.       self.numVehic := 0;
  38.       repeat
  39.          Inc (self.numVehic);
  40.          self.stock[self.numVehic].saisie;
  41.          if (self.numVehic < maxStock) then begin
  42.             repeat
  43.                write ('Voulez-vous référencer un autre véhicule ? (O/N) ');
  44.                readln (rep);
  45.             until (rep='O') or (rep='o') or (rep='n') or (rep='N');
  46.             fin := ((rep='n') or (rep='N'));
  47.          end
  48.          else begin
  49.             fin := true;
  50.          end; { if }
  51.       until (fin);
  52.    end; { cStockVehic.saisieTab }
  53. end. { unit }


Mes souvenirs de Pascal sont très lointains, et j'ai arrêté de programmer en Pascal au moment où les extensions objet sont sorties. Donc je ne suis pas 100% sûr que c'est "self" qu'il faut utiliser, mais si ce n'est pas ce mot-là, le mot réservé qui fait la même chose ne doit pas être très différent (par exemple, d'autres langages comme C++ ou Java utilisent "this" pour cet usage).

 

[edit]--Message édité par BifaceMcLeOD--[/edit]

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed