Kezdőoldal » Számítástechnika » Programozás » C nyelven hogyan kell megcsiná...

C nyelven hogyan kell megcsinálni ezt a feladatot? Minden segítség nagyon sokat számítana :)

Figyelt kérdés

Í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



2020. szept. 23. 19:38
1 2
 11/13 anonim ***** válasza:
100%

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 ;) )

2020. szept. 25. 14:24
Hasznos számodra ez a válasz?
 12/13 tabaki ***** válasza:

@#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!

2020. szept. 25. 17:57
Hasznos számodra ez a válasz?
 13/13 anonim ***** válasza:
#11 Így már értem, köszi!
2020. szept. 26. 13:50
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!