02-28-2012 05:36 PM - modifié 02-28-2012 05:42 PM
Bonjour à tous,
Je propose au yeux des anciens un petit exercice que je me suis imposé ...
vos avis, remarques ... tout m'intéresse.
Description de la manip:
Je génère 1000 nombres aléatoires, fourchette de [0 .. 9].
Le but de ce VI : Quel est le nombre qui a été généré le plus souvent ?
en A: j'initialise un Tableau de 10 éléments (à 0)
en B: le générateur
en C: J'utilise chaque nb généré comme un index,
et pour chaque nombre généré, avec cet index, j'incrémente l'élement correspondant du Tableau.
Ici, une question ... y a-t-il d'autres façons d'incrémenter un élément dans un Tableau ?
en 😧 Je recherche l'élement le plus grand du Tableau.
Le code de "D" me "plait" assez bien.
J'utiliser un noeud de rétroaction avec son terminal "enable/disable".
Impossible d'utiliser un registre à décalage, celui-ci ne ne proposant pas de fonction "enable/disable"
Ca fonctionne tip-top (en termes de résultats) ,mais le résultat c'est une chose... et faire du beau code, c'est autre chose.
Le résultat final se trouve dans "nb max".
<EDIT>
En fait non, le résultat final c'est l'index de ce nombre maximum dans le tableau.
mais le time-out du forum ne me permettra pas d'ajouter le (petit) code manquant.
Sans avis "extérieurs", difficile d'avancer.
remarques, conseils, critiques ... je prends tout.
Un grand merci à tous.
02-28-2012 06:01 PM - modifié 02-28-2012 06:06 PM
voila, j'ai ajouté le code.
Le résultat final est l'index du Tableau où se trouve le plus grand nombre d'itération mémorisée.
J'utilse le tunel de sortie "T" comme variable temporaire ... et finale.
J'utilise aussi un noeud de rétroaction avec son <enable/disable> pour autoriser, ou non, la mémorisation.
Ca fonctionne tip-top, mais est-ce bien "convenable" de détourner, comme je fais, la fonction 1ere des noeuds de rétroaction (??)
le 02-28-2012 07:10 PM
J'ai voulu insérer l'ensemble dans une boucle For "Globale" ... mais dans ce cas, il y a soucis.
La sortie de ma rétroaction dans la Code "D" conserve sa valeur.
Le problème provient du fait que la comparaison s'effectue "avant" le reset de la rétroaction.(normal, flux de données)
J'ai donc modifié le Code de "D" pour ne pas utiliser cette 1ere valeur (1ere itération) avant que la rétroaction ne se reset d'elle-même.
Ca tourne, ouf !
le 02-29-2012 02:06 AM
Bonjour,
Il existe une fonction minimum/maximum pour un tableau qui donne la valeur maximum mais aussi son index (dans la palette tableau)
Ce sera plsu simple!
le 02-29-2012 03:16 AM
En effet, merci pour l'info Simon. Je n'ai même pas regardé si cela existait en fait
J'avais mon idée et je voulais essayer ça moi-même.
Ceci dit, la finalité est de "coder" et d'apprendre, pas le résultat.
Un oeil critique sur le code m'intéresse toujours.
Existe-t-il une autre façon d'incrémenter un élément d'un Tableau ? (ou est-ce la bonne et unique façon ?)
Que pense un pro de LV en voyant mon code "D" ?
Merci pour ton intervention Simon.
le 02-29-2012 04:08 AM
Bonjour Ouadji
Voila pourquoi il vaut mieux utiliser la fonction existante: sont exécution risque d'être optimisée (en terme de performances), c'est plus clair sur le diagramme! (sa prend aussi moins de place)
Qu'entends tu par incrémenter un élément d'un tableau? Connais tu la structure "in place"?
Le code mériterait un petit coup de netoyage. pour créer un tableau (initialiser) utiliser une boucle for avec l'indexation est plus efficace (c'est un détail mais bon...)
le 02-29-2012 04:16 AM
incrémenter un élément d'un tableau:
j'ai un tableau 1D de 50 éléments U32 (par ex),
Je voudrais incrémenter uniquement l'élément n°28.
Boucle For avec indexation pour initialiser un tableau, je vais essayer ça.
Tu dis "c'est plus efficace" ... pourquoi ?
La structure "in place" ? je ne l'ai jamais utilisée.
Pourrait-on incrémenter un et un seul élément d'un tableau avec cette structure ?
Merci beaucoup Rodéric.
02-29-2012 04:21 AM - modifié 02-29-2012 04:22 AM
Pour la boucle for, il suffit de faire un bench pour s'en rendre compte (mesurer la différence de temsp d'éxécution)
Pour la structure in place: voici un exemple:
Cette structure présente un gros avantage en terme de performance du code!
le 02-29-2012 04:27 AM
Très sympa cette structure "in place"
Je vais de suite plonger dans la doc à son sujet.
Ok pour l'init d'un tableau. (je ferai le test bench pour me rendre compte)
Un grand merci.
le 02-29-2012 10:15 AM
Rodéric,
j'ai fait la comparaison. Création / initialisation d'un Tableau de 10 éléments. ( 10e7 fois et mesure du temps)
au dessus : avec une boucle For et indexation
en dessous : avec la fonction Initialize array
Je ne comprends pas, vous parliez de performances supérieures avec "boucle For + indexation"
Quelque chose doit certainement m'avoir échappé, car ici, je remarque l'inverse.
au dessus : avec une boucle For et indexation : 460ms
en dessous : avec la fonction Initialize array : 38ms
(comprends pas !)