Ha két algoritmus között csak egy if feltételnyi különbség van, akkor meg tudom csinálni az alábbit?
Van két feladat, amely megoldása között csak egy kétszer előforduló if feltétel a különbség.
Példa:
Keresd meg a legolcsóbb 500 forint alatti terméket a tömbben!
vs.
Keresd meg a legolcsóbb 500 forint feletti terméket a tömbben!
Az lenne a célom, hogy a két feladathoz egy függvényt írok. Hogyan lehetne ezt megcsinálni? Arra gondoltam, hogy a feltételt egy bool változóban fogom tárolni és függvényhívás előtt a mainben definiálom a boolban a feltételt. Ez működik? Van ennél jobb megoldás? C++.
Ahelyett hogy bemásolnád a kódot regényt írsz.
"mainben definiálom a boolban a feltételt"
Hogy mi?
csinálj egy függvényt egy int visszatérési értékkel és egy int paraméterrel (input értékkel). Az input int ha mondjuk "1" akkor legolcsóbb ha "2" akkor a legdrágább 500 ft alatti/feletti tömb indexet vagy konkrét összeget dobja vissza igény szerint.
Így egy függvényben meg tudod oldani mind a kettőt. Meghívásnál meg igény szerint 1 vagy 2 verziót hívod meg. Nem kell hozzá boolean.
Ahogy a hármas válaszoló írja, csak két dolgot kell másképp csinálnod:
1. A bemenő egyik paraméter a tömb és a másik a boolean.
2. A visszatérési érték az az elemi adattipus, amiből a tömböd is áll. Ha int akkor int, ha más akkor más.
Még annyit, hogy ha nem bool tipusú paraméterrel választod ki a keresési metódust, akkor legyen char (pl. 'U' és 'D'), de semmiképp sem int.
A char-ból is saját tipust illik, illene létrehozni, de sokkal jobb a boolean, mert az eleve csak két értéket vehet fel.
Holnap megpróbálok a kommentek alapján javítani. De ez az én kódom, amire gondoltam, de sajnos nem működik. Gondolom a mainben nem jó a feltetel1 feltetel2 változónál az arak[i], mert nem tud vele mit kezdeni, de lehet a függvény maga is rossz.
#include <iostream>
using namespace std;
int feltetelesMinValasztas(int tomb[], bool feltetel, int n);
int main()
{
int n;
cin >> n;
int arak[n];
for(int i=0;i<n;i++){
cin >> arak[i];
}
///1. feladat: Add meg a legolcsóbb 500 forint alatti termék árát!
int i=0;
bool feltetel1;
feltetel1 = arak[i]<=500;
int olcsobbMinimum;
olcsobbMinimum = feltetelesMinValasztas(arak, feltetel1, n);
cout << olcsobbMinimum << endl;
///2. feladat: Add meg a legolcsóbb 500 forint feletti termék árát!
bool feltetel2;
feltetel2 = arak[i]>500;
int dragabbMinimum;
dragabbMinimum = feltetelesMinValasztas(arak, feltetel2, n);
cout << dragabbMinimum << endl;
}
int feltetelesMinValasztas(int tomb[], bool feltetel, int n){
int minimum;
bool nincs = true;
int i=0;
while(i<n && nincs){
if(feltetel){
minimum = tomb[i];
nincs = false;
}
i++;
}
if(nincs){
cout << "Nincs a feltetelnek megfelelo elem" << endl;
}
for(;i<n;i++){
if(tomb[i]<minimum && feltetel){
minimum = tomb[i];
}
}
return minimum;
}
if(nincs){
cout << "Nincs a feltetelnek megfelelo elem" << endl;
}
Itt kimaradt egy exit vagy break.
Most lehet, hogy én nem értem a feladatot, de miért kell ezt ennyire megbonyolítani?
Csinálnék egy függvényt, aminek három paramétere van:
* Bemeneti tömb, amiben keresni kell.
* Egy második paraméter, ami meghatározza, hogy alatti vagy feletti termékeket keresek. (tetszőleges adattípus lehet, ahogyan tetszik, direkt nem határozom meg)
* Egy szám, hogy milyen érték alatt/felett keresek majd.
Ezután össz-vissz annyi a függvény, hogy lenne egy "output" nevű tömb, amibe ciklussal kigyűjtöm egyetlen if-else feltétellel a termékeket, majd a ciklus után egy return-el átadom az output tömböt a meghívónak.
Ha nem tesz semmi eleget a feltételnek, akkor értelemszerűen üres lesz az átadott tömb. Ezt nem külön bool-al meg nem tudom milyen varázslatokkal külön jelezni, csak simán meg kell vizsgálni a kapott tömböt, hogy van-e benne valami.
Egyébként ránézésre nem tűnik rossznak a kódod, de szerintem felesleges túl van bonyolítva.
Helló!
A main a főprogramod. Onnan hívod meg a függvényedet, paraméterezve.
Ha a kérdésedben szereplő 500 nem konstans, akkor két paraméter helyett valóban hármat kell közölj a függvényeddel. A harmadik lesz a tömböd és a keresés iránya mellett az az érték is ami a kérdésedben 500.
Valahogy úgy kéne ezt, hogy a Main() legyen a forrás legalján, legfelül a deklarációk és a kettő között a függvénye(i)d.
A programod végrehajtása mindig a main()-nel kezdődik és (jó esetben) ott is ér véget. A függvényedet is a main-ből hívd meg, a tömb feltöltése után. A változóidat soha ne felejtsd el inicializálni (A ciklusváltozókon kívül, mert azokat úgy is inicializálod a használat során).
* inicializálás = értékadás.
"Gondolom a mainben nem jó a feltetel1 feltetel2 változónál az arak[i], mert nem tud vele mit kezdeni"
Így, ahogy mondod.
Neked kell egy függvény amiben benne van a minimum és a maximum keresés is.
Ennek a függvénynek a három paramétere:
1. Tömb amiben keres a függvény. Ez az arak[].
2. a keresés intervallumát beállító boolean érték. Default true.
3. Az érték ami alatt/fölött keres. Ez nálad most 500.
FuggvenyAmiKeres (arak, true, 500);
{
if true then {> 500} else {< 500}
}
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, 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!