Advertisement
tamtamtamtam

gzh 2016 beugro_a_2. mo

Jan 22nd, 2017
118
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.51 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <string>
  4. #include <cstdlib>
  5. #include <ctime>
  6. #include <cmath>
  7.  
  8. using namespace std;
  9.  
  10. #define ellenoriz(x) if (x) pont++; else cout << "a feltetel nem teljesult a " << __LINE__ << ". sorban" << endl
  11.  
  12. // innentol...
  13. struct Auto
  14. {
  15.     string nev;
  16.     int maxtank;
  17.     double uzemanyag;
  18.     double megtettkm;
  19.     double fogyasztas;
  20. };
  21.  
  22. void tankol(Auto &b, double benzin)
  23. {
  24.     double c=b.uzemanyag+benzin;
  25.     if(c >= b.maxtank)
  26.         b.uzemanyag = b.maxtank;
  27.         else
  28.     b.uzemanyag+=benzin;
  29. }
  30.  
  31. void halad(Auto &a, double b)
  32. {
  33.         double c=((a.uzemanyag/a.fogyasztas)*100);
  34.         if(b>c)
  35.         {
  36.             a.megtettkm += c;
  37.             a.uzemanyag = 0;
  38.         }
  39.         else
  40.         {
  41.         a.megtettkm+=b;
  42.         a.uzemanyag-=((b/100)*a.fogyasztas);
  43.         }
  44. }
  45.  
  46. Auto tavverseny_azaz_addig_mennek_amig_ki_nem_fogynak_de_elotte_lenullazzak_a_kilometerorat(vector<Auto> &autok)
  47. {
  48.     int i;
  49.     for(i=0;i<autok.size();i++)
  50.         {
  51.          autok[i].megtettkm=0;
  52.          autok[i].megtettkm=((autok[i].uzemanyag/autok[i].fogyasztas)*100);
  53.          //cout<<autok[i].megtettkm<<endl;
  54.          autok[i].uzemanyag=0;
  55.         }
  56.     int hely=0;
  57.     double max=0;
  58.     for(i=0;i<autok.size();i++)
  59.         {
  60.          if(autok[i].megtettkm>max)
  61.             {
  62.              max=autok[i].megtettkm;
  63.              hely=i;
  64.             }
  65.         }
  66.  
  67.     return autok[hely];
  68.  
  69. }
  70. // ...idaig lehet irni
  71.  
  72. int main() {
  73.     srand(time(0));
  74.     int pont = 0;
  75.  
  76.     Auto a;
  77.     a.nev = "Ferrari";      // A jármű típusa
  78.     a.maxtank = 86;         // Az üzemanyag tartály mérete
  79.     a.uzemanyag = 13.5;     // Az aktuális üzemanyag mennyiség
  80.     a.megtettkm = 0;        // Az eddig megtett km-rek száma
  81.     a.fogyasztas = 13.3;    // A jármű fogyasztása l/100km-ben megadva
  82.     //fabs(): valós számok abszolútértéke
  83.     ellenoriz( a.nev == "Ferrari" && a.maxtank == 86 && fabs(a.uzemanyag-13.5)<0.01 && a.megtettkm == 0 && fabs(a.fogyasztas-13.3)<0.01 );
  84.  
  85.     tankol( a, 50 );
  86.     ellenoriz( fabs(a.uzemanyag-63.5) < 0.01 );
  87.  
  88.     halad( a, 350 );
  89.     ellenoriz( a.megtettkm == 350 && fabs(a.uzemanyag-16.95) < 0.01 );
  90.     //cout<<a.megtettkm<<endl;
  91.     tankol( a, 100 );
  92.     ellenoriz( a.uzemanyag == 86 );
  93.  
  94.     halad( a, 1000 );
  95.     ellenoriz( fabs(a.megtettkm-996.617) < 0.01 && a.uzemanyag == 0 );
  96.     //cout<<a.megtettkm<<endl;
  97.     vector<Auto> autok;
  98.     Auto a1; a1.nev="Opel";         a1.maxtank=40; a1.uzemanyag=35; a1.megtettkm=10525; a1.fogyasztas=10.1;
  99.     Auto a2; a2.nev="Toyota";       a2.maxtank=50; a2.uzemanyag=45; a2.megtettkm=5671;  a2.fogyasztas=8.6;
  100.     Auto a3; a3.nev="Volkswagen";   a3.maxtank=35; a3.uzemanyag=30; a3.megtettkm=36715; a3.fogyasztas=6.3;
  101.     autok.push_back( a1 );
  102.     autok.push_back( a2 );
  103.     autok.push_back( a3 );
  104.     Auto gyoztes = tavverseny_azaz_addig_mennek_amig_ki_nem_fogynak_de_elotte_lenullazzak_a_kilometerorat( autok );
  105.     ellenoriz( gyoztes.nev == a2.nev && autok[0].uzemanyag == 0 && autok[1].uzemanyag == 0 && autok[2].uzemanyag == 0 );
  106.  
  107.     // Ha az elozot jol kiszamoltad, akkor ez automatikusan teljesulni fog. Direkt bonyolult, hogy ne lehessen kitalalni ebbol, hanem rendesen ki kelljen szamolni az elozot. Ne akarj ebbol rajonni, hogy mi kell legyen az eredmeny.
  108.     float titok = sqrt(float(int(autok[2].megtettkm+0.5)));
  109.     titok -= floor(titok);
  110.     ellenoriz( fabs(titok-0.817) < 0.001 );
  111.  
  112.  
  113.     cout << "\n" << pont << "/7 pont" <<endl;
  114.     return 0;
  115.  
  116. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement