Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2384 connectés 

  FORUM HardWare.fr
  Programmation

  Pascal Objet, au secours !!!

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Pascal Objet, au secours !!!

n°28774
Riton
Posté le 02-05-2001 à 13:26:42  profilanswer
 

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.

mood
Publicité
Posté le 02-05-2001 à 13:26:42  profilanswer
 

n°28865
BifaceMcLe​OD
The HighGlandeur
Posté le 02-05-2001 à 20:16:34  profilanswer
 

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]

n°28866
BifaceMcLe​OD
The HighGlandeur
Posté le 02-05-2001 à 20:40:19  profilanswer
 

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]


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation

  Pascal Objet, au secours !!!

 

Sujets relatifs
Au Secours sur VB6Delphi vs Turbo Pascal
[ASP] Pb avec un script JavaScript : Objet AttenduCa urge, j'ai besoin d'un puissance 4 en pascal avec l'IA
[ASP] [BDD] AU SECOURS !!!Tutoriels PASCAL
[pascal] quel est la com pour convertir un fichier Ttexte en tstring ?exercice programation turbo pascal
[Pascal] App DOS en plein écran !?[PHP] Au secours, grand méchant mâitre (de stage) va me bouffer tt cru
Plus de sujets relatifs à : Pascal Objet, au secours !!!


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR