#include #include #include #include //String-müveletekhez #include //sqrt miatt #include //itoa. atoi #include //itoa, atoi using namespace std; int main() { system("cls"); setlocale(LC_ALL, ""); // ez beállítja az op.rendszer által használt nyelvi környezetet, amit feltételezünk, hogy magyar printf("A 2008. októberi emelt informatika érettségi megoldása\n"); //1. feladat printf("\n1. feladat: Olvassa be az adatokat!\n"); string adatsor[100]; int i=1; //ciklusváltozó string sor; //Beolvasáshoz szükséges változó int sorokszama; //Beolvasandó sorok száma ifstream myfile; // Hozzárendeli olvasásra a myfile-t myfile.open("program.txt"); // Ez nyitja meg a file-t getline(myfile,sor); sorokszama = atoi(sor.c_str()); while ( myfile.good() ) //Egyszeru elöltesztelo ciklus a file vizsgálatához { getline(myfile,adatsor[i]); i++; } myfile.close(); printf("Adatok beolvasva!\n"); //2.a. feladat printf("\n2.a. feladat: Egyszerusítheto-e az utasítássorozat?\n"); int melyik; //Ezt kell feldolgozni! int poz1, poz2; //Pozíció bool vanilyen=false; cout <<"Kérem az egyik utasítássorozat számát! (1-" <>melyik; cout <<"Kiválasztott utasítássorozat: " <0) or (poz2>0)) vanilyen=true; poz1=adatsor[melyik].find("KN"); poz2=adatsor[melyik].find("NK"); if ((poz1>0) or (poz2>0)) vanilyen=true; if (vanilyen==true) printf("Egyszerusítheto\n"); else printf("Nem egyszerusítheto.\n"); //2.b. feladat printf("\n2.b. feladat: Visszajutás lépései\n"); int hossz; //Választott string hossza int egtaj[5]; //Égtájak elofordulása; string kar; for (i=1;i<=4; i++) egtaj[i]=0; //Számlálók kinullázása hossz=adatsor[melyik].length(); for (i=0; i<=hossz-1; i++) //A legelso katakter a 0., nem az 1. { kar=adatsor[melyik].substr(i,1); if (kar=="E") egtaj[1]++; if (kar=="D") egtaj[2]++; if (kar=="K") egtaj[3]++; if (kar=="N") egtaj[4]++; } //printf("Irányok: E: %i, D: %i, K: %i, N: %i\n", egtaj[1], egtaj[2], egtaj[3], egtaj[4]); //Csak tesztüzemben! poz1=abs(egtaj[1]-egtaj[2]); //ED távolság poz2=abs(egtaj[3]-egtaj[4]); //KN távolság printf("%i lépést kell tenni az ED, %i lépést a KN tengely mentén.\n", poz1, poz2); //2.c. feladat printf("\n2.c. feladat: Legtávolabbi pont\n"); poz1=0; //ED aktuális távolság poz2=0; //KN aktuális távolság int tavolsag; //Aktuális távolság négyzete int maxtav=0; //Maximális távolság négyzete int lepesszam=0; //Ebben a lépésben van a legnagyobb távolság for (i=0; i<=hossz-1; i++) //A legelso karakter a 0., nem az 1. { kar=adatsor[melyik].substr(i,1); if (kar=="E") poz1++; if (kar=="D") poz1--; if (kar=="K") poz2++; if (kar=="N") poz2--; tavolsag=poz1*poz1+poz2*poz2; if (tavolsag>maxtav) { maxtav=tavolsag; lepesszam=i; } } cout <<"Maximális távolság: "; printf("%10.3f\n", sqrt(maxtav)); //Így három tizedes jegyet ír ki a gyökébol printf("Lépés sorszáma: %i\n", lepesszam+1); //3. feladat printf("\n3. feladat: Szükséges energiák\n"); int energia[100]; //Szükséges energia mennyisége int j; //Ciklusváltozó string kar1; //Feldolgozáshoz kell for (i=1; i<=sorokszama;i++) { energia[i]=2; //Számlálók alaphelyzetbe (indulás=2) } printf("Kis energiájú adatsorok: \n"); for (i=1; i<=sorokszama; i++) { hossz=adatsor[i].length(); //Adatsor hossza kar1=adatsor[i].substr(0,1); for (j=0; j<=hossz-1;j++) { kar=adatsor[i].substr(j,1); //Ezt a betut kell feldolgozni energia[i]++; //Sima lépés megtétele if (kar!=kar1) energia[i]=energia[i]+2; //Irányváltáskor kell +2 energia kar1 = kar; } //printf("Adatsor száma: %i, szükséges energia: %i\n", i, energia[i]); //Csak tesztüzemben if (energia[i]<101) printf("Adatsor: %i Energia: %i\n",i, energia[i]); //Ez kicsit több, mint amit kértek, de szerintem így elegáns. } cout <1) { //cout <>ujuzi; poz1=0; poz2=0; hossz=ujuzi.length(); //Adatsor hossza j=0; do { kar=ujuzi.substr(j,1); //Ez a feldolgozandó betű if (poz1==0) { if ((kar=="E") or (kar=="D") or (kar=="K") or (kar=="N")) { cout <