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

Free Pascal Discussion :

Enumération pour drapeau hollandais [Free Pascal]


Sujet :

Free Pascal

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2009
    Messages : 34
    Par défaut Enumération pour drapeau hollandais
    Bonjour à tous.

    J'ai une nouvelle fois un petit problème lors de la compilation.
    Voici mon code:

    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
    type couleur=(Bleu,Blanc,Rouge);
     
    procedure ChargeTab(var t:array of couleur;var long:integer);
    var k:integer;
    begin
    	writeln('Veuillez indiquer la longueur du tableau: ');
    	readln(long);
    	writeln('Veuillez introduire les couleurs dans le tableau: ');
    	for k:=1 to long do
    			readln(t[k]); (* Ici, lors de la compilation, 
    le compilateur me renvoie cette erreur: Can't read or write variables of this type*)
     
    	end;
     
    procedure echange(var x,y:couleur);
    var temp:couleur;
    begin
    	temp:=x;
    	x:=y;
    	y:=temp;
    end;
     
    procedure DrapeauHollandais(var t:array of couleur;n:integer; var dbl,dr:integer);
    var k:integer;
    begin
    	dbl:=0;k:=0;dr:=n-1;
    	while (k<dr) do
    		begin
    			if (t[k]=Bleu) then
    				begin
    					echange (t[k],t[dbl]);
    					inc(dbl);inc(k);
    				end
    			else if (t[k]=Blanc) then
    				inc(k)
    			else
    				begin
    					echange(t[k],t[dr]);
    					dec(dr);
    				end;
    		end;
    end;
     
    procedure afficheTab(const t:array of couleur;const long:integer);
    var k:integer;
    begin
    	for k:=1 to long do
    		write(t[k],'   ');
    	writeln;
    end;
     
     
    var t:Array of couleur; n,dbl,dr:integer;
    begin (* Programme principal*)
    	ChargeTab(t,n);
    	afficheTab(t,n);
    	DrapeauHollandais(t,n,dbl,dr);
    	afficheTab(t,n);
    end.
    Merci une nouvelle fois de me lire

  2. #2
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 962
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 962
    Par défaut
    Bie,

    L'erreur est pourtant explicite.

    On ne peut pas lire ainsi la valeur d'une variable de type énuméré.

    Le plus simple est de simplement utiliser des Integer ou des Byte.

    D'autre part, la taille de ton tableau n'est jamais précisée, et en Pascal basique, on ne peut pas la modifier lors de l'exécution.

    Et de plus, évite d'utiliser constamment array of couleur, déclare un type.

    Et en supplément, au lieu de remplir ton tableau manuellement, fait le remplir automatiquement par une procédure, ou encore mieux, donne le choix pour la méthode à utiliser

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2009
    Messages : 34
    Par défaut
    Je devais juste écrire l'algorithme de Dijkstra en Pascal, donc pour le choix de l'utilisateur quant au type de remplissage du tableau (manuel ou au hasard), c'est pas ça le plus important.
    J'ai essayé avec un tableau de string ça marche... Mais je ne trouve toujours pas la solutions avec un type énuméré.
    Il faudrait que je convertis les valeurs du type énuméré en leur représentation sous forme de chaîne de caractères.


    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
    unit Utab;
     
    interface
     
    type Ttab=array[1..9] of string;
    procedure ChargeTab(var t:Ttab;var long:integer);
    procedure afficheTab(const t:Ttab;const long:integer);
     
    implementation
     
    procedure ChargeTab(var t:Ttab;var long:integer);
    var k:integer;
    begin
    	writeln('Veuillez indiquer la longueur du tableau: ');
    	readln(long);
    	writeln('Veuillez introduire les couleurs dans le tableau: ');
    	for k:=1 to long do
    		readln(t[k]);
    end;
     
    procedure afficheTab(const t:Ttab;const long:integer);
    var k:integer;
    begin
    	for k:=1 to long do
    		write(t[k],'   ');
    	writeln;
    end;
     
    begin
    	randomize
    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
     
    program Untitled;
    uses UTab;
     
    procedure echange(var x,y:string);
    var temp:string;
    begin
    	temp:=x;
    	x:=y;
    	y:=temp;
    end;
     
    procedure DrapeauHollandais(var t:Ttab;n:integer; var dbl,dr:integer);
    var k:integer;
    begin
    	dbl:=1;
    	k:=1;
    	dr:=n;
    	while (k<=dr) do
    		begin
    			if (t[k]='Bleu') then
    				begin
    					echange (t[k],t[dbl]);
    					inc(dbl);
    					inc(k);
    				end
    			else if (t[k]='Blanc') then
    				inc(k)
    			else
    				begin
    					echange(t[k],t[dr]);
    					dec(dr);
    				end;
    		end;
    end;
     
     
    var t:Ttab; n,dbl,dr:integer;
    begin
    	ChargeTab(t,n);
    	afficheTab(t,n);
    	DrapeauHollandais(t,n,dbl,dr);
    	afficheTab(t,n);
    end.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Sujet sur la hauteur d'un mât pour drapeau
    Par beness67 dans le forum La taverne du Club : Humour et divers
    Réponses: 13
    Dernier message: 11/03/2015, 19h47
  2. Machine de Turing : problème du drapeau hollandais
    Par Chido42 dans le forum Algorithmes et structures de données
    Réponses: 9
    Dernier message: 11/10/2012, 10h54
  3. Enumérer les sources vidéos pour capture
    Par bsdocuments dans le forum Composants VCL
    Réponses: 1
    Dernier message: 11/12/2007, 06h43
  4. Cherche code source pour animer un drapeau
    Par Osiris-FR dans le forum OpenGL
    Réponses: 5
    Dernier message: 26/11/2007, 16h07
  5. Réponses: 29
    Dernier message: 02/04/2007, 01h14

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