C++ Bc. 44 cpp

Z GeoWikiCZ

Řešení

#include <iostream>
#include <iomanip>
#include <fstream>
#include <string>
#include <map>

struct Prospech {
  double znamky;
  int    kredity;
};

typedef std::map<std::string, Prospech> Map;

int main()
{
  Map seznam;
  std::ifstream inp("studenti.txt");

  std::string prijmeni, jmeno, predmet;
  int         kredity;
  char        znamka;
  while (inp >> prijmeni >> jmeno >> predmet >> kredity >> znamka)
    {
      jmeno = prijmeni + ' ' + jmeno;
      double z;
      switch (znamka)
	{
	case 'A': z = 1.0; break;
	case 'B': z = 1.5; break;
	case 'C': z = 2.0; break;
	case 'D': z = 2.5; break;
	case 'E': z = 3.0; break;
	default : z = 4.0;
	}

      Prospech& p = seznam[jmeno];
      p.znamky   += z*kredity;
      p.kredity  += kredity;
    }

  std::cout << std::fixed << std::setprecision(2);
  for (Map::iterator i=seznam.begin(); i!=seznam.end(); ++i)
    {
      std::string student = i->first;
      const Prospech& p   = i->second;
      std::cout << p.znamky/p.kredity << "  " << student << "\n";
    }
}

Vstupní data

Rambousek Pavel  153DASY 5 A
Sedláček Pavel   101KOGG 5 C
Bartošová Eva    152TEG1 6 B
Herman Jakub     152APOT 4 A
Špirk Ivo        101MA4G 5 C
Nešporová Helena 152TEG1 6 D
Ševčíková Irena  101KOGG 5 C
Bartošová Eva    152MEG  3 B
Princ Karel      101KOGG 5 C
Princ Karel      152TCV1 6 E
Herman Jakub     101MA3G 5 E
Rambousek Pavel  101MA1G 8 A
Špirk Ivo        153MAKA 5 D
Sedláček Pavel   101AZNM 2 D
Rambousek Pavel  153MAKA 5 B
Bartošová Eva    101AZNM 2 A
Herman Pavel     101MA3G 5 A
Rambousek Pavel  101MA2G 6 D
Ševčíková Irena  101AZNM 2 C
Bartošová Eva    152APOT 4 E
Herman Pavel     152TCV1 6 B
Steiner Václav   151TGE2 6 A
Bartošková Jana  152TCV2 6 D
Rambousek Pavel  101MA3G 5 E
Bartošová Eva    151TGE2 6 C
Herman Jakub     153PJIN 5 E
Bartošová Eva    152TEG2 7 A
Lánová Pavla     101MA3G 5 C
Herman Pavel     152MEG  3 A
Steiner Václav   101MA2G 6 D
Lánová Pavla     101MA4G 5 D
Bartošková Jana  101MA2G 6 A
Nešporová Helena 152TCV2 6 B
Herman Pavel     152TEG2 7 B
Bartošková Jana  101KOGG 5 A
Špirk Ivo        152TCV1 6 B
Nešporová Helena 153DASY 5 C
Bartošková Jana  101MA1G 8 A
Herman Pavel     153DASY 5 E
Bartošková Jana  152MEG  3 D
Ševčíková Irena  101MA4G 5 D
Steiner Václav   101MA1G 8 E
Bartošková Jana  152APOT 4 E
Špirk Ivo        153PJIN 5 D
Bartošková Jana  101MA4G 5 E
Princ Karel      101MA4G 5 D
Sedláček Pavel   101MA1G 8 E
Herman Pavel     101MA2G 6 B
Bartošová Eva    101MA4G 5 A
Princ Karel      153DASY 5 E
Sedláček Pavel   152TEG1 6 E
Špirk Ivo        152APOT 4 A
Nešporová Helena 101MA2G 6 C
Menšík František 101MA3G 5 A
Princ Karel      101MA3G 5 B
Lánová Pavla     151TGE1 6 D
Ševčíková Irena  152EMEG 6 C
Nešporová Helena 152TCV1 6 B
Sedláček Pavel   101MA2G 6 D
Herman Pavel     152APOT 4 E
Špirk Ivo        151TGE1 6 A
Nešporová Helena 152EMEG 6 E
Herman Jakub     152TEG1 6 A
Lánová Pavla     101KOGG 5 C
Herman Jakub     152TEG2 7 E
Bartošová Eva    153PJIN 5 A
Sedláček Pavel   153OSL  3 E
Sedláček Pavel   151TGE2 6 B
Herman Pavel     153PJIN 5 E
Špirk Ivo        153OSL  3 A
Steiner Václav   153DASY 5 A
Steiner Václav   151TGE1 6 C
Sedláček Pavel   153MAKA 5 C
Princ Karel      101AZNM 2 B
Sedláček Pavel   101MA4G 5 E
Špirk Ivo        101KOGG 5 D
Princ Karel      152TEG2 7 D
Steiner Václav   152TEG1 6 D
Ševčíková Irena  101MA2G 6 B
Princ Karel      152APOT 4 C
Ševčíková Irena  152APOT 4 D
Sedláček Pavel   152TEG2 7 D
Herman Jakub     101MA4G 5 B
Herman Jakub     153MAKA 5 A
Sedláček Pavel   152APOT 4 C
Sedláček Pavel   153PJIN 5 B
Bartošová Eva    152TCV1 6 C
Herman Jakub     151TGE1 6 A
Nešporová Helena 152APOT 4 D
Princ Karel      152MEG  3 E
Rambousek Pavel  152TEG2 7 A
Herman Jakub     101AZNM 2 A
Ševčíková Irena  153MAKA 5 C
Nešporová Helena 151TGE1 6 C
Steiner Václav   153OSL  3 D
Špirk Ivo        101MA1G 8 C
Menšík František 153OSL  3 C
Sedláček Pavel   152MEG  3 E
Ševčíková Irena  152TEG1 6 B
Princ Karel      152TCV2 6 D
Lánová Pavla     152TCV1 6 E
Princ Karel      151TGE2 6 B
Nešporová Helena 101KOGG 5 E
Rambousek Pavel  152TEG1 6 B
Herman Jakub     101MA2G 6 D
Princ Karel      152EMEG 6 A
Steiner Václav   101AZNM 2 C
Bartošová Eva    152TCV2 6 E
Herman Jakub     152EMEG 6 A
Lánová Pavla     153MAKA 5 E
Lánová Pavla     152MEG  3 E
Herman Pavel     152TEG1 6 B
Menšík František 101MA1G 8 E
Lánová Pavla     153OSL  3 A
Princ Karel      153MAKA 5 E
Ševčíková Irena  101MA1G 8 A
Herman Jakub     101MA1G 8 A
Menšík František 152TCV2 6 A
Rambousek Pavel  151TGE2 6 C
Herman Pavel     152TCV2 6 A
Špirk Ivo        152EMEG 6 B
Herman Pavel     101KOGG 5 A
Bartošová Eva    153OSL  3 A
Bartošková Jana  101AZNM 2 D
Menšík František 151TGE2 6 C
Lánová Pavla     152EMEG 6 A
Lánová Pavla     101MA2G 6 E
Rambousek Pavel  101AZNM 2 A
Bartošová Eva    101MA1G 8 B
Sedláček Pavel   152TCV2 6 D
Menšík František 153DASY 5 C
Herman Jakub     151TGE2 6 B
Rambousek Pavel  152MEG  3 C
Špirk Ivo        152MEG  3 C
Bartošková Jana  153OSL  3 E
Rambousek Pavel  151TGE1 6 C
Menšík František 152MEG  3 B
Špirk Ivo        101MA2G 6 B
Ševčíková Irena  152TEG2 7 C
Menšík František 153PJIN 5 D
Špirk Ivo        153DASY 5 B
Bartošková Jana  101MA3G 5 E
Lánová Pavla     101AZNM 2 C
Špirk Ivo        101MA3G 5 B
Bartošová Eva    151TGE1 6 D
Menšík František 101KOGG 5 A
Nešporová Helena 153MAKA 5 C
Nešporová Helena 152MEG  3 D
Ševčíková Irena  153PJIN 5 B
Nešporová Helena 101AZNM 2 A
Steiner Václav   101MA4G 5 D
Nešporová Helena 101MA3G 5 B
Steiner Václav   152TEG2 7 E
Rambousek Pavel  101MA4G 5 D
Nešporová Helena 151TGE2 6 D
Herman Pavel     153MAKA 5 D
Steiner Václav   152EMEG 6 E
Sedláček Pavel   101MA3G 5 A
Herman Jakub     153DASY 5 E
Bartošová Eva    101KOGG 5 C
Menšík František 152TEG1 6 A
Rambousek Pavel  152TCV2 6 B
Sedláček Pavel   151TGE1 6 A
Menšík František 101AZNM 2 A
Lánová Pavla     153PJIN 5 D
Bartošová Eva    153DASY 5 C
Rambousek Pavel  152APOT 4 A
Nešporová Helena 101MA4G 5 B
Menšík František 101MA2G 6 D
Lánová Pavla     152TEG2 7 C
Steiner Václav   152MEG  3 B
Špirk Ivo        151TGE2 6 D
Princ Karel      101MA1G 8 E
Nešporová Helena 153PJIN 5 C
Bartošková Jana  152TCV1 6 A
Lánová Pavla     153DASY 5 A
Steiner Václav   152TCV1 6 C
Špirk Ivo        152TEG1 6 C
Menšík František 152TEG2 7 A
Rambousek Pavel  152TCV1 6 A
Nešporová Helena 101MA1G 8 E
Lánová Pavla     152TEG1 6 B
Špirk Ivo        152TEG2 7 D
Ševčíková Irena  152MEG  3 D
Menšík František 153MAKA 5 B
Herman Pavel     101MA4G 5 E
Princ Karel      151TGE1 6 D
Herman Pavel     151TGE1 6 A
Herman Pavel     152EMEG 6 C
Princ Karel      101MA2G 6 B
Lánová Pavla     152APOT 4 E
Špirk Ivo        152TCV2 6 C
Steiner Václav   153PJIN 5 D
Ševčíková Irena  153OSL  3 E
Sedláček Pavel   152EMEG 6 E
Bartošková Jana  152EMEG 6 B
Herman Jakub     153OSL  3 A
Bartošová Eva    153MAKA 5 C
Lánová Pavla     151TGE2 6 C
Herman Jakub     152MEG  3 A
Nešporová Helena 152TEG2 7 C
Herman Pavel     151TGE2 6 B
Sedláček Pavel   153DASY 5 D
Bartošová Eva    101MA3G 5 C
Herman Pavel     101AZNM 2 D
Lánová Pavla     101MA1G 8 A
Lánová Pavla     152TCV2 6 A
Menšík František 101MA4G 5 C
Steiner Václav   101KOGG 5 C
Herman Jakub     152TCV2 6 B
Herman Jakub     101KOGG 5 D
Rambousek Pavel  152EMEG 6 A
Bartošková Jana  153MAKA 5 D
Ševčíková Irena  151TGE1 6 D
Herman Jakub     152TCV1 6 C
Bartošová Eva    101MA2G 6 E
Bartošková Jana  153DASY 5 C
Rambousek Pavel  153OSL  3 B
Špirk Ivo        101AZNM 2 D
Princ Karel      153OSL  3 C
Princ Karel      153PJIN 5 D
Herman Pavel     101MA1G 8 A
Ševčíková Irena  151TGE2 6 C
Menšík František 152EMEG 6 A
Menšík František 152APOT 4 D
Bartošová Eva    152EMEG 6 A
Menšík František 151TGE1 6 A
Bartošková Jana  152TEG2 7 E
Princ Karel      152TEG1 6 A
Nešporová Helena 153OSL  3 D
Herman Pavel     153OSL  3 D
Rambousek Pavel  101KOGG 5 D
Sedláček Pavel   152TCV1 6 D
Rambousek Pavel  153PJIN 5 D
Ševčíková Irena  152TCV2 6 B

Program pro vygenerování vstupních dat

#include <iostream>
#include <string>
#include <iomanip>
#include <algorithm>
#include <vector>

using std::cout;
using std::string;
using std::random_shuffle;
using std::vector;

const char* studenti[] = {
  "Nešporová Helena",
  "Princ Karel     ",
  "Rambousek Pavel ",
  "Herman Jakub    ",
  "Herman Pavel    ",
  "Sedláček Pavel  ",
  "Bartošová Eva   ",
  "Špirk Ivo       ",
  "Menšík František",
  "Ševčíková Irena ",
  "Bartošková Jana ",
  "Lánová Pavla    ",
  "Steiner Václav  " };

const char* predmety[] = {
  "101MA1G 8",
  "101AZNM 2",
  "151TGE1 6",
  "152APOT 4",
  "152MEG  3",
  "153OSL  3",
  "101MA2G 6",
  "101KOGG 5",
  "151TGE2 6",
  "153DASY 5",
  "101MA3G 5",
  "152EMEG 6",
  "152TEG1 6",
  "152TCV1 6",
  "101MA4G 5",
  "152TEG2 7",
  "152TCV2 6",
  "153PJIN 5",
  "153MAKA 5"
};

int main()
{
  vector<string> data;

  std::srand(1234567890);

  const int S = sizeof studenti/sizeof (const char*);
  const int P = sizeof predmety/sizeof (const char*);
      
  for (int i=0; i<S; i++)
    {
      int n = 0;
      if (i>S/2) n = rand() % 5;  //  polovina studentu ma vsechny zkousky

      random_shuffle(predmety, predmety+P);
      for (int j=0; j<P-n; j++)
	{
	  char znamka[] = {'A', 'B', 'C', 'D', 'E'};
	  int  k = rand() % 5; 

	  string s = string(studenti[i]) + " " + predmety[j] + " " + znamka[k];

	  data.push_back(s);
	}
    }

  random_shuffle(data.begin(), data.end());

  for (int i=0; i<data.size(); i++)
    {
      cout << data[i] << "\n";
    }
}

[ Zpět ]