Hogyan kell nekiállni a következő feladatnak?
Készítsen programot, mely bekér Keresztneveket, Autómárkát és azok Árait. Az adatfelvitel akkor fejeződik be, ha névnek * karaktert viszünk be.Az adatfelvitelt követően írassuk ki a felvitt adatokat soronként: pl.: Imre Audi 4100000 Kata Suzuki 1125000
A kiírást követően jelenjen meg a gépkocsik árának összege, átlaga, legkisebb és legnagyobb eleme. Majd pedig kérdezze meg a felhasználót, hogy növekvő vagy csökkenő ársorrendben szeretné kiíratni a felvitt adatokat. Ha „c” betűt választ a felhasználó írassa ki a felvitt adatokat ár szerint csökkenően ha pedig ”n” betűt nyom, akkor ár szerint növekvően.
Ugyan ezt a kérdést nem te tetted fel pár órával ezelőtt is?
http://www.gyakorikerdesek.hu/szamitastechnika__programozas_..
Úgy kell nekiállni hogy először beolvasod a kért adatokat. Az megvan már?
kezdetnek:
- Létrehozol egy struktúrát, aminek van Név, Márka, és Ár adattagja. Gondolom tanultátok, hogy mi az a struktúra, és hogy kell készíteni.
- Létrehozol egy vector-t, aminek az elemei az előbb megadott struktúrák lesznek. (Azért vectort, és nem tömböt, mert ezt dinamikusan bővítheted, ami most jól jön)
Aztán:
- beolvasod a nevet
Ha a név nem egyenlő *-al:
- beolvasod a márkát
- beolvasod az árat
- a beolvasott adatokat eltárolod egy structba, és beteszed a vectorba
- Ezt ismétled, amíg *-ot nem kapsz.
Ha a beolvasás kész:
- Deklarálsz egy átlag, összeg, minimum, és maximum változót. A Maximum és a Minimum nem a legnagyobb és legkisebb összeget fogja tartalmazni, hanem az indexét a legkisebb és legnagyobb elemnek.
Ezután végigiterálsz a vector minden elemén egy ciklus segítségével. A ciklus minden iterációjában:
- Kiírod az aktuális adatokat
- Hozzáadod az autó árát az összeghez
- Ellenőrzöd, hogy kisebb, avagy nagyobb-e a jelenlegi elem összege, mint a minimum/maximum. Ha igen, beteszed az aktuális elem indexét a min/max változóba.
Ha végigért a ciklus:
- Az összeget elosztod a vector elemszámával, és az eredményt az átlagba teszed.
- Kiírod az összeget, átlagot, minimum, maximum elemet.
- Bekéred a rendezési sorrendet.
és végül: A rendezés. Nem kell cifrázni, egy Minimum vagy Maximum rendezés teljesen jó lesz ide. A léyneg annyi, hogy minimum rendezés esetében pl végigmész a vectoron, megkeresed a legkisebb elemet, és kicseréled az első elemmel. Majd újra végigmész a vectoron, de mostmár a második elemtől kezdve, és azzal cseréled ki a minimumot, majd a harmadikkal, és így tovább. Mivel neked már megvan a minimum és a amximum elemek indexe, célszerű kezdésnek kicserélni őket a vector első, és utolsó elemével. Így az első és az utolsó elem már rendezve van, így ha n elemű a vektorod, akkor csak a 2. elemtől az n-1. elemig kell rendezni. Rendezed, és utána kiíratod őket sorban egy újabb ciklussal, mint már fentebb is írtam.
Vagy ha már nem assemblyben írja használja a nyelv nyújtotta funkciókat.
// Nem kell az összes include de ha fejből elkezdem kiválogatni biztos kimarad valamelyik
#include <algorithm>
#include <array>
#include <bitset>
#include <chrono>
#include <codecvt>
#include <complex>
#include <fstream>
#include <functional>
#include <iomanip>
#include <iostream>
#include <iterator>
#include <list>
#include <locale>
#include <map>
#include <memory>
#include <mutex>
#include <numeric>
#include <random>
#include <regex>
#include <set>
#include <unordered_set>
#include <sstream>
#include <string>
#include <thread>
#include <time.h>
#include <type_traits>
#include <unordered_map>
#include <vector>
struct UserData
{
using CarPriceType = int;
std::string firstName;
std::string carBrand;
CarPriceType carPrice;
};
std::istream& operator>>(std::istream& is, UserData& ud)
{
std::cout << "Add meg a keresztnevet: ";
std::cin >> ud.firstName;
if (ud.firstName == "*") { return is; }
std::cout << "Add meg az automarkat: ";
std::cin >> ud.carBrand;
std::cout << "Add meg az auto arat: ";
std::cin >> ud.carPrice;
return is;
}
std::ostream& operator<<(std::ostream& os, const UserData& ud)
{
return os << ud.firstName << ' ' << ud.carBrand << ' ' << ud.carPrice;
}
bool operator<(const UserData& lhs, const UserData& rhs)
{
return lhs.carPrice < rhs.carPrice;
}
bool operator>(const UserData& lhs, const UserData& rhs)
{
return lhs.carPrice > rhs.carPrice;
}
int main()
{
std::vector<UserData> userData;
for (UserData ud; std::cin >> ud && std::cout << '\n' && ud.firstName != "*";)
{
userData.emplace_back(ud);
}
std::copy(userData.cbegin(), userData.cend(), std::ostream_iterator<UserData>{std::cout, "\n"});
const auto allCarPrice = std::accumulate(userData.cbegin(), userData.cend(), UserData::CarPriceType{0}, [](auto&& val, auto&& ud) {return val + ud.carPrice; });
const auto allCarMeanPrice = allCarPrice / userData.size(); // Ha nem egeszre jonne ki, el lesz dobva a tizedesvesszo utani resz
const auto mostAndLessExpensiveCarPrice = std::minmax_element(userData.cbegin(), userData.cend());
std::cout
<< "Az osszes kocsi ara: " << allCarPrice << '\n'
<< "Az osszes kocsi aranak atlaga: " << allCarMeanPrice << '\n'
<< "A legolcsobb kocsi ara: " << mostAndLessExpensiveCarPrice.first->carPrice << '\n'
<< "A legdragabb kocsi ara: " << mostAndLessExpensiveCarPrice.second->carPrice << "\n\n";
std::cout << "Irj 'c' betut a csokkeno sorrendhez vagy 'n' betut a novekvohoz: ";
char choice;
std::cin >> choice;
if (choice == 'c') { std::sort(userData.begin(), userData.end(), std::greater<>{}); }
else if (choice == 'n') { std::sort(userData.begin(), userData.end()); }
std::copy(userData.cbegin(), userData.cend(), std::ostream_iterator<UserData>{std::cout, "\n"});
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
std::cin.get();
}
#8 És ennek most mi értelme is van? :D
Írtál egy kódot, ami:
1. Olyan szinten túlbonyolítja a feladatot, hogy tapasztaltabb programozóknak is időbe telik értelmezni, egy totális kezdőnek meg egyenesen lehetetlen, rengeteg teljesen fölösleges dolgot pakoltál bele, csak hogy még komplexebb legyen.
2. Pont a lényeget hagyja ki. Nagyon kényelmes meghívni az std::sort-ot, vagy a std::minmax_element-et, csak ebből a kérdező épp azt nem tanulja meg, hogy hogyan működik egy rendezőalgoritmus, vagy egy maximumkeresés. Nem véletlenül írtam neki példának a minimumkiválasztásos rendezést, az egy egyszerű, könnyen emészthető rendezőalgoritmus, amit ő is le tud implementálni.
Ehelyett te mit mutattál neki? A legrandomabb beépített függvényeket (emplace_back? Komolyan?), operátortúlterhelést (a szó jelentését sem érti a kérdező, nemhogy magát az eljárást), és egy nagy halom nyelvi elemet, ami totálisan értelmezhetetlen lesz számára.
Ha a tanára meglátja ezt a kódot, mint házi feladat, egy pillanatra sem lesz kérdéses, hogy ő írta-e. Hamar be is bizonyosodik majd, hogy nem. Erre a célra teljesen alkalmatlan tehát. Tanulni semmit nem fog ebből, mert egy mukkot sem fog kb érteni belőle. Akkor zárásként újra megkérdezem: Mi értelme is van ennek?
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!