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 :

disperser les espaces dans une ligne


Sujet :

C++

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 157
    Par défaut disperser les espaces dans une ligne
    bonjour tout le monde j'essaye envain d'aboutir à mon projet qui est de justifier un texte j'ai fait ça:

    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
    56
    57
    58
    59
    60
    61
    62
     
    #include <string>
    #include <iostream>
    using namespace std;
    int main()
    {
     
    // Lecture
       string text;
       int l, deb;
       cout <<  "texte ?" << endl;
       getline(cin,text);
       cout << "Entrer le nombre de caractere que vous voulez pour une     ligne?" << endl;
       cin >> l;
     
     
       // Nombre de caracteres
       size_t len = text.length();
     
       // Nombre de mots
       unsigned int nb_words=0;
       for(unsigned int i=0;i<len;i++)
       {
          // avancer jusqu'au prochain mot
          while ((isalpha(text[i]) && i<len)) i++;
     
          // on a atteint la fin d'un mot ou de la chaine
          if (i<=len) 
               nb_words++;
        }
     
     
        if (l<10 or l>80){
           cout<<"l est erroné."<<endl;
        }
        else {
            if ((text.length()) < l)
            {
               cout<<text<<endl;
            }
            else
            {
     
     
               deb = 0;
               i = l;
               while (i < len)
               {
                  while ((i>deb) && (text[i] != ' ')) i--;
     
                  if (i>deb)
                  {
                     text[i]=10;
                     deb = i;
                     i += l;
                  }
                }
     
                cout << text << std::endl;
              }
         }
    }
    tout marche comme je le souhaite mais maintenant il faudrait que je répartise mes espaces entres mes mots suivant la longueur de la ligne, si vous pourriez m'indiquer comment je peut faire ce serait super.
    merci d'avance

  2. #2
    Expert confirmé
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Par défaut
    Une idée simple :

    Tu calcules le nombre d'espaces à rajouter ,
    Tu calcules le nombre de mots de ta ligne et par la même occasion le nombre d'espaces (nb_mots - 1)
    Tu calcules le nombre d'espaces à rajouter entre les mots pour justifier ta ligne.
    Tu rajoutes les espaces où il faut.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 157
    Par défaut
    ben enfaite je sais pas trop comment faire pour faire tous ça. Il faut que je compte mes lignes avant et que j'arrive à les disocier c'est bien ça?
    ensuite je calcul le nombre de caracte que j'ai par ligne et je soustrait l pour savoir le nombre d'espace qu'il me manque. Puis je calcul le nombre de mot dans ma ligne et je repartit les espaces de ma ligne suivant mes mot.
    on est d'accord?
    Problème c'est que je ne sait pas trop comment on fait pour compter les lignes, pour les dissocier et pour rajouter un espace à l'endroit souhaité.
    Voila merci d'avance de votre aide

  4. #4
    Expert confirmé
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Par défaut
    Il faut que je compte mes lignes avant et que j'arrive à les disocier c'est bien ça?
    Non, tu traites ligne par ligne. via le getline ...

    ensuite je calcul le nombre de caracte que j'ai par ligne et je soustrait l pour savoir le nombre d'espace qu'il me manque. Puis je calcul le nombre de mot dans ma ligne et je repartit les espaces de ma ligne suivant mes mot.
    on est d'accord?
    Exact.

    Problème c'est que je ne sait pas trop comment on fait pour compter les lignes
    Tu n'en as pas besoin, tu traite ligne par ligne.

    Le tout est de lire ta ligne et écrire dans une autre ligne le résultat (tu ne travailles pas sur place sinon, ça devient rapidement horriblement compliqué ...)

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 157
    Par défaut
    ben oui mais comment je fait pour distinguer mes lignes si je les compte pas?
    c'est ça enfaite mon plus gros probleme savoir comment faire pour distinguer mes lignes!!!
    merci pour votre aide

  6. #6
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 296
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 296
    Par défaut
    Je ne suis pas sûr que tu aies vu la différence entre:
    - les lignes que tu lis
    - les lignes que tu produis

    Tu n'as pas besoin de savoir combien de lignes tu lis. Tu as juste besoin de charger tous les mots initiaux dans un tampon. Et à chaque fois que le nombre de caractères accumulés, par les mots dans le tampon, dépasse le nombre max de caractères par lignes, tu vides tout jusqu'au mot précédent. Le vidage devant s'occuper de rajouter des espaces comme il se doit.
    En entrée, comme en sortie, peu importe le nombre de lignes.

    Avec ça, il devrait y avoir les mots clés pour définir des fonctions par raffinage successifs en partant du plus haut : le problème à résoudre.

    Quand un problème est trop compliqué, on le décompose en problèmes plus simples qui mis bouts à bouts participent à la solution. J'ai l'impression que tu es parti depuis le plus bas sans vraiment voir l'algo de plus haut niveau.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 157
    Par défaut
    enfaite il faudrait que je fasse un programme pour les ligne que je produit puis dans ses lignes rajouter mes espaces c'est bien ça???
    car quand tu dit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Avec ça, il devrait y avoir les mots clés pour définir des fonctions par raffinage successifs en partant du plus haut : le problème à résoudre
    tu utilise des fonctions toutes faites, et je ne peut pas les utiliser.
    par raport au programme que j'ai fait je ne voit pas comment distinguer les ligne que j'ai produits.
    Car ce que j'ai fait avant c'est juste non?
    merci de votre aide

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 157
    Par défaut
    ben enfaite il faut tout que je recommence car si le texte entré par l'utilisateur a un retour à la ligne ça ne fonctionne pas, ça fait defiler mes 'cout' donc voila. Je suis completement desesperer, je sais pas comment je vais faire il est à rendre pour samedi et ça faisait quand même une semaine que je travaillais dessus donc à moins d'un miracle je vois pas comment je vais pouvoir le faire.
    Merci beaucoup de votre aide

  9. #9
    Membre éclairé
    Avatar de Zenol
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2004
    Messages
    812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 812
    Par défaut
    Je ne garanti rien, mais j'ai peut-être une petite idée...

    Tu charge le texte depuis l'entrée standard (justif < texte envoi le texte dans l'entrée standard de mémoire)
    Une fois le texte dans un std::string, tu commence par éliminer les doubles d'espace entre les mots (imagine quelqu’un qui viens taper "abc def" ^

    Puis tu récupérer le nombre de caractère choisi en l'envoyant dans une première variable;
    Si après il y à un espace
    ->Impeccable on a pile une ligne qui se termine sur un mot
    Si malheureusement il n'y à pas d'espace après, tu efface les dernières lettres et l'espace qui précède, et tu note le numéro du caractère ou tu reprendra. Ensuite tu place des espaces de manière homogène, donc tu compte le nombre d'espace à placer, ainsi que le nombre de mot dans la ligne, et tu place un espace tout les NbEspace/NbMots mots de ta phrase (Si il y à un reste tu placera un espace à un des mots du texte à ou tu n'en a pas placer)

    par la suite, tu a belle phrase formater et tu peut enfin l'envoyer à la suite des phrase précédemment traiter, en oubliant pas un petit retour à la ligne.


    Voila j'espère que c'est plus claire pour toi ^^

    (Désoler pour les multiples fautes d'orthographe et de grammaire qui criblent ce texte :s)
    Mes articles Développez | Dernier article : Raytracer en haskell
    Network library : SedNL | Zenol's Blog : http://zenol.fr

    N'oubliez pas de consulter la FAQ et les cours et tutoriels.

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 157
    Par défaut
    j'ai pas tout compris ce que tu ma expliquer la.
    tu vois quoi par eliminer les double espaces entre les mots??
    De plus mes lignes elles sont déja crées mais c'est les espaces dans ma ligne qui ne sont positionner d'une bonne maniere.

  11. #11
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 296
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 296
    Par défaut
    Ne le pomme pas avec le nombre d'espaces à lire. Une simple utilisation de l'opérateur d'extraction (>>) suffit amplement pour extraire les mots.
    Qu'il finalise d'abord l'algo. Si son prof lui interdit un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    std::string mot;
    while (std::cin >> mot) {
        [...]
    }
    il pourra toujours remplacer cette lecture par une fonction "lit_mot(std::cin)" de son cru.
    Qu'il parte de l'algo de plus haut niveau avant de partir dans les détails

    Après l'algo ... je te l'ai donné. Je ne vois pas trop quoi rajouter.

    Si ton problème c'est que les lignes vides doivent déclencher une purge du tampon sans justifier la dernière ligne, il faut effectivement un peu feinter en faisant une lecture en deux étapes.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    tant que l'on peut lire des lignes(cin)
        si la ligne est vide, 
            purger le tampon de mots sans justification
            introduire une ligne vide
        sinon, pour chaque mot de la ligne
            si le nombre de caractères accumulé plus celui du nouveau mot dépasse la longueur max
                purger le tampon de mots avec justification
            fsi
            ajouter le nouveau mot au tampon 
        fsi
    ftq
    purger le tampon de mots sans justification
    Maintenant, tout ce que l'on peut faire plus, c'est envoyer directement la solution à ton prof (si tu as son email)



    Derniers trucs. Le pourquoi tu partais avec un handicap. Tu avais prototypé diverses fonctions, visiblement qui coupent du texte à position fixe, mais sans considération de l'intégrité des mots. Pourquoi pas. Mais cette fonction ne peut pas t'être utile car elle est loin du véritable problème que tu as à résoudre.
    Si au contraire tu part du problème que tu as à résoudre, on voit rapidement comment s'articulent, de là tu raffines au fur et à mesure en rentrant de plus en plus dans les détails.

    De même que de continuer à vouloir garder des lignes en mémoire. C'est s'embéter pour rien. Quand on justifie, on perd la notion de ligne de départ. En entrée, on a un paragraphe, en sortie un ensemble de lignes formattées. En insistant à vouloir voir des lignes en entrée, tu ne vas pas t'en sortir.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 157
    Par défaut
    merci bcp de votre aide, mais si dans vos messages vous pourriez remplacer tout le masculin par du feminin car c'est pas il c'est "elle"!!!!! lol!
    eh oui y'a aussi des filles dans l'informatique tres peu j'avoue mais bon faut pas les oublier !!!!!
    Sinon au lieu d'envoyer la solution au prof tu me l'enverrais à moi directement ce serait genial!!!!! (je plaisante bien sur)
    donc en faite si j'ai bien compris toutes les lignes que je crées je les met dans un tableau (mais comment je fait pour designer les ligne que je creer par rapport au programme que j'ai fait???) puis je compte les mots à l'interieur de ma ligne je regarde les espaces manquant puis je les rajoute.
    Mais tu dit que je part d'un handicap d'ou le programme que je donne au debut il y a des truc à modifier??
    merci d'avance!!!

  13. #13
    Membre éclairé
    Avatar de Zenol
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2004
    Messages
    812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 812
    Par défaut
    Citation Envoyé par widi70
    donc en faite si j'ai bien compris toutes les lignes que je crées je les met dans un tableau (mais comment je fait pour designer les ligne que je creer par rapport au programme que j'ai fait???)
    Tu veut parlir des lignes obtenu après avoir couper à la bone largeur et enlever le dernier mot? Tu peut par exemple stoquer une ligne dans un std::string, puis comparer size() à ta largeur, la diférence étant les espaces manquant, puis ajouter les dits espace dans ce string, avent de l'envoiller sur la sortie (ou en mémoire dans un vecteur par exemple)

    Citation Envoyé par widi70
    puis je compte les mots à l'interieur de ma ligne je regarde les espaces manquant puis je les rajoute.
    Voila
    Citation Envoyé par widi70
    Mais tu dit que je part d'un handicap d'ou le programme que je donne au debut il y a des truc à modifier??
    merci d'avance!!!
    Il a préciser qu'il ne falais pas partir d'une fonction qui découpe n'importe ou sans voir si le mot se terminer à peut après et dans un tel cas qui ne surpime pas les premières lettre du dit mot récupèrer (J'ai comme un doute sur le fait que ma phrase soit fançaise xD)
    Bref, moi en voillant ce que tu à fait, je recomencerait tout à 0 en partant du plus gros problèmes aux sous problèmes (comme ta expliquer ton prof).

    Même si la logique est souvent la même, il existe plusieures fassons d'implémenter une même idée.
    Mes articles Développez | Dernier article : Raytracer en haskell
    Network library : SedNL | Zenol's Blog : http://zenol.fr

    N'oubliez pas de consulter la FAQ et les cours et tutoriels.

  14. #14
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 157
    Par défaut
    mais je comprend pas à quel endroit dans mon programme ça ne marche pas. Par rapport à ce que j'ai fait je ne peut pas rajouter au bout pour pouvoir mettre mes espaces correctement?
    Me dites pas ça????
    Ca fait plus d'une semaine que je boss dessus nuit et jour il est à rendre pour samedi et je vous parle même pas du coeff de ce devoir.
    Moi j'avais penser à ça:

    - je compte les lignes de mon texte et je note la derniere ligne lignemax.
    - compte le nombre de mot par ligne
    - compte le nombre de caractere par ligne.
    - je fait (nb_caractere_ligne)-l (nb max de caract. par ligne)=espace_restant.
    - je fait espace_restant/nb_mot_ligne
    - puis
    Tant que ligne est pas égale à lignemax-1
    Tant que espace_restant/nb_mot_ligne est different de 0
    insert un espace apres mot[1]
    mot=mot+1
    ftant que
    Tant que espace_restant% nb_mot_ligne different de 0
    insert un espace apres mot[1]
    mot=mot+1
    ftant que
    ligne=ligne+1
    ftant que

    Ca, ça ne pourrais pas marcher???? Si je compte mes mots, mes caracteres, mes lignes, je peut les identifier d'ou je peut les numeroté d'ou apres tel mot je peut afficher ce que je veut non????
    Si ça ne marche pas expliquer moi pourquoi et si je doit tout recommencer mon programme dite moi le assez tot.
    Merci

  15. #15
    Membre éclairé
    Avatar de Zenol
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2004
    Messages
    812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 812
    Par défaut
    Citation Envoyé par widi70
    mais je comprend pas à quel endroit dans mon programme ça ne marche pas. Par rapport à ce que j'ai fait je ne peut pas rajouter au bout pour pouvoir mettre mes espaces correctement?
    Me dites pas ça????
    Ca fait plus d'une semaine que je boss dessus nuit et jour il est à rendre pour samedi et je vous parle même pas du coeff de ce devoir.
    Moi j'avais penser à ça:

    - je compte les lignes de mon texte et je note la derniere ligne lignemax.
    - compte le nombre de mot par ligne
    - compte le nombre de caractere par ligne.
    - je fait (nb_caractere_ligne)-l (nb max de caract. par ligne)=espace_restant.
    - je fait espace_restant/nb_mot_ligne
    - puis
    Tant que ligne est pas égale à lignemax-1
    Tant que espace_restant/nb_mot_ligne est different de 0
    insert un espace apres mot[1]
    mot=mot+1
    ftant que
    Tant que espace_restant% nb_mot_ligne different de 0
    insert un espace apres mot[1]
    mot=mot+1
    ftant que
    ligne=ligne+1
    ftant que

    Ca, ça ne pourrais pas marcher???? Si je compte mes mots, mes caracteres, mes lignes, je peut les identifier d'ou je peut les numeroté d'ou apres tel mot je peut afficher ce que je veut non????
    Si ça ne marche pas expliquer moi pourquoi et si je doit tout recommencer mon programme dite moi le assez tot.
    Merci

    Alors, pour moi ce que tu a mit en haut dans ton premier poste ce n'est pas un programme hein x) C'est juste quelques lignes mise on ne sait trop comment. Donc, je voi pas trop ce que fait ton code (c'est loin d'être claire), en gros il récupère du texte comme ca vien, compte le nombre de mot et... et il n'y a plus aucun commentaire et je n'ai pas envi d'y passer 10Min pour déchifrer.
    Se serait moi qui ferait cette exercice, je repartirait au propre de 0.
    (les commentaires sont tes amis, ainssi que ceux de ton prof et de la bonne note :p)

    Il faut bien que tu comprène que l'on ne compte pas le nombre de ligne, on s'en fou royalement. On veut placer un maximume de mot dnas une largeur inférieur à signed int l et combler les aractères manquant par des espaces, quesque ca change que notre texte fasse 20 ligne ou 30 lignes?

    Bon, je vais esseiller de te guider pas à pas en te machant le travaille (du moin au début)

    Voici ce que tu doit faire pour commencer :

    Récupèrer proprement la totalitée du texte(Dans un stringstream ou dans un string, comme tu le sent ^^)
    Apeller une fonction de traitement en lui anvoillent le texte en question et récupèrer sa valeur de retour pour l'aficher

    Dans la dite fonction de traitement
    (Avec un prototype du style std::string Work(std::string Txt, int l); )
    Voila comment je voi la fonction:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Pos = 0
    OutBuffer = ""
    Tant que Pos < Txt.Taille
      Récupèrer L caractère dnas une variable temporaire
      Si la chaine contien un retour à la ligne (\n)
         on la trouque à partir de ce retour à la ligne, et on modifi la valeur de Pos (Pos = Pos_Précédent +Temporaire.Taille ou Pos -= l - Temporaire.Taille)
      Sinon
        Si Temporaire.dernier caractère n'est pas un espace
           Si Txt[L+1] n'est pas un espace
             On remonte dnas Temporaire juscau précédent espace, et on eface de cette espace à la fin. Pos est modifier pour pointer à l'endroit ou se trouvais le debut du mot que l'on a dut éfacer. (Pos -= EspaceRetrancher)
        (cette partie poruait se trouver dnas une autre fonction) On ajoute N = NbCaractères_retrancher espaces en les répartissant de manière homogène (on reviendra sur ce traitement plus tard)
      Stoquer la chaine traiter dans OutBuffer
    Renvoiller OutBuffer
    Plus précis que ca c'est la source du programme ^^

    Allez courage, à première vue c'est beaucoup plus simple que le projet précédent ^^

    Edit : je me suis permit un petit rajout dnas le cas de blabla\nblabla
    Mes articles Développez | Dernier article : Raytracer en haskell
    Network library : SedNL | Zenol's Blog : http://zenol.fr

    N'oubliez pas de consulter la FAQ et les cours et tutoriels.

  16. #16
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 296
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 296
    Par défaut
    Citation Envoyé par widi70
    merci bcp de votre aide, mais si dans vos messages vous pourriez remplacer tout le masculin par du feminin car c'est pas il c'est "elle"!!!!! lol!
    eh oui y'a aussi des filles dans l'informatique tres peu j'avoue mais bon faut pas les oublier !!!!!
    Au temps pour moi. (Et puis entre le pseudo et un participe passé accordé ... à l'infinitif, comment on peut savoir ? )


    Mais tu dit que je part d'un handicap d'ou le programme que je donne au debut il y a des truc à modifier??
    Au lieu de réfléchir en termes de mots, tu réfléchis en termes de lignes. J'avoue que depuis le début je me demande si tu as déjà utilisé des outils qui reformattent des paragraphes. Le truc est que des mots initialement sur une ligne peuvent être passés sur la suivante ou la précédente quand on reformatte des lignes -- avant injection d'espaces supplémentaires pour la justification.
    Non seulement tu peux passer de 60 à 40 caractères par lignes, mais tu peux également passer de 60 à 80 caractères par lignes.

    Du coup, on ne peut pas appliquer la justification sur les lignes de départ (qui proviennent de std::cin). Et il est trop tard pour les appliquer sur les lignes finales (j'entends par là ce qui a été produit après injection dans le flux de sortie std::cout)

    Donc, il faut à un moment donné garder trace de lignes "intermédiaires" : celles pour lesquelles le nombre de mots final a été distribué, mais sur lesquelles la justification n'a pas encore été appliquée.

    Tu peux éventuellement garder une copie complète de lignes (ce qui n'est pas nécessaire).
    De plus, si c'est lignes ont pû être équilibrées (pas encore justifiées), cela veut dire que tu as travaillé sur des mots à l'étape précédente. Si tu passes à une série de caractères sans avoir justifier, c'est idiot car tu vas devoir retrouver les mots (que tu avais précédemment) pour pouvoir justifier.

    La granularité des éléments sur lesquels tu travailles ne me parait pas bonne. Tu entres trop dans les détails trop tôt.

    Justifier un texte c'est quoi ?
    -> justifier tous les paragraphes qui composent le texte

    Qu'est-ce qu'un paragraphe ?
    -> une liste de mots délimitée par deux lignes vides

    Justifier un paragraphe, c'est quoi ?
    -> déterminer pour chaque ligne de sortie le nombre de mots qui tiennent sous un seuil donné (W)
    -> Justifier ces lignes de sortie

    Une ligne de sortie ?
    -> des mots espacés de façon uniforme, et de telle façon que le premier caractère de la ligne soit le premier caractère du premier mot, et que le dernier caractère (du dernier mot) soit en position W,
    -> Cas particulier: la ligne finale qui contient le dernier mot du paragraphe ne doit pas être justifiée.


    Le seul moment où tes lignes initiales (lues dans std::cin) sont importantes, c'est pour déterminer le début et la fin d'un paragraphe. Elles ne servent à rien d'autre : tu ne peux pas justifier directement à partir d'elles car les mots du paragraphe n'ont pas encore été redistribués sur l'ensemble des lignes qui seront produites. La justification ne peut pas être appliquée sur une ligne tant que l'on ne connait pas le nombre de mots qu'elle devra contenir. Quant à revenir sur des caractères au niveau de l'étape intermédiaire je ça contre productif.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  17. #17
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 157
    Par défaut
    a vrai dire j'ai pas super compris ou tu voulais en venir JC Master et surtout comment? je reflechit à un algo cette aprem (autre que celui que j'avais fait) et je vous l'envoi ce soir pour me dire ce que vous en pensez les modif que je doit faire dessus et peut etre m'aider à le programmer!!!!

    Merci bcp de toute votre aide

  18. #18
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 157
    Par défaut
    bon alors j'ai penser à ça vous me dites ce qui va ce qui va pas et pourquoi:
    -je prend le texte et le nombre (l) entré par l'utilisateur.
    -je compte les caracteres dans le texte.
    -A l caractere je vais à la ligne en faisant attention de ne pas couper un mot.
    -Je prend les lignes qui sont creer et je les met dans un tableau pouvant contenir au maximum 81 caracteres (80 caracteres max + '\0').
    - Je compte le nombre de mots pour chaque ligne nouvellement creer (avec un tant que).
    - je compte le nombre de caracteres pour chaque ligne nouvellement creer.
    - je calcul le nombre d'espace à rajouter (avec nb_caractere-l)
    - je calcul ou je doit mettre mes espaces (avec nb_mots/nb_caractere que je rajoute puis nb_mots%nb_caractere que je rajoute a nouveau).

    Et voila c'est finit!!! Bon alors je suis sur que ce que j'ai fait ça ne va pas aller je sais pas trop pourquoi mais je me doute qu'il va y avoir un probleme.
    Bon je suis quand même heureuse car ce devoir est repoussé à mercredi donc bon j'ai encore tout un week end à galerer.
    je compte sur vous pour m'aider merci de toute votre aide sincerement.

  19. #19
    Membre éclairé
    Avatar de Zenol
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2004
    Messages
    812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 812
    Par défaut
    Citation Envoyé par widi70
    -Je prend les lignes qui sont creer et je les met dans un tableau pouvant contenir au maximum 81 caracteres (80 caracteres max + '\0').
    Et le c++ fut gratifier de la STL (C'est bien plus pratique qu'un tableau, surtout dans le cas présent!)

    [QUOTE=widi70]- je calcul ou je doit mettre mes espaces (avec nb_mots/nb_caractere que je rajoute puis nb_mots%nb_caractere que je rajoute a nouveau).[QUOTE]
    Poiurquoi nb_mots/nb_caractere ? O_o et je ne voit pas non plus d'ou tu sort ton nb_mots%nb_caractere (Si tu a 10 mots et 3 cractères à ajoute,r tu ne vas pas ajouter 10%3 caractères + 3/10 caractères? Ca voudrait dire ajouter 2,3 caractères....)

    Citation Envoyé par widi70
    Et voila c'est finit!!! Bon alors je suis sur que ce que j'ai fait ça ne va pas aller je sais pas trop pourquoi mais je me doute qu'il va y avoir un probleme.
    Bon je suis quand même heureuse car ce devoir est repoussé à mercredi donc bon j'ai encore tout un week end à galerer.
    je compte sur vous pour m'aider merci de toute votre aide sincerement.
    Je ferait mon possible, en espérent que je m'exprime assé lisiblement :s
    Mes articles Développez | Dernier article : Raytracer en haskell
    Network library : SedNL | Zenol's Blog : http://zenol.fr

    N'oubliez pas de consulter la FAQ et les cours et tutoriels.

  20. #20
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 157
    Par défaut
    désolé je me suis trompée pour mes espaces il faut faire:
    espace_restant/ nb_mot
    et
    espace_restant% nb_mot (au cas ou que ta division est un reste)

    et tu veut dire quoi quand tu dit:
    Et le c++ fut gratifier de la STL
    tu entend quoi par STL, j'ai jamais fait ou je sais pas que ça s'appelle comme ça.
    Et sinon alors t'en pense quoi de ma "sorte d'algo". Bon pas bon? A refaire, à modifier? Dit moi?

Discussions similaires

  1. Réponses: 9
    Dernier message: 06/11/2007, 12h36
  2. Supprimer les espaces dans une chaine de caractères
    Par arnaudperfect dans le forum Shell et commandes GNU
    Réponses: 13
    Dernier message: 23/07/2007, 22h24
  3. Effacer les espaces dans une chaîne de caractères
    Par JohnnyWalk dans le forum Débuter avec Java
    Réponses: 16
    Dernier message: 19/07/2007, 14h13
  4. supprimer les espaces dans une chaîne de caratères.
    Par Empty_body dans le forum Langage
    Réponses: 2
    Dernier message: 12/09/2006, 18h43
  5. [VB6]Gérer les espaces dans une command FTP
    Par ShortcutZ dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 24/07/2006, 21h28

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