Kezdőoldal » Számítástechnika » Programozás » Hogyan tudnám kiíratni egy...

Hogyan tudnám kiíratni egy sorban az értékeket ebben a C++ kódban?

Figyelt kérdés

[link]


Az lenne a feladat hogy:

Írj programot, amely megadja 0-9, 10-19,...,190-200 négyzetméteres kategóriákba osztva a lakások számát!

A bemenetben a másodjára beírt számok a négyzetméter értékek. A kód nem ad hibát, de mégse a kimenet szerint írja ki az értékeket, hanem csak egy értéket ad ki. Mi lehet a probléma ?


Bemenet :

4

10 45

20 80

10 30

100 145


Kimenet: 0 0 0 1 1 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0



2021. okt. 3. 00:18
 1/7 anonim ***** válasza:

A kód amit írtál mindenhogy rossz. Nem rakunk orrba szájba for ciklusokat. Biztos, hogy rossz irányba gondolkodsz.


Amire én gondolok: szükséged van valamiféle hashmap szerű kulcs-érték páros megoldásra. Neked ki kell generáltatnod a négyzetméter kategóriákat, és le kell tárolnod valahol, de úgy, hogy tudd vizsgálni azok értékeit.


Egy proli megoldás eszembe jutott:


Hozz létre egy tömböt, mely 20 darab belső tömbből áll (200/10 = 20). Valami ilyesmire gondolok:


[

[0, 9, 0],

[10, 19, 0],

[20, 29, 0]

...

]



A belső tömb első eleme az alsó határ, a második eleme a felső határ, a harmadik eleme pedig a darabszám legyen. Nem értek annyira a C++-hoz, ha tudsz jobb megoldást a kulcs-érték párra, akkor használd azt, itt az a lényeg, hogy GENERÁLNOD kell a kulcsaidat, majd egy darab forciklussal végigmenni az adatokon, majd minden iterációnál vizsgálni azt, hogy valamelyik intervallumába (első két elem) beleesik-e. Ha igen, akkor annak a tömbnek a 2. eleme (0tólé indulunk) ++


Aztán lehet túl bonyolítottam. Valahogy generáld ki a tömböket, ezt már rád bízom

2021. okt. 3. 00:46
Hasznos számodra ez a válasz?
 2/7 anonim ***** válasza:

Amit akarsz kiiratni az így nézne ki a kódodban:


cout << a1 << " " << a2 << " " << a3 << " " << a4 << " " << a5 << " " << a6 << " " << a7 << " " << a8 << " " << a9 << " " << a10 << " " << a11 << " " << a12;


De még ez is egy hülyeséget fog kiírni, mert az összehasonlító szintaxis amit használsz a cikluson belüli if-ben nem létezik, tehát a "0<=t[i]<10" helyett "0<=t[i] && t[i]<10" lenne működőképes.


De ez valóban nem egy túl szép megoldás, ez már csak abból is látszik, hogy kb ugyanaz van le copy-pastelve többször, így ezt a hibát is mindegyikben egyenként kell javítani. (Vagyis nem kell, ha helyette újraírod szebben.)

2021. okt. 3. 01:00
Hasznos számodra ez a válasz?
 3/7 A kérdező kommentje:

#1

Igen célszerűbb lenne ez a megoldás, amit mondasz de mivel kezdő vagyok ötletem sincs, hogy hogyan tudnám kivitelezni ezeket a több értékes tömböket.


#2 Nem valami szép az tény, de hirtelen nincs jobb ötletem, hogyan tudnám megcsinálni.



Illetve hogyan lehet beolvasni két értéket úgy, hogy csak az egyiket vegyük figyelembe?


const int MaxN = 100;

int t[MaxN];


int N;

cin >> N;


for(int i=0; i<N; i++)

{

cin >> t[i];

}


A for ciklusban kellene még egy változót létrehozni vagy int N mellé egy újat ?

2021. okt. 3. 01:17
 4/7 anonim ***** válasza:

Illetve #1 gondolatmenetét részben követve, hogyha csinálsz egy sima 0-ra inicializált egydimenziós 20 elemű int tömböt, akkor abban jelen esetben elég könnyen meghatározható, hogy egy adott érték esetén melyik indexű elemet kell növeld, csak el kell osztani 10-el. (Speciális eset a >=200, ami szintén az 19-es indexre kerül; vagyis a feladatleírás csak 200-ig írja, de azért mégsem illik túlindexelni a tömböt ha nagy számot írnak be.)



Változókat célszerű úgy létrehozni, hogy a szükségesnél ne legyenek több helyen láthatóak, tehát ha a cikluson kívül nincs rá szükség (és ciklusiterációk között sem kell megmaradjon), akkor a cikluson belül.

2021. okt. 3. 01:21
Hasznos számodra ez a válasz?
 5/7 A kérdező kommentje:

Tehát egy for ciklussal akármelyik elemét tudom növelni és a végén kiíratni az egész tömböt egy lépésben ?


Így próbáltam megoldani, de ez nem működik.


const int MaxN = 100;

const int MaxX = 200;

int t[MaxN];

int x[MaxX];


int N;

cin >> N;


for(int i=0; i<N; i++)

{

cin >> x[i];

cin >> t[i];

}

2021. okt. 3. 01:32
 6/7 A kérdező kommentje:
Mégis működik ezzel a változóval.
2021. okt. 3. 01:51
 7/7 Pelenkásfiú ***** válasza:

Szerintem jelen esetben ennél egyszerűbb a dolog.

Mivel a kategóriák mindig 10-esével nőnek, elég egy 10-zel való osztás és megnézed az egész részét.

5 // 10 = 0, tehát a 0-9 kategóriába esik (tömb 0. indexet növeljük)

39 // 10 = 3, tehát a 30-39 kategóriába esik (tömb 3. indexet növeljük)

140 // 10 = 14, tehát a 140-149 kategóriába esik (tömb 14. indexet növeljük)


Legfeljebb a 200-at kell külön vizsgálni, ha az még tényleg beletartozik a 190-200 kategóriába.


Egyébként a példa bemenetnél mit jelent a 10, 20, 10, 100?

Úgy látom, a kimenet csak a második számokat veszi figyelembe.

2021. okt. 3. 08:40
Hasznos számodra ez a válasz?

További 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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!