Advertisement
krzychna33

Excel -> C++ 2017

Sep 22nd, 2018
101
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 11.03 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3. #include <string>
  4. #include <vector>
  5. #include <cstdlib>
  6. #include <sstream>
  7. #include <cmath>
  8.  
  9. using namespace std;
  10.  
  11. struct dailyData{
  12.     string date;
  13.     int year;
  14.     int month;
  15.     int day;
  16.     int dailyM3;
  17. };
  18.  
  19. struct year{
  20.     int year;
  21.     int dailyM3 = 0;
  22. };
  23.  
  24. struct month{
  25.     int month;
  26.     int dailyM3 = 0;
  27. };
  28.  
  29. struct completeDailyData{
  30.     string date;
  31.     int year;
  32.     int month;
  33.     int day;
  34.     int dailyM3;
  35.     int midnightAmount;
  36.     int dailyDrop;
  37.     int _8amAmount;
  38. };
  39.  
  40. void drawChartVertical(vector<month> months){
  41.  
  42.     int highestX = 1;
  43.  
  44.     for(size_t i=0; i<months.size(); i++){
  45.         if(highestX<ceil(double(months[i].dailyM3)/10000)){
  46.             highestX = ceil(double(months[i].dailyM3)/10000);
  47.         }
  48.     }
  49.  
  50.     cout<<endl<<"-------------------------"<<endl;
  51.     for(size_t i=0; i<months.size(); i++){
  52.  
  53.         cout<<months[i].month<<"    ";
  54.  
  55.     }
  56.  
  57.     cout<<endl<<endl;
  58.  
  59.     for(int x=0; x<highestX + 1; x++){
  60.  
  61.         for(size_t y=0; y<months.size(); y++){
  62.             if(x < ceil(double(months[y].dailyM3)/10000)){
  63.                     if(y>=10){
  64.                         cout<<" #"<<"    ";
  65.                     } else {
  66.                         cout<<"#"<<"    ";
  67.                     }
  68.  
  69.             }
  70.             else {
  71.                     if(y>=10){
  72.                         cout<<"  "<<"    ";
  73.                     }else {
  74.                         cout<<" "<<"    ";
  75.                     }
  76.  
  77.             }
  78.         }
  79.  
  80.         cout<<endl;
  81.  
  82.     }
  83.  
  84.  
  85.  
  86.  
  87.  
  88.  
  89.     cout<<"[  # - 1 M3  ]"<<endl;
  90.  
  91. }
  92.  
  93. void simulateScenarioAlt(vector<dailyData>& dataArray){
  94.  
  95.     cout<<endl;
  96.  
  97.     vector <completeDailyData> completeDataArray;
  98.  
  99.  
  100.     completeDataArray.push_back(completeDailyData());
  101.  
  102.     completeDataArray[0].date = dataArray[0].date;
  103.     completeDataArray[0].year = dataArray[0].year;
  104.     completeDataArray[0].month = dataArray[0].month;
  105.     completeDataArray[0].day = dataArray[0].day;
  106.     completeDataArray[0].dailyM3 = dataArray[0].dailyM3;
  107.     completeDataArray[0].midnightAmount = 500000;
  108.     completeDataArray[0].dailyDrop = ceil(completeDataArray[0].midnightAmount*0.02);
  109.     completeDataArray[0]._8amAmount = completeDataArray[0].midnightAmount - completeDataArray[0].dailyDrop;
  110.  
  111.     int highestAltValue = 500000;
  112.  
  113.     int emergencyDropFlag = 0;
  114.     int emergencyDropAmount = 0;
  115.  
  116.     int _800kPlus = 0;
  117.  
  118.     for(size_t i=1; i<dataArray.size(); i++){
  119.         completeDailyData newCompleteDailyData;
  120.  
  121.         newCompleteDailyData.date = dataArray[i].date;
  122.         newCompleteDailyData.year = dataArray[i].year;
  123.         newCompleteDailyData.month = dataArray[i].month;
  124.         newCompleteDailyData.day = dataArray[i].day;
  125.         newCompleteDailyData.dailyM3 = dataArray[i].dailyM3;
  126.         newCompleteDailyData.midnightAmount = completeDataArray[i-1]._8amAmount + completeDataArray[i-1].dailyM3;
  127.         newCompleteDailyData.dailyDrop = ceil(newCompleteDailyData.midnightAmount*0.02);
  128.         newCompleteDailyData._8amAmount = newCompleteDailyData.midnightAmount - newCompleteDailyData.dailyDrop;
  129.  
  130.         if(highestAltValue<newCompleteDailyData.midnightAmount){
  131.             highestAltValue = newCompleteDailyData.midnightAmount;
  132.         }
  133.  
  134.         completeDataArray.push_back(newCompleteDailyData);
  135.  
  136.     }
  137.  
  138.  
  139.     cout<<"5.4 A (CO BY BYLO GBYBY NIE INTERWENCJE) "<<highestAltValue<<endl;
  140.  
  141.  
  142. }
  143.  
  144.  
  145. void simulateScenario(vector<dailyData>& dataArray){
  146.  
  147.     cout<<endl<<endl;
  148.  
  149.     vector <completeDailyData> completeDataArray;
  150.  
  151.  
  152.     completeDataArray.push_back(completeDailyData());
  153.  
  154.     completeDataArray[0].date = dataArray[0].date;
  155.     completeDataArray[0].year = dataArray[0].year;
  156.     completeDataArray[0].month = dataArray[0].month;
  157.     completeDataArray[0].day = dataArray[0].day;
  158.     completeDataArray[0].dailyM3 = dataArray[0].dailyM3;
  159.     completeDataArray[0].midnightAmount = 500000;
  160.     completeDataArray[0].dailyDrop = ceil(completeDataArray[0].midnightAmount*0.02);
  161.     completeDataArray[0]._8amAmount = completeDataArray[0].midnightAmount - completeDataArray[0].dailyDrop;
  162.  
  163.     int highestAltValue = 500000;
  164.  
  165.     int emergencyDropFlag = 0;
  166.     int emergencyDropAmount = 0;
  167.  
  168.     int _800kPlus = 0;
  169.  
  170.     for(size_t i=1; i<dataArray.size(); i++){
  171.         completeDailyData newCompleteDailyData;
  172.  
  173.         newCompleteDailyData.date = dataArray[i].date;
  174.         newCompleteDailyData.year = dataArray[i].year;
  175.         newCompleteDailyData.month = dataArray[i].month;
  176.         newCompleteDailyData.day = dataArray[i].day;
  177.         newCompleteDailyData.dailyM3 = dataArray[i].dailyM3;
  178.         newCompleteDailyData.midnightAmount = completeDataArray[i-1]._8amAmount + completeDataArray[i-1].dailyM3;
  179.         emergencyDropAmount = 0;
  180.         if(newCompleteDailyData.midnightAmount > 1000000){
  181.             emergencyDropAmount = newCompleteDailyData.midnightAmount - 1000000;
  182.             if(emergencyDropFlag == 0){
  183.                 cout<<"Pierwsze awaryjne upuszczanie wody: "<<newCompleteDailyData.date<<endl<<endl;
  184.             }
  185.             emergencyDropFlag++;
  186.         }
  187.         newCompleteDailyData.dailyDrop = ceil(newCompleteDailyData.midnightAmount*0.02);
  188.         int altValuesBuff = newCompleteDailyData.midnightAmount - newCompleteDailyData.dailyDrop;
  189.         newCompleteDailyData._8amAmount = newCompleteDailyData.midnightAmount - emergencyDropAmount - newCompleteDailyData.dailyDrop;
  190.  
  191.         if(newCompleteDailyData.midnightAmount > 800000){
  192.             _800kPlus++;
  193.         }
  194.  
  195.         completeDataArray.push_back(newCompleteDailyData);
  196.         if(highestAltValue<altValuesBuff){
  197.             highestAltValue = altValuesBuff;
  198.         }
  199.     }
  200.  
  201.     int lastId = 2665;// completeDataArray.size();
  202.     cout<<"DATA: "<<completeDataArray[lastId].date<<endl;
  203.     cout<<"Midnight:: "<<completeDataArray[lastId].midnightAmount<<endl;
  204.     cout<<"DailyDrop:::::"<<completeDataArray[lastId].dailyDrop<<endl;
  205.     cout<<"8AM:::::"<<completeDataArray[lastId]._8amAmount<<endl;
  206.     cout<<"DAILYM3:::: "<<completeDataArray[lastId].dailyM3<<endl;
  207.  
  208.     cout<<endl;
  209.  
  210.     cout<<"WIECEJ NIZ 800k bylo przez: "<<_800kPlus<<" dni"<<endl;
  211.  
  212. }
  213.  
  214. void drawChart(vector<month> months){
  215.  
  216.     cout<<endl<<endl;
  217.     for(size_t i=0; i<months.size(); i++){
  218.         if(months[i].month >= 10){
  219.             cout << months[i].month <<". ";
  220.         } else {
  221.                 cout << months[i].month <<".  ";
  222.         }
  223.  
  224.         double poleLength = ceil(double(months[i].dailyM3)/10000);
  225.  
  226.         for(int j=0; j<poleLength; j++){
  227.             cout<<"#";
  228.         }
  229.         cout<<"   "<<poleLength;
  230.         cout<<endl<<endl;
  231.  
  232.     }
  233.  
  234.     cout<<"[  # - 1 M3  ]"<<endl;
  235.  
  236. }
  237.  
  238. vector<month> getPartialsByMonths(vector<dailyData>& dataArray, int year){
  239.     int currentMonth = 0;
  240.     int monthId = -1;
  241.  
  242.     vector <month> months;
  243.  
  244.     for(size_t i=0; i<dataArray.size(); i++){
  245.         if(dataArray[i].year == year){
  246.             if(currentMonth!=dataArray[i].month){
  247.                 currentMonth = dataArray[i].month;
  248.                 month newMonth;
  249.                 newMonth.month = currentMonth;
  250.                 newMonth.dailyM3 += dataArray[i].dailyM3;
  251.                 months.push_back(newMonth);
  252.                 monthId++;
  253.             }
  254.             else {
  255.                 months[monthId].dailyM3 += dataArray[i].dailyM3;
  256.             }
  257.  
  258.         }
  259.     }
  260.  
  261.     return months;
  262. }
  263.  
  264. vector<year> getPartialsByYears(vector<dailyData>& dataArray){
  265.     int currentYear = 0;
  266.     int yearId =-1;
  267.  
  268.     vector <year> years;
  269.  
  270.     for(size_t i=0; i<dataArray.size(); i++){
  271.         if(currentYear!=dataArray[i].year){
  272.             currentYear = dataArray[i].year;
  273.             year newYear;
  274.             newYear.year = currentYear;
  275.             newYear.dailyM3 += dataArray[i].dailyM3;
  276.             years.push_back(newYear);
  277.             yearId++;
  278.         } else {
  279.             years[yearId].dailyM3 += dataArray[i].dailyM3;
  280.         }
  281.     }
  282.  
  283.     return years;
  284. }
  285.  
  286. year getYearWithBiggestPartialSum(vector<year>& years){
  287.     year yearWithBiggestPartialSum = years[0];
  288.  
  289.     for(size_t i=0; i<years.size(); i++){
  290.         if(years[i].dailyM3>yearWithBiggestPartialSum.dailyM3){
  291.             yearWithBiggestPartialSum = years[i];
  292.         }
  293.     }
  294.  
  295.     return yearWithBiggestPartialSum;
  296. }
  297.  
  298. void getLongestPeriod(vector<dailyData>& dataArray){
  299.     dailyData lastDaily = dataArray[0];
  300.     dailyData startData;
  301.     dailyData endData;
  302.  
  303.     int bestPeriodLength = 0;
  304.     int periodLength = 0;
  305.  
  306.     dailyData bestStartData;
  307.     dailyData bestEndData;
  308.  
  309.     for(size_t i=1; i<dataArray.size(); i++){
  310.  
  311.         lastDaily = dataArray[i-1];
  312.         if(dataArray[i].dailyM3 > 10000){
  313.             if(lastDaily.dailyM3 < 10000){
  314.                 startData = dataArray[i];
  315.             }
  316.             endData = dataArray[i];
  317.             periodLength ++;
  318.         }
  319.         else {
  320.             if(bestPeriodLength<periodLength){
  321.                 bestPeriodLength = periodLength;
  322.                 bestStartData = startData;
  323.                 bestEndData = endData;
  324.             }
  325.  
  326.             startData;
  327.             periodLength = 0;
  328.         }
  329.     }
  330.  
  331.     cout<<endl<<endl<<"Najdluzszy okres z seria 10000+"<<endl;
  332.     cout<<endl<<bestStartData.date;
  333.     cout<<" --- "<<bestEndData.date<<endl;
  334.     cout<<"Dlugosc okresu: "<<bestPeriodLength<<endl;
  335. }
  336.  
  337.  
  338. int main()
  339. {
  340.     fstream file;
  341.     file.open("woda.txt");
  342.  
  343.     if(!file.good()){
  344.         cout << "Error while reading txt file.";
  345.         exit(0);
  346.     }
  347.  
  348.     vector <dailyData> dataArray;
  349.  
  350.     string line;
  351.  
  352.  
  353.     while(getline(file, line)){
  354.         istringstream iss(line);
  355.  
  356.         string date, dailyM3;
  357.  
  358.         if(!(iss  >> date >> dailyM3)) {break;}
  359.  
  360.         int dailyM3Int = atoi(dailyM3.c_str());
  361.  
  362.         dailyData newDailyData;
  363.  
  364.         newDailyData.date = date;
  365.         newDailyData.year = atoi(date.substr(0,4).c_str());
  366.         newDailyData.month = atoi(date.substr(5,2).c_str());
  367.         newDailyData.day = atoi(date.substr(8,2).c_str());
  368.         newDailyData.dailyM3 = dailyM3Int;
  369.  
  370.         dataArray.push_back(newDailyData);
  371.     }
  372.  
  373.  
  374.     vector<year> years = getPartialsByYears(dataArray);
  375.     cout<< "[ ZADANIE NR 1 ]" <<endl<<endl;
  376.  
  377.     for(size_t i=0; i<years.size(); i++){
  378.         cout << years[i].year << " -x- " << years[i].dailyM3<<endl;
  379.     }
  380.  
  381.  
  382.     year yearWithBiggestPartialSum = getYearWithBiggestPartialSum(years);
  383.     cout<<"ROK Z NAJWIEKSZA SUMA"<<endl;
  384.     cout<<yearWithBiggestPartialSum.year << " --- "<< yearWithBiggestPartialSum.dailyM3;
  385.  
  386.     cout<<endl<<endl<<"[ ZADANIE NR 2 ]" <<endl;
  387.  
  388.     getLongestPeriod(dataArray);
  389.  
  390.     cout<<endl<<endl<<"[ ZADANIE NR 3 ]" <<endl;
  391.  
  392.     vector<month> months = getPartialsByMonths(dataArray, 2008);
  393.  
  394.     for(size_t i=0; i<months.size(); i++){
  395.         cout << months[i].month << " -x- " << months[i].dailyM3<<endl;
  396.     }
  397.  
  398.     drawChart(months);
  399.  
  400.     drawChartVertical(months);
  401.  
  402.     cout<<endl<<endl<<"[ ZADANIE NR 4 ]" <<endl;
  403.  
  404.     simulateScenario(dataArray);
  405.     simulateScenarioAlt(dataArray);
  406.  
  407.  
  408.     return 0;
  409. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement