- Egy óra, két rendszer
- Samsung Galaxy Watch7 - kötelező kör
- Samsung Galaxy Z Fold7 - ezt vártuk, de…
- Milyen okostelefont vegyek?
- Samsung Galaxy Watch8 - Classic - Ultra 2025
- Telekom mobilszolgáltatások
- Honor Magic5 Pro - kamerák bűvöletében
- Redmi Note 13 Pro 5G - nem százas, kétszázas!
- Leesett a kamionról több millió eurónyi Z Fold7
- iPhone topik
Hirdetés
Talpon vagyunk, köszönjük a sok biztatást! Ha segíteni szeretnél, boldogan ajánljuk Előfizetéseinket!
Új hozzászólás Aktív témák
-
válasz
jattila48 #6347 üzenetére
Úgy maradhat benne, hogy ahhoz, pl hogy egy eljárásban keletkező átmeneti változót visszaadjon (mert pár év után valaki rájött, hogy az is milyen jól jöhet máshol), változtatni kell az eljárás szignatúráját, ami viszont a kód más részeiben igényel újraírást. Ezt megspórolandó az új kód inkább turkál a (memória-) szemétben. Time is money.
-
-
válasz
pmonitor #6219 üzenetére
Ott mondjuk pont meg lehetne egyszerűen, bár szerintem ez a felírás egyértelműbb, mint ha a sswitch egy negált feltételben volna (egyébként szerintem amúgy is pont erre az alakra fogja fordítani a fordító). De "optimalizáld" ki lsz a 2921. sorban kezdődő switch-ből a goto-t, hogy ne nézzen ki nagyon csúnyán...
Ezek (mind a 300 sorban), mind később a switchben szemantikailag pont jól néznek ki:
ha (feltétel) ugorj a labelre
És amúgy itt sem látsz olyat, hogy a goto "összevissza" ugrálna, csak előrefelé. -
válasz
pmonitor #6206 üzenetére
Mondjuk ha folyamatosan Pascal példát hozol, akkor én meg azt mondom, hogy Try/Catch hiányában nem lehet (értelmesen) error handlinget csinálni Visual Basic 6 (és VBA / VBS-ben) Goto nélkül: [link]
Most akkor egy platformon vagyunk, hogy tökre irreleváns magasszintű nyelvekben alkalmazott Goto megoldásokról vitatkozunk a C topikban?
-
válasz
pmonitor #6204 üzenetére
Mondjuk ha pont erre van szükséged, akkor a break-kel is ezt csináljuk:
int f = 1;
while (f) {
// utasítások
for (int i=k; i>l; i+=m) {
//még utasítások
if (feltétel) {
f = 0;
break;
}
}
Technikailag pont ugyanazt csinálja (és szerintem amúgy goto-val jobban is néz ki, mint ez a megerőszakolt while 1 ciklus...) -
válasz
pmonitor #6197 üzenetére
Igazából azt sem tudom min vitatkozol...
Csak annyit írtam (viccesen), hogy ha a continue-t tiltják, akkor miért nem tiltják a break-et is... amúgy implementálva mind-mind goto (ráadásul az is előrefelé, nem hátra - pl for (int i=k; i>l; i+=m).// értékadás
int ix = k;
:loop_start
//kilépési feltétel
if n>l goto outside_of_loop;
/*
utasítások
*/
// continue
if condition_continue goto loop_increment;
/*
még utasítások
*/
// break
if condition_break goto outside_of_loop;
/*
még utasítások
*/
:loop_increment
i += m;
goto loop_start;
:outside_of_loop -
válasz
Domonkos #6009 üzenetére
Nem, mivel 100/j UB, amennyiben nincs ellenőrizve, hogy a j egyenlő-e 0-val.
Tehát, ha az if-et kioptimalizálná, akkor az egész függvényt ki kell, mert a 100/j UB...Szerintem a fordító inkább "beoptimalizál" egy if j !=0-t a kódba, ha nincs ott, hogy ne legyen HW interrupt, csak szoftveres.
-
válasz
ub19student #5945 üzenetére
Vagy futtasd az exe-t parancssorból.
-
ezek csak pszeudo-függvények: inputa és inputb-vel töltöd fel az a és b változók értékeit...
Viszont ha csak kiértekeléskor kéri be az értékeket, akkor:
while(1) {
if (fv(inputa())) break;
fb = fv(inputb());
if (fb == 0 || fb == 2) break;
}Így a b-t be sem kéri, ha az első input hatására kilépett az első függvénynél.
-
Asszem valahogy így (remélem jól értettem az ábrát):
while(1) {
a = inputa();
b = inputb();
if (fv(a)) break;
fb = fv(b);
if (fb == 0 || fb == 2) break;
}Vagy az értékeket csak egyszer kéri be? De akkor ha fv(a) == 0 és fv(b) = 1 akkor végtelen ciklus lesz...
Vagy egymás eredményét használják fel?
a = input >> b = fv(a) >> a = fv(b)? -
-
válasz
PumpkinSeed #3693 üzenetére
Gondolom, mert nem tudja hibátlanul megírni
-
válasz
PumpkinSeed #3671 üzenetére
Ja és a kolléga időben kijavított, mielőtt rögzült volna
-
válasz
PumpkinSeed #3660 üzenetére
if(ev % 400 == 0){
/* szökőév */
}
else if(ev % 100 == 0){
/* nem szökőév */
}
else if(ev % 4 == 0){
/* szökőév */
}
else
/* nem szökőév */
} -
válasz
WonderCSabo #3509 üzenetére
dupla
(nem is akarok mentségeket keresni) -
válasz
PumpkinSeed #3506 üzenetére
Itt leírtam, mit kell csinálnod.
D = B * B - 4 * A * C;
if (D > 0) {
M1 = (-1 * B - sqrt(D)) / (2 * A);
M2 = (-1 * B + sqrt(D)) / (2 * A);
}
else if if (D == 0) {
M1 = (-1 * B) / (2 * A);
}
else { // kizárásos alapon (D < 0)
// Nincs megoldás
}Ja és célszű a determinánst nem lebegőpontos számokkal számolni, hanem egészekkel, mert különben a determináns számításban a kivonás okozhat 0-hoz közeli számot (kerekítési hiba miatt).
-
válasz
PumpkinSeed #3503 üzenetére
Pfff (nem mintha nem reagáltam volna, nekem úgy tűnt te nem válaszoltál a kérdésemre).
De legyek kicsit konkrétabb:
0) Csak valós vagy immaginárius gyököket is szeretnél?
1) Matematikailag le tudod írni a megoldóképletet?
2) C szintaktika megy?
3) Alapvető függvények (alapműveletek, sqrt) megvannak?
4) Feltételes szerkezetet tudsz készíteni C-ben?Ezek közül melyik pontnál akadtál el?
-
válasz
bandi0000 #3499 üzenetére
És érted is?
Vazz, csak most látom, hogy beleszkerkesztettem a kód végébe (return elé) a kommentet...
És még egy plusz komment (tévedés az eredeti kommentben): nem 16384 a max, a 65535-ig menő számokon működik helyesen a kód (az annál nagyobb számokon az 15. feletti biteket nem írja ki)
1111 | 1111 | 1111 | 1111 = 65 535 -
válasz
bandi0000 #3494 üzenetére
12-nél a 1100 helyes (1*8+1*4+0*2+0*1)
Vagy fordítva rakod be a tömbbe (végétől kezdve és a végére teszel egy '\0'-t (string vége karakter C-ben) és onnan iroatod ki ahova visszafele eljutottál (ezt csinálja az én példám). Vagy feltöltöd a tömböt rendesen és kiiratáskor címezed meg a végétől és egy csökkenő ciklusban egyesével kiírod a számokat (de ugye csak annyit, amennyit beleraktál).
Harmadik megoldás - valahogy így (fordító és ellenőrzés nélkül):
bitmaszk és bitshift
char* binaryConv(int szam){
char* binary = "0000|0000|0000|0000";
int bitmask = 0x4000; //16 384
int counter = 0;
while (bitmask > 0){
if (szam & bitmask) binary[counter] = '1'; // ha az adott bit 1, akkor a stringbe is azt helyettesítjük
counter++;
if (counter%4 == 0) counter++; //átléptetni az elválaszókat
bitmask = bitmask >> 1; //bitmaszkot eggyel jobbra tolni
}1) Csak 4 jegyű számokig működik (azaz pontosabban 16384-ig)
2) Amit visszaad ki lehet irattatni printf-fel...
return binary;
} -
válasz
bandi0000 #3449 üzenetére
Nálam is >= a >
pszeudo:while (num>0){
if num >=900 { s+="CM"; num -=900;}
else if num >=500 { s+="D"; num -=500;}
else if num >= 400 { s+="CD"; num -=400;}
else if num >= 100 { s+="C"; num -=100;}
else if num >= 90 { s+="XC"; num -=90;}
else if num >= 50 { s+="L"; num -=50;}
else if num >= 40 { s+="XL"; num -=40;}
else if num >= 10 { s+="X"; num -=10;}
else if num >= 9 { s+="IX"; num -=9;}
else if num >=5 { s+="V"; num -=5;}
else if num >=4 { s+="IX"; num -=4;}
else if num >=1 { s+="I"; num -=1;}
} -
válasz
PumpkinSeed #3440 üzenetére
Az nem ciklus. A ciklus az amikor egy adott műveletsorozatot többször (több ciklusban) végrehajtasz. Amúgy miért kellene 0-nál nagyobbnak lennie?
egy -4x^2 + 3x - 19 teljesen értelmes másodfokú egyenlet... -
válasz
PumpkinSeed #3438 üzenetére
Mármint mire kell a ciklus?
if D > 0 { két valós gyök }
else if D = 0 { egy valós gyök }
else { két komplex gyök } -
válasz
PumpkinSeed #3430 üzenetére
A myFunction a függvény neve (lehetne akár legnagyobbKozosOszto is)...
-
válasz
PumpkinSeed #3404 üzenetére
TerminateProcess WINAPI a barátod.
Új hozzászólás Aktív témák
● olvasd el a téma összefoglalót!
● ha kódot szúrsz be, használd a PROGRAMKÓD formázási funkciót!
- Mini-ITX
- Luck Dragon: Asszociációs játék. :)
- Call of Duty: Modern Warfare III (2023)
- f(x)=exp(x): A laposföld elmebaj: Vissza a jövőbe!
- Battlefield 6
- PlayStation 5
- bitpork: Phautós tali a Balcsinál 2025 Augusztus 2 napján (szombat)
- Egy óra, két rendszer
- Építő/felújító topik
- Robotporszívók
- További aktív témák...
- Tablet felvásárlás!! Apple iPad, iPad Mini, iPad Air, iPad Pro
- Samsung Galaxy A12 64GB Kártyafüggetlen 1 év Garanciával
- GYÖNYÖRŰ iPhone 13 mini 128GB Pink -1 ÉV GARANCIA - Kártyafüggetlen, MS3049, 94% Akkumulátor
- Bomba ár! HP EliteBook 840 G4 - i5-7GEN I 16GB I 256GB SSD I 14" FHD Touch I Cam I W10 I Garancia!
- Lenovo ThinkPad dokkolók: USB-C 40A9/ 40AY/ 40AS/ Thunderbolt 3 40AC/ Hybrid USB-C DisplayLink 40AF
Állásajánlatok
Cég: FOTC
Város: Budapest