C++ programozás – 2008 májusi emelt informatika érettségi – SMS

A feladat leírását, melynek a megoldását közzéteszem, innen töltheted le.

#include <iostream>
#include <fstream>
#include <sstream>

using namespace std;

class uzenet
{
public:
  int ora;
  int perc;
  string szam;
  string uzenet;
  int hossz;

  string toString()
  {
    stringstream ss;
    ss << "ora: " << ora << ", perc: " << perc
    << ", szam: " << szam << ", uzenet: "
    << uzenet << endl;
    return ss.str();
  }
};

int main()
{
// 1. feladat
  cout << endl << "1. feladat" << endl;
  int meret;
  ifstream input("sms.txt");
  input >> meret;
  uzenet uzenetek[meret];
  string tmp;
  for( int i = 0; i < meret; i++ )
  {
    input >> uzenetek[i].ora >> uzenetek[i].perc >> uzenetek[i].szam;
    input.get();
    /* vagy
        input >> uzenetek[i].ora >> uzenetek[i].perc >> uzenetek[i].szam;
        getline(input, tmp);
    */

    /* vagy
        input >> uzenetek[i].ora >> uzenetek[i].perc >> uzenetek[i].szam;
        input.ignore(1, '\n');
    */
    getline(input, uzenetek[i].uzenet);
    uzenetek[i].hossz = uzenetek[i].uzenet.length();
//    cout << uzenetek[i].toString();
  }


// 2. feladat
  cout << endl << "2. feladat" << endl;
  
  if( meret > 10 )
  {
    cout << uzenetek[9].uzenet << endl;
  }
  else
  {
    cout << uzenetek[meret-1].uzenet << endl;
  }

// 3. feladat
  cout << endl << "3. feladat" << endl;
  int min = 0;
  int max = 0;

  for( int i = 1; i < meret; i++ )
  {
    if( uzenetek[i].hossz > uzenetek[max].hossz )
    {
      max = i;
    }

    if( uzenetek[i].hossz < uzenetek[min].hossz )
    {
      min = i;
    }
  }
  cout << "A leghosszabb uzenet adatai: " << uzenetek[max].ora
    << " " << uzenetek[max].perc << " " << uzenetek[max].szam
    << " " << uzenetek[max].uzenet << endl;
  cout << "A legrovidebb uzenet adatai: " << uzenetek[min].ora
    << " " << uzenetek[min].perc << " " << uzenetek[min].szam
    << " " << uzenetek[min].uzenet << endl;

// 4. feladat
  cout << endl << "4. feladat" << endl;

  int hosszok[5] = {0};
  for( int i = 0; i < meret; i++ )
  {
    if( uzenetek[i].hossz <= 20 )
    {
      hosszok[0]++;
    }
    else if( uzenetek[i].hossz >= 21 && uzenetek[i].hossz <= 40 )
    {
      hosszok[1]++;
    }
    else if( uzenetek[i].hossz >= 41 && uzenetek[i].hossz <= 60 )
    {
      hosszok[2]++;
    }
    else if( uzenetek[i].hossz >= 61 && uzenetek[i].hossz <= 80 )
    {
      hosszok[3]++;
    }
    else // a többi úgyis maximum 100 hosszú lehet
    {
      hosszok[4]++;
    }

// valójában nem kell ennyi vizsgálat, ha megfelelő sorrendben vizsgáljuk
/*
    if( uzenetek[i].hossz <= 20 )
    {
      hosszok[0]++;
    }
    else if( uzenetek[i].hossz <= 40 )
    {
      hosszok[1]++;
    }
    else if( uzenetek[i].hossz <= 60 )
    {
      hosszok[2]++;
    }
    else if( uzenetek[i].hossz <= 80 )
    {
      hosszok[3]++;
    }
    else
    {
      hosszok[4]++;
    }
*/
  }

  cout << "1-20 " << hosszok[0] << endl;
  cout << "21-40 " << hosszok[1] << endl;
  cout << "41-60 " << hosszok[2] << endl;
  cout << "61-80 " << hosszok[3] << endl;
  cout << "81-100 " << hosszok[4] << endl;

  /* 4. feladat megoldása többszörös megszámlálással

    int hosszok[5] = {0};
    for( int i = 0; i < meret; i++ )
    {
      hosszok[(uzenetek[i].hossz-1) / 20]++;
    }

    cout << "1-20 " << hosszok[0] << endl;
    cout << "21-40 " << hosszok[1] << endl;
    cout << "41-60 " << hosszok[2] << endl;
    cout << "61-80 " << hosszok[3] << endl;
    cout << "81-100 " << hosszok[4] << endl;
  */

// 5. feladat
  cout << endl << "5. feladat" << endl;
  int orak[24] = {0};
  for( int i = 0; i < meret; i++ )
  {
    orak[uzenetek[i].ora]++;
  }

  int szum = 0;
  for( int i = 0; i < 24; i++ )
  {
    if( orak[i] > 10 )
    {
      szum += orak[i] - 10;
    }
  }
  cout << szum << endl;

// 6. feladat
  cout << endl << "6. feladat" << endl;

  int db = 0;
  for( int i = 0; i < meret; i++ )
  {
    if( uzenetek[i].szam == "123456789" )
    {
      db++;
    }
  }

  if( db < 2 )
  {
    cout << "nincs elegendo uzenet" << endl;
  }

  else
  {
    int barino[db];
    db = 0;

    for( int i = 0; i < meret; i++ )
    {
      if( uzenetek[i].szam == "123456789" )
      {
        barino[db] = uzenetek[i].ora*60 + uzenetek[i].perc;
        db++;
      }
    }

    max = barino[1] - barino[0];

    for( int i = 2; i < db; i++ )
    {
      if( barino[i] - barino[i-1] > max )
      {
        max = barino[i] - barino[i-1];
      }
    }

    cout << max / 60 << ":" << max % 60 << endl;
  }

// 7. feladat
  cout << endl << "7. feladat" << endl;
  int meret2 = meret+1;
  uzenet uzenetek2[meret+1];

  for( int i = 0; i < meret; i++ )
  {
    uzenetek2[i] = uzenetek[i];
  }

  cout << "Ora: ";
  cin >> uzenetek2[meret2-1].ora;
  cout << "Perc: ";
  cin >> uzenetek2[meret2-1].perc;
  cout << "Telefonszam: ";
  cin >> uzenetek2[meret2-1].szam;
  cin.get();

  cout << "Uzenet: ";
  getline(cin, uzenetek2[meret2-1].uzenet);
  uzenetek2[meret2-1].hossz = uzenetek2[meret2-1].uzenet.length();

  for( int i = 0; i < meret2; i++ )
  {
    cout << uzenetek2[i].toString();
  }

// 8. feladat
  cout << endl << "8. feladat" << endl;
  ofstream output("smski.txt");

  for( int i = 0; i < meret2-1; i++ )
  {
    for( int j = i+1; j < meret2; j++ )
    {
      if( uzenetek2[i].szam > uzenetek2[j].szam )
      {
        uzenet csere = uzenetek2[i];
        uzenetek2[i] = uzenetek2[j];
        uzenetek2[j] = csere;
      }
    }
  }

  string elozo = "";
  for( int i = 0; i < meret2; i++ )
  {
    if( uzenetek2[i].szam != elozo )
    {
      output << uzenetek2[i].szam << endl;
      elozo = uzenetek2[i].szam;
    }
    output << uzenetek2[i].ora << " " << uzenetek2[i].perc
      << " " << uzenetek2[i].uzenet << endl;
  }
  return 0;
}

Ha hibát találsz benne, kérlek jelezd!

2 Replies to “C++ programozás – 2008 májusi emelt informatika érettségi – SMS”

Vélemény, hozzászólás?

Az e-mail címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük

*

Ez az oldal az Akismet szolgáltatást használja a spam csökkentésére. Ismerje meg a hozzászólás adatainak feldolgozását .