C nyelven hogyan kell megcsinálni ezt a feladatot? Minden segítség nagyon sokat számítana :)
Írj egy programot, amely tartalmaz egy tízelemű, karakterekből álló tömböt, benne Pitagorasz nevének betűível: 'P', 'i', ... Írja ki a program ezt a tömböt a képernyőre, a betűket szóközökkel elválasztva!
Léptesd a tömb összes elemét eggyel az eleje felé. A tömb egyik végén kilépő elem jöjjön be a túlsó végén. Ismételd meg ezt a műveletet tízszer, közben mindig írd ki a tömböt! Az eredmény a jobb oldalon láthatóhoz hasonló kell legyen.
Vigyázz, nem az a feladat, hogy egy trükkös kiírást csinálj! A tömböt kell úgy megváltoztatni, hogy elmozduljanak benne az elemek. A kiírásnak mindig a tömb elejétől a végéig kell haladnia, minden sorban. A kód felépítése tehát ez kell legyen:
CIKLUS 10-szer
CIKLUS a tömb kiírásához... itt csak printf van, nem változik a tömb
CIKLUS a léptetéshez... itt változik a tömb, és nincs printf
CIKLUS VÉGE
Kedves #10 :)
Megértem, miért így csináltad, és tisztelem a döntésed, és hogy kedvesen érdeklődsz. A sizeof operátor mindenképpen a megadott TÍPUS méretét adja vissza. Ezért ha char-t adsz neki, 1 kell legyen, viszont ha tömböt adsz, akkor nem biztos hogy tudja a tömb méretét, ugyanis tömbnek tekintendő mindkettő alábbi példa:
- char* teszt = "TESZT";
- char teszt[6] = "TESZT";
Míg az első az egy pointer, ami egy globális memóriaterületen lévő részre mutat, addig a második tartalmaz adatot arról, hogy ez egy 6 méretű tömb (egyébként ha a 6 helyett 20-at írunk, akkor 20 a mérete, hiába 6ot használunk). Ezáltal ha a fordító éppen csak egy pointert lát, akkor a pointer méretét adja vissza, ami 32 bites rendszeren 4 bájt, 64 bitesen 8...
Elméletileg a c++ sem kezelhetné máshogy, de más a memóriakezelése, emiatt talán tudja a tömb méretét, de amúgy éppen ilyen kiszámíthatatlan viselkedésre gondoltam, hogy valahol működik, valahol nem.
"Kérlek mondanál egy példát, hogy mikor lesz sizeof(name)/sizeof(char)kiszámíthatatlan?"
Persze, szívesen. A sizeof(name) az többnyire a pointer méretét adja vissza. Jelen példánkban tekintsük például azt, hogy ez 4 bájt. A char mérete elméletileg valóban fix, AZONBAN!!
Mi van, ha szeretnénk például 3 bájtos utf karaktereket kezelni, és ahelyett hogy ezt normálisan csinálnánk, valami elcseszett programozó ilyet ír:
struct UTFkar{
char c[3]
}
#define char struct UTFchar;
Ebben az esetben (bár ez az egész nem szabályos, és nem csinál senki épeszű ilyet) a sizeof(char) 3 lesz. és a 4/3 egészosztással szépen 1 lesz, pedig 2 karakterünk lenne. Ez valóban egy olyan példa, ami nem életszerű, de sose becsüld alá a programozók retardságát! :D
Na de hogy kritikán felül konstruktívat is mondjak :)
Tabaki próbálkozása áll a legközelebb a jóhoz, egyetlen probléma javítandó nála, úgyszint a sizeof: Mivel amúgy is karakterlánc a felvett név, erre találta ki az Isten is az strlen függvényt :) (és akkor még -1 sem kell neki ;) )
@#14:24:
Sajnos igaz, a tudatlanságom minduntalan visszaüt, ilyenkor meglátszik, hogy csak fejtörőként szórakozom a programozással – efféle marhaságba alighanem már egy egészen csekély napi rutin sem hagyna belecsúszni. Köszönet!
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!