Van egy c++ feladat amit részben megoldottam, viszont nem tudom hogy ennek valóban így kéne kinéznie, mert túl bonyolultnak tűnik?
Mi értelme függvénnyel keresni a maximumot, ha adott esetben egy sima maximum keresés is elég lenne? Az pedig hogy az indexét hogyan lehet így megkapni a legnagyobb számnak lövésem sincs...
Itt a feladat: [link]
és a megoldás: [link]
Miért nem lehetett ezt szövegesen közzétenni? Na mindegy, majd csak bepötyögöm valahogy...
Első blikkre nem értem, mi szükség van az a, b változókra. Mehetne a függvénybe közvetlenül a két tömbelem.
Itt van szövegesen is:
#include <iostream>
using namespace std;
double nagyobb(double a, double b);
int main()
{
//bekeres
cout << "Adj meg szamokat:\n";
double tomb[8];
for (int i = 0; i < 8; i++) {
cin >> tomb[i];
}
//max kereses
double max = tomb[0];
for (int i = 0; i < 7; i++) {
double a = tomb[i];
double b = tomb[i + 1];
if (nagyobb(a, b) > max) {
max = nagyobb(a, b);
}
}
cout << max << " a tomb legnagyobb eleme!";
}
double nagyobb(double a, double b) {
if (a >= b) {
return a;
}
else return b;
}
"Mi értelme függvénnyel keresni a maximumot"
Nem sok, de ez egy gyakorló feladat, aminek magában nem kell értelme legyen.
Én ezt írnám a ciklus belsejébe a mostani 5 sor helyett:
max = nagyobb(max,tomb[i])
Így a végén a max a legnagyobb érték lesz.
#4: Az én változatomban is az van, csak nem akartam lelőni a poént :)
Végre egy kérdező, aki gondolkodna is, te meg nem hagyod...
Esetleg még annyi, hogy ha
double max = tomb[0];
akkor a 0-dik elemmel már nem kell hasonlítani, mehet az összehasonlítás a második [1] elemtől.
A nagyobb függvény a nevéből fakadóan talán jobb lenne, ha tényleg csak nagyobb esetben adná vissza az első paramétert.
A nagyobb függvényt kicsit feleslegesnek érzem kétszer meghívni. A ciklusban az if után elég annyi, hogy "max=a;", ha egyszer az a nagyobb.
"az indexét hogyan lehet így megkapni a legnagyobb számnak"
Egyszerű, a "max=" kezdetű sornál annak az indexét is tárolod, pl. egy maxidx nevű 'int' változóban.
max=a; maxidx=i;
Az a és b változók valóban kicsit feleslegesek, a "tomb[..]" forma nyugodtan használható.
Egy trükk a későbbiekre:
double nagyobb(double a, double b) {return a>b?a:b;}
De ez is elég lenne:
bool nagyobb(double a, double b) {return a>b;}
És akkor:
if (nagyobb(tomb[i],max)) { max = tomb[i]; maxidx = i; }
De azt is megteheted, hogy csak a max indexét tárolod.
if (nagyobb(tomb[i], tomb[maxidx])) { maxidx = i; }
A végén pedig kiiratod a tomb[maxidx] és maxidx értékeit.
Remélem ezzel nem nem rontom az önálló gondolkodást, mert én sem szeretek fullos kész megoldásokat adni, inkább csak trükköket, tippeket. :)
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!