Kezdőoldal » Számítástechnika » Programozás » C programozási feladat - hogyan?

C programozási feladat - hogyan?

Figyelt kérdés

Programozási alapismeretek vizsgára készülök, és többször is találkozok efféle kérdésekkel: [link]


Valaki emberi nyelven el tudná magyarázni, hogyan is jön ki ez a megoldás? Kétségbe vagyok esve.

Előre is nagyon szépen köszönöm, és további szép hétvégét kívánok!


2014. jan. 18. 11:19
 1/10 anonim ***** válasza:
Mi jön ki? Nekem most nincs kéznél futtatókörnyezetem, és lusta vagyok kitalálni.
2014. jan. 18. 11:25
Hasznos számodra ez a válasz?
 2/10 anonim ***** válasza:
Mindig úgy jön ki a megoldás, hogy a fejeddel végigmész a programon, és magadban lefuttatod, minden egyes lépést követve, ahogy a gép is teszi. Nincs egyéb, mágikus megoldás. Az ilyen feladatoknak az a célja, hogy megmutassa, magát a nyelvet érted-e, azaz végig tudsz-e haladni fejben a programon. Ha pl. egy lépést nem értesz, vagy rosszul tudsz, akkor ott elakadsz, vagy rossz felé mész tovább, és máris "nyert" a tanár.
2014. jan. 18. 11:27
Hasznos számodra ez a válasz?
 3/10 anonim ***** válasza:

" Mi jön ki?"

A kedves kérdező valószínűsítem a megoldókulcsra gondolt Aminek az első "fele" szerintem hibás, legalábbis gcc 4.6.3-as fordítóval én más eredményt kaptam, és szerintem logikailag is az - mármint a gcc által fordított eredmény - tűnik helyesnek.

2014. jan. 18. 13:17
Hasznos számodra ez a válasz?
 4/10 anonim ***** válasza:
Mit kaptál? Pont a fordító nincs kéznél, most nem akarok Ct telepíteni emiatt.
2014. jan. 18. 13:22
Hasznos számodra ez a válasz?
 5/10 anonim ***** válasza:
Ja, hogy ott alul az a "megoldókulcsok" lenne a megoldás? Az ránézésre biztos nem, csak a vége stimmel. Elsőre azt hittem, az valami kód, ami a megfelelő megoldókulcsra utal :-) A megoldás ennél hosszabb lesz.
2014. jan. 18. 13:37
Hasznos számodra ez a válasz?
 6/10 anonim ***** válasza:

"Pont a fordító nincs kéznél"

[link]

[link]

2014. jan. 18. 13:38
Hasznos számodra ez a válasz?
 7/10 anonim ***** válasza:
Köszi, ezt nem ismertem, de inkább valami másra fogom használni, mert most esett le, hogy a forráskód képként van feltöltve. :-DD
2014. jan. 18. 14:05
Hasznos számodra ez a válasz?
 8/10 anonim ***** válasza:
Ó, most látom, hogy a másodikba már beírtad, akkor storno. Továbbá tévedtem az eredményben is, át kell gondolnom újra. :-(
2014. jan. 18. 14:14
Hasznos számodra ez a válasz?
 9/10 anonim ***** válasza:
100%

Na, akkor essünk neki.


Az első hívás, az f(a).

Ez az "a" nevű kétdimenziós tömböt adja át az f függvénynek. A tanárod, vagy nem tudom ki írta a feladatot, nincs igazán tisztában a működéssel, ezért is rossz a megoldásban az első karakter. A függvény lokális változójának a típusa nem char**, hanem (char*)[8]. Így amikor ezt inkrementálod, akkor a kétdimenziós tömbödben egy "sort" ugrasz előre, 8 charnyi helyet.

A **t valóban működik, és elér egy karaktert, olyan, mintha t[0][0]-t indexelnél. A feladat írójának szerencséje, hogy a {} alapból nullára tölti fel a tömbelemeket (legalábbis most ez jött le a dologból, de javítsatok ki), különben kapnál egy jó kis access violationt.


Tehát a t-t addig inkrementálja (8-asával, tehát egy sort ugrasz), amíg a **t (alias t[0][0]), a sor első eleme FALSE, tehát a null karakter. Ő azt hitte, hogy az ötödik sor végéig megy majd (látod, ott egy aposztróf nélküli NULL char), és a következő a + lesz. Ehelyett a nyolcadik sorig megy, mert annak az első eleme NULL. Aztán a while után még egy t++, ez már a kilencedik sor lesz, aminek kiírajta az első elemét (a).


Második hívás.

Röviden a g függvény kap egy 2D char tömböt, egy 1D char tömböt, és egy intet.

Az 1D tömb i-edik elemébe pakolja a 2D tömb i-edik SORÁNAK hatodik(ötös indexű) elemét.

Van benne egy rekurzív hívás (<6), mivel nullával kezdünk, ezért 0-5-ig megy az i, mint egy ciklus, csak jó bekavarós. a+4-el kezdünk, mint 2D tömb, így annak is a 0,5,6,7 kezdetű sorával.

Abban az hatodik elem a 9, így sorban megkapod az "alatta" lévőket, viszont van egy csupa NULL sorod, így az lesz a string vége.


Tehát az első kiírás egy 'a' karakter, a második kiírás pedig az "9<!\0" string.

Ugye a 0 nem látszik, viszont az nem az a NULL, amit a g függvény belepakol, csak mondom.


Első híváshoz egy kis segítség.

[link]


(remélem érted, mert elfáradt a kezem..)

2014. jan. 18. 15:04
Hasznos számodra ez a válasz?
 10/10 A kérdező kommentje:
Nagyon szépen köszönöm!
2014. jan. 18. 15:58

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!