Aller au contenu


Photo

Tableaux, a ne rien y comprendre !


  • Veuillez vous connecter pour répondre
16 réponses à ce sujet

#1 cuda71

cuda71

    Membre occasionnel

  • Membres
  • Pip
  • 87 messages

Posté 29 janvier 2018 - 11:19

Bonsoir,

j'ai beau retourner le problème dans tous les sens mais je ne comprends pas comment dans un tableau on rajoute une valeur à la suite des autres pour ensuite avoir un tableau qui regroupe toutes les valeurs rentrés.

Quand je dit rajouter un nombre dans un tableau, je ne veux pas dire rentrer la valeur manuellement, mais par exemple en récupérant la valeur d'un capteur a un moment donné pour la rajouter dans le tableau.

A chaque fois et quoique je fasse, ça me rajoute la valeur à l'indice 0 et du coup mon tableau comporte toujours une seule valeur

Il y a un truc qui dois m'échapper je pense



#2 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 9 934 messages
  • Gender:Male
  • Location:Anglet
  • Interests:Robotique, Entrepreneuriat, Innovation, Programmation, Résolution de problème, Recherche de solutions, Mécanique, Electronique, Créer, Concevoir

Posté 29 janvier 2018 - 11:22

Met ton bout de code et on devrait pouvoir te corriger =)


Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !
En attendant qu'une bibliothèque de fichiers 3D soit mise en place n'hésitez pas à demander si vous avez besoin du fichier 3D d'un des produits de la boutique... On l'a peut être ! 
Si vous souhaitez un robot pilotable par internet n'hésitez pas à visiter www.vigibot.com et à lire le sous forum dédié à vigibot!

 

Les réalisations de Mike118  

 

 

 


#3 cuda71

cuda71

    Membre occasionnel

  • Membres
  • Pip
  • 87 messages

Posté 30 janvier 2018 - 02:38

Met ton bout de code et on devrait pouvoir te corriger =)

Je crois que je viens de réussir, je teste s'il n'y a pas de problemes.

Dans tous les cas il m'aurait été difficile de mettre mon bout de code qui fait 6 mètres de long

Pas évident d'ajouter un valeur dans un tableau, d'afficher les valeurs du tableau dans un certain ordre en plus....

Gloups, je part dans des trucs trop compliqués pour débuter je pense

En tout cas je te remercie, je continue mes test mais ça semble fonctionner maintenant, je dit bien ça semble  :lol: ........j'essaye de me pas me réjouir trop vite



#4 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 9 934 messages
  • Gender:Male
  • Location:Anglet
  • Interests:Robotique, Entrepreneuriat, Innovation, Programmation, Résolution de problème, Recherche de solutions, Mécanique, Electronique, Créer, Concevoir

Posté 30 janvier 2018 - 04:35

met juste les lignes que tu penses fausse =)

 

tab[i] = value ; 

Permet d'assigner value à la case i du tableau tab =)

 

par contre i doit être < nombre de valeur dans le tableau ;)


Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !
En attendant qu'une bibliothèque de fichiers 3D soit mise en place n'hésitez pas à demander si vous avez besoin du fichier 3D d'un des produits de la boutique... On l'a peut être ! 
Si vous souhaitez un robot pilotable par internet n'hésitez pas à visiter www.vigibot.com et à lire le sous forum dédié à vigibot!

 

Les réalisations de Mike118  

 

 

 


#5 Oracid

Oracid

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 6 732 messages
  • Gender:Male

Posté 30 janvier 2018 - 07:36

Je te conseille de bien faire tout le tutorial proposé avant de te lancer dans un programme compliqué.

Fair un code avec une centaine de pavés, c'est complètement illisible.
Il faut découper ton code en fonction. En langage EV3-G, cela s'appelle des "Mes blocs", "My blocks" en anglais.

Regarde bien cet exemple. Le programme principal, c'est le premier onglet "Toulouse V3", puis viennent les autres onglets qui sont des "Mes blocks".
Comme tu peux le voir, les "Mes blocks" sont appellés l'un à la suite de l'autre, au début du programme principal.
Ici, le programme principal est déjà assez long, imagine ce que cela aurait été si tout avait été écrit à cet endroit.

Voici 2 images. la première montre le programme principal, la deuxième montre un "Mes blocks".
Clique sur les images pour les voir en grand.

EV3-1000.png EV3-1001.png

#6 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 9 934 messages
  • Gender:Male
  • Location:Anglet
  • Interests:Robotique, Entrepreneuriat, Innovation, Programmation, Résolution de problème, Recherche de solutions, Mécanique, Electronique, Créer, Concevoir

Posté 30 janvier 2018 - 08:13

Quand on code avec arduino on fait exactement la même chose en créant des fonctions =). 


Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !
En attendant qu'une bibliothèque de fichiers 3D soit mise en place n'hésitez pas à demander si vous avez besoin du fichier 3D d'un des produits de la boutique... On l'a peut être ! 
Si vous souhaitez un robot pilotable par internet n'hésitez pas à visiter www.vigibot.com et à lire le sous forum dédié à vigibot!

 

Les réalisations de Mike118  

 

 

 


#7 Oliver17

Oliver17

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 2 758 messages
  • Gender:Male
  • Interests:Glenn

Posté 30 janvier 2018 - 10:47

Si tu fais un tableau du genre int tab[5]={10,360,87}; cela représente un tableau à 5 éléments de type entier, mais puisqu'il n'y a que 3 valeurs dans ce tableau les autres sont initialisés à 0 par défaut.

 

C'est surement pour ça que ton tableau retourné 0 à l'élément demandé.


signature_01.png -->

 

Mon Tipeee
 


#8 Oracid

Oracid

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 6 732 messages
  • Gender:Male

Posté 30 janvier 2018 - 02:25

Quand on code avec arduino on fait exactement la même chose en créant des fonctions =).

Tout à fait ! Bien sûr !
J'ai fait un peu de C, entre autres langages, dans ma vie professionnelle. Quand j'ai abordé l'EV3-G, j'ai immédiatement compris l'intérêt de ce langage qui possède des fonctions (block) avec passage de paramètres, mais également de vraies fonctions, avec également des passages de paramètres (Mes blocks).
Le problème, c'est que l'EV3-G est destiné aux débutants qui n'ont aucune référence préalable (ce pas le cas de Cuda71). Et très souvent, ils considèrent ce langage comme médiocre, pour de mauvaises raisons, parce qu'il est présenté de manière ludique par une entreprise de jouet, Lego.

Je n'ai jamais approfondi le langage EV3-G. Je l'utilise le plus simplement possible pour mettre en actionner des moteurs avec une télécommande.
Dans ce cadre, très simple, il est d'une efficacité redoutable.

Pour mémoire, c'est la même université, le MIT, qui a créé le langage EV3-G et le langage Scratch.

#9 cuda71

cuda71

    Membre occasionnel

  • Membres
  • Pip
  • 87 messages

Posté 01 février 2018 - 03:20

Mike118,

je vais essayer de voir si je peux isoler un bout de code qui puisse être comprehensible hors contexte de mon programme, mais pas sur que je trouve
Surtout que j'ai manipulé et remanipulé le code

J'ai testé plusieurs fois et enfin il semble bien fonctionner comme je le souhaitais

PS: pour la petite info le but de mon programme était de tirer un certain nombre de chiffres au hasard entre 1 et 60 et ensuite d'afficher après chaque lancé le score plus grand obtenu jusque là, et sur la page finale d'afficher les 3, ou les 5 ou les X meilleurs scores du plus grand au plus petit.
Comme je le disais, la enfin mon programme fonctionne correctement  :rolleyes: 
 

 

-------------------------------------------

Oui en effet Oracid, j'ai été obligé d'utiliser "Mes Blocs", parceque le programme commençait a devenir tellement long qu'il en devenait illisible et même moi je m'y perdais.
Et, soit dit en passant, même avec plusieurs "Mes Blocs" j'avoue que j'ai quand même réussi a m'y perdre quelque fois

En fait Oracid,je ne dirais pas que je n'ai aucun référence préalable, en fait j'ai étudié le langage C++ aisi que Python et Visual Basic, mais cela remonte a tellement loin, que je ne me souviens même plus comment on déclare un simple variable en C++ ou en Python
Donc dans le fond, tu as en réalité assez raison, je ne me souviens tellement plus rien de ses langages que j'ai appris il y a tellement longtemps, que c'est tout comme si je n'avais aucune référence préalable  :crazy: 

------------------------------------------

Olivier17,

Du coup tu me fait venir une question.

Dans EV3-G on peut créer par exemple un tableau TAB [0, 0, 0] dans ce cas on a un tableau avec trois éléments qui ont chacun la valeur zéro
Par contre on peut aussi créer un tableau vide TAB [ ], dans ce cas comment est traité ce dernier tableau dans EV3-G ?



#10 Oracid

Oracid

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 6 732 messages
  • Gender:Male

Posté 01 février 2018 - 08:00

Dans EV3-G on peut créer par exemple un tableau TAB [0, 0, 0] dans ce cas on a un tableau avec trois éléments qui ont chacun la valeur zéro
Par contre on peut aussi créer un tableau vide TAB [ ], dans ce cas comment est traité ce dernier tableau dans EV3-G ?

Attention, il faut écrire comme ceci TAB[0;0;0] avec de ; entre chaque valeur.
La longueur du tableau TAB[] est de 0. Donc dans le block Tableau, si on demande sa longueur, il indiquera 0. C'est parfaitement bien documenté dans l'aide.

Il est impératif que tu utilises l'aide dans le menu du haut "Aide/Afficher l'aide de l'EV3".

#11 Oliver17

Oliver17

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 2 758 messages
  • Gender:Male
  • Interests:Glenn

Posté 01 février 2018 - 10:20

Pour moi un tableau en C++ à 1 indice et 3 éléments c'est ça

 

tab[3]

 

cela équivaut à dire un tableau à 1 indice ou l'on réserve l'emplacement de 3 éléments.

 

"Les tableaux de classe statique sont, par défaut, initialisés à zéro, les tableaux de classe automatique ne sont pas initialisés implicitement"

 

Donc si tu créer un tableau int tab[3]; par défaut les 3 éléments seront initialisés à 0.

 

Ensuite si tu veux initialisé toi même tes éléments

 

int tab[3] = {0, 0, 0};

 

 

Admettons par la suite que tu connaisses la première des valeurs à placer dans ton tableau, mais le reste sera incrémenté plus tard dans ton programme cela peut donner.

 

int tab[3] = {12};

 

"Les valeurs manquantes seront, suivant la classe d'allocation tu tableau, initialisées à zéro (statique) ou aléatoires (automatique)."

 

Tous ce qui se trouve entres les guillemets sont repris de mon livre de C++ :)


signature_01.png -->

 

Mon Tipeee
 


#12 Oracid

Oracid

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 6 732 messages
  • Gender:Male

Posté 01 février 2018 - 12:50

Donc si tu créer un tableau int tab[3]; par défaut les 3 éléments seront initialisés à 0.

Les tableaux de classe static, peut-être, mais sinon, je ne crois pas que en C les 3 éléments du tableau seront initialisés à 0. Ils seront sans doute à une valeur quelconque.
En EV3-G, cela semble assez particulier, car la longueur du tableau s'incrémente au fur et à mesure que l'on ajoute un élément.
On peut donc créer un tableau de longueur 0 ne contenant rien. Puis en ajoutant des éléments, sa longueur s'incrémente.

#13 cocothebo

cocothebo

    Membre passionné

  • Membres
  • PipPipPip
  • 341 messages
  • Gender:Male

Posté 02 février 2018 - 10:09

Alors donc les tableaux en EV3-G (langage que je ne connais absolument pas) sont donc plutôt ce qu'on appelle des vector en C++ (ou Java d'ailleurs), qui sont des tableaux "dynamiques".

 

En C, ces classes "magiques" n'existent pas, si on veut faire un tableau dynamique c'est de suite plus compliqué mais ça se fait bien (après niveau performance c'est surement moins efficace bien sur), par exemple, premier lien google dont je ne garanti rien mais qui semble correct:

http://eddmann.com/posts/implementing-a-dynamic-vector-array-in-c/

 

Et par défaut en C (et donc je pense que par extension ca reste vrai en C++ mais ça remonte à loin pour moi...), une variable non initialisée à un contenu aléatoire. Ce n'est pas le cas dans les langages plus récent style Java par exemple.



#14 R1D1

R1D1

    Modérateur et Membre passionné

  • Modérateur
  • PipPipPipPipPip
  • 1 211 messages
  • Gender:Male
  • Location:Autriche

Posté 02 février 2018 - 01:44

Alors donc les tableaux en EV3-G (langage que je ne connais absolument pas) sont donc plutôt ce qu'on appelle des vector en C++ (ou Java d'ailleurs), qui sont des tableaux "dynamiques".

Et plus généralement les conteneurs de la librairie standard : vector (une liste du type voulu), map (une liste de paires (clef, valeur), clef étant unique dans la liste), set, ...

Et par défaut en C (et donc je pense que par extension ca reste vrai en C++ mais ça remonte à loin pour moi...), une variable non initialisée à un contenu aléatoire. Ce n'est pas le cas dans les langages plus récent style Java par exemple.

En C, le contenu est aléatoire (ça dépend dans quelle partie de la mémoire l'espace est alloué, et donc de ce qu'il y avait avant). En C++, selon le compilateur et les degrés d'optimisation choisis (-O0 -O1), les types standards sont initialisés (e.g. int à 0) mais ce comportement est apparemment un bug, et n'apparaît plus pour -O2.
La conclusion de ça: initialisez vos variables à la valeur que vous voulez s'il y a un risque que la variable soit lue avant qu'elle soit modifiée. Parfois, c'est même une manière d'améliorer son code : en initialisant la valeur de la variable au résultat qu'elle doit prendre dans le cas "else" d'un test", on a juste besoin d'écrire le "if".
R1D1 - Calculo Sed Ergo Sum -- en ce moment, M.A.R.C.E.L.
Avatar tiré du site bottlebot

#15 Oracid

Oracid

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 6 732 messages
  • Gender:Male

Posté 02 février 2018 - 03:08

Une variable non initialisée à un contenu aléatoire.

Tout à fait exact, mais Oliver parlait d'une variable "static".
Il semblerait qu'une variable "static" soit bien initialisée à 0, https://stackoverflo...-variables-in-c

#16 cocothebo

cocothebo

    Membre passionné

  • Membres
  • PipPipPip
  • 341 messages
  • Gender:Male

Posté 02 février 2018 - 03:22

Effectivement, je ne suis pas assez bon en C pour avoir ce type de connaissances "pointues", moi j'applique un principe de toute façon très bête, en C comme des fois (quoi même pratiquement tout le temps au final) les variables ne sont pas intilialisées à leur déclaration, je les initialise toutes. La perte de place ou de performance reste de toute manière anecdotique, les risques 'avoir un comportement erratique diminué :)

 

Après effectivement les compilateurs et surtout en C font énormément de travail, ce qui fait que entre le code écrit et le code généré il y a souvent de très gros écarts. Chaque compilateur fait à sa manière.

Le pire étant que par exemple pour deux version différentes de gcc, en utilisant les mêmes options de compilation, le code généré sera différent.

C'est un problème qui devient compliqué à appréhender quand on parle de sureté ou de sécurité, ne pas savoir en lisant le code source à quoi pourra bien ressembler le code généré reste problématique.



#17 Oracid

Oracid

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 6 732 messages
  • Gender:Male

Posté 02 février 2018 - 07:40

je les initialise toutes.

Tu as parfaitement raison.
C'est une bonne pratique quelque soit le langage.




0 utilisateur(s) li(sen)t ce sujet

0 members, 0 guests, 0 anonymous users