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

John Dogget 390 Messages postés vendredi 18 juin 2004Date d'inscription 7 mai 2009 Dernière intervention - 11 nov. 2007 à 15:01 - Dernière réponse : cedricbi 185 Messages postés mercredi 18 décembre 2002Date d'inscription 21 mars 2011 Dernière intervention
- 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 ?
Afficher la suite 

16 réponses

Répondre au sujet
cs_cantador 4996 Messages postés dimanche 26 février 2006Date d'inscription 27 mars 2018 Dernière intervention - 11 nov. 2007 à 22:33
+3
Utile
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
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_cantador
cs_cantador 4996 Messages postés dimanche 26 février 2006Date d'inscription 27 mars 2018 Dernière intervention - 11 nov. 2007 à 19:04
0
Utile
 comme ceci :

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

cantador
Commenter la réponse de cs_cantador
John Dogget 390 Messages postés vendredi 18 juin 2004Date d'inscription 7 mai 2009 Dernière intervention - 11 nov. 2007 à 19:10
0
Utile
Ca ressemble beaucoup à une déclaration d'un tableau constant, or c'est pas ce que je veux faire
Commenter la réponse de John Dogget
cs_cantador 4996 Messages postés dimanche 26 février 2006Date d'inscription 27 mars 2018 Dernière intervention - 11 nov. 2007 à 20:01
0
Utile
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
Commenter la réponse de cs_cantador
cedricbi 185 Messages postés mercredi 18 décembre 2002Date d'inscription 21 mars 2011 Dernière intervention - 11 nov. 2007 à 21:24
0
Utile
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 !
Commenter la réponse de cedricbi
John Dogget 390 Messages postés vendredi 18 juin 2004Date d'inscription 7 mai 2009 Dernière intervention - 11 nov. 2007 à 21:53
0
Utile
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
Commenter la réponse de John Dogget
John Dogget 390 Messages postés vendredi 18 juin 2004Date d'inscription 7 mai 2009 Dernière intervention - 11 nov. 2007 à 22:40
0
Utile
Si c'est bon
Mais tu confirmes ce que je pensais, ce que je veux n'est pas possible avec Delphi ...

@ +
Commenter la réponse de John Dogget
Utilisateur anonyme - 11 nov. 2007 à 22:53
0
Utile
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.

@++
Commenter la réponse de Utilisateur anonyme
John Dogget 390 Messages postés vendredi 18 juin 2004Date d'inscription 7 mai 2009 Dernière intervention - 11 nov. 2007 à 23:04
0
Utile
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
Commenter la réponse de John Dogget
cs_cantador 4996 Messages postés dimanche 26 février 2006Date d'inscription 27 mars 2018 Dernière intervention - 11 nov. 2007 à 23:10
0
Utile
et voilà Francky23012301 au lieu de bosser sur son compo TImage vient mettre la zizanie dans le post !
Je vous demande un peu..


salut Francky

cantador
Commenter la réponse de cs_cantador
Utilisateur anonyme - 11 nov. 2007 à 23:19
0
Utile
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 )
Commenter la réponse de Utilisateur anonyme
cs_cantador 4996 Messages postés dimanche 26 février 2006Date d'inscription 27 mars 2018 Dernière intervention - 11 nov. 2007 à 23:22
0
Utile
@John Dogget :
On est tous des enfants de la balle ici..
Pour ton souci, je ne suis pas sûr qu'il n'y ait pas une solution..
Mais en revanche, je n'en vois vraiment pas l'intérêt..

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

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.