Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <fstream>
- #include <string>
- #include <vector>
- #include <cstdlib>
- #include <sstream>
- #include <cmath>
- using namespace std;
- struct dailyData{
- string date;
- int year;
- int month;
- int day;
- int dailyM3;
- };
- struct year{
- int year;
- int dailyM3 = 0;
- };
- struct month{
- int month;
- int dailyM3 = 0;
- };
- struct completeDailyData{
- string date;
- int year;
- int month;
- int day;
- int dailyM3;
- int midnightAmount;
- int dailyDrop;
- int _8amAmount;
- };
- void drawChartVertical(vector<month> months){
- int highestX = 1;
- for(size_t i=0; i<months.size(); i++){
- if(highestX<ceil(double(months[i].dailyM3)/10000)){
- highestX = ceil(double(months[i].dailyM3)/10000);
- }
- }
- cout<<endl<<"-------------------------"<<endl;
- for(size_t i=0; i<months.size(); i++){
- cout<<months[i].month<<" ";
- }
- cout<<endl<<endl;
- for(int x=0; x<highestX + 1; x++){
- for(size_t y=0; y<months.size(); y++){
- if(x < ceil(double(months[y].dailyM3)/10000)){
- if(y>=10){
- cout<<" #"<<" ";
- } else {
- cout<<"#"<<" ";
- }
- }
- else {
- if(y>=10){
- cout<<" "<<" ";
- }else {
- cout<<" "<<" ";
- }
- }
- }
- cout<<endl;
- }
- cout<<"[ # - 1 M3 ]"<<endl;
- }
- void simulateScenarioAlt(vector<dailyData>& dataArray){
- cout<<endl;
- vector <completeDailyData> completeDataArray;
- completeDataArray.push_back(completeDailyData());
- completeDataArray[0].date = dataArray[0].date;
- completeDataArray[0].year = dataArray[0].year;
- completeDataArray[0].month = dataArray[0].month;
- completeDataArray[0].day = dataArray[0].day;
- completeDataArray[0].dailyM3 = dataArray[0].dailyM3;
- completeDataArray[0].midnightAmount = 500000;
- completeDataArray[0].dailyDrop = ceil(completeDataArray[0].midnightAmount*0.02);
- completeDataArray[0]._8amAmount = completeDataArray[0].midnightAmount - completeDataArray[0].dailyDrop;
- int highestAltValue = 500000;
- int emergencyDropFlag = 0;
- int emergencyDropAmount = 0;
- int _800kPlus = 0;
- for(size_t i=1; i<dataArray.size(); i++){
- completeDailyData newCompleteDailyData;
- newCompleteDailyData.date = dataArray[i].date;
- newCompleteDailyData.year = dataArray[i].year;
- newCompleteDailyData.month = dataArray[i].month;
- newCompleteDailyData.day = dataArray[i].day;
- newCompleteDailyData.dailyM3 = dataArray[i].dailyM3;
- newCompleteDailyData.midnightAmount = completeDataArray[i-1]._8amAmount + completeDataArray[i-1].dailyM3;
- newCompleteDailyData.dailyDrop = ceil(newCompleteDailyData.midnightAmount*0.02);
- newCompleteDailyData._8amAmount = newCompleteDailyData.midnightAmount - newCompleteDailyData.dailyDrop;
- if(highestAltValue<newCompleteDailyData.midnightAmount){
- highestAltValue = newCompleteDailyData.midnightAmount;
- }
- completeDataArray.push_back(newCompleteDailyData);
- }
- cout<<"5.4 A (CO BY BYLO GBYBY NIE INTERWENCJE) "<<highestAltValue<<endl;
- }
- void simulateScenario(vector<dailyData>& dataArray){
- cout<<endl<<endl;
- vector <completeDailyData> completeDataArray;
- completeDataArray.push_back(completeDailyData());
- completeDataArray[0].date = dataArray[0].date;
- completeDataArray[0].year = dataArray[0].year;
- completeDataArray[0].month = dataArray[0].month;
- completeDataArray[0].day = dataArray[0].day;
- completeDataArray[0].dailyM3 = dataArray[0].dailyM3;
- completeDataArray[0].midnightAmount = 500000;
- completeDataArray[0].dailyDrop = ceil(completeDataArray[0].midnightAmount*0.02);
- completeDataArray[0]._8amAmount = completeDataArray[0].midnightAmount - completeDataArray[0].dailyDrop;
- int highestAltValue = 500000;
- int emergencyDropFlag = 0;
- int emergencyDropAmount = 0;
- int _800kPlus = 0;
- for(size_t i=1; i<dataArray.size(); i++){
- completeDailyData newCompleteDailyData;
- newCompleteDailyData.date = dataArray[i].date;
- newCompleteDailyData.year = dataArray[i].year;
- newCompleteDailyData.month = dataArray[i].month;
- newCompleteDailyData.day = dataArray[i].day;
- newCompleteDailyData.dailyM3 = dataArray[i].dailyM3;
- newCompleteDailyData.midnightAmount = completeDataArray[i-1]._8amAmount + completeDataArray[i-1].dailyM3;
- emergencyDropAmount = 0;
- if(newCompleteDailyData.midnightAmount > 1000000){
- emergencyDropAmount = newCompleteDailyData.midnightAmount - 1000000;
- if(emergencyDropFlag == 0){
- cout<<"Pierwsze awaryjne upuszczanie wody: "<<newCompleteDailyData.date<<endl<<endl;
- }
- emergencyDropFlag++;
- }
- newCompleteDailyData.dailyDrop = ceil(newCompleteDailyData.midnightAmount*0.02);
- int altValuesBuff = newCompleteDailyData.midnightAmount - newCompleteDailyData.dailyDrop;
- newCompleteDailyData._8amAmount = newCompleteDailyData.midnightAmount - emergencyDropAmount - newCompleteDailyData.dailyDrop;
- if(newCompleteDailyData.midnightAmount > 800000){
- _800kPlus++;
- }
- completeDataArray.push_back(newCompleteDailyData);
- if(highestAltValue<altValuesBuff){
- highestAltValue = altValuesBuff;
- }
- }
- int lastId = 2665;// completeDataArray.size();
- cout<<"DATA: "<<completeDataArray[lastId].date<<endl;
- cout<<"Midnight:: "<<completeDataArray[lastId].midnightAmount<<endl;
- cout<<"DailyDrop:::::"<<completeDataArray[lastId].dailyDrop<<endl;
- cout<<"8AM:::::"<<completeDataArray[lastId]._8amAmount<<endl;
- cout<<"DAILYM3:::: "<<completeDataArray[lastId].dailyM3<<endl;
- cout<<endl;
- cout<<"WIECEJ NIZ 800k bylo przez: "<<_800kPlus<<" dni"<<endl;
- }
- void drawChart(vector<month> months){
- cout<<endl<<endl;
- for(size_t i=0; i<months.size(); i++){
- if(months[i].month >= 10){
- cout << months[i].month <<". ";
- } else {
- cout << months[i].month <<". ";
- }
- double poleLength = ceil(double(months[i].dailyM3)/10000);
- for(int j=0; j<poleLength; j++){
- cout<<"#";
- }
- cout<<" "<<poleLength;
- cout<<endl<<endl;
- }
- cout<<"[ # - 1 M3 ]"<<endl;
- }
- vector<month> getPartialsByMonths(vector<dailyData>& dataArray, int year){
- int currentMonth = 0;
- int monthId = -1;
- vector <month> months;
- for(size_t i=0; i<dataArray.size(); i++){
- if(dataArray[i].year == year){
- if(currentMonth!=dataArray[i].month){
- currentMonth = dataArray[i].month;
- month newMonth;
- newMonth.month = currentMonth;
- newMonth.dailyM3 += dataArray[i].dailyM3;
- months.push_back(newMonth);
- monthId++;
- }
- else {
- months[monthId].dailyM3 += dataArray[i].dailyM3;
- }
- }
- }
- return months;
- }
- vector<year> getPartialsByYears(vector<dailyData>& dataArray){
- int currentYear = 0;
- int yearId =-1;
- vector <year> years;
- for(size_t i=0; i<dataArray.size(); i++){
- if(currentYear!=dataArray[i].year){
- currentYear = dataArray[i].year;
- year newYear;
- newYear.year = currentYear;
- newYear.dailyM3 += dataArray[i].dailyM3;
- years.push_back(newYear);
- yearId++;
- } else {
- years[yearId].dailyM3 += dataArray[i].dailyM3;
- }
- }
- return years;
- }
- year getYearWithBiggestPartialSum(vector<year>& years){
- year yearWithBiggestPartialSum = years[0];
- for(size_t i=0; i<years.size(); i++){
- if(years[i].dailyM3>yearWithBiggestPartialSum.dailyM3){
- yearWithBiggestPartialSum = years[i];
- }
- }
- return yearWithBiggestPartialSum;
- }
- void getLongestPeriod(vector<dailyData>& dataArray){
- dailyData lastDaily = dataArray[0];
- dailyData startData;
- dailyData endData;
- int bestPeriodLength = 0;
- int periodLength = 0;
- dailyData bestStartData;
- dailyData bestEndData;
- for(size_t i=1; i<dataArray.size(); i++){
- lastDaily = dataArray[i-1];
- if(dataArray[i].dailyM3 > 10000){
- if(lastDaily.dailyM3 < 10000){
- startData = dataArray[i];
- }
- endData = dataArray[i];
- periodLength ++;
- }
- else {
- if(bestPeriodLength<periodLength){
- bestPeriodLength = periodLength;
- bestStartData = startData;
- bestEndData = endData;
- }
- startData;
- periodLength = 0;
- }
- }
- cout<<endl<<endl<<"Najdluzszy okres z seria 10000+"<<endl;
- cout<<endl<<bestStartData.date;
- cout<<" --- "<<bestEndData.date<<endl;
- cout<<"Dlugosc okresu: "<<bestPeriodLength<<endl;
- }
- int main()
- {
- fstream file;
- file.open("woda.txt");
- if(!file.good()){
- cout << "Error while reading txt file.";
- exit(0);
- }
- vector <dailyData> dataArray;
- string line;
- while(getline(file, line)){
- istringstream iss(line);
- string date, dailyM3;
- if(!(iss >> date >> dailyM3)) {break;}
- int dailyM3Int = atoi(dailyM3.c_str());
- dailyData newDailyData;
- newDailyData.date = date;
- newDailyData.year = atoi(date.substr(0,4).c_str());
- newDailyData.month = atoi(date.substr(5,2).c_str());
- newDailyData.day = atoi(date.substr(8,2).c_str());
- newDailyData.dailyM3 = dailyM3Int;
- dataArray.push_back(newDailyData);
- }
- vector<year> years = getPartialsByYears(dataArray);
- cout<< "[ ZADANIE NR 1 ]" <<endl<<endl;
- for(size_t i=0; i<years.size(); i++){
- cout << years[i].year << " -x- " << years[i].dailyM3<<endl;
- }
- year yearWithBiggestPartialSum = getYearWithBiggestPartialSum(years);
- cout<<"ROK Z NAJWIEKSZA SUMA"<<endl;
- cout<<yearWithBiggestPartialSum.year << " --- "<< yearWithBiggestPartialSum.dailyM3;
- cout<<endl<<endl<<"[ ZADANIE NR 2 ]" <<endl;
- getLongestPeriod(dataArray);
- cout<<endl<<endl<<"[ ZADANIE NR 3 ]" <<endl;
- vector<month> months = getPartialsByMonths(dataArray, 2008);
- for(size_t i=0; i<months.size(); i++){
- cout << months[i].month << " -x- " << months[i].dailyM3<<endl;
- }
- drawChart(months);
- drawChartVertical(months);
- cout<<endl<<endl<<"[ ZADANIE NR 4 ]" <<endl;
- simulateScenario(dataArray);
- simulateScenarioAlt(dataArray);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement