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
#include <stdio.h>
#include <stdlib.h>
int main()
{
char name[] = {'P', 'i', 't', 'a', 'g', 'o', 'r', 'a', 's', 'z'};
char first;
for (int i = 0; i < 10; i++) {
for (int j = 0; j < sizeof(name)/sizeof(char); j++) {
printf("%c ", name[j]);
}
printf("\n");
first = name[0];
for (int k = 0; k < sizeof(name)/sizeof(char); k++) {
if (k == sizeof(name)/sizeof(char) - 1) {
name[k] = first;
}
else {
name[k] = name[k+1];
}
}
}
return 0;
}
sizeof(name)/sizeof(char)
Ezt megmondanád, mi az ördög akar lenni? Ilyet nem írunk, mert kiszámíthatatlan. Mondjuk a char az általában fixen 1 méretű (ekkor csak megzavarod az embereket), de ha valamiért nem 1 a mérete, akkor az egész-osztással el is k...d.
Arról nem is beszélve, hogy ha ezt így megjegyzi a tanuló, a végén végképp hülyeségeket csinál majd, mert a sizeof(name) nem minden esetben a tömb elemeinek összméretét adja meg, hanem vannak esetek amikor a pointer méretét. Na akkor meg b......juk.
Egy másik próbálkozás:
#include <stdio.h>
int main() {
char name[] = "Pitagorasz", namesize = sizeof(name) -1;
for (int i = 0; i < 10; i++) {
for (int j = 0; j < namesize; j++) printf("%c ", name[j]);
printf("\n");
char first = name[0];
for (int k = 1; k < namesize; k++) name[k - 1] = name[k];
name[namesize - 1] = first;
}
return 0;
}
Kedves #5
9-es vagyok. Azért használtam ezt a formát, hogy elkerüljem a hardcoded tömbméretet(amit a feladat ugyan nem kér, de úgy gondoltam egy kezdő számára ugyanúgy kerülendő, mint a kiszámíthatatlanság amit te sérelmeztél). A sizeof(char) C-ben valóban 1, ezt nem tudtam(épp ezért is használtam, így viszont nem indokolt). C++-ban pl. 4. Kérlek mondanál egy példát, hogy mikor lesz sizeof(name)/sizeof(char)kiszámíthatatlan? Illetve kifejtenéd, hogy ha nem 1-et ad vissza miért k*rom el? Egyáltalán, hogy adna vissza mást? A pointerest részt nem értem, nem használtam pointereket. Nem szurkálódásból kérdezem, két éve használtam utoljára C-t és ezt 10 perc alatt gányoltam össze. Örülnék, ha tanulnék valami újat.
Kapcsolódó 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
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!