C++ Bc. 18: Porovnání verzí

Z GeoWikiCZ
Bez shrnutí editace
 
m (priklad - vystup)
 
(Není zobrazeno 13 mezilehlých verzí od 2 dalších uživatelů.)
Řádek 1: Řádek 1:
#include <iostream>
Napište funkci <tt>komentar()</tt>, která čte vstupní proud a přeskočí v něm všechny komentáře <tt>/* ... */</tt>.
#include <sstream>
 
  std::istream& komentar(std::istream& inp);
  std::istream& komentar(std::istream& inp);
 
int main()
Demonstrujte správnou činnost funkce v testovacím programu, který čte dvojice souřadnic x a y a počítá jejich těžiště.
{
 
  using namespace std;
''' Příklad - vstup'''
   
 
  istringstream
  /* vstup obsahuje souradnice x a y */
    data("/* vstup obsahuje souradnice x a y */ "
/* x */ 123.54  /* y */ 345.53
          "/* x */ 123.54  /* y */ 345.53       "
  738.34  542.43  433.22  543.98  
          " 738.34  542.43  433.22  543.98     "
  832.64  343.25  534.17  541.23
          " 832.64  343.25  534.17  541.23     "
  892.83  336.34 /* konec dat */  
          " 892,83  336.34 /* konec dat */       ");
 
''' Příklad - výstup'''
  double x, y;
  double sx = 0, sy = 0;
  int    pocet = 0;
  // funkce komentar je definovana jako manipulator bez parametru
  while (data >> komentar >> x >> komentar >> y)
    {
      cout << x << " " << y << endl;
      sx += x;
      sy += y;
      pocet++;
    }
  if (pocet)
    cout << "\nteziste: " << sx/pocet << " " << sy/pocet << endl;
  else
    cout << "na vstupu nejsou zadne souradnice\n";
}
std::istream& komentar(std::istream& inp)
{
  char z;
  while (inp >> z)
    {
      // komentar zacina dvoji znaku /*
      if (z != '/' || inp.peek() != '*')
        {
          inp.putback(z);
          return inp;
        }
     
      inp.get();  // nactu znak '*'
      // komentar konci dvojici znaku */
      while (inp >> z)
        if (z == '*' && inp.peek() == '/')
          {
            inp.get();    // nactu znak '/'
            break;        // hledam dalsi komentar
          }
    }
  return inp;
}


  123.54 345.53
  123.54 345.53
Řádek 66: Řádek 20:
  832.64 343.25
  832.64 343.25
  534.17 541.23
  534.17 541.23
892.83 336.34
   
   
  teziste: 532.382 463.284
  teziste: 592.457 442.127
 
''' Poznámka'''
 
Funkci bychom mohli definovat s typem <tt>void</tt>. Je-li ale
funkce definována s návratovým typem reference na standardní vstupní proud, je formálně manipulátorem a můžeme ji používat ve výrazech jako například
 
while (data >> komentar >> x >> komentar >> y) { /* ... */ }
 
[ [[C++ Bc. | Zpět]] | [[C++ Bc. 18 cpp | C++]] | [[C++ Bc. 19|Další]] ]


[ [[C plus plus Bc. 18 | Zpět]] ]
[[Kategorie:Programování]]

Aktuální verze z 20. 10. 2006, 21:51

Napište funkci komentar(), která čte vstupní proud a přeskočí v něm všechny komentáře /* ... */.

std::istream& komentar(std::istream& inp);

Demonstrujte správnou činnost funkce v testovacím programu, který čte dvojice souřadnic x a y a počítá jejich těžiště.

Příklad - vstup

/* vstup obsahuje souradnice x a y */
/* x */ 123.54  /* y */ 345.53  
 738.34  542.43   433.22  543.98 
 832.64  343.25   534.17  541.23
 892.83  336.34 /* konec dat */ 

Příklad - výstup

123.54 345.53
738.34 542.43
433.22 543.98
832.64 343.25
534.17 541.23
892.83 336.34

teziste: 592.457 442.127

Poznámka

Funkci bychom mohli definovat s typem void. Je-li ale funkce definována s návratovým typem reference na standardní vstupní proud, je formálně manipulátorem a můžeme ji používat ve výrazech jako například

while (data >> komentar >> x >> komentar >> y) { /* ... */ }

[ Zpět | C++ | Další ]