Aller au menu - Aller au contenu

[Plan du site] Vous êtes ici --- > Le Site du Zéro > Les forums > Programmation > Langage C++ > [Exercices] Venez vous entraîner ! > Lecture du sujet

[Exercices] Venez vous entraîner !

Un nouvel exercice chaque mois

Vous devez être inscrit pour pouvoir poster des messages

Page : Précédente  1  2  3  ...  21  22  23  24  25  26  27  28  29  Suivante
Auteur Message
1 visiteur sur ce sujet (1 anonyme)
Page : Précédente  1  2  3  ...  21  22  23  24  25  26  27  28  29  Suivante
Hors ligne Nanoc # Posté le 30/08/2008 à 23:04:15
Apprenez à utiliser la STL !!
Avatar
Groupe : Membres
Reprise du dernier message de la page précédente :

Solution du mois de juillet 2008

(Enfin !)

Avec un peu de retard, je vous présente la solution de l'exercice du mois de juillet sur les statistiques des fichiers. J'ai reçu une dizaine de réponses et j'ai finalement retenu celle de Leilo. J'ai d'ailleurs reçu une explication complète du programme que je vous donne tel-quel ici.
J'ai retenu ce code parce qu'il utilise les exceptions, les manipulateurs de flux et que la lecture du fichier se fait de manière correcte. C'est un excellent exemple, il manque juste un peu de commentaires à mon goût.

Solution complète



Cher Nanoc, ^^

Voici mon code pour l'exercice sur les "Statistiques sur des fichiers",
La grande difficulté de cette exercice était l'algo de calcul des mots et des paragraphes. En effet pour ma part mon algo se contente de compter les blancs entre chaque mots et d'en déduire le nombre de mots, par exemple si dans une phrases il y a 3 blancs

mot1 blanc mot2 blanc mot3 blanc mot4

Ici trois blanc donc quatre mots. ;)

Néanmoins il faut ignorer tout blanc se situant en début ou fin de ligne, là se situé une première dificulté.
En outre il ne suffisait pas de compter le nombre d'espaces ou de tabulations pour avoir le nombre de blancs,
un blanc peut aussi être une suite d'espaces ou de tabulations, là se situe la seconde dificulté,

Enfin il fallait reitérer le même procéder pour compter les paragraphes mais cette fois ci avec les '\n'

paragraphe 1
'\n'
paragraphe 2
'\n'
paragraphe 3

Deux ' \n ' donc trois paragraphes :p
et on se confronte encore au même difficultés de '\n' situés au debut ou/et à la fin :(
De même 2 paragraphes peuvent être séparés par plusieurs '\n' :o

PS: j'ai voulu utiliser un maximum la STL et ai donc pensé utiliser le predicat isspace() de <cctype> mais pour certain caractères tel que ' à ' la fonction renvoyé true alors qu'elle ne devait pas , j'ai donc implementé mon propre prédicat IsSpace() :(

Remarque de Nanoc: Oui std::isspace() est une excellente idée, mais il ne marche qu'avec les caractères ASCII standards c'est-à-dire sans les accents.

PS2: j'ai volontairement tout placé dans un fichier pour me simplifier la vie :D

J'espère ne pas trop t'avoir dégouté avec mes explications mais je tenai à t'en faire part dans le cas ou te ne comprendrai pas mon algo voila ^^ Bonne lecture


Code : C++
  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
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
//fichier main.cpp

#include <iostream>
#include <fstream>
#include <iomanip>
//#include <cctype>   // isspace()

using namespace std;

int  GereArguments(char argc ,char *argv[])           ;
bool IsSpace      (char C )                           ;
void Calcul       (const string & , ostream & = cout );
void AfficherAide (void);


int main(char argc,char*argv[])
{
    bool retour;
    try
    {
        retour = GereArguments(argc,argv);
    }
    catch(const string & e)
    {
        cerr << e;
        retour = EXIT_FAILURE;
    }
    return retour;
}

int  GereArguments(char argc ,char *argv[])
{
    if (argc > 4 || argc < 2)
    {
        AfficherAide();
        return EXIT_FAILURE;
    }
    string NomFichier = argv[1];

    if (argc > 2 )
    {
        string Argument2  = argv[2];
        if (Argument2 != "-d")
        {
            AfficherAide();
            return EXIT_FAILURE;
        }
        if (argc == 3) throw string("Veuillez preciser le nom du fichier de sortie\n");

        string FichierDeSortie = argv[3];

        ofstream FluxDeSortie(FichierDeSortie.c_str(),ios::out | ios::trunc);
        if (FluxDeSortie)
        {
            Calcul(NomFichier, FluxDeSortie);            
        }
        else
            throw string("Erreur dans l'ouverture du fichier destination : " + FichierDeSortie );
    }
    else
    {
        Calcul(NomFichier);
    }
    return EXIT_SUCCESS;
}

void Calcul (const string & FichierAnalyse, ostream & FluxDeSortie )
{
    ifstream FluxAnalyse (FichierAnalyse.c_str(), ios::in);

    if(FluxAnalyse)
    {
        cout << "Calcul en cour..." << endl   ;
        string Buffer                         ;

        unsigned int NbCaracEnTout     = 0    ;
        unsigned int NbCaracSansEspace = 0    ;
        unsigned int NbMots            = 0    ;
        unsigned int NbParagraphe      = 0    ;
        bool         PrecIsSpace       = true ;
        bool         PrecIsCR          = true ;
        bool         BufferEstVide            ;

        while ( getline(FluxAnalyse,Buffer) )
        {
            BufferEstVide = (Buffer == "");


            if ( BufferEstVide && !PrecIsCR )++NbParagraphe;

            PrecIsCR =  BufferEstVide;

            PrecIsSpace = true ;
            for (unsigned i = 0 ; i < Buffer.size() ; i++)
            {
                ++NbCaracEnTout;

                if ( IsSpace(Buffer[i]) )
                {

                    if ( 0 == i || i == Buffer.size()-1 || IsSpace( Buffer[i+1] ) )continue;
                    if (!PrecIsSpace) ++NbMots;

                }
                else
                {
                    ++NbCaracSansEspace;
                    PrecIsSpace = false ;
                }
             }
             if ( !BufferEstVide )++NbMots;

        }
        if (!PrecIsCR) ++NbParagraphe;


        FluxDeSortie << "+"          << setfill('-') << setw(40) << "+"
                     << setfill('-') << setw(8)      << "+"      << endl

                     << setfill(' ') << "| "    << left  << setw(37) << "Nombre de caracteres :"
                     << setfill(' ') << " | "   << right << setw(5) << NbCaracEnTout << " |"   << endl

                     << "| "    << left  << "Nombre de caracteres (hors espace) : "
                     << " | "   << right << setw(5 ) << NbCaracSansEspace << " |"   << endl

                     << "| "    << left  << setw(37) << "Nombre de mots :  "
                     << " | "   << right << setw(5 ) << NbMots << " |"   << endl

                     << "| "    << left  << setw(37) << "Nombre de paragraphes : "
                     << " | "   << right << setw(5 ) << NbParagraphe  << " |"   << endl

                     << "+" << setfill('-') << setw(40) << "+"
                     << setfill('-') << setw(8) << "+" << endl ;
    }
    else
               throw string("Erreur pour l'ouverture du fichier : "+ FichierAnalyse);

    if (FluxDeSortie != cout) cout  << "Calcul termine avec succes \n";
}



bool IsSpace (char C)
{
    return ( C == ' '  ||
             C == '\t' ||
             C == '\n' );
}

void AfficherAide (void)
{
    cout <<"Aide: \nCeci est un programme permettant de calculer differente statistiques a partir d'un "
           "fichier texte situe dans le repertoire courant de l'executable\n\n"
           "Commande : Statisqtique Nom_du_Fichier_A_Analyser\n\n"
           "Option   : -d Nom_du_Fichier_Ou_Sauver_Les_Resultats \n\n"
           "Exemple  : - Statistique test.txt --> Permet d'analyser le fichier test.txt\n"
           "           - Statistique test.txt -d temp.txt --> Analyse le fichier test.txt et stoque les resultats dans temp.txt \n";
}



Remarques sur les codes reçus



En fait, je n'ai pas grand chose à dire ce mois, les codes étaient globalement très bien. Les points suivants sont néanmoins à soulever:

  • C'est bien d'utiliser les manipulateurs de flux, mais c'est encore mieux de les utiliser tout le temps. Par exemple pour faire le cadre avec des "+".
  • Lancer des exceptions, c'est très bien. Les rattraper et agir en conséquence (ici: afficher un messafe d'erreur) c'est encore mieux.


Il ne sert à rien d'envoyer votre code si il ne fonctionne pas ou pire, si il ne compile pas.


Merci à tous ceux qui ont participé. Et bonne chance avec l'exercice suivant !
Édité le 30/08/2008 à 23:06:12 par Nanoc
 
Hors ligne lmghs # Posté le 30/08/2008 à 23:58:42
Groupe : Membres
Si je puis me permettre,
- préférez toujours les exceptions dérivant de std::exception (ici : std::runtime_error est très bien)

- pour le isspace, allez le chercher dans la partie C++ et non la partie C -> <locale>, afin de passer la locale de la langue courante à std::isspace<>() -- j'avoue, je n'ai pas testé. Pour le ispace du C, il faut avoir changé la locale globale si je ne m'abuse.
NB: dans l'absolu, il faudrait jouer avec ispunct(...)||ispace(...)

- ou tout simplement, convertissez la ligne extraite en flux (std::istringstream), et utilisez ensuite l'opérateur d'extraction (op>>()) pour extraire chaque mot.

- ces fonctions me paraisse faire trop de choses. Il ne faut pas avoir peur de les découper.
 
Hors ligne Dr.Tenma # Posté le 01/09/2008 à 15:00:04
Avatar
Groupe : Membres
Arf j'avais carrément oublié cet exercice, y me manquait les paragraphes =/
Puis moi j'ai un code plus court :o http://pastebin.com/d4e1804d8

Quand le chat n'est pas là les souris sont sous morphine
 
Hors ligne lmghs # Posté le 01/09/2008 à 15:54:24
Groupe : Membres
Ta détection des paragraphes n'est pas bonne -- tu confonds "\\n" et "\n" qui sont tout deux inexploitables en fait, vu que tu extrais avec std::getline.

Un nouveau paragraphe commence sur le premier \S après un ^\s*$ (en notation expression régulière, ce qui n'est qu'un détail)

Pourquoi passer par un char* ? std::string fournit un opérateur [] (même si tu n'en as pas besoin)

On NE fait JAMAIS de lecture sur eof.
Édité le 01/09/2008 à 15:55:08 par lmghs
 
Hors ligne Hertzien' # Posté le 02/09/2008 à 10:02:10
C++, C(encore)++ fort !
Avatar
Groupe : Membres
J'ai une question que je me suis posé toujours, pourquoi on lis jamais sur eof ?

Mon problème : [FFMpeg] Installation
Notre équipe : C++ (au complet !)
SuperTux : Le jeu qui innove !
SFML - Anim : Ma classe C++ pour gérer les sprites SFML animés
 
Hors ligne lmghs # Posté le 02/09/2008 à 10:34:05
Groupe : Membres
Réponse dans la FAQ C++ de développez.
 
Hors ligne icare14 # Posté le 09/09/2008 à 21:25:34
Avatar
Groupe : Membres
je me demandais si il n'était pas possible de mettre les exos et les réponses dans un sujet à part de telle manière que pour trouver ou refaire des exos on aie pas à parcourir les 24 pages actuellement et les futurs 150 pages qui vont venir

voilà c'est tout sinon bon courage à nanoc qui fait unsuper boulot

Citation : Pas de titre
Le français est un langage de communication pas si difficile à coder de ça !
 
Hors ligne BoudBoulMan # Posté le 09/09/2008 à 21:59:03
Saucisse transgénique
Avatar
Groupe : Membres
Nanoc édite régulièrement le 1er post pour y mettre les liens vers les posts de chaque énoncé et chaque solution.

Pas besoin de créer un nouveau topic.
Hors ligne icare14 # Posté le 09/09/2008 à 22:29:42
Avatar
Groupe : Membres
ok merci j0avais pas vu

Citation : Pas de titre
Le français est un langage de communication pas si difficile à coder de ça !
 
Hors ligne Nanoc # Posté le 15/09/2008 à 20:55:56
Apprenez à utiliser la STL !!
Avatar
Groupe : Membres

Exercice du mois de septembre 2008



Nom : ... et des lettres
Sujet : Algorithme


Introduction



Vous connaissez très certainement le célèbre jeu télévisé "Des chiffres et des lettres". Ce que je vous propose ce mois est de coder un programme qui résoud l'autre partie du jeu, "Le mot le plus long".

Les règles du jeu sont simples mais le jeu est assez difficile. On tire au hasard 9 lettres et on cherche un mot français (orthographié correctement) écrits avec ces 9 lettres. Si on ne trouve pas de mots de 9 lettres, on cherche en 8 lettres et ainsi de suite.

Le tirage des lettres, se passe de la manière suivante. On demande au joueur si il désire une consonne ou une voyelle et on lui donne une lettre au hasard selon son choix et on recommence pour les 8 autres. Le règlement impose qu'il y ait au minimum 2 voyelles. (Y est une voyelle)

L'exercice



Votre programme devra tirer au hasard des lettres selon les règles définies au-dessus.
Il devra ensuite chercher la meilleure solution possible à partir du dictionnaire suivant:

Dictionnaire de 323 578 mots (3.5 Mio)

et l'afficher à l'écran. Si il y a plusieurs solutions, libre à vous de les afficher toutes ou non.

Ce qui donne par exemple :
Code : Console
Tirage : S I N U S A M O R
Solutions possibles en 9 lettres :
MARSOUINS
SOUS-MARIN


Remarque concernant le dictionnaire: Le dico contient des verbes conjugués ainsi que des pluriels. Il est donc suffisament complet. Il ne contient que des caractères sans majuscules, sans accents et sans cédilles.

Votre programme devra fonctionner avec le dictionnaire situé dans le même dossier que l'exécutable et ne pas nécessiter d'autres fichiers que celui fourni.

----------------------------------------------------------------------

La donnée est assez courte, mais je pense que le tout est assez clair. N'hésitez pas à poser des questions si ce n'est pas le cas.

Vous avez jusqu'au 15 octobre pour soumettre vos réponses à Réponse_Exercices.

Bonne chance à tous !

Édité le 15/09/2008 à 20:59:55 par Nanoc
 
Hors ligne gymnopaul # Posté le 15/09/2008 à 21:13:10
I could go supersonic !
Avatar
Groupe : Membres
Superbe exo :) ! Je me lance dès que mon site est fini !

Projet en cours : 2D-3D-Games -> Tutoriels vidéo sur la création de jeux vidéos
Mes connaissances :
Langages : C - C++ (mon préféré ^^ ) - HTML - PHP - SQL
3D : Blender

 
Hors ligne C_dur # Posté le 16/09/2008 à 15:06:24
C'est facile quand on sait
Avatar
Groupe : Membres
Bonjour à tous,

Sympa l'exo... mais pas simple pour autant :D

Pas question de modifier le contenu du dico (un classement par taille par ex) ?

a+
C_dur


"Le travail en équipe est extrêmement important... ne fusse que pour pouvoir s'en prendre à quelqu'un si quelque chose devait tourner mal "




 
Hors ligne Nanoc # Posté le 16/09/2008 à 17:19:28
Apprenez à utiliser la STL !!
Avatar
Groupe : Membres
Ton programme peut très bien commencer par créer un nouveau fichier ne contenant que les mots de 9 lettres et moins à partir du dictionnaire fourni si tu veux. Tu peux également le classer par taille par la même occasion.

Mais par souci de comparaison, le dictionnaire doit être le même pour tout le monde.
 
Hors ligne C_dur # Posté le 16/09/2008 à 17:30:06
C'est facile quand on sait
Avatar
Groupe : Membres
Citation : Nanoc
et ne pas nécessiter d'autres fichiers que celui fourni.

Citation : Nanoc
Ton programme peut très bien commencer par créer un nouveau fichier


Je suppose que tu as voulu dire que je pouvais créer un fichier temporaire (dans la mémoire) ?

Merci pour les infos
C_dur

"Le travail en équipe est extrêmement important... ne fusse que pour pouvoir s'en prendre à quelqu'un si quelque chose devait tourner mal "




 
Hors ligne Nanoc # Posté le 16/09/2008 à 17:34:49
Apprenez à utiliser la STL !!
Avatar
Groupe : Membres
Dans la RAM ou sur le disque peu importe.

Tu peux faire ce que tu veux en fait du moment que le programme n'a besoin que du fichier fourni.
 
Hors ligne C_dur # Posté le 16/09/2008 à 19:00:50
C'est facile quand on sait
Avatar
Groupe : Membres
ah, ok ! J'ai enfin compris la nuance :+(
Désolé pour le dérangement.... et merci encore pour l'exo

"Le travail en équipe est extrêmement important... ne fusse que pour pouvoir s'en prendre à quelqu'un si quelque chose devait tourner mal "




 
Hors ligne Anarchie93 # Posté le 17/09/2008 à 22:35:13
Avatar
Groupe : Membres
Oups,

Je viens d'envoyer mon code pour le compte est bon un peu en retard à reponse-exercices du fait que je n'ai vu cet exercice que le 13 septembre, un peu avant de m'inscrire sur le site!

J'espére qu'il le verra!!! sinon tant pis :(

Image utilisateur


Depuis longtemps je pense que si le travail était une chose si remarquable, les riches et les puissants l'auraient gardé pour eux!
 
Hors ligne Nanoc # Posté le 18/09/2008 à 10:50:53
Apprenez à utiliser la STL !!
Avatar
Groupe : Membres
Pas de problème ! Reponse_Exercice voit tout :)
 
Hors ligne MatteX # Posté le 26/09/2008 à 04:33:43
The cake is a lie!
Avatar
Groupe : Membres
Bon désolé du retard dans la discussion... En passant, je suis content d'avoir proposé un code assez structuré pour être utiliser en exemple. Mon code semble ne pas faire l'unanimité, ce n'est pas grave. S'il plante, je suis désolé, j'ai fait ça sur l'heure du midi et j'avoue ne pas avoir rudement testé.

En réponse à Darkelfe et aussi Freedom

Citation : Darkelfe
C'est pas tellement un problème mais j'ai remarqué une "anomalie" dans le code de MatteX.

Le code suivant (qui ne doit pas fonctionner) passe très bien avec le programme de MatteX :
Code : Autre
1
2
++++[>+++++++++<-]
].[


Si on observe le fonctionnement en détail, on voit que le programme se comporte comme si les deuxième ']' et '[' était inversé (il fait la boucle). [...]


Donc [ ] = tant que valeur du pointeur != 0
] [ = tant que valeur du pointeur == 0

Ce n'est pas décrit partout (le Wikipedia francophone parle seulement de la première forme), mais je trouvais que cela ajoutais du piquant à mon interpréteur et du Fuck au BrainFuck.

La difficulté réside dans la capacité de déterminer qu'est-ce qui débute une boucle et ce qui la termine... j'ai choisi, si ma mémoire est bonne, d'accepter l'imbrication seulement des boucles semblables.

Source :
http://en.wikipedia.org/wiki/Brainfuck
http://www.muppetlabs.com/~breadbox/bf/

Je suis bien d'accord pour le switch. C'est l'habitude des langages un peu moins évolués qui n'ont pas ce genre de structure conditionnelle qui me fait opter pour les if-else.


P.S. Si ça plante (ou plantais, je ne sais si Nanoc a corrigé) je suis navré. Je n'ai pas testé beaucoup de code BrainFuck dans mon interpréteur. D'ailleurs je suis encore surpris qu'il ai servi d'exemple principal. Merci :D

liens utiles: FAQ C++ (developpez.com) | GotAPI.com | H-Deb
Mon futur ex-blog | Logique : http://thedailywtf.com/Articles/What_Is_Truth_0x3f_.aspx
Propriétaire d'un Dell Inspiron 1720, Core 2 Duo 2.4Ghz, 3Go DDR2, 8600M GT 256Mo. Avec Blu-Ray!
 
Hors ligne Nanoc # Posté le 07/10/2008 à 17:50:23
Apprenez à utiliser la STL !!
Avatar
Groupe : Membres
Je me permet de faire un peu de pub pour la suite de mon tuto: http://www.siteduzero.com/tutoriel-3-8 [...] avancees.html

Sinon, pour répondre à MatteX: Oui j'ai corrigé ton code.
 
Hors ligne gymnopaul # Posté le 07/10/2008 à 18:10:03
I could go supersonic !
Avatar
Groupe : Membres
Super cool, je me mets tout de suite à la lecture du tuto :) .

Projet en cours : 2D-3D-Games -> Tutoriels vidéo sur la création de jeux vidéos
Mes connaissances :
Langages : C - C++ (mon préféré ^^ ) - HTML - PHP - SQL
3D : Blender

 
Hors ligne The French # Posté le 07/10/2008 à 18:13:46
un zero, deux zero, zzzzzzzz
Avatar
Groupe : Membres
Merci beaucoup Nanoc pour ce tuto.
Est-ce que tu pourrais lister sur quoi va être ton tuto stp?

Merci d'avance
Hors ligne Meseira # Posté le 14/10/2008 à 15:29:01
Avatar
Groupe : Membres
Citation : Nanoc
Remarque concernant le dictionnaire: [...] Il ne contient que des caractères sans majuscules, sans accents et sans cédilles.


Je voudrais juste faire remarquer que le dictionnaire que tu fournis contient des lettres majuscules contrairement à ce qui est dit dans l'énoncé. Le 'A' par exemple (mais il y en a bien d'autres):
Code : Console
# cat liste_finale.txt | grep A
Antechrist
Antechrists
Ave


Édité le 14/10/2008 à 15:30:20 par Meseira
Hors ligne Nanoc # Posté le 14/10/2008 à 22:07:20
Apprenez à utiliser la STL !!
Avatar
Groupe : Membres
Aaaarg ! Il me semblait pourtant avoir vérifié... Bon je vais corriger cela.

Mais bon, cela ne change rien à l'exercice.

@The French: Les sujets suivants devraient être:
- T.P. sur le polymorphisme
- Exceptions
- Templates (au moins 3 chapitres)
- T.P. sur les templates
- Héritage multiple (au moins 2 chapitres)
- T.P. sur l'héritage multiple
- ...

 
Hors ligne Hiura # Posté le 14/10/2008 à 22:35:44
Avatar
Groupe : Membres
OuOuuu!! Je sens que je vais déguster! :) [Merci]
 
Hors ligne gymnopaul # Posté le 15/10/2008 à 12:35:59
I could go supersonic !
Avatar
Groupe : Membres
Oui ça fait plaisir ça :) !

Projet en cours : 2D-3D-Games -> Tutoriels vidéo sur la création de jeux vidéos
Mes connaissances :
Langages : C - C++ (mon préféré ^^ ) - HTML - PHP - SQL
3D : Blender

 
Hors ligne Nanoc # Posté le 15/10/2008 à 18:09:51
Apprenez à utiliser la STL !!
Avatar
Groupe : Membres

Exercice du mois d'octobre 2008



Nom : Fractions
Sujet : Classes, surcharge d'opérateurs


En C++, vous pouvez représenter différents types de données. Les entiers, les nombres réels, les nombres complexes,... Mais il n'existe pas de type représentant une notion que l'on retrouve souvent en mathématique, les fractions. Vous l'avez sûrement deviné, je vous propose ce mois de créer une classe pour palier à ce "manque".
Cet exercice est également un grand classique de la programmation.

L'exercice



Le but de cet exercice est de réaliser une classe Fraction qui permettera de représenter la notion de fraction. Pour rappel, une fraction est un nombre donné par le rapport de deux nombres entiers. Par exemple \frac{22}{7} ou \frac{355}{113}.

Votre classe devra fournir les services suivants:

1) Construction à partir d'un nombre entier.

1 bis) Construction à partir d'un couple d'entier "Numérateur-Dénominateur".

2) Construction à partir d'un nombre à virgule (double).

3) Construction à partir d'une chaine de caractère de la forme "35/8" (sans les "").

4) Surcharge des opérateurs arithmétiques usuels (+,-,*,/) et pourquoi pas puissance via l'opérateur ^. Attention aux divisions par 0. Pensez également à implémenter les versions +=,-=,*=,/= et ^= des opérateurs. Vous pouvez également réfléchir à la question des opérateurs du type "Fraction + Entier" ou "Reel + Fraction".

5) Surcharger l'opérateur << pour l'affichage dans un flux. (Pensez au cas particulier des fractions comme \frac{2}{1} par exemple !)

6) Surcharger les opérateurs de comparaison (==,!=,<,>,<=,>=).

7) Proposer une fonction "toDouble" qui convertit la fraction en nombre à virgule.

8) Proposer un moyen de connaître le dénominateur et le numérateur.

Votre fraction devra toujours être exprimée sous forme irréductible. C'est-à-dire que \frac{4}{8} devra être converti en \frac{1}{2}


Pour trouver un moyen d'implémenter les opérateurs, je vous laisse revoir vos cours de maths ou Wikipedia par exemple.

Vous avez jusqu'au 14 novembre pour soumettre vos réponses à Réponse_Exercices.

Bonne chance à tous !

EDIT: Ajout d'un constructeur que j'avais oublié.
Édité le 15/10/2008 à 20:54:25 par Nanoc
 
Hors ligne lmghs # Posté le 15/10/2008 à 19:00:49
Groupe : Membres
4) Le fait que tu ne parles par de "I + R", "R + I", "+=", etc.
C'est fait pour ?

(je soulève la question parce que le tuto n'a pas choisi de montrer la façon idiomatique de procéder, et que du coup ils risquent de reproduire l'erreur classique ; alors que l'exo en lui même est suffisamment simple pour guider vers cette solution idiomatique)
 
Hors ligne gymnopaul # Posté le 15/10/2008 à 20:02:30
I could go supersonic !
Avatar
Groupe : Membres
Très bon exercice, je m'y mets tout de suite :) !

Projet en cours : 2D-3D-Games -> Tutoriels vidéo sur la création de jeux vidéos
Mes connaissances :
Langages : C - C++ (mon préféré ^^ ) - HTML - PHP - SQL
3D : Blender

 
Hors ligne Nanoc # Posté le 15/10/2008 à 20:05:41
Apprenez à utiliser la STL !!
Avatar
Groupe : Membres
Citation : lmghs
4) Le fait que tu ne parles par de "I + R", "R + I", "+=", etc.
C'est fait pour ?

(je soulève la question parce que le tuto n'a pas choisi de montrer la façon idiomatique de procéder, et que du coup ils risquent de reproduire l'erreur classique ; alors que l'exo en lui même est suffisamment simple pour guider vers cette solution idiomatique)


Non, cela me semblait évident. Mais tu as raison, je vais détailler.

Avec le constructeur depuis un double ou un int, les I+R et R+I ne devraient pas être nécessaires.
Édité le 15/10/2008 à 20:07:29 par Nanoc
 
Hors ligne raphamil # Posté le 15/10/2008 à 20:28:58
Avatar
Groupe : Membres
Qu'est-ce que tu entends par "construction à partir d'un entier" : un entier est déjà sous forme irrédutible, non ? Donc pas raison de le changer ?
(Je préfère être spur pour éviter de commencer par faire n'importe quoi ^^ )

Pour la construction à partir d'une chaîne de caractères, on a à gérer qu'une seule division, pas des cas du style : 35/3/2 ?

Edit : fautes de frappe (j'en ai maaare...)
Édité le 15/10/2008 à 20:32:05 par raphamil

(\__/)
(/¤.¤\) <= Lapinator ! ^^
('')|('')
Exécuter plusieurs fonctions au chargement d'une pageUne horloge temps réel grâce à Javascript (nouveau) • Séparer le comportement de la strucure (bientôt) • Chercher plus rapidement dans la doc Qt
72.73% apple-geek
 

Retour au forum "Langage C++" ou à la liste des forums

Vous devez être inscrit pour pouvoir poster des messages

Changer de design | En savoir plus | Plan du site | Politique d'accessibilité | Règles | RSS tutoriels | RSS news
Édité par Simple IT SARL : Nous contacter | Notre blog | Revue de presse | Publicité

Y'a plus rien à lire, faut remonter maintenant !

Hébergement web - Correction de tutoriels - Créer un site
Vous souhaitez apparaître ici ? Contactez-nous.

Nombre de connectés 138 Zéros connectés | Requêtes SQL 8 requêtes | Temps de génération de la page : Total (SQL) 0.0712s (0.0541s)