Hirdetés
- ThinkPad (NEM IdeaPad)
- Intel Core i5 / i7 / i9 "Alder Lake-Raptor Lake/Refresh" (LGA1700)
- Kormányok / autós szimulátorok topikja
- Vezetékes FEJhallgatók
- Amlogic S905, S912 processzoros készülékek
- HiFi műszaki szemmel - sztereó hangrendszerek
- Milyen videókártyát?
- AMD APU (AM4 és AM5) topik
- Apple notebookok
- Ventilátorok - Ház, CPU (borda, radiátor), VGA
Hirdetés
-
Világ napszakokban (képek)
lo Hajnal Reggel Délelőtt Délben Délután Este Éjszaka...
-
No More Room In Hell 2 - Jövő hónapban indul a PC-s korai hozzáférés
gp A bejelentéssel együtt egy rövid előzetest is kaptunk a játékhoz.
-
Kidobja a Slacket a Disney
it Miután több mint 1 TB céges adatot szivárogtattak ki egy hackertámadás után, a Disney úgy döntött, hogy beszünteti a Slack használatát.
Új hozzászólás Aktív témák
-
Jester01
veterán
Ugye a for(i = 1; i <= x; i += 2) ciklusod csak a páratlan számokon megy végig, így a végérték vagy x (ha x páratlan) vagy x - 1 (ha x páros). Ezért simán nem lehet megfordítani, mivel a kezdőértéket pontosan kell megadni. Például így: for(i = (x & 1) ? x : (x - 1); i >= 1; i -= 2)
Jester
-
Jester01
veterán
Van több is
while(d != '1');
Ide nem karakter konstans kell, csak simán egy szám.Másik probléma, hogy a d-be számítod ki az új értéket de az a-t használod.
Kicsit letisztázva ilyesmi lehet:
#include <stdio.h>
int main(void)
{
int a;
scanf("%d",&a);
do
{
if (a % 2 == 0)
{
a = a / 2;
} else {
a = a * 3 + 1;
}
printf("%d\n", a);
} while (a != 1);
return 0;
}Jester
-
Korcsii
őstag
Legegyszerűbb talán (s)sanf-fel egyből számkénet beolvasni...
birno:
Lehet, hogy működne (miért is ne?), de nem szép, szerintem a (gépi)kód sem lesz egyszerűbb tőle, sőt... Írjunk leforduló C programot minél rövidebben címűversenyben van szerintem csak helye.[ Szerkesztve ]
-
Korcsii
őstag
sscanf-re gondoltam, csak rosszul... elfelejtettem, hogy fájlból olvasol...
Hogy hogyan kezeli őket, az attól függ, hogy hogyan olvasod be.
Mindenesetre fscanf-et és f(?)getc-t nem kéne keverni, elég a kettő magában is (az előbbi kódoddal levágsz egy karaktert, aztán beolvasol egy számot a maradékból).
Egyszerű programban én simán fscanf-fel olvasnék, esetleg vizsgálnám, hogy sikeres-e.
[ Szerkesztve ]
-
kingabo
őstag
5let: A számot osztod maradékosan 10-el, így megkapod az utolsó számjegyet, amit hozzáadsz egy összeghez. Ezt kell addig csinálnod, amíg végül 0-t nem kapsz. Ezután megvizsgálod, hogy az összeget 3-al osztva 0-e a maradék.
C-s megvalósításhoz:
maradek = szam % 10;: a szám 10-el vett osztási maradéka (a szam változatlan marad)
szam = szam / 10;: a szám osztása 10-el (int osztás)[ Szerkesztve ]
-
kingabo
őstag
Ciklusban kell végezned amit leírtam.
Tehát a példádnál maradva az első iterációban leszeded az 1-et, a szám 15 lesz, aztán a másodikban a 5-t, a szám 1 lesz, aztán a harmadikban a maradék 1 lesz, a szám 0.Szerk:
Ez azért így elég csúnya: data[sizeof(int)];!! 32bites gépen ez 4 lesz, viszont 9 számjegyű számot is lehet tárolni a változóban![ Szerkesztve ]
-
kingabo
őstag
Nem tudom feladat-e, de célszerű lenne ellenőrizni, hogy tényleg számot adott-e meg a lyúzer.
Pár észrevétel a kódhoz:
- az itoa-t nem használod, szerintem felesleges a hozzá tartozó include
- if(!(mard == 0 || mard == 3 || mard == 6 || mard == 9)) helyet írhatod ezt is
if(mard != 0 && mard != 3 && mard != 6 && mard != 9)) (ha már 1 hamisat talál, akkor a többit ki se értékeli)
- nem tudom kötelezőe a fenti módon való számolás, de sokat gyorsíthatnál, ha simán csak összegzed a számjegyelet, esetleg a mard-nak a 3al vett maradékát néznéd, hogy 0-e (ez utóbbi valszeg lassabb lenne, de a kód átláthatóbbá válna, illetve könnyebben módosítható, ha 3 helyett a 9-el való osztás kell)
- for ciklus helyett egy while sokkal szebb lenne -
modder
aktív tag
Szerintem:
Ha eggyel növelem a mutatót eggyel tovább ugrik a memóriában ahol el van mentve a pointner.Nem egyel tovább ugrik a memóriában, ahol el van mentve a pointer, hanem:
A pointer értéke (egy memória cím, egy szám) nő annyival, ahány byte-os az adatstruktúra, amire a pointert deklaráltad.Ha új értéket adok utána - nos nem tudom ,uj értéket adtam a pointernek,de nem változott meg az értéke teljesen - maradt a régi értékéből és az újból is ? de viszont a memoria cime nem változott a pointernak
Nem a pointernek adtál új értéket, hanem annak a memóriának, amire mutat a pointered.
A programod elvileg azt csinlája, hogy 'b'-t kicseréli 'd'-re (gondolom az f az csak elírás, mert aposztrófok közé csak karaktert lehet írni)
-
kingabo
őstag
Ne stringgel teszteld, vagy ha azzal, akkor karakterként irasd ki, illetve írd a végére a string lezáró \0 karaktert is. Egy int tömbbel sokkal látványosabb a dolog.
Az elmélethez: azt is érdemes megmondani, hogy mi történik, ha egy n elemű tömb n+1-edik elemére hivatkozol/írod. -
kingabo
őstag
Ebben a témában erősen ajánlom Brian "Beej" Hall cikkét: magyar változat, angol több formátumban. (ez alapján írtam "chat" szervert minden benne van)
Ú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!
- Itt az új LOGOUT!
- Hardcore café
- Vodafone otthoni szolgáltatások (TV, internet, telefon)
- DIGI kábel TV
- ThinkPad (NEM IdeaPad)
- Path of Exile (ARPG)
- Folyamatos vérnyomásmérést kínál a Huawei Watch D2
- Samsung Galaxy S23 Ultra - non plus ultra
- Tőzsde és gazdaság
- Belsős ügyek: megújult a Logout.hu!
- További aktív témák...
- Latitude 7440 14" FHD+ IPS i7-1365U 16GB 512GB NVMe ujjolv gar
- IPhone 14 Plus 256GB gyári független megkímélt
- Eladó: i7-7700K + ROG GTX1070 + Ripjaws V 32GB DDR4 + TUF Z270
- BESZÁMÍTÁS! MSI B450M AMD R5 4500 32GB DDR4 512GB SSD RTX 3060 12GB GDDR6 ZALMAN N4 Be Quiet! 650W
- BESZÁMÍTÁS! MSI H610M AMD Intel i3 12100F 16GB DDR4 512GB SSD GTX 1660 Ti 6GB GDDR6 ZALMAN N4 500W
Állásajánlatok
Cég: Ozeki Kft
Város: Debrecen
Cég: Ozeki Kft
Város: Debrecen