1.feladat (max02a) Olvassunk be egy fájlból egész számokat egy tömbbe. Keressük meg a tömb valamely maximális elemét. A tömb hosszát a fájl els ı eleme tartalmazza.a fájl nevét a szabványos bemeneten kérjük be. Az eredményt írjuk ki a szabványos outputra. Adatok beolvasása fájlból ------------------------------ inp.open(fájl neve ); inp.fail(); (logikai érték) inp >> ahova_beolvas; :... Adatok kiírása fájlba ------------------------------ ofstream out; out.open(fájl neve ); out.close(); out.fail(); (logikai érték) out << amit_kiír; :... :... 1. oldal
Megoldóprogram C++ - ban (max02a) char barmi; //Bekérjük a fájl nevét a szabványos bemenetrı l. string InpFileName; cout << "\na fajl neve:"; cin >> InpFileName; //Definiálunk egy input streamet //Megnyitjuk a fájlt. //Ha hiba van befejezzük a programot. inp.open(inpfilename.c_str()); while (inp.fail()) cerr << "\na megadott fájlt nem találom!"; //Beolvassuk/kiírjuk a tömb hosszát int n; inp >> n; cout << "A tomb hossza: "; cout << n; cout << ".\n"; //Ellenı rizzük az elı feltételt if (n<1) cout << "A tomb üres!\n"; return 2; //Létrehozunk egy n elem ő tömböt és kitöltjük int* v; v=new int [n]; for (int i=0; i!=n ; inp >> v[i++]); //Lezárjuk a fájlt //Kiírjuk a tömb elemeit a szabványos kimenetre. cout << "A tomb elemei: "; for (int j=0; j!=n; j++) cout << v[j]; if (j < n-1) cout << ", "; else cout << ".\n"; 2. oldal
//Megkeressük a maximális elemet int k,i,max; k=0; i=0; max=v[0]; while (k!=(n-1)) if (v[k+1] >= max) i=k+1; max=v[k+1]; k=k+1; //Kiírjuk az eredményt cout << "A tomb egyik legnagyobb eleme: " << v[i] << "."; cout << "\n" << "Ez a tomb " << (i+1) << ". eleme. \n"; //Felszabadítjuk a dinamikusan lefoglalt tárterület delete[] v; 2.feladat (max02b) Egy fájl szavakat tartalmaz. Keressük meg a leghosszabb szót. A fájlban lév ı szavak számát nem ismerjük. A fájl nevét parancssorban adjuk meg. A parancssor második paramétere azt mondja meg, hogy milyen "adagokban b ı vítsük - szükség esetén - a tömböt. A szavakat (további feldolgozás céljából) tömbben is tárolni kell. Parancssorban megadott argumentumok A program szerkezete int main( int argc, char *argv[]) argv[1]... max02a adat.dat 3 A parancs :... 3. oldal
Megoldóprogram C++ - ban (max02b) #include <iostream> char barmi; //Megnézzük, hogy szerepel-e a fájl neve, //és a blokk mérete a parancssorban. if (argc <3 atoi(argv[2]) < 1) cout << "\nhianyzo parameter vagy nulla hosszu blokk"; //Definiálunk egy input streamet, és megnyitjuk a fájlt. inp.open(argv[1]); if (inp.fail()) cout << \na megadott fajlt nem talalom!"; return 2; //Elsı ként lefoglalunk egy blokk_hossz hosszúságú tömböt. int blokk_hossz = atoi(argv[2]); int max_hossz = blokk_hossz; string* v; v = new string[max_hossz]; //Beolvassuk az összes szót. int novel=0; int db=0; string txt; inp >> txt; while (!inp.fail()) while(!inp.fail() && db<max_hossz) v[db++]=txt; inp >> txt; //Ha nincs vége a fájlnak, növeljük meg a tömböt. if (!inp.eof()) string* temp = new string[max_hossz]; for (int i=0; i< max_hossz; i++) temp[i]=v[i]; delete[] v; v=new string[max_hossz+blokk_hossz]; for (int i=0; i< max_hossz; i++) v[i]=temp[i]; max_hossz = max_hossz + blokk_hossz; delete[] temp; novel++; 4. oldal
//Készítünk statisztikát. cout << "\nstatisztika"; cout << "\nszavak szama: " << db ; cout << "\na tomb hossza: " << max_hossz; cout << "\na blokk hossza: " << blokk_hossz; cout << "\na tombot " << novel << " alkalommal noveltem."; //Ellenı rizzük az elı feltételt if(db<1) cout << "\na fajl ures!\n"; return 2; //Megkeressük a maximális elemet int k,i,max; k=0; i=0; max=v[0]; while (k!=(n-1)) if (v[k+1] >= max) i=k+1; max=v[k+1]; k=k+1; //Kiírjuk az eredményt. cout << "\na fajl egyik leghosszabb szava: " << v[i] ; cout << "\nez a szo " << v[i].size() << " hosszu" ; cout << "\n" << "Ez a szo a fajl " << (i+1) << ". szava. \n"; //Felszabadítjuk a dinamikusan lefoglalt tárterület delete[] v; :... 5. oldal
3.feladat (max02c) Egy fájl szavakat tartalmaz. Keressük meg a leghosszabb szót. A fájlban lév ı szavak számát nem ismerjük. A fájl nevét a szabványos bemeneten adjuk meg. A szavakat nem kell tárolni.. Megoldóprogram C++ - ban (max02b) #include <iostream> //Bekérjük a fájl nevét string InpFileName; cout << "\nkerem a fajl nevet: "; cin >> InpFileName; //Definiálunk egy input streamet, // és megnyitjuk a fájlt. inp.open(inpfilename.c_str()); if (inp.fail()) cerr << "A megadott fajlt nem találom! \n"; //Megkeressük a leghosszabb szót //A beolvasott szavakat azonnal ki is írjuk cout << "\nszavak: "; string str, max_str; inp >> str; while (!inp.eof()) cout << str << " "; if (str.size() >= max_str.size()) max_str=str; inp >> str; //Bezárjuk a fájlt //Kiírjuk az eredményt cout << "\na fajl leghosszabb szava: " << max_str << ", melynek hossza: " << max_str.size() << "."; :... 6. oldal
4.feladat (max02d) Egy fájl neveket tartalmaz (vezetéknév, keresztnév (nevek) formában). Keressük meg a leghosszabb nevet. A neveket írjuk ki a standard kimenetre. A vezetéknév legyen csupa nagybető s. Nincs szükségünk a nevek tömbjére.. Megoldóprogram C++ - ban (max02b) #include <iostream> char barmi; //Bekérjük a fájl nevét string InpFileName; cout << "\nkerem a fajl nevet: "; cin >> InpFileName; //Definiálunk egy input streamet és megnyitjuk a fájlt. inp.open(inpfilename.c_str()); if (inp.fail()) cerr << "A megadott fajlt nem találom! \n"; //Megkeressük a leghosszabb nevet. //A beolvasott neveket ki is írjuk. //A vezetéknév legyen csupa nagybet ő. cout << "\nnevek: \n"; string str, max_str; getline(inp,str); while (!inp.eof()) for (int i=0; i<str.find(' ') && i < str.size(); str[i]=toupper(str[i++])); cout << str << "\n"; if (str.size() >= max_str.size()) max_str=str; getline(inp,str); //Bezárjuk a fájlt //Kiírjuk az eredményt. cout << "\na leghosszabb nev: " << max_str << ", melynek hossza: " << max_str.size() << "."; A forrásprogramok letölthetı k a http://people.inf.elte.hu/nacsa/eaf1/projects címrı l. 7. oldal