Pliki tekstowe i binarne. Operacje na plikach tekstowych.
Przyjmijmy, że jest dostępny plik tekstowy txt np. example.txt do którego, z procesu pomiarowego napięcia, co 10 minut poprzez Wi-fi zapisywane są dane pomiarowe. Przykładowa zawartość tego pliku została pokazana poniżej.
example.txt
12.3
12.4
12.3
11.98
11.93
12.3
12.5
12.5
Należy napisać program który odczyta zawartość podanego pliku, wyświetli wyniki pomiarów napięcia na standardowe wyjście konsoli oraz obliczy i poda użytkownikowi wartość średnią napięcia (wartość średnia napięcia ma być obliczana za pomocą funkcji). Plik pomiarowy może zawierać dowolną ilość zarejestrowanych wartości napięć.
Szkielet przykładowej aplikacji został umieszony poniżej. Szkielet ten zawiera elementy które należy odpowiednio uzupełnić. Oczywiście można zaproponować własne, oryginalne rozwiązania.
#include "stdafx.h"
/**
@note :: Prosze zapoznac sie z nizej podanymi bibliotekami
*/
#include <iostream>
#include <sstream>
#include <fstream>
#include <string>
using namespace std;
/**
Prototyp funkcji do obliczenia sredniej z pomiarow
*/
double sampleMean(???, ???, ... ???);
/**
Program C/C++ demonstrujacy mozliwosc pobierania danych z pliku
w raz z dodatkowym przetwarzaniem tych danych.Przetwarzanie polega
na obliczeniu wartosci sredniej z pomiarow zapisanych w pobranym pliku.
@author Marcin Mironczuk
*/
int main()
{
// Zmienna tymczasowa do przechowywania odczytanej lini z pliku
string line;
// Uchwyt do pliku
ifstream myfile;
// Otworzenie pliku
myfile.METODA_DO_OTWERANIA_PLIKU(???);
// Wykonanie zadanego algorytmu do przetwarzania zawartosci pliku
if (myfile.is_open()) {
double suma = 0;
int i = 0;
// Przejzenie zawartosci pliku w petli
while (myfile.METODA_NADZORUJACA_CZY_OSIAGNIETO_KONIEC_PLIKU()) {
// Pobranie lini danych
getline(???,line);
// Pierwszy sposob rzutowania C++
std::istringstream stm;
stm.str(line);
// Zmienna do ktorej bedzie przypisywana wartosc z rzutowania
double d1;
stm >> ???;
// Drugi sposob rzutowania specyficzny dla C
// Zmienna do ktorej bedzie przypisywana wartosc z rzutowania
double d2;
d2 = FUNCKJA_C_SLUZACA_DO_RZUTOWANIA(line.METODA_DO_PRZEKSZTALCENIA_LANCUCHA_DO_TABLICY_W_STYLU_C());
// Wyswetlenie wartosci
cout << ??? << endl;
cout << ??? << endl;
cout << ??? << endl;
// Sumowanie zapisanych wartosci
???;
i++;
}
// Wykorzystanie funkcji do obliczenia sredniej z pomiarow ktorych wartosci zostaly zapisane
// w pliku i wyzej przetworzone
cout << "Srednia z zarejestrowanych pomiarow wynosi: " << ??? << endl;
// Zamkniecie pliku
myfile.close();
} else {
// Informacja uzytkownika w przypadku gdy nie udalo sie otworzyc pliku
cout << "Proba otworzenia pliku nie powiodla sie";
}
cin.get();
return 0;
}
double sampleMean(???) {
// Algorytm do obliczania sredniej
}