Initialiser tous les éléments d'un tableau en même temps ? [Résolu]

Signaler
Messages postés
384
Date d'inscription
vendredi 18 juin 2004
Statut
Membre
Dernière intervention
7 mai 2009
-
Messages postés
185
Date d'inscription
mercredi 18 décembre 2002
Statut
Membre
Dernière intervention
21 mars 2011
-
Bonjour.

J'ai un tableau à une dimension déclaré comme ça :

    Coordonnees:array[1..2] of byte;

Je voudrais savoir comment écrire une fonction qui initialise les deux élements du tableau en même temps, sans passer par

    Coordonnees[1]:= ...
    Coordonnees[2]:= ...

J'ai essayé Coordonnees:=(1,1) et Coordonnees:=((1),(1)), la syntaxe ne va pas

Est ce possible ?
So oui, comment faire ?

14 réponses

Messages postés
4719
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
1 février 2021
14
En admettant que les valeurs x et y (5 et 8)sont lues quelque part..

procedure InitTableau(var x, y : integer);
begin
Coordonnees[1] := 5;
Coordonnees[2] := 8;
end;

ou encore

for i:= low(Coordonnees) to high(Coordonnees) do
Coordonnees[i] :=  tu peux écrire ici une formule qui calcule les deux valeurs en fonction de i.

Je ne sais si on va arriver à te vendre quelque chose ce soir !

cantador
Messages postés
4719
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
1 février 2021
14
 comme ceci :

Coordonnees: array[1..2] of byte = (4, 7);

cantador
Messages postés
384
Date d'inscription
vendredi 18 juin 2004
Statut
Membre
Dernière intervention
7 mai 2009

Ca ressemble beaucoup à une déclaration d'un tableau constant, or c'est pas ce que je veux faire
Messages postés
4719
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
1 février 2021
14
Alors c'est pas vraiment une initialisation par défaut.
Tu veux pouvoir maîtriser les deux premières valeurs de ton tableau.
Mais tu parles de fonction..
Une fonction ça renvoie une valeur et donc c'est pas ce que tu veux faire..
Il vaudrait mieux dire procédure..
A moins que tu souhaites que ta fonction initialise ton tableau
avec deux  valeurs en paramètres ?
Mais je n'ai peut-être pas tout compris..

?

cantador
Messages postés
185
Date d'inscription
mercredi 18 décembre 2002
Statut
Membre
Dernière intervention
21 mars 2011

Si tu veux initialiser tout ton tableau avec la même valeur, que se tableau n'a qu'une dimension et ce soit un tableau de Byte ou Char (ça fait beaucoup de conditions...)
Tu peux utiliser :
FillMemory(@MonTableau[Low(MonTableau)], SizeOf(MonTableau), ValeurARemplir);

<hr />Le plus dur dans un programme c'est de savoir pourquoi il marche !
Messages postés
384
Date d'inscription
vendredi 18 juin 2004
Statut
Membre
Dernière intervention
7 mai 2009

Re

@ cantador
C'est vrai que j'ai fait une confusion sur les mots ...

Pour reprendre ton exemple "Coordonnees: array[1..2] of byte = (4, 7);"
J'initialise à 4 et 7 les éléments du tableaux au moment de la déclaration du tableau.

Maintenant si je veux remplir mon tableau après sa déclaration dans une fonction ou une procedure, est'il possible de faire la même chose ?
Par exemple mettre les valeur 5 et 8 dans mon tableau, sans passer par Coordonnees[1] et Coordonnees[2].

@ cedricbi
Ca correspond pas à ce que je voudrais faire, mais merci quand même
Messages postés
384
Date d'inscription
vendredi 18 juin 2004
Statut
Membre
Dernière intervention
7 mai 2009

Si c'est bon
Mais tu confirmes ce que je pensais, ce que je veux n'est pas possible avec Delphi ...

@ +

Salut,

Attention aux notations trompeuses de certains langages : Ce genre de chose
Coordonnees:=(1,1) n'indique pas que les deux éléments de ton tableau sont affectés en meme temps mais demande  à attriber la valeur 1 au premier puis 1 au second. Autrement dit c'est parfaitement équivalent à

Coordonnees[1] := 1;
Coordonnees[2] := 1;

Je te rappelle que le multi tache de windows est plus une illusion John.

@++
Messages postés
384
Date d'inscription
vendredi 18 juin 2004
Statut
Membre
Dernière intervention
7 mai 2009

Oui mais ça marche pas dans mon code, autrement dit dans mon code ...

Coordonnees : = (5,6) n'equivaut pas à

Coordonnees[1] : = 5 et
Coordonnees[2] : = 6

Le compilo n'en veut pas

Ou alors j'ai (encore) pas tout pigé ...
Delphi en auto-didacte, c'est pas tous les jours evidents

Je sais que Coordonnees : = (5,6)  Delphi en veut pas; je parlais des autres langages.

Candator : je retourne bosser un ptit peu . Je suis entrain de faire une ptite surprise à Cari avec des Kinders Suicides (Son groupe de Punk je parle )
Messages postés
384
Date d'inscription
vendredi 18 juin 2004
Statut
Membre
Dernière intervention
7 mai 2009

Pas de solution en effet, mais par contre l'interet c'est de simplifier l'écriture du code (moins de lignes à écrire pour faire la même chose)

Alors là je te renvois au magnifique tuto de Cari (que j'ai découvert hier) ou il montre clairement qu'il n'y a aucun lien entre la longueur d'un code et son efficacité
Messages postés
384
Date d'inscription
vendredi 18 juin 2004
Statut
Membre
Dernière intervention
7 mai 2009

J'ai pas dis que c'etait plus efficace copain Francky, j'ai dis que c'est plus simple à écrire
Messages postés
185
Date d'inscription
mercredi 18 décembre 2002
Statut
Membre
Dernière intervention
21 mars 2011

Peut-être qu'une autre solution est de faire une constante par exemple InitTableau : array[1..5] of Byte = (1, 2, 5, 7, 9); puis de mettre au début de ta procédure : MonTableau := InitTableau... Et de cette manière, on a pas un code trop lourd.

<hr />Le plus dur dans un programme c'est de savoir pourquoi il marche !