Tudnátok segíteni (C++)?
Ezt a programot kellene megírnom, de elakadtam. Előre is köszi a segítséget.
Bemenet:
1. sorban bekér egy számot (1≤N≤100)
Utána ugyan ennyi sorban bekér 2 számot szóközzel elválasztva, Távolság1-től (0≤K≤300), Távolság2-től (0≤P≤300).
Kimenet:
A kimenet első sorába azon bekért elemek darabszámát, illetve sorszámát kell írni sorszám szerint növekvő sorrendben, amelyek Távolság2(P) 100-nál kisebb; és Távolság1(K) 100-nál nagyobb.
Példa
Bemenet
6
42 15
110 20
125 160
166 180
42 100
110 39
Kimenet
2 2 6
Csak laikusként kérdezem
,,Kimenet:
A kimenet első sorába" ez nem első oszlop akar lenni?
Illetve nem felcserélve a végén a T2 és T1 érték? Mivel ahogy nézem ha:
T1: 42
T2: 15 és arra teljesül a feltétel ha
T1' nagyobb mint 142 és
T2' kisebb mint 115 akkor igazából nincs olyan feltétel ami erre igaz lenne.
Bár ez lehet csak laikusan tűnik rossznak
Kérdező: Tabaki kollégával teljes egyetértésben kérdem: hol akadtál el?
#2: A kimenet egy sort tartalmaz.
Az első érték azon elemek darabszámát tartalmazza, ahol:
* a Távolság1 > 100 és
* a Távolság2 < 100
a további értékek meg a fenti feltételnek megfelelő elemek sorszámát tartalmazza.
Jelen esetben két ilyen elem van:
#2: 110 20
#6: 110 39
A kimenet az egy soros. Az első eleme az a darabszám amelyekre igaz a feltétel.
Szóval
Kimenet
2(Két ilyen sorra igaz) 2(második sor, azaz 110 és 20) 6(hatodik sor, azaz 110 és 39)
Még csak nemrég kezdtem tanulni és rengeteg hiányosságom van.
Tudom, hogy mit "kellene" megcsinálnom, csak nem tudom lekódolni.
Amikor az elején bekérem a Távolság1 és Távolság2 akkor azt Tömb-ben tegyem meg? Hogy hozok létre N elemű tömböt?
Ill. a végén, hogy rendezem sorba?
Igen, tömbbe is lehetne csak arra ügyelj, hogy a C++ szabvány - a C99 szabvánnyal ellentétben - nem támogatja a változó hosszúságú tömböket (variable length array).
Szóval ilyen nem hozható létre:
int n;
cout << "Add meg a pontok számát: ";
cin >> n;
int tavolsag1[n];
int tavolsag2[n];
Helyette ott a vector:
std::vector<double> tavolsag1(n);
std::vector<double> tavolsag2(n);
Üdv! Én megcsináltam a programot, de nem fogom feltölteni a megoldást. Kiszedtem fontos részeket belőle, amelyeket csak úgy tudsz beírni a megjelölt helyekre, ha tudod a következőket:
- break és continue utasítások
- elágazások, feltételvizsgálat
- dinamikus tömb/2D tömb létrehozása
- függvényhívás
- változó értékének növelése 1-el
- kiíratás
Házi feladatként a sorba rendezés a te dolgod, adtam segítséget is hozzá.
Bocsi, ha egy kicsit csúnya kódot írtam, így tudtam csak megoldani azt, hogy lényeges dolgokat kivegyek belőle.
És a kód: [link]
Sok sikert!
Akkor én értettem félre a feladatot:D
Én úgy értelmeztem hogy a 2 első bekért elem maga a 2 ,,konstans" és ebből jön a feltétel.
Ezért nem értettem hogy ha a 42 höz és a 15 höz nézem a feltételeket akkor nem adja valahogy:D
De ha a 2 feltétel külön konstans és nem konstans + a feltétel (t1+100> x) akkor érthető.
#7 Csak pár észrevétel:
- Létezik olyan, hogy std::vector. Vagy std::deque. Egyszerű és biztonságosabb konstrukció, már csak azért is, mert saját magának manageli a memóriafoglalást. Apropó memóriafoglalás:
- Dinamikus tömbökkel dolgozol, de sehol nem szabadítod fel a memóriát amit lefoglalsz neki. Nem, az nem érv, hogy "a program végén úgyis felszabadul".
- Fölöslegesen bonyolítod a beolvasást. Stringstream? Getline? Atoi? Egy >> stream operátorral rögtön áthidalod mindegyiket, és utóbbit hibakezelni is egyszerűbb. Ha már itt tartunk:
- Ha már bonyolítod a beolvasást, legalább tedd biztonságossá. A getline-os megoldásodat azért tudnám megérteni, mert jobban garantálni tudod vele az input megfelelő formátumát. Kivéve, hogy a split függvényedben erre már semmi garancia nincs, sőt, ha a split kap egy olyan sort, amiben 2-nél több szám van, el is hal szépen az egész.
- while(true), meg break-ek intenzív használata. Strukturált kódról hallottál már? Ha nem, ideje ráguglizni.
- Apropó strukturáltság, ez a kód valami átláthatatlan katyvasz. Miért van benne 4 darab ciklus? 2 ciklus bőven elég, nem is értem itt mi történik. Egyszer végig beolvasod a számokat, aztán.. megint elkezded beolvasni őket?
Minél tovább nézem a kódot, annál kevésbé értem, hogy mit is akartál elérni vele. De szerintem sem a feladat megoldására nem alkalmas, sem arra, hogy bármi hasznosat mondjon egy kezdőnek. Ha valamire, inkább az összezavarására alkalmas.
További 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!