From Friday, April 19th (11:00 PM CDT) through Saturday, April 20th (2:00 PM CDT), 2024, ni.com will undergo system upgrades that may result in temporary service interruption.

We appreciate your patience as we improve our online experience.

Discussions au sujet de NI LabVIEW

annuler
Affichage des résultats de 
Rechercher plutôt 
Vouliez-vous dire : 

Code (débutant) demande avis

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.

 

génération.png

0 Compliments
Message 1 sur 11
3 798 Visites

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 (??)

 

génération.png

0 Compliments
Message 2 sur 11
3 795 Visites

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 ! Smiley clignant de l'œil

 

D_modiifé.png

0 Compliments
Message 3 sur 11
3 792 Visites

Bonjour,

 

Il existe une fonction minimum/maximum pour un tableau qui donne la valeur maximum mais aussi son index Smiley clignant de l'œil (dans la palette tableau)

Ce sera  plsu simple!

Cordialement,

Simon D.
CLA | Certified LabVIEW Architect
CTA | Certified TestStand Architect
0 Compliments
Message 4 sur 11
3 783 Visites

 

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.

0 Compliments
Message 5 sur 11
3 774 Visites

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...)

Rodéric L
Certified LabVIEW Architect
0 Compliments
Message 6 sur 11
3 767 Visites

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.

0 Compliments
Message 7 sur 11
3 764 Visites

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:

increment.JPG

Cette structure présente un gros avantage en terme de performance du code!

Rodéric L
Certified LabVIEW Architect
Message 8 sur 11
3 761 Visites

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.

0 Compliments
Message 9 sur 11
3 757 Visites

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 !)

 

H_5_4.png

 

H_5_4.png

 

0 Compliments
Message 10 sur 11
3 737 Visites