C++ elte feladat: angol mérték

C++ elte feladat: angol mérték
2019-12-01T10:25:07+01:00
2019-12-02T17:10:13+01:00
2022-10-15T21:16:29+02:00
Nope321
Hello

Éppen programozást tanulok.
A Mester oldalon találtam a
kezdő feladatok között angol mérték nevű feladatot.
A 6.2 és a 14.2-es feladatra egy pontot sem ad,
és gőzöm sincsen, hogy miért.
A feladat leírást ide feltöltöttem: feladat.pdf

Nagyon megköszönném, ha valaki segítene nekem.
Eddig ezt írtam:

#include <iostream> using namespace std; struct mertek { long long merfold; long long yard; long long foot; long long inch; }; long long to_inch(mertek x) { return ((x.merfold * 1760 + x.yard) * 3 + x.foot) * 12 + x.inch; } mertek conver_from_inch(long long inch) { mertek temp; temp.inch = inch % 12; inch /= 12; temp.foot = inch % 3; inch /= 3; temp.yard = inch % 1760; inch /= 1760; temp.merfold = inch; return temp; } mertek N[2]; int main() { for (int i = 0; i < 2; i++) cin >> N[i].merfold >> N[i].yard >> N[i].foot >> N[i].inch; long long num1 = to_inch(N[0]); long long num2 = to_inch(N[1]); mertek sum = conver_from_inch(num1 + num2); cout << sum.merfold << ' ' << sum.yard << ' ' << sum.foot << ' ' << sum.inch << endl; mertek diff; if (num1 > num2) { diff = conver_from_inch(num1 - num2); cout << diff.merfold << ' ' << diff.yard << ' ' << diff.foot << ' ' << diff.inch << endl; } else { diff = conver_from_inch(num2 - num1); cout << '-' << diff.merfold << ' ' << diff.yard << ' ' << diff.foot << ' ' << diff.inch << endl; } return 0; }
Mutasd a teljes hozzászólást!
Csatolt állomány
Megtaláltam végül a hibát.
Amikor egyenlő volt a két szám és összehasonlította őket a nullát negatív számnak jelölte.
num1 < num2-t írtam, de num1 <= num2 a helyes megoldás.

Még egyszer köszi a segítséget.
Mutasd a teljes hozzászólást!

  • Én nem látok hibát a kódodban, legfeljebb pár stílusbeli problémát, ami a lefutást nem befolyásolja.

    Nem lehet, hogy más formátumban várják a negatív végeredményt, mint amit te gondolsz? A feladat erről nem tesz említést, pedig a leírás alapján számítanak negatív végeredményekre is.
    Mutasd a teljes hozzászólást!
  • Én nem látok hibát a kódodban, legfeljebb pár stílusbeli problémát, ami a lefutást nem befolyásolja.

    Milyen stílusbeli problémára gondolsz?

    Nem lehet, hogy más formátumban várják a negatív végeredményt, mint amit te gondolsz? A feladat erről nem tesz említést, pedig a leírás alapján számítanak negatív végeredményekre is.

    Nem
    Adtak 2 minta bemenetet/kimenetet is
    Bemenet1:         Kimenet1:
    42 800 1 5         52 1300 2 10
    10 500 1 5         32 300 0 0

    Bemenet2:         Kimenet2:
    10 800 2 10       53 41 2 8
    42 1000 2 10     -32 200 0 0

    Ezekre jó kimenetet ad
    Mutasd a teljes hozzászólást!
  • Milyen stílusbeli problémára gondolsz?

    Például miért globális változó az N, ha csak a main()-en belül használod? Lehetne lokális, és ha már ott vagy, lehetne neki értelmes neve is. Ugyanúgy a num1 és num2 is semmitmondó nevek, nem utalnak rá, hogy mit tárol a változó.

    Ha már C++, akkor a mertek típus kiírását és beolvasását lehetne saját << és >> operátorokkal megoldani, bár ha ezt még nem tanultad, akkor ez nem probléma. Mondjuk akkor is lehetne sima beolvasó és kiíró függvény, és akkor nem kéne ismételni kétszer a kiírást.

    Nem
    Adtak 2 minta bemenetet/kimenetet is

    Jó, és ezt nekem honnan kellett volna tudnom?

    Én továbbra se látok gondot a logikával, de lehet más majd erre jár és kiszúrja. Gondolom a hibás bemeneteket nem lehet elkérni a javítóprogramtól, mert különben azt is ideírtad volna.
    Mutasd a teljes hozzászólást!
  • Köszi a tippeket. 

    Igen, sajnos csak a minta bemenetek/kimenetek elérhetők.
    Mutasd a teljes hozzászólást!
  • Megtaláltam végül a hibát.
    Amikor egyenlő volt a két szám és összehasonlította őket a nullát negatív számnak jelölte.
    num1 < num2-t írtam, de num1 <= num2 a helyes megoldás.

    Még egyszer köszi a segítséget.
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd