IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Probleme d''optimisation !


Sujet :

C#

  1. #1
    Membre confirmé Avatar de Flow_75
    Femme Profil pro
    Ingénieure
    Inscrit en
    Mai 2005
    Messages
    1 096
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieure
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 096
    Points : 633
    Points
    633
    Par défaut Probleme d''optimisation !
    Bonjour,

    Voila j'ai un probleme à vous soumette !

    J'ai un tableau de vitesse (tableauVitesse) et un autre de valeurs (valeursbrut) de dimension identique.
    J'ai également une vitesse moyenne (Vmoyenne) et une tolerance (+/- x km/h) (Vdelta).

    Je dois récuperer l'ensemble des valeur dont l'indice correspond à celui des valeurs, dans le tableau de vitesse sont dans la tolerance vmoy +/- Vdelta.

    J'ai fais le code ci-dessous, mais je cherche une solution optimisée

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    for(int i = 0; i < tableauVitesse.Length; ++i)
                    {
                        if((m_voieVitesse.Valeurs[i] > (Vmoyenne - Vdelta)) && (m_voieVitesse.Valeurs[i] < (Vmoyenne + Vdelta)))
                        {
                            valeursbrut.Add(voie.Valeurs[i]);
                        }
                    }
     
    double theResult = valeursbrut.Average();
    Auriez vous des propositions ?
    Merci.
    Flow.

  2. #2
    Membre expert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2013
    Messages
    1 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 1 563
    Points : 3 404
    Points
    3 404
    Par défaut
    Citation Envoyé par Flow_75 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    for(int i = 0; i < tableauVitesse.Length; ++i)
                    {
                        if((m_voieVitesse.Valeurs[i] > (Vmoyenne - Vdelta)) && (m_voieVitesse.Valeurs[i] < (Vmoyenne + Vdelta)))
                        {
                            valeursbrut.Add(voie.Valeurs[i]);
                        }
                    }
     
    double theResult = valeursbrut.Average();
    Pour ma part je trouve ça très tordu de :
    -parcourir les éléments d'un tableau en fonction du nombre d'éléments d'un autre tableau
    -Ajouter un élément d'un tableau à une liste conditionné par la valeur d'un élément dans un autre tableau

    En fait, on ne peux pas deviner que qu'est censé faire la fonction en lisant le code

  3. #3
    Membre confirmé Avatar de Flow_75
    Femme Profil pro
    Ingénieure
    Inscrit en
    Mai 2005
    Messages
    1 096
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieure
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 096
    Points : 633
    Points
    633
    Par défaut
    - Les tableaux ont toujours la même taille.
    - Un exemple : On mesure une grandeur physique (vitesse du vent à bord d'une voiture, par exemple), on veux, après acquisition avoir la valeur moyenne de la mesure seulement lorsque la voiture se déplace entre 10km/h et 20 km/h.

  4. #4
    Membre expert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2013
    Messages
    1 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 1 563
    Points : 3 404
    Points
    3 404
    Par défaut
    Citation Envoyé par Flow_75 Voir le message
    - Un exemple : On mesure une grandeur physique (vitesse du vent à bord d'une voiture, par exemple), on veux, après acquisition avoir la valeur moyenne de la mesure seulement lorsque la voiture se déplace entre 10km/h et 20 km/h.
    Merci pour l'exemple, c'est plus clair ainsi.

    j'aurais vu un truc comme ça, avec l'utilisation de listes plutôt que de tableaux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    var res = MesVitesses.Where( c => c.Valeur > BorneMin && c.Valeur < BorneMax).Average()

  5. #5
    Membre confirmé Avatar de Flow_75
    Femme Profil pro
    Ingénieure
    Inscrit en
    Mai 2005
    Messages
    1 096
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieure
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 096
    Points : 633
    Points
    633
    Par défaut
    c'est vrai qu'avec un exmple c'est plus clair.

    Alors, c'est pas ca qui pose probleme.

    On mesure une grandeur physique (vitesse du vent à bord d'une voiture, par exemple), on veux, après acquisition avoir la valeur moyenne de la mesure seulement lorsque la voiture se déplace entre 10km/h et 20 km/h.
    En faite, tu as deux tableaux:
    vitesse_du_vent et vitesse_de_la_voiture.


    En gros, avec des variables mieux nommées, on a:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    for(int i = 0; i < vitesse_de_la_voiture.Length; ++i)
                    {
                        if((vitesse_de_la_voiture[i] > (10km/h)) && (vitesse_de_la_voiture < (20Km/h))
                        {// La vitesse du vent est dans la plage voulu, donc on récupere la vitesse du vent correspondant //
                            valeursbrut.Add(vitesse_du_vent.Valeurs[i]);
                        }
                    }
     
    double theResult = valeursbrut.Average();

  6. #6
    Expert éminent sénior

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 757
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 757
    Points : 10 697
    Points
    10 697
    Billets dans le blog
    21
    Par défaut
    Bonjour,

    Pour une version optimisée, je ferais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    int nbElem = 0;
    double somme = 0.0;
     
    for(int i = 0; i < tableauVitesse.Length; ++i)
    {
       if(Math.Abs(m_voieVitesse.Valeurs[i] - Vmoyenne) < Vdelta)
       {
          somme += voie.Valeurs[i];
          nbElem++;
       }
    }
     
    double theResult = somme / nbElem;
    On pourrait aller plus loin, en utilisant des pointeurs, mais il faudrait du code unsafe.
    François DORIN
    Consultant informatique : conception, modélisation, développement (C#/.Net et SQL Server)
    Site internet | Profils Viadéo & LinkedIn
    ---------
    Page de cours : fdorin.developpez.com
    ---------
    N'oubliez pas de consulter la FAQ C# ainsi que les cours et tutoriels

  7. #7
    Membre confirmé Avatar de Flow_75
    Femme Profil pro
    Ingénieure
    Inscrit en
    Mai 2005
    Messages
    1 096
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieure
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 096
    Points : 633
    Points
    633
    Par défaut
    Merci pour toutes vos réponses,
    J'ai trouvé la réponse:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    double resultat = voievitessevent.Where((v, index) => (voievitesse[index] > (Vmin)) && (voievitesse[index] < Vmax)).Average();
    Merci d'avoir pris le temps de me répondre.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. probleme d'optimisation d'une macro
    Par ylabarre dans le forum VBA Outlook
    Réponses: 5
    Dernier message: 28/09/2007, 16h40
  2. Probleme d'optimisation (Delphi7+firebird1.5)
    Par nassoft dans le forum Bases de données
    Réponses: 3
    Dernier message: 15/05/2007, 13h19
  3. probleme d'optimisation de fonction
    Par franc82 dans le forum C++
    Réponses: 3
    Dernier message: 31/10/2006, 09h45
  4. [Probleme Changé]Optimisation de l'affichage de jeu
    Par RadicalBob dans le forum Langage
    Réponses: 23
    Dernier message: 18/06/2006, 04h07
  5. [VBA-E]Probleme d'optimisation
    Par sk8bcn dans le forum Macros et VBA Excel
    Réponses: 18
    Dernier message: 30/05/2006, 20h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo