Zápočet 24.1.

Základní kurs objektově orientovaného programování v C++. Třídy a objekty, zapouzdření, metody, plymorfismus. Abstraktní datové typy, přetěžování. Kontejnery, iterátory, algoritmy. Šablony, generické programování, kompilační polymorfismus. Výjimky. Bezpečné a přenositelné programování, vazby na OS.
Oracions

Zápočet 24.1.

Příspěvek od Oracions »

Argumenty příkazové řádky:
program.exe -i vstup.txt -o vystup.txt -t[jednoznakovy oddelovac] S1 I2 S1...
Argumenty -i,-o,-t jsou nepovinné. Pokud nejsou, použije se standartní vstup, výstup a mezera. Na konci příkazové řádky je nějaký počet dvouznakových dvojic typ,index, kde typ je buď S (string) nebo I (integer).
Na každé řádce vstupu jsou oddělovačem oddělené položky.
Úkolem je na výstup vypsat součet pro každou definovanou dvojici přes všechny řádky. Pokud na příkazové řádce tedy bylo "S1 I2 S1", je třeba vypsat součet prvního sloupce jako string, pak součet druhého sloupce jako integer, pak znovu součet prvního sloupce jako string.
Pro vstup:
AHOJ 2 NIC
HI 5 NIC
a "S1 I2 S1" by tedy výstup byl "AHOJHI 7 AHOJHI"

Důležitý byl dodatek, že není vhodné provádět switch podle typu na každé řádce. Místo toho jsme měli "předefinovat nějaké operátory nebo navrhnout objektový model, vytvořit nějakou funkci, která by sama poznala, jakým způsobem má sčítat." Switch jsme stále potřebovali použít při parsování argumentů z příkazové řádky.
petrbel

Re: Zápočet 24.1.

Příspěvek od petrbel »

jenom doplním - byly povolené vlastní počítače, síť byla připojena, ale prý jsme směli jenom cplusplus.com a nějaký mrkvosoftí zdroj. Bylo explicitně zakázáno používat jakékoli zdrojové kódy (např ze cvik). Času bylo oficielně 3 hodiny - já odcházel asi jako čtvrtý po 3:15 a nevypadalo by to, že se bude čas hrotit.

Chtělo to použít nějaké šablony a dědičnost (asi i dynamic_cast - já ho aspoň použil a chválil mě, že tak to mělo být). Můj zdroják je tady, ale rovnou podotýkám, že tam jsou hrozné chyby a nedoladěnosti a na některých vstupech to segfaultuje https://github.com/petrbel/cpp_zap/tree ... a-scitacka
Oracions

Re: Zápočet 24.1.

Příspěvek od Oracions »

Také jsem použil dědičnost, můj kód vypadal takhle:

Kód: Vybrat vše

class ValueType
{
  protected:
    ValueType() { }
  public:
     virtual void PrintSum(ostream & vystup) = 0;
     virtual bool Add(string newItem) = 0;
}
class IntegerType : public ValueType
{
   private:
     int Sum;
   public:
      IntegerType() : Sum(0) { }
      void PrintSum(ostream & vystup) { vystup << Sum; }
      bool Add(string newItem) { try { Sum += std::stoi(newItem); return true; } catch (out_of_range) { return false; } catch(argument_error) { return false; } }
}
class StringType : public ValueType
{
   private:
     string Sum;
   public:
      void PrintSum(ostream & vystup) { vystup << Sum; }
      bool Add(string newItem) { Sum += newItem;}
}
struct Column
{
  int Index;
  ValueType * Type;
}

... zbytek ...
Odpovědět

Zpět na „NPRG041 Programování v C++“