Elemi alkalmazások fejlesztése I.
Fájlkezelés
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. ı
Fájlkezelés Adatok beolvasása fájlból #include
-----------------------------ifstream inp; inp.open(fájl neve ); inp.close(); inp.fail(); (logikai érték) inp >> ahova_beolvas;
:................................................................... ............................................................................ ............................................................................ ............................................................................ ............................................................................ ............................................................................ ............................................................................ ............................................................................ ............................................................................ ............................................................................ ............................................................................ ............................................................................
Adatok kiírása fájlba #include -----------------------------ofstream out; out.open(fájl neve ); out.close(); out.fail(); (logikai érték) out << amit_kiír;
:................................................................... ............................................................................ ............................................................................ ............................................................................ ............................................................................ ............................................................................ ............................................................................ ............................................................................ ............................................................................ ............................................................................ ............................................................................ ............................................................................
: ............................................................................................................................................ ...................................................................................................................................................... ...................................................................................................................................................... ...................................................................................................................................................... ...................................................................................................................................................... ...................................................................................................................................................... ...................................................................................................................................................... ...................................................................................................................................................... ......................................................................................................................................................
ELTE TTK Informatikai Kar
1. oldal
Elemi alkalmazások fejlesztése I.
Fájlkezelés
Megoldóprogram C++ - ban (max02a) Header fájlok beillesztése #include <string> #include using namespace std; int main() { char barmi;
Adatok el készítése ı
//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 ifstream inp; //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!"; cin >> barmi; return 1; }
//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"; cin >> barmi; 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 inp.close();
//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"; }
ı
ı
ő
ELTE TTK Informatikai Kar
2. oldal
Elemi alkalmazások fejlesztése I.
Fájlkezelés
Számítások elvégzése
//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; }
Eredmény megjelenítése //Kiírjuk az eredményt cout << "A tomb egyik legnagyobb eleme: " << v[i] << "."; cout << "\n" << "Ez a tomb " << (i+1) << ". eleme. \n"; cin >> barmi;
//Felszabadítjuk a dinamikusan lefoglalt tárterület delete[] v;
return 0;
}
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 { …
A parancs
main( int argc, char *argv[])
max02a adat.dat 3
argv[1] ...
}
: ............................................................................................................................................ ...................................................................................................................................................... ...................................................................................................................................................... ...................................................................................................................................................... ...................................................................................................................................................... ...................................................................................................................................................... ...................................................................................................................................................... ...................................................................................................................................................... ......................................................................................................................................................
ELTE TTK Informatikai Kar
3. oldal
Elemi alkalmazások fejlesztése I.
Fájlkezelés
Megoldóprogram C++ - ban (max02b) Header fájlok beillesztése #include #include #include <string> using namespace std;
int main() { char barmi;
Adatok el készítése ı
//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"; cin >> barmi; return 1; }
//Definiálunk egy input streamet, és megnyitjuk a fájlt. ifstream inp; inp.open(argv[1]); if (inp.fail()){ cout << „\nA megadott fajlt nem talalom!"; cin >> barmi; 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++; } }
ELTE TTK Informatikai Kar
4. oldal
Elemi alkalmazások fejlesztése I.
Fájlkezelés
//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"; cin >> barmi; return 2; }
ı
ı
Számítások elvégzése //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; }
Eredmény megjelenítése //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;
return 0; }
: ............................................................................................................................................ ...................................................................................................................................................... ...................................................................................................................................................... ...................................................................................................................................................... ...................................................................................................................................................... ...................................................................................................................................................... ...................................................................................................................................................... ...................................................................................................................................................... ...................................................................................................................................................... ...................................................................................................................................................... ...................................................................................................................................................... ...................................................................................................................................................... ...................................................................................................................................................... ...................................................................................................................................................... ...................................................................................................................................................... ......................................................................................................................................................
ELTE TTK Informatikai Kar
5. oldal
Elemi alkalmazások fejlesztése I.
Fájlkezelés
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) Header fájlok beillesztése #include #include #include <string> using namespace std;
int main() {
Adatok el készítése ı
//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. ifstream inp; inp.open(InpFileName.c_str()); if (inp.fail()){ cerr << "A megadott fajlt nem találom! \n"; return 1; }
Számítások elvégzése //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 inp.close();
Eredmény megjelenítése //Kiírjuk az eredményt cout << "\nA fajl leghosszabb szava: " << max_str << ", melynek hossza: " << max_str.size() << ".";
return 0; }
: ............................................................................................................................................ ...................................................................................................................................................... ...................................................................................................................................................... ...................................................................................................................................................... ......................................................................................................................................................
ELTE TTK Informatikai Kar
6. oldal
Elemi alkalmazások fejlesztése I.
Fájlkezelés
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) Header fájlok beillesztése #include #include #include <string> using namespace std; int main() { char barmi;
Adatok el készítése ı
//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. ifstream inp; inp.open(InpFileName.c_str()); if (inp.fail()){ cerr << "A megadott fajlt nem találom! \n"; return 1; }
Számítások elvégzése //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 inp.close();
ő
Eredmény megjelenítése //Kiírjuk az eredményt. cout << "\nA leghosszabb nev: " << max_str << ", melynek hossza: " << max_str.size() << ".";
return 0; }
A forrásprogramok letölthet k a http://people.inf.elte.hu/nacsa/eaf1/projects címr l. ı
ELTE TTK Informatikai Kar
ı
7. oldal