Przeanalizuj prezentację, wykorzystaj omówione instrukcje i napisz program, który:
znajdzie największą z liczb zapisanych w pliku dane.txt;
jeżeli istnieje plik wynik.txt i zawiera liczbę, wypisze tę liczbę lub zero, jeżeli plik nie istnieje;
zapisze sumę liczby odczytanej z pliku (lub zera, jeśli ten plik nie istnieje) wynik.txt i największej znalezionej liczby w pliku dane.txt, nadpisując dotychczasową zawartość pliku wynik.txt.
Program powinien sprawdzać poprawność odczytu i zapisu liczb. Program należy uruchomić co najmniej dwa razy.
dane.txt – plik tekstowy zawierający liczby naturalne zapisane w osobnych wierszach, niektóre wiersze mogą być puste
Wynik:
wypisana na standardowym wyjściu liczba odczytana z pliku wynik.txt lub zero, jeżeli liczby nie da się odczytać
suma odczytanej liczby (lub zera) z pliku wynik.txt i największej liczby z pliku dane.txt zapisana w pliku wynik.txt i wypisana na standardowym wyjściu
Przykład:
Komunikaty wypisane przez program, w sytuacji, w której plik dane.txt zawiera jeden pusty wiersz, największą liczbą zapisaną w pliku jest liczba 12, a odczyt realizujemy za pomocą metody pozwalającej wykryć próby odczytu wartości z pustych wierszy:
pierwsze uruchomienie:
Linia 1. Błąd odczytu wartości z pliku dane kropka txt.
Linia 2. Błąd otwarcia pliku wynik kropka txt do odczytu wykrzyknik.
Linia 3. Liczba zapisana w pliku wynik kropka txt dwukropek 12.
Błąd odczytu wartości z pliku dane.txt
Błąd otwarcia pliku wynik.txt do odczytu!
Liczba zapisana w pliku wynik.txt: 12
drugie uruchomienie:
Linia 1. Błąd odczytu wartości z pliku dane kropka txt.
Linia 2. Liczba odczytana z pliku wynik kropka txt dwukropek 12.
Linia 3. Liczba zapisana w pliku wynik kropka txt dwukropek 24.
Błąd odczytu wartości z pliku dane.txt
Liczba odczytana z pliku wynik.txt: 12
Liczba zapisana w pliku wynik.txt: 24
Komunikat wypisany przez program, jeżeli brak pliku dane.txt lub brak uprawnień do czytania z pliku:
Linia 1. Nie można odczytać pliku dane kropka txt wykrzyknik.
Nie można odczytać pliku dane.txt!
R1dm2Bjl5IxVJ1
Wybierz dowolne angielskie słówko ze słowniczka i zapytaj kolegę o jego znaczenie.
Źródło: Contentplus.pl Sp. z o.o., licencja: CC BY-SA 3.0.
Linia 1. kratka include otwórz nawias ostrokątny iostream zamknij nawias ostrokątny.
Linia 2. kratka include otwórz nawias ostrokątny fstream zamknij nawias ostrokątny.
Linia 4. using namespace std średnik.
Linia 6. int main otwórz nawias okrągły zamknij nawias okrągły otwórz nawias klamrowy.
Linia 7. string liczba znak równości cudzysłów cudzysłów średnik.
Linia 8. int liczbaMax znak równości 0 średnik.
Linia 9. fstream plik średnik.
Linia 11. plik kropka open otwórz nawias okrągły cudzysłów dane kropka txt cudzysłów przecinek fstream dwukropek dwukropek in zamknij nawias okrągły średnik.
Linia 13. if otwórz nawias okrągły wykrzyknik plik zamknij nawias okrągły otwórz nawias klamrowy.
Linia 14. cout otwórz nawias ostrokątny otwórz nawias ostrokątny cudzysłów Błąd otwarcia pliku dane kropka txt do odczytu wykrzyknik cudzysłów otwórz nawias ostrokątny otwórz nawias ostrokątny endl średnik.
Linia 15. return 1 średnik.
Linia 16. zamknij nawias klamrowy.
Linia 18. while otwórz nawias okrągły getline otwórz nawias okrągły plik przecinek liczba zamknij nawias okrągły zamknij nawias okrągły otwórz nawias klamrowy.
Linia 19. if otwórz nawias okrągły wykrzyknik liczba kropka empty otwórz nawias okrągły zamknij nawias okrągły zamknij nawias okrągły otwórz nawias klamrowy.
Linia 20. if otwórz nawias okrągły stoi otwórz nawias okrągły liczba zamknij nawias okrągły zamknij nawias ostrokątny liczbaMax zamknij nawias okrągły.
Linia 21. liczbaMax znak równości stoi otwórz nawias okrągły liczba zamknij nawias okrągły średnik.
Linia 22. zamknij nawias klamrowy else cout otwórz nawias ostrokątny otwórz nawias ostrokątny cudzysłów Błąd odczytu wartości z pliku dane kropka txt cudzysłów otwórz nawias ostrokątny otwórz nawias ostrokątny endl średnik.
Linia 23. zamknij nawias klamrowy.
Linia 24. plik kropka close otwórz nawias okrągły zamknij nawias okrągły średnik.
Linia 26. plik kropka open otwórz nawias okrągły cudzysłów wynik kropka txt cudzysłów przecinek ios dwukropek dwukropek in zamknij nawias okrągły średnik.
Linia 27. if otwórz nawias okrągły plik kropka is podkreślnik open otwórz nawias okrągły zamknij nawias okrągły zamknij nawias okrągły otwórz nawias klamrowy.
Linia 28. plik zamknij nawias ostrokątny zamknij nawias ostrokątny liczba średnik.
Linia 29. if otwórz nawias okrągły plik kropka fail otwórz nawias okrągły zamknij nawias okrągły zamknij nawias okrągły otwórz nawias klamrowy.
Linia 30. cout otwórz nawias ostrokątny otwórz nawias ostrokątny cudzysłów Błąd odczytu liczby z pliku wynik kropka txt cudzysłów otwórz nawias ostrokątny otwórz nawias ostrokątny endl średnik.
Linia 31. liczba znak równości cudzysłów 0 cudzysłów średnik.
Linia 32. zamknij nawias klamrowy.
Linia 33. cout otwórz nawias ostrokątny otwórz nawias ostrokątny cudzysłów Liczba odczytana z pliku wynik kropka txt dwukropek cudzysłów otwórz nawias ostrokątny otwórz nawias ostrokątny liczba otwórz nawias ostrokątny otwórz nawias ostrokątny endl średnik.
Linia 34. plik kropka close otwórz nawias okrągły zamknij nawias okrągły średnik.
Linia 35. zamknij nawias klamrowy else otwórz nawias klamrowy.
Linia 36. cout otwórz nawias ostrokątny otwórz nawias ostrokątny cudzysłów Błąd otwarcia pliku wynik kropka txt do odczytu wykrzyknik cudzysłów otwórz nawias ostrokątny otwórz nawias ostrokątny endl średnik.
Linia 37. liczba znak równości cudzysłów 0 cudzysłów średnik.
Linia 38. zamknij nawias klamrowy.
Linia 40. plik kropka open otwórz nawias okrągły cudzysłów wynik kropka txt cudzysłów przecinek ios dwukropek dwukropek out zamknij nawias okrągły średnik.
Linia 41. if otwórz nawias okrągły plik kropka is podkreślnik open otwórz nawias okrągły zamknij nawias okrągły zamknij nawias okrągły otwórz nawias klamrowy.
Linia 42. if otwórz nawias okrągły plik otwórz nawias ostrokątny otwórz nawias ostrokątny stoi otwórz nawias okrągły liczba zamknij nawias okrągły plus liczbaMax otwórz nawias ostrokątny otwórz nawias ostrokątny endl zamknij nawias okrągły otwórz nawias klamrowy.
Linia 43. cout otwórz nawias ostrokątny otwórz nawias ostrokątny cudzysłów Liczba zapisana w pliku wynik kropka txt dwukropek cudzysłów otwórz nawias ostrokątny otwórz nawias ostrokątny otwórz nawias okrągły stoi otwórz nawias okrągły liczba zamknij nawias okrągły plus liczbaMax zamknij nawias okrągły otwórz nawias ostrokątny otwórz nawias ostrokątny endl średnik.
Linia 44. zamknij nawias klamrowy.
Linia 45. zamknij nawias klamrowy else otwórz nawias klamrowy.
Linia 46. cout otwórz nawias ostrokątny otwórz nawias ostrokątny cudzysłów Błąd otwarcia pliku wynik kropka txt do zapisu wykrzyknik cudzysłów otwórz nawias ostrokątny otwórz nawias ostrokątny endl średnik.
Linia 47. zamknij nawias klamrowy.
Linia 48. plik kropka close otwórz nawias okrągły zamknij nawias okrągły średnik.
Linia 50. return 0 średnik.
Linia 51. zamknij nawias klamrowy.
#include <iostream>
#include <fstream>
using namespace std;
int main() {
string liczba = "";
int liczbaMax = 0;
fstream plik;
plik.open("dane.txt", fstream::in);
if (!plik) {
cout << "Błąd otwarcia pliku dane.txt do odczytu!" << endl;
return 1;
}
while (getline(plik, liczba)) {
if (!liczba.empty()) {
if (stoi(liczba) > liczbaMax)
liczbaMax = stoi(liczba);
} else cout << "Błąd odczytu wartości z pliku dane.txt" << endl;
}
plik.close();
plik.open("wynik.txt", ios::in);
if (plik.is_open()) {
plik >> liczba;
if (plik.fail()) {
cout << "Błąd odczytu liczby z pliku wynik.txt" << endl;
liczba = "0";
}
cout << "Liczba odczytana z pliku wynik.txt: " << liczba << endl;
plik.close();
} else {
cout << "Błąd otwarcia pliku wynik.txt do odczytu!" << endl;
liczba = "0";
}
plik.open("wynik.txt", ios::out);
if (plik.is_open()) {
if (plik << stoi(liczba) + liczbaMax << endl) {
cout << "Liczba zapisana w pliku wynik.txt: " << (stoi(liczba) + liczbaMax) << endl;
}
} else {
cout << "Błąd otwarcia pliku wynik.txt do zapisu!" << endl;
}
plik.close();
return 0;
}