Hirdetés
- Vivo X300 Ultra - tárcsázz, ha van rá keret!
- Samsung Galaxy S25 - végre van kicsi!
- Xiaomi 15T Pro - a téma nincs lezárva
- Android alkalmazások - szoftver kibeszélő topik
- Google Pixel topik
- Samsung Galaxy S24 Ultra - ha működik, ne változtass!
- Pebble - az átgondolt okosóra
- Xiaomi Watch 5 - kínai időszámítás
- Milyen okostelefont vegyek?
- iPhone topik
Új hozzászólás Aktív témák
-
kovisoft
őstag
válasz
elistvan
#6038
üzenetére
A kódolandó szöveg 3x36 karakterből áll. Mivel egy 6x6-os rács 36 karaktert tartalmaz, így 3 db rács fog keletkezni a kódolás során. A kódolás menete a következő: Megfordítod a kódolandó szöveget (amely tehát így fog kezdődni: HAZRXT...). Veszed a Cardano-rácsot (amiben 0-k és1-esek vannak), ill. veszed sorban a megfordított szöveg karaktereit. Létrehozol egy újabb 6x6-os tömböt, és belerakod sorban a karaktereket arra az [i][j] pozícióra, ahol a Cardano-rácsban 0 van (pl. első sor 2., 4., 6. eleme, második sor 5. eleme, stb, összesen 9 db). Amikor végigértél a Cardano-rácson, elforgatod jobbra 90 fokot, és megismétled az eljárást a következő 9 db karakterre. Ezt megcsinálod négyszer, és elfogyott a megfordított szöveg első 36 karaktere. A maradék 2x36 karakterhez létrehozol egy-egy újabb 6x6-os tömböt, és kitöltöd ugyanezzel a módszerrel. A végén előáll 3 db 6x6-os tömböd, ezeket kell kiírnod a sandormatyas.txt file-ba (tippre soronként).
-
kovisoft
őstag
válasz
elistvan
#6018
üzenetére
A 6x6-os kulcsot (cardano.txt) beolvashatod egy 6x6-os tömbbe (pl. char cardano[6][6]). Ugyanígy beolvasod a titkos.txt szöveget egy másik 6x6-os titkos[6][6] tömbbe. A 90 fokkal való forgatás úgy történik, hogy felcseréled a két koordinátát és az egyiket "megfordítod" (azaz 5-ből kivonod). Attól függően lesz jobbra vagy balra forgatás, hogy melyiket vonod ki 5-ből, pl. jobbra forgatás: [i][j] -> [j][5-i]. A dekódolás úgy történik, hogy mész végig sorfolytonosan egyszerre a cardano tömbön és a titkos tömbön, és ahol a cardano-ban 0 van, a titkos-ból ugyanarról a pozícióról kiolvasol egy karaktert. Ha végigértél a tömbön, akkor veszed a 90 fokkal elforgatott kulcsot, és azza újra végigcsinálod ezt, stb.
-
kovisoft
őstag
válasz
elistvan
#6000
üzenetére
Itt egy példa a nyerőszámok húzásának függvénybe való áthelyezésére:
void nyeroszamok_huzasa(int nyeroszamok[], int darab){
for(int i=0;i<darab;i++){
int num = (rand() % (80 - 1 + 1)) + 1;
if(num >= 1 && num <= 80 && !tartalmazza(nyeroszamok,darab,num)){
nyeroszamok[i] = num;
}else{
i--;
}
}
}És így tudod meghívni onnan, ahol korábban maga ciklus volt:int nyeroszamok[20] = {0};
nyeroszamok_huzasa(nyeroszamok, 20);Hasonlóan mehet a többi blokk is, de lesz köztük olyan függvény, aminek több tömböt is át kell majd adni, mint pl. a találatok meghatározása, ami 3 tömbbel dolgozik: tippeltszamok, nyeroszamok, talalat.
A rand() használatához még annyit, hogy ez alapból mindig ugyanonnan indítja a generálást, tehát minden futásra ugyanazt a szekvenciát kapod. Ezért célszerű seed-elni az első hívás előtt valami futásonként eltérő számmal, pl. az aktuális idővel, hogy mindig más random szekvenciát kapj:
srand(time(0)); -
kovisoft
őstag
válasz
elistvan
#5998
üzenetére
Ebben a programban jelenleg elég sok hiba van. Hirtelen néhány: A tartalmazza() függvényben a tomb címét hasonlítod a szam-hoz, nem a tomb egy elemét, itt tomb[i] kellene. Végig a kódban keverednek az íves (függvényhívás) és a szögletes (tömb eleme) zárójelek, ez így le sem tud fordulni. Mint pl. itt:
tippeltszamok(i) = szam;
vagy itt:
if(tippeltszamok(i) == nyeroszamok[j]){
A nyeroszamok-at fölöslegesen rakod át az emelkedo-be, mert már helyben rendezted azokat (ezért kiírni is fölösleges mindkettőt).
Függvényekkel rövidíteni akkor tudod, ha több ismétlődő feladatot hajt végre a programod. Itt maximum a számok kiírása az ilyen, tehát sok rövidítésre nincs lehetőség, így gondolom inkább arról lenne szó, hogy függvényekkel struktúráld a programod (ettől nem rövidebb, hanem olvashatóbb lesz). Be kell azonosítanod az egyes blokkokat a programodban, amik egy önálló részfeladatot hajtanak végre, és ezeket ki tudod emelni egy-egy önálló függvénybe. Most kb. ezeket csinálja a programod:
- tippek bekérése
- tippek kiírása
- nyerőszámok húzása
- találatok megkeresése
- nyerőszámok rendezése
- nyerőszámok kiírása (elég 1x)
- találatok kiírásaEzekre írhatsz függvényeket, amik megkapják bemenő paraméterben tömbö(ke)t, amivel dolgozniuk kell, hasonlóan a tartalmazza() függvényedhez. De ezek a függvények nem adnak semmilyen értéket vissza, void lesz a visszatérési típusuk és nem lesz bennük return.
-
kovisoft
őstag
válasz
elistvan
#5963
üzenetére
A szazalek valtozot nem int-nek vetted fel, hanem float-nak. Egy osztás eredménye kerül bele, ezt hasonlítod utána egész számokkal. A konkrét esetben valóban csak egész szám kerülhet bele (mivel az osztást és a szorzást is int-eken végzed), de amúgy ha a képletben már eleve float-okkal dolgoznál, és mondjuk 47 pont lenne a maximum, amiből valaki 28-at ért el, akkor a szazalek értéke 59.57 lenne, ami se nem <=59, se nem >=60, hanem a kettő között van, de arra nincs feltételed. Ezért írtam, hogy jobb lenne csupa int-ekkel dolgozni. Vagy lehet float-okkal is, de akkor át kell írnod a feltételeket (és nem árt arra is gondolni, hogy bizonyos hányadosokat csak kerekítve lehet float-on ábrázolni).
-
-
kovisoft
őstag
válasz
elistvan
#5954
üzenetére
Ha csak egy változót lehet használni és az maga a változó, amibe beolvastad a decimális számot, akkor itt egy ocsmány és gagyi megoldás:
printf("%d%d%d%d%d\n", (dec&16)>>4, (dec&8)>>3, (dec&4)>>2, (dec&2)>>1, (dec&1));
Mivel tudjuk, hogy legfeljebb 31 lehet a dec (ezt illik ellenőrizni előtte), ezért szimplán sorban kiolvassuk dec alsó 5 bitjét.
-
mepet
addikt
válasz
elistvan
#5943
üzenetére
Szerintem nézd meg a tantárgyleírásnál (vagy kérd el a tanártól) a kötelező és ajánlott jegyzetek listáját, hátha van köztük valami értelmes.
Én ebből a könyvből tanultam anno, nagyon részletes és jó könyv, de nem tudom mennyire jó totál kezdőknek: Kochan: Programfejlesztés C nyelven
Új hozzászólás Aktív témák
Hirdetés
● olvasd el a téma összefoglalót!
● ha kódot szúrsz be, használd a PROGRAMKÓD formázási funkciót!
- Lenovo MIIX 520-121KB i5-8250 8Gb 256Gb NVMe, számla, garancia
- 27% - Samsung S27FG904XU Odyssey 3D IPS Monitor! 3840x2160 / 165Hz / 1ms / FreeSync
- Azonnali készpénzes Intel i5 i7 i9 8xxx 9xxx processzor felvásárlás személyesen / csomagküldés
- Bontatlan! Playstation Portal 2 év garancia 2028.04.09-ig számlával!
- Lenovo ThinkPad T14 Gen2 Intel i5-1135G7 Refurbished - Garancia
Állásajánlatok
Cég: Laptopműhely Bt.
Város: Budapest

