Kezdőoldal » Számítástechnika » Programozás » Hogyan konvertáljam át C-ben...

Hogyan konvertáljam át C-ben egy egyszerűbb függvénynél a struct típust int-re? (Már ha egyáltalán át kell. )

Figyelt kérdés

Készítenem kell egy függvényt szelsoertek néven, ami megkapja kocsi típusú adatok egy tömbjét (a mérettel együtt), és visszatér annak az elemnek az indexével, amelyikben a végsebesség értéke a legnagyobb.


A struktúra definíciója (ezen nem módosíthatok):


struct kocsi

{

unsigned int szemelyek; // hány személyes

char marka[20]; // autómárka

int gyartas; // gyártás éve

unsigned int vegseb; // végsebesség

};


A függvényt meghívó kód (ezen se):


printf("%d\n", szelsoertek(tomb, 6));


Meg is csináltam a függvényt: [link]


De ez nem fordul le, ugyanis a feladat olyan dolgot kér (tomb[i]), ami nem int, hanem struct kocsi típusú. Sok oldalon az uniót javasolják a konverzióra, de ahhoz a struktúrába is kéne írni, ami nálam nem oldható meg. De ha van konvertálás nélküli megoldás is, szívesen fogadom.



2019. nov. 3. 18:40
1 2
 1/12 anonim ***** válasza:
100%

semmi önállóság és nem is értesz hozzá, de itt vannak a hibás sorok, hogy pontosan mi, azt nem mondom meg:


1) int szelsoertek(struct kocsi tomb[6], int i) {

2) for (i = 0; i < 6; i++) {


3)

max_idx=i;

max_idx = tomb[i];

2019. nov. 3. 19:36
Hasznos számodra ez a válasz?
 2/12 anonim ***** válasza:
100%
Nem kell konvertálni semmit sehova, a tomb[i].vegseb-bel kell dolgozni, az alapján maximumkeresel, vissza pedig a tömbindexet adod. A függvényed majdnem jó, azt az értékadást vedd ki, ahol max_idx-nek a tömbelemet adod át.
2019. nov. 3. 19:45
Hasznos számodra ez a válasz?
 3/12 A kérdező kommentje:
Köszi, de ha a max_idx = tomb[i]-t eltávolítom, mindenhol a bekérések száma -1-et ír, jelen esetben 5-öt.
2019. nov. 3. 20:12
 4/12 anonim ***** válasza:
100%

Nos, érteni is kéne mit csinálsz. Az, hogy azért nem akarsz kivenni egy hibás sort, mert akkor nem jó eredményt kapsz elég jól mutatja, hogy fogalmad sincs mit csinál a kód. Mit tárolsz a max_idx változóban? A legnagyobb végsebességű autó INDEXÉT. Azaz, a tömb hanyadik eleme a legnagyobb végsebességű autó. Akkor mi a probléma az alábbi feltétellel?


if (tomb[i].vegseb>max_idx)


Mit hasonlítasz itt össze? Az aktuális autó végsebességét a leggyorsabb autó indexével. Van ennek értelme? Nincs. Mit kéne ehelyett csinálnod? Az aktuális autó végsebességét a leggyorsabb autó végsebességével összehasonlítani. Na, akkor tedd ezt.

2019. nov. 3. 21:06
Hasznos számodra ez a válasz?
 5/12 tabaki ***** válasza:
100%

@#3:

Persze, mert már az összehasonlítás feltétele is marhaság. A max_idx változóban egy indexet jegyzel meg, de nem indexként használod, hanem közvetlenül összehasonlítod egy tömbelem egyik mezőjének értékével. Az if blokk egyetlen helyénvaló utasítása a

max_idx = i;

, annak egyáltalán nem látom a füle-farkát, hogy mire szolgálna az, ha az így tárolt értéket egy töredék ezredmásodpercen belül felülírnád egy másikkal, pláne, hogy egy árva intbe akarsz egy egész struktúrát belegyömöszölni.

2019. nov. 3. 21:17
Hasznos számodra ez a válasz?
 6/12 tabaki ***** válasza:
82%
Pardon, közben más is leírta.
2019. nov. 3. 21:18
Hasznos számodra ez a válasz?
 7/12 A kérdező kommentje:
Köszi mindenkinek a segítséget, működik a 4. válaszoló javaslata.
2019. nov. 3. 21:20
 8/12 tabaki ***** válasza:
Azért bemutathatnád, hátha még bele tudunk akadni valamibe.
2019. nov. 3. 21:37
Hasznos számodra ez a válasz?
 9/12 A kérdező kommentje:
Kicsit szebbé tettem a tagolását: [link]
2019. nov. 3. 23:06
 10/12 tabaki ***** válasza:
100%

Ebben egy dolog bizonyosan nem tetszik. A szelsoertek() függvény paramétereként beolvasod a tömb méretét, vagyis i változót, teljesen fölöslegesen és értelmetlenül. Miért is? Ja, mert a feladatban az van, hogy a méretet is meg kell adni... Aztán, ha már ott van ötödik keréknek, valamit mégiscsak kezdeni kell vele, hát praktikusan befogod ciklusváltozónak, és abban a pillanatban felülírod 0 értékkel. A méretet meg úgyis tudod, azt szépen beírod számmal a for feltételébe. Hát, nem hinném, hogy a feladat kiagyalójának pont ez járt a fejében. Elképzelésem szerint inkább valami ilyesmi kéne:

int szelsoertek(struct kocsi tomb[6], int meret) {

      int max_idx = 0;

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

            if (tomb[i].vegseb>tomb[max_idx].vegseb) max_idx = i;

      return max_idx;

}

Mellesleg van egy ködös elképzelésem, amit bátortalanul említek meg a programozáshoz csakugyan értő kollégák előtt, de szerintem itt a tömböd címét kapná meg a függvény, ezért a paraméterében esetleg nem is kell a kapcsos zárójelek között megadni a méretét, az akkora, amekkorát a tömb létrehozásakor megadtál neki. Ekkor így nézhetne ki a függvény feje:

int szelsoertek(struct kocsi tomb[], int meret)

Hogy aztán így van-e, azt nem tudom, de könnyű átlátni, hogy mennyivel általánosabban használható lenne, hiszen nemcsak 6 elemű, hanem bármilyen méretű tömb esetén működne, meg éppenséggel azt is érthetővé tenné, miért kell a méretet is külön megadni. A kísérleteim szerint mindenesetre így is megírható, de ezek csak hályogkovács-próbálkozások voltak a részemről, anélkül, hogy érteném, mit csinálok. Lehet, hogy pusztán a szerencsés csillagállás miatt működött, remélem, hogy egy igazi programozó kolléga majd tisztázza a helyes módszert.

2019. nov. 4. 00:47
Hasznos számodra ez a válasz?
1 2

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

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!