C++ programozás – 2008 októberi emelt informatika érettségi – robot

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

#include <iostream>
#include <fstream>
#include <sstream>
#include <cmath>
#include <iomanip> // setprecision miatt
#include <cstdlib>

using namespace std;

struct prog
{
  string utasitas;
  int hossz;

  string toString()
  {
    stringstream ss;
    ss << utasitas << " " << hossz << endl;
    return ss.str();
  }
};



int main()
{
  // 1. feladat
  int meret;
  ifstream input("program.txt");

  input >> meret;

  prog programok[meret];

  for( int i = 0; i < meret; i++ )
  {
    input >> programok[i].utasitas;
    programok[i].hossz = programok[i].utasitas.length();
//    cout << i << " " << programok[i].toString();
  }

  // 2. feladat
  cout << "2. feladat: Kerem az utasitassor szamat! ";
  int sorszam;
  cin >> sorszam;
  sorszam--;

  // a.
  prog pr = programok[sorszam];

  if( pr.utasitas.find("ED") < pr.utasitas.length() ||
    pr.utasitas.find("DE") < pr.utasitas.length() ||
    pr.utasitas.find("KN") < pr.utasitas.length() ||
    pr.utasitas.find("NK") < pr.utasitas.length() )
  {
    cout << "egyszerusitheto." << endl;
  }
  else
  {
    cout << "nem egyszerusitheto." << endl;
  }

  // b.
  int x = 0;
  int y = 0;
  for( int i = 0; i < pr.hossz; i++ )
  {
    if( pr.utasitas[i] == 'E' )
    {
      y++;
    }
    else if( pr.utasitas[i] == 'D' )
    {
      y--;
    }
    else if( pr.utasitas[i] == 'K' )
    {
      x++;
    }
    else
    {
      x--;
    }
  }
  cout << abs(y) << " lepest kell tenni az ED, " << abs(x)
    << " lepest a KN tengely menten." << endl;

  // c.
  x = 0;
  y = 0;
  double maxtav = 0;
  int lepes = 0;
  for( int i = 0; i < pr.hossz; i++ )
  {
    if( pr.utasitas[i] == 'E' )
    {
      y++;
    }
    else if( pr.utasitas[i] == 'D' )
    {
      y--;
    }
    else if( pr.utasitas[i] == 'K' )
    {
      x++;
    }
    else
    {
      x--;
    }
    double tav = sqrt((x*x) + (y*y));
    if( tav > maxtav )
    {
      maxtav = tav;
      lepes = i + 1;
    }
  }

  cout << lepes << " " << fixed << setprecision(2) << maxtav << endl;

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

  for( int i = 0; i < meret; i++ )
  {
    int energia = 2 + programok[i].hossz;
    for( int j = 1; j < programok[i].hossz; j++ )
    {
      if( programok[i].utasitas[j - 1] != programok[i].utasitas[j] )
      {
        energia += 2;
      }
    }

    if( energia <= 100 )
    {
      cout << (i+1) << " " << energia << endl;
    }
  }

  // 4. feladat
  cout << "4. feladat" << endl;
  ofstream output("ujprog.txt");

  for( int i = 0; i < meret; i++ )
  {
    stringstream ss;
    int db = 1;
    for( int j = 1; j < programok[i].hossz; j++ )
    {
      if( programok[i].utasitas[j-1] != programok[i].utasitas[j] )
      {
        if( db == 1 )
        {
          ss << programok[i].utasitas[j-1];
        }
        else
        {
          ss << db << programok[i].utasitas[j-1];
        }
        db = 1;
      }
      else
      {
        db++;
      }
    }

    int utolso = programok[i].hossz;
    if( db == 1 )
    {
      ss << programok[i].utasitas[utolso-1];
    }
    else
    {
      ss << db << programok[i].utasitas[utolso-1];
    }
    output << ss.str() << endl;
  }
  output.close();

  // 5. feladat
  cout << "5. feladat" << endl;
  string rovid;
  cout << "Adj meg egy roviditett utasitassort:" << endl;
  cin >> rovid;

  stringstream ss;
  stringstream utasitas;
  int hossz = rovid.length();
  for( int i = 0; i < hossz; i++ )
  {
    if( rovid[i] >= '0' && rovid[i] <= '9' )
    {
      ss << rovid[i];
    }
    else
    {
      if( ss.str() != "" )
      {
        int db;
        ss >> db;
        for( int j = 0; j < db; j++ )
        {
          utasitas << rovid[i];
        }
// stringstream kiuritese (2 utasitas!)
        ss.clear();
        ss.str("");
      }
      else
      {
        utasitas << rovid[i];
      }
    }
  }
  cout << utasitas.str() << endl;
  return 0;
}

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

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 .