User Tools

Site Tools


in204:tds:sujets:td5:part2

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
in204:tds:sujets:td5:part2 [2020/10/14 06:46]
bmonsuez
in204:tds:sujets:td5:part2 [2022/11/18 10:48] (current)
Line 24: Line 24:
  
 L'​opérateur prend comme premier argument un flux en lecture [[https://​en.cppreference.com/​w/​cpp/​io/​basic_istream|''​std::​basic_istream<​charT,​ charTraits>&''​]] et comme second argument un nombre ''​Complex''​. Comme le nombre va pas être modifié, il est nécessaire de passer une référence à l'​objet qui va recevoir la valeur lue du flux, d'où la signature précédente. Comme nous souhaitons associer les opérations d'​écriture sur le flux, l'​opérateur ''>>''​ retourne une référence sur le flux duquel nous venons de lire la donnée. L'​opérateur prend comme premier argument un flux en lecture [[https://​en.cppreference.com/​w/​cpp/​io/​basic_istream|''​std::​basic_istream<​charT,​ charTraits>&''​]] et comme second argument un nombre ''​Complex''​. Comme le nombre va pas être modifié, il est nécessaire de passer une référence à l'​objet qui va recevoir la valeur lue du flux, d'où la signature précédente. Comme nous souhaitons associer les opérations d'​écriture sur le flux, l'​opérateur ''>>''​ retourne une référence sur le flux duquel nous venons de lire la donnée.
- 
- 
- 
- 
- 
  
 ==== Question n°1.1 ==== ==== Question n°1.1 ====
Line 42: Line 37:
  
 <hidden Correction>​ <hidden Correction>​
-<nodisp 2> 
  
 L'​opérateur ''​std::​basic_ostream<​charT,​ traits>&​ operator << (std::​basic_ostream<​charT,​ traits>&,​ const Complex&​)''​ doit être défini en dehors de la classe ''​Complex''​ puisqu'​il prend comme premier argument un argument de type différent de ''​Complex''​. Cependant, cet opérateur doit pouvoir accéder aux champs internes de la classe. ​ L'​opérateur ''​std::​basic_ostream<​charT,​ traits>&​ operator << (std::​basic_ostream<​charT,​ traits>&,​ const Complex&​)''​ doit être défini en dehors de la classe ''​Complex''​ puisqu'​il prend comme premier argument un argument de type différent de ''​Complex''​. Cependant, cet opérateur doit pouvoir accéder aux champs internes de la classe. ​
Line 96: Line 90:
 </​code>​ </​code>​
  
-</nodisp>+Il serait cependant préférable de pouvoir effectuer un affichage minimaliste des nombres complexes. Ainsi, nous nous contentons d'​afficher la partie réelle si la partie imaginaire et nulle ou la seule partie imaginaire si la partie réelle est nulle. Cet affichage plus proche de l'​affiche courant peut être fourni pas le code suivant : 
 + 
 +<code cpp> 
 +template<​class charT, class charTraits>​ 
 +std::​basic_ostream<​charT>&​ operator <<( 
 +    std::​basic_ostream<​charT,​ charTraits>&​ aStream,  
 +    const Complex&​ aValue) 
 +
 +    if(aValue.mRealPart != 0 &&​ 
 +        aValue.mImaginaryPart != 0) 
 +        aStream << aValue.mRealPart << "​+"​ << aValue.mImaginaryPart << "​i";​ 
 +    else if(aValue.mImaginaryPart != 0) 
 +        aStream << aValue.mImaginaryPart << "​i";​ 
 +    else 
 +        aStream << aValue.mRealPart;​ 
 +
 +</code>
 </​hidden>​ </​hidden>​
  
Line 110: Line 120:
 x x
 </​code>​ </​code>​
 +
  
 Définissez une opération de lecture d’un flux effectuant cette lecture d’un objet de type ''​Complex''​. Définissez une opération de lecture d’un flux effectuant cette lecture d’un objet de type ''​Complex''​.
Line 134: Line 145:
 Typiquement les fonctions suivantes : Typiquement les fonctions suivantes :
   * [[https://​en.cppreference.com/​w/​cpp/​io/​basic_istream/​get|''​get''​]],​ [[https://​en.cppreference.com/​w/​cpp/​io/​basic_istream/​peek|''​peek''​]] vous permettent d'​avancer dans la lecture des caractères, ​   * [[https://​en.cppreference.com/​w/​cpp/​io/​basic_istream/​get|''​get''​]],​ [[https://​en.cppreference.com/​w/​cpp/​io/​basic_istream/​peek|''​peek''​]] vous permettent d'​avancer dans la lecture des caractères, ​
-  * [[https://​en.cppreference.com/​w/​cpp/​io/​basic_istream/​unget||''​unget''​]] vous permettent de remettre un caractère que vous venez d'​extraire dans le flux,+  * [[https://​en.cppreference.com/​w/​cpp/​io/​basic_istream/​unget|''​unget''​]] vous permettent de remettre un caractère que vous venez d'​extraire dans le flux,
   * [[https://​en.cppreference.com/​w/​cpp/​io/​basic_istream/​tellg|''​tellg''​]] et [[https://​en.cppreference.com/​w/​cpp/​io/​basic_istream/​seekg|''​seekg''​]] vous permettent d'​accéder à la position courant et de revenir à une position antérieur.   * [[https://​en.cppreference.com/​w/​cpp/​io/​basic_istream/​tellg|''​tellg''​]] et [[https://​en.cppreference.com/​w/​cpp/​io/​basic_istream/​seekg|''​seekg''​]] vous permettent d'​accéder à la position courant et de revenir à une position antérieur.
 pourront vous être utiles. pourront vous être utiles.
  
 ---- ----
 +
 +<hidden Correction>​
 +
 +Nous començons à nous intéresser à l'​affichage selon le format:
 +
 +</​hidden>​
  
 ==== Question n°1.3 (En dehors du cours !) ====  ==== Question n°1.3 (En dehors du cours !) ==== 
in204/tds/sujets/td5/part2.1602657997.txt.gz · Last modified: 2020/10/14 06:46 by bmonsuez