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 :

Simplification code simple [Débutant]


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 10
    Par défaut Simplification code simple
    Bonjour
    Je dois crée une application en console qui permet de compter le nombre de fois la présence de caractère, par exemple :
    Je saisi Developpez
    Le caractère D apparait 1 fois
    Le caractère e apparait 3 fois
    Le caractère v apparait 1 fois
    ....

    J'ai réussi a crée le code qui répond au besoin mais j'aimerais le simplifier au maximum (réduire le nombre de ligne), mon professeur d'informatique m'a mis au défit de trouver une simplification 6-7 lignes (hors traitement de la chaine de caractère au début du programme)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    namespace TD08_02
    {
        class Program
        {
            static void Main(string[] args)
            {
                string saisi;
                bool flag;
                int i, tmp=0, longeur;
                char cara;
                do
                {
     
                    Console.Write("Saisir votre chaine de caractere : ");
                    saisi = Console.ReadLine().Replace(" ", "");
                    i = 0;
                    do
                    {
                        flag = false;
                        if (((64 < saisi[i]) && (saisi[i] < 91)) || ((96 < saisi[i]) && (saisi[i] < 123))) flag = true;
                        i++;
                    }
                    while ((flag) && (i < saisi.Length));
                }
                while (flag == false);
                longeur = saisi.Length;
     
     
     
                do
                {
                    tmp = 0;
                    i = 0;
                    cara = saisi[0];
                    do
                    {
                        i++;
                        tmp = saisi.IndexOf(cara, tmp+1);
                    }
                    while (tmp != -1);
                    Console.WriteLine("Le caractere "+Convert.ToString(cara)+" apparait "+(i.ToString())+" fois");
                    saisi = saisi.Replace(Convert.ToString(cara), "");
                }
                while (saisi.Length > 0);
     
     
            }
     
     
        }
    }
    Si vous pouvez m'aider n me conseillant une commande qui pourrait me simplifier.
    Merci d'avance de vos reponses

  2. #2
    Membre Expert
    Avatar de azstar
    Homme Profil pro
    Architecte Technique BizTalk/.NET
    Inscrit en
    Juillet 2008
    Messages
    1 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Technique BizTalk/.NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 198
    Par défaut
    tu peux utiliser un dictionary<char,int> ,et tu peux parcourir la chaîne de cataracte et incrémenté le entier lors d'un caractère qui se présente dans dictionary.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    dictionary<char,int> chars=new dictionary<char,int>();
    for(int i=0,i<chaine.lenght,i++)
    {
      if(chars.containKey(chaine[i]))
      {
           int k=chars[chaine[i]];
          chars[chaine[i]]= K+1;
     
       }
      else
      {
         chars.Add(chaine[i],1);
      }
    }
    tu peux parcourir le Chars pour récupérer les valeurs de nombre de fois la présence de caractère

  3. #3
    Membre Expert
    Avatar de Sehnsucht
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    847
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Octobre 2008
    Messages : 847
    Par défaut
    Bonjour,

    Le plus simple possible serait d'utiliser la méthode d'extension GroupBy
    Mais je doute que cela rentre dans le cadre de l'apprentissage demandé (à savoir réfléchir à l'algorithme pour le faire)
    Néanmoins je le mets à titre indicatif (ceci compte le nombre d'occurrences de chaque caractère):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    foreach (var grp in Console.ReadLine().GroupBy(ch => ch))
            Console.WriteLine("caracter {0} appears {1} times", grp.Key, grp.Count());
    Concernant ton code, et dans une même approche que celle proposée par azstar, tu peux également utiliser un (ou deux) tableau (étant donné que tu sembles ne vouloir compter que les lettres) de 52 cases (ou deux fois 26)
    et pour chaque lettre tu incrémentes la case correspondante (A = indice 0, B = indice 1 etc. puis a = indice 26, b = indice 27 etc. ou la même chose dans deux tableaux différents un pour les minuscules, l'autre pour les majuscules)
    L'approche dictionnaire d'azstar est un peu moins complexe mais je l'évoque au cas où tu n'aurais pas le droit à ce type de "structure évoluée" pour ton TD.

    Sinon, au lieu de tes tests pour savoir si c'est une lettre, tu peux (si tu as le droit) utiliser les méthodes statiques de la structure char (notamment char.IsLetter, char.IsLower et/ou char.IsUpper) ou si tu n'as pas le droit utiliser des constantes plutôt que des "nombres en dur" (qu'on appelle parfois "magic numbers") dont on ne sait pas forcément ce qu'ils signifient.
    j'illustre ce dernier point par un exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    //définies ailleurs:
    const char majA = 'A', majZ = 'Z', minA = 'a', minZ = 'z';
    //...
    if (majA <= saisi[i] && saisi[i] <= majZ || minA <= saisi[i] && saisi[i] <= minZ) flag = true;
    // qu'on peut aussi écrire directement
    flag = (majA <= saisi[i] && saisi[i] <= majZ || mina <= saisi[i] && saisi[i] <= minZ);
    Après tu pourrais aussi séparer ton code en plusieurs fonctions, plutôt que de tout avoir dans le Main, par exemple une fonction qui fait la saisie (ton premier do while) et une autre qui fait le travail de comptage.

    Cordialement !

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 10
    Par défaut
    Bonjour,
    merci pour vos explication, je vais m’inspire de la solution de azstar, étant étudiant c'est avant tout programmer pour apprendre,
    ma question est qu'est que c est que l dictionnaire et a comment est il utiliser

    Pour le code de Sehnsucht j ne comprend pas cette ligne
    que fait elle

    merci beaucoup pour vos explication

  5. #5
    Membre chevronné
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    332
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2002
    Messages : 332
    Par défaut
    Citation Envoyé par Sanyika Voir le message
    Bonjour,
    merci pour vos explication, je vais m’inspire de la solution de azstar, étant étudiant c'est avant tout programmer pour apprendre,
    ma question est qu'est que c est que l dictionnaire et a comment est il utiliser

    Pour le code de Sehnsucht j ne comprend pas cette ligne
    que fait elle

    merci beaucoup pour vos explication
    Le group by correspond à de l'aggrégation, tout comme dans SQL.

    Ce qui est en parenthèses, c'est la syntaxe lambda. Le 'ch' aurait pu être x ou y, ce n'est qu'un alias représentant le contexte.

    Si le contexte avait été l'item d'une collection d'instances d'une classe dont une des propriétés avait été 'Category' par exemple, tu aurais pu grouper par cette dimension.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .GroupBy(ch => ch.Category)
    Voici un tutoriel.

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

Discussions similaires

  1. code simple (évenements)
    Par <Zer0> dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 13/08/2007, 10h28
  2. [XSLT] Erreur partielle - Simplification Code ?
    Par Sam 069 dans le forum XSL/XSLT/XPATH
    Réponses: 6
    Dernier message: 13/04/2007, 11h45
  3. probleme de code simple
    Par BFH dans le forum C
    Réponses: 18
    Dernier message: 28/10/2005, 18h57
  4. Explication de code simple
    Par Clad3 dans le forum OpenGL
    Réponses: 3
    Dernier message: 20/03/2005, 11h31
  5. Réponses: 2
    Dernier message: 08/04/2004, 11h11

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