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

Résolu
John Dogget Messages postés 384 Date d'inscription vendredi 18 juin 2004 Statut Membre Dernière intervention 7 mai 2009 - 11 nov. 2007 à 15:01
cedricbi Messages postés 185 Date d'inscription mercredi 18 décembre 2002 Statut Membre Dernière intervention 21 mars 2011 - 12 nov. 2007 à 19:13
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

cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
11 nov. 2007 à 22:33
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
3
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
11 nov. 2007 à 19:04
 comme ceci :

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

cantador
0
John Dogget Messages postés 384 Date d'inscription vendredi 18 juin 2004 Statut Membre Dernière intervention 7 mai 2009
11 nov. 2007 à 19:10
Ca ressemble beaucoup à une déclaration d'un tableau constant, or c'est pas ce que je veux faire
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
11 nov. 2007 à 20:01
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cedricbi Messages postés 185 Date d'inscription mercredi 18 décembre 2002 Statut Membre Dernière intervention 21 mars 2011
11 nov. 2007 à 21:24
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 !
0
John Dogget Messages postés 384 Date d'inscription vendredi 18 juin 2004 Statut Membre Dernière intervention 7 mai 2009
11 nov. 2007 à 21:53
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
0
John Dogget Messages postés 384 Date d'inscription vendredi 18 juin 2004 Statut Membre Dernière intervention 7 mai 2009
11 nov. 2007 à 22:40
Si c'est bon
Mais tu confirmes ce que je pensais, ce que je veux n'est pas possible avec Delphi ...

@ +
0
Utilisateur anonyme
11 nov. 2007 à 22:53
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.

@++
0
John Dogget Messages postés 384 Date d'inscription vendredi 18 juin 2004 Statut Membre Dernière intervention 7 mai 2009
11 nov. 2007 à 23:04
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
0
Utilisateur anonyme
11 nov. 2007 à 23:19
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 )
0
John Dogget Messages postés 384 Date d'inscription vendredi 18 juin 2004 Statut Membre Dernière intervention 7 mai 2009
11 nov. 2007 à 23:28
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)
0
Utilisateur anonyme
12 nov. 2007 à 08:21
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é
0
John Dogget Messages postés 384 Date d'inscription vendredi 18 juin 2004 Statut Membre Dernière intervention 7 mai 2009
12 nov. 2007 à 17:33
J'ai pas dis que c'etait plus efficace copain Francky, j'ai dis que c'est plus simple à écrire
0
cedricbi Messages postés 185 Date d'inscription mercredi 18 décembre 2002 Statut Membre Dernière intervention 21 mars 2011
12 nov. 2007 à 19:13
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 !
0
Rejoignez-nous