#include <iostream>
#include <vector>
#include <string>
#include <numeric>
#include <iomanip>
struct PowerData {
std:: vector < int > PowerOutput;
std:: vector < int > PowerString2;
} ;
struct InverterData {
std:: string serialNumber;
std:: string date;
PowerData plotData;
} ;
double calculateEfficiency( const PowerData& data) {
double totalAC = std:: accumulate ( data.PowerOutput .begin ( ) , data.PowerOutput .end ( ) , 0 ) ;
double totalDC = std:: accumulate ( data.PowerString2 .begin ( ) , data.PowerString2 .end ( ) , 0 ) ;
if ( totalDC == 0 ) return 0.0 ; // Unikaj dzielenia przez zero
return ( totalAC / totalDC) * 100.0 ;
}
double calculateEnergyInKWh( const std:: vector < int > & powerData) {
double energy = 0.0 ;
for ( size_t i = 0 ; i < powerData.size ( ) ; ++ i) {
energy + = ( powerData[ i] / 1000.0 ) * ( 15.0 / 60.0 ) ; // Moc w kW * czas w godzinach
}
return energy;
}
int main( ) {
// Przykładowe dane wejściowe
InverterData inverter = {
"452/21" , // S/N
"2025-02-21" , // Data
{ // PlotData
{ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 48 , 145 , 177 , 434 , 1126 , 1387 , 1553 , 1684 , 1798 , 1894 , 1999 , 2068 , 2142 , 2204 , 2249 , 2251 , 2276 , 2262 , 2236 , 1993 , 2008 , 1989 , 1971 , 1902 , 1806 , 1686 , 1529 , 1347 , 1096 , 1218 , 1088 , 917 , 778 , 620 , 459 , 276 , 239 , 156 , 88 , 38 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 } , // PowerOutput
{ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 7 , 129 , 251 , 280 , 518 , 1189 , 1466 , 1646 , 1768 , 1891 , 2026 , 2096 , 2172 , 2244 , 2336 , 2395 , 2399 , 2447 , 2398 , 2364 , 2138 , 2145 , 2107 , 2093 , 2023 , 1910 , 1792 , 1630 , 1447 , 1195 , 1312 , 1164 , 1003 , 858 , 741 , 564 , 366 , 323 , 252 , 175 , 137 , 15 , 10 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 } // PowerString2
}
} ;
// Obliczenia
double efficiency = calculateEfficiency( inverter.plotData ) ;
double energyInKWh = calculateEnergyInKWh( inverter.plotData .PowerOutput ) ;
// Wyświetlanie wyników
std:: cout << "Typ falownika PS100: " << inverter.serialNumber << std:: endl ;
std:: cout << "Data: " << inverter.date << std:: endl ;
std:: cout << "Energia w wybranym dniu: " << std:: fixed << std:: setprecision ( 2 ) << energyInKWh << " kWh" << std:: endl ;
std:: cout << "Sprawność falownika: " << std:: fixed << std:: setprecision ( 2 ) << efficiency << "%" << std:: endl ;
return 0 ;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8bnVtZXJpYz4KI2luY2x1ZGUgPGlvbWFuaXA+CgpzdHJ1Y3QgUG93ZXJEYXRhIHsKICAgIHN0ZDo6dmVjdG9yPGludD4gUG93ZXJPdXRwdXQ7CiAgICBzdGQ6OnZlY3RvcjxpbnQ+IFBvd2VyU3RyaW5nMjsKfTsKCnN0cnVjdCBJbnZlcnRlckRhdGEgewogICAgc3RkOjpzdHJpbmcgc2VyaWFsTnVtYmVyOwogICAgc3RkOjpzdHJpbmcgZGF0ZTsKICAgIFBvd2VyRGF0YSBwbG90RGF0YTsKfTsKCmRvdWJsZSBjYWxjdWxhdGVFZmZpY2llbmN5KGNvbnN0IFBvd2VyRGF0YSYgZGF0YSkgewogICAgZG91YmxlIHRvdGFsQUMgPSBzdGQ6OmFjY3VtdWxhdGUoZGF0YS5Qb3dlck91dHB1dC5iZWdpbigpLCBkYXRhLlBvd2VyT3V0cHV0LmVuZCgpLCAwKTsKICAgIGRvdWJsZSB0b3RhbERDID0gc3RkOjphY2N1bXVsYXRlKGRhdGEuUG93ZXJTdHJpbmcyLmJlZ2luKCksIGRhdGEuUG93ZXJTdHJpbmcyLmVuZCgpLCAwKTsKICAgIAogICAgaWYgKHRvdGFsREMgPT0gMCkgcmV0dXJuIDAuMDsgLy8gVW5pa2FqIGR6aWVsZW5pYSBwcnpleiB6ZXJvCiAgICByZXR1cm4gKHRvdGFsQUMgLyB0b3RhbERDKSAqIDEwMC4wOwp9Cgpkb3VibGUgY2FsY3VsYXRlRW5lcmd5SW5LV2goY29uc3Qgc3RkOjp2ZWN0b3I8aW50PiYgcG93ZXJEYXRhKSB7CiAgICBkb3VibGUgZW5lcmd5ID0gMC4wOwogICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwb3dlckRhdGEuc2l6ZSgpOyArK2kpIHsKICAgICAgICBlbmVyZ3kgKz0gKHBvd2VyRGF0YVtpXSAvIDEwMDAuMCkgKiAoMTUuMCAvIDYwLjApOyAvLyBNb2MgdyBrVyAqIGN6YXMgdyBnb2R6aW5hY2gKICAgIH0KICAgIHJldHVybiBlbmVyZ3k7Cn0KCmludCBtYWluKCkgewogICAgLy8gUHJ6eWvFgmFkb3dlIGRhbmUgd2VqxZtjaW93ZQogICAgSW52ZXJ0ZXJEYXRhIGludmVydGVyID0gewogICAgICAgICI0NTIvMjEiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUy9OCiAgICAgICAgIjIwMjUtMDItMjEiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEYXRhCiAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBQbG90RGF0YQogICAgICAgICAgICB7MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDgsIDE0NSwgMTc3LCA0MzQsIDExMjYsIDEzODcsIDE1NTMsIDE2ODQsIDE3OTgsIDE4OTQsIDE5OTksIDIwNjgsIDIxNDIsIDIyMDQsIDIyNDksIDIyNTEsIDIyNzYsIDIyNjIsIDIyMzYsIDE5OTMsIDIwMDgsIDE5ODksIDE5NzEsIDE5MDIsIDE4MDYsIDE2ODYsIDE1MjksIDEzNDcsIDEwOTYsIDEyMTgsIDEwODgsIDkxNywgNzc4LCA2MjAsIDQ1OSwgMjc2LCAyMzksIDE1NiwgODgsIDM4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwfSwgLy8gUG93ZXJPdXRwdXQKICAgICAgICAgICAgezAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDEyOSwgMjUxLCAyODAsIDUxOCwgMTE4OSwgMTQ2NiwgMTY0NiwgMTc2OCwgMTg5MSwgMjAyNiwgMjA5NiwgMjE3MiwgMjI0NCwgMjMzNiwgMjM5NSwgMjM5OSwgMjQ0NywgMjM5OCwgMjM2NCwgMjEzOCwgMjE0NSwgMjEwNywgMjA5MywgMjAyMywgMTkxMCwgMTc5MiwgMTYzMCwgMTQ0NywgMTE5NSwgMTMxMiwgMTE2NCwgMTAwMywgODU4LCA3NDEsIDU2NCwgMzY2LCAzMjMsIDI1MiwgMTc1LCAxMzcsIDE1LCAxMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMH0gIC8vIFBvd2VyU3RyaW5nMgogICAgICAgIH0KICAgIH07CgogICAgLy8gT2JsaWN6ZW5pYQogICAgZG91YmxlIGVmZmljaWVuY3kgPSBjYWxjdWxhdGVFZmZpY2llbmN5KGludmVydGVyLnBsb3REYXRhKTsKICAgIGRvdWJsZSBlbmVyZ3lJbktXaCA9IGNhbGN1bGF0ZUVuZXJneUluS1doKGludmVydGVyLnBsb3REYXRhLlBvd2VyT3V0cHV0KTsKCiAgICAvLyBXecWbd2lldGxhbmllIHd5bmlrw7N3CiAgICBzdGQ6OmNvdXQgPDwgIlR5cCBmYWxvd25pa2EgUFMxMDA6ICIgPDwgaW52ZXJ0ZXIuc2VyaWFsTnVtYmVyIDw8IHN0ZDo6ZW5kbDsKICAgIHN0ZDo6Y291dCA8PCAiRGF0YTogIiA8PCBpbnZlcnRlci5kYXRlIDw8IHN0ZDo6ZW5kbDsKICAgIHN0ZDo6Y291dCA8PCAiRW5lcmdpYSB3IHd5YnJhbnltIGRuaXU6ICIgPDwgc3RkOjpmaXhlZCA8PCBzdGQ6OnNldHByZWNpc2lvbigyKSA8PCBlbmVyZ3lJbktXaCA8PCAiIGtXaCIgPDwgc3RkOjplbmRsOwogICAgc3RkOjpjb3V0IDw8ICJTcHJhd25vxZvEhyBmYWxvd25pa2E6ICIgPDwgc3RkOjpmaXhlZCA8PCBzdGQ6OnNldHByZWNpc2lvbigyKSA8PCBlZmZpY2llbmN5IDw8ICIlIiA8PCBzdGQ6OmVuZGw7CgogICAgcmV0dXJuIDA7Cn0=