Új hozzászólás Aktív témák
-
nagyúr
válasz Jester01 #5200 üzenetére
> "Bizonyos mennyiség fölött garantáltan sokkal lassabb lesz, mintha ténylegesen transzponáltad volna."
Algoritmustol fugg. Ha kevesszer transzponalsz, de sokszor olvasol, akkor igen. Ha sokszor transzponalsz, es kevesszer olvasol, akkor a te megoldasod lehet drasztikusan lassabb. Ha pl. marha nagy matrixokkal dolgozol, de a transzponalt matrixot felhasznalo fel minden matrixbol csak nehany elemet vesz ki, akkor a lazy megoldas a jobb.
while (!sleep) sheep++;
-
dabadab
titán
válasz EQMontoya #5203 üzenetére
"Egy okosan megírt gettert miért ne tudnál inline-olni?"
Azért, mert mivel függvénypointerről van szó, fordításkor ki se derül, hogy pont mit is kellene inline-olni.
Egyébként nagyon szórakoztató ez a "hogyan jussunk el Óbudáról Békásmegyerre - űrrepülővel" társalgás
DRM is theft
-
EQMontoya
veterán
válasz dabadab #5204 üzenetére
Func ptr-t nyilván nem, nem is arra értettem.
Azért tegyük fel, hogy legalább minimálisab objektum-orientáltan kódolunk mátrixot, és annak műveleteit. Ott simán lehet írni inline-olt gettert.Egyébként teljesen jogos, de muszáj volt beletrollkodnom. Mint láthatod, nem csak bennem merült fel.
Illetve, ha már itt észt osztok, mai c++ lecke: egy argumentumos, POT-ot váró konstruktor legyen explicit, ha lehet.
Ha nem az, akkor olyan mókásságokba futhat bele a zember fia, mint egy rossz copy-paste után leforduló bool paraméterrel meghívott függvény, mint egy saját, file system path osztályt vár paraméterül.[ Szerkesztve ]
Same rules apply!
-
EQMontoya
veterán
enum E
{
E1,
};
struct P
{
P(unsigned int x) {}
};struct A
{
P p1;
A(const P& pr): p1(pr){};
};struct B
{
A a1;
B(const A& ar): a1(ar){};
};int main()
{
A a1(P(0 ));
B b1(a1);A a2(P(E1 ));
B b2(a2);
return 0;
}Same rules apply!
-
-
buherton
őstag
válasz EQMontoya #5209 üzenetére
Ez C topic és nem C++. Kéretik tiszteletben tartani.
Viszont, ha már itt tartunk, akkor egy feladvány:
Irasd ki a Hello world! szöveget C porgram segítségével úgy, hogy nincs a programban egy pontos vessző sem. Nem fordítás alatt, hanem bináris futtatással.tely, baly, fojó, mennyél, mingyárt, telyföl, tolyás, malyd, kapú, egyenlőre, ejsd, jáccani, ahoz, fúj, hüje, muszály, alat, álok, lasan, fojtatás, ál, fontós, költsön, eggyüt, lyob (jobb?), mek, mongyak, milyért - !!! Tanúlyunk már meghejjessen irni... !!!
-
buherton
őstag
válasz EQMontoya #5212 üzenetére
Te is létrehozhatod...
Egy másik érdekesség:
typedef struct
{
int a : 4,
int b : 0,
int c : 6,
} struct_s;Mennyi lesz a sizeof(struct_s) visszatérési értéke, ha int 32 bit hosszú? Miért?
[ Szerkesztve ]
tely, baly, fojó, mennyél, mingyárt, telyföl, tolyás, malyd, kapú, egyenlőre, ejsd, jáccani, ahoz, fúj, hüje, muszály, alat, álok, lasan, fojtatás, ál, fontós, költsön, eggyüt, lyob (jobb?), mek, mongyak, milyért - !!! Tanúlyunk már meghejjessen irni... !!!
-
#36268800
törölt tag
Sziasztok!
Most kezdem a C programozást és beleütköztem néhány (feltételezem bagatell) problémába a változók értéktartományaival kapcsolatban. A kérdéseimet összeírtam és szemléltettem egy táblázatban! Lennétek szívesek válaszolni rájuk? Szívesen fogadok olvasnivalót is!
Itt megtaláljátok a PDF állományt!
Köszönöm előre is!
-
EQMontoya
veterán
válasz buherton #5213 üzenetére
Ebben a formában semmit, mert nem fordul le.
program.cc:6:1: error: expected unqualified-id before ‘int’
int b : 0,De ha kicseréli az ember pontosvesszőre...
Na, akkor sem fordul le, de a hibaüzi sokat elmond arra vonatkozóan, amit kérdezni akartál:program.cc:6:13: error: zero width for bit-field ‘<anonymous struct>::b’
int b : 0;De ha a b értékét 1-re módosítod ez után, akkor már egész jó a feladat.
Same rules apply!
-
buherton
őstag
válasz EQMontoya #5214 üzenetére
Nem, nem fér el, lásd: [link].
(#5216) EQMontoya: Tényleg pontos vessző kellett volna. Elég régen kellett már bitfield-el mókolni, így nem voltam biztos, hogy vessző vagy pontos vessző kell. Ebben igazat adok, viszont a feladat továbbra is adott. Mennyi a mérete a bitfield-nek?
[ Szerkesztve ]
tely, baly, fojó, mennyél, mingyárt, telyföl, tolyás, malyd, kapú, egyenlőre, ejsd, jáccani, ahoz, fúj, hüje, muszály, alat, álok, lasan, fojtatás, ál, fontós, költsön, eggyüt, lyob (jobb?), mek, mongyak, milyért - !!! Tanúlyunk már meghejjessen irni... !!!
-
veterán
Primszam kereseset hogy oldhatom meg mas modszerrel, mint az osztok 1-tol szamig valo megszamlalasaval (vagy 2-tol szamig es akkor egy osztolya lesz, ha prim, onmaga ugye) ?
[link]
Hogy tudnam megoldani, hogy ne irja ki ketszer a szamparokat, anelkul, hogy eltarolnam oket? o.OEverybody lies.
-
EQMontoya
veterán
válasz Pttypang #5222 üzenetére
Ejj, ha!
No, akkor okítsunk.
Először is: osztóJa!
Másodszor: szájbaszexuálnád a nevemben, aki arra nevel, hogy magyar változóneveket és függvényneveket használjatok?
Harmadszor: Optimalizáljunk:
-Ha a megadott szám kisebb, mint 1000, akkor elég a megadott számig menni. Tehát a ciklusfeltétel: i<min(n,1000). Illetve ennek is elég a feléig menni, mert különben ugyanazokat a számokat találod meg fordítva. Tehát i<=min(n,1000)/2. Azért kisebbegyenlő, mert kihasználtam gonoszul az egész osztást.
-Gondolkodjunk is: a második ciklus tök felesleges. Minden számhoz csak egy másik olyan tartozik, amivel összeadva az öszeg n lesz. Tehát, amit vizsgálnod kell: prime(i) && prime(n-i). Ezzel kész is vagy.Tehát:
for(i=1;i<=min(n,1000)/2;i++)
{
if(prime(i) && prime(n-i))
{
printf(...);
}
}No, ez már így nem is lenne rossz, most már cak a prímtesztelést kell kicsit okosítani. Maradjunk a primitív módszereknél, de ennél azért kicsit okosabban. Ha egy szám nem prím, akkor előáll két szám szorzataként. Ebből a kettőből az egyik kisebb, vagy egyenlő, mint a gyöke, tehát elég addig nézni.
Osztókat számolni tök felesleges, az első osztónál ugyanis biztosan nem lehet prím.Tehát:
for(i=2;i<=sqrt(n);i++)
{
if(!n%i) //csalok: ez akkor igaz, ha a maradékos osztás maradéka 0 - tehát osztható
{
return false; //van osztója, ami nem egy és nem önmaga
}
}
return true; //ha a gyökéig nem volt osztója, biztos prím.Máris mennyivel szebb, ugye?
[ Szerkesztve ]
Same rules apply!
-
-
#36268800
törölt tag
Vetnétek egy pillantást a kódomra?
Itt a tutorial videó és itt az én kódom.
A kérdésem az volna ezzel kapcsolatban, hogy mi a különbség az egyszerű "if" és az "else-if" között? A fenti tutorial alapján készítettem el a kódot, de a srác az összes állítást külön "if"-ekként kezelte, én pedig egyetlen "if"-nek az "else" ágán mentem tovább.
Esetleg valamelyik gyorsabban lefut? A Microsoft Visual Studio-t használom, hol találom benne a program gyorsaságát? Mi a véleményetek a kódom tagoltságáról? (építő jellegű kritikát szeretnék kapni)
-
Ereshkigal
őstag
válasz #36268800 #5230 üzenetére
Az else ág csak akkor hajtódik végre, ha az if-ben szereplő állítás hamis volt. Mivel itt egymást kizáró feltételek vannak, lehet külön is írni az if-eket, mindig csak egy lesz igaz, így mindkét esetben azt csinálja a program, amit szeretnénk, de az if-else megoldás a jobb (nem vizsgáljuk mindig mind a három feltételt feleslegesen).
[ Szerkesztve ]
-
dabadab
titán
válasz #36268800 #5230 üzenetére
"A kérdésem az volna ezzel kapcsolatban, hogy mi a különbség az egyszerű "if" és az "else-if" között?"
Az, hogy sima if-eknél (megfelelő feltételek esetén) a program akár az összes if-be belemehet, if-else-eknél viszont legfeljebb csak egybe. Neked itt pont az else-if kell, mert egymást kölcsönösen kizáró feltételeid vannak.
"Esetleg valamelyik gyorsabban lefut?"
Ez is benne van, ha if-else-eknél belemegy valamelyik ágba, akkor utána a komplett blokk végére ugrik, nem nézi meg a többi feltételt. Mondjuk ez olyan különbség, ami tipikusan olyan kicsi, hogy mérések sem mutatják ki.
"A Microsoft Visual Studio-t használom, hol találom benne a program gyorsaságát?"
VS 2013-ban van profiler, de őszintén szólva nem hiszem, hogy jelenleg neked erre bármi szükséged lenne. Az ekkora programok futási ideje bőven mérési hibán belül van.
"Mi a véleményetek a kódom tagoltságáról?"
Így azért jóval olvashatóbb (ez az else-if szokásos írásmódja):
int main(void)
{
float num1, num2;
printf("Enter two numbers\nFirst: "); scanf("%f", &num1);
printf("Second: "); scanf("%f", &num2);
if (num1 == num2)
{
printf("They are equal: %f = %f", num1, num2);
}
else if (num1 > num2)
{
printf("They are not equal, %f > %f", num1, num2);
}
else
{
printf("They are not equal, %f < %f", num1, num2);
}
getch();
return 0;
}Ezen túlmenően ekkora kódnál azért különösebb tagoltságról nem lehet beszélni
ÁLtalános megjegyzésként még annyi, hogy lebegőpontos számoknál a == csak nagyon korlátozottan használható (itt mondjuk pont igen), mert ott a kerekítési hibák miatt előfordulhat, hogy két érték, aminek elméletben azonosnak kellene lennie, mégsem lesz pont ugyanannyi.
DRM is theft
-
buherton
őstag
válasz alapz@j #5235 üzenetére
Helyes. Azt hittem, hogy már senki nem foglalkozik ezzel . Ennek a megoldásnak az a lényege, hogy olyan függvényt használjunk, aminek van valamilyen visszatérési értéke (printf-el is lehetett volna), és hogy egy ciklus vagy elágazás kiértekélésekor hi'vjuk meg ezt a bizonyos függvényt.
Másik? [link] (cask vessző helyett pontos vesszővel, és lefordi'tani nem illik)
tely, baly, fojó, mennyél, mingyárt, telyföl, tolyás, malyd, kapú, egyenlőre, ejsd, jáccani, ahoz, fúj, hüje, muszály, alat, álok, lasan, fojtatás, ál, fontós, költsön, eggyüt, lyob (jobb?), mek, mongyak, milyért - !!! Tanúlyunk már meghejjessen irni... !!!
-
#36268800
törölt tag
Köszönöm a segítőkész válaszokat!
Újabb kérdésem lenne. Mindig is gondjaim voltak a függvények elkészítésével. Hogyan lehetne ebben a kódban azt a két adag feltételt 1-1 külön függvénybe kiírni, hogy ne a programtörzset árasszák el?
-
nagyúr
válasz #36268800 #5237 üzenetére
Fuggvenybe olyan funkcionalitast celszeru kiszervezni, amiket a kod tobb pontjan is hasznalsz. Az, hogy feldarabolsz egy adott funkciot tobb reszre, eleg ertelmetlen (bar sokan azt valljak, hogy egy fuggveny ne legyen hosszabb X sornal, de ez szerintem butasag).
while (!sleep) sheep++;
-
dabadab
titán
"bar sokan azt valljak, hogy egy fuggveny ne legyen hosszabb X sornal, de ez szerintem butasag"
Ezt csak azert mondod, mert meg nem kellett olyan fuggvenyeket kibogoznod, amikor tobb ezer sor hosszuak voltak, bennuk tobbszorosen egymasba agyazott switchekkel, ami azt eredmenyezi, hogy a "hol vagyok a kodban?" kerdesre a valaszt tobb perces scrollozgatas adja meg.
Igazabol ha egy fuggveny kezd hosszu lenni (mittomen, tobb, mint szaz soros), akkor erdemes eltoprengeni azon, hogy nem lenne-e erdemes megis szetszedni. Erre persze lehet az is a valasz, hogy "nem", de azert toprengeni erdemes.
DRM is theft
-
#36268800
törölt tag
Elkészült és működik. Ennél azért bonyolultabbra számítottam! Ezek szerint a "void" típusú függvényeknél ennyi az egész? Megírom külön, mintha a main-ben írnám és utána meghívom a main-ben?
[ Szerkesztve ]
-
nagyúr
válasz dabadab #5241 üzenetére
Tehat vegulis az ok, amiert szet akarod szedni, az a konnyebb navigacio. Ennek a megkonnyitese szerintem az IDE dolga lenne, nem a programszervezese, es a modern IDEk mar szoktak tudni fold/collapse funkciot C++-ra is, ha jol gondolom. .Net-ben ott a #region pragma, ami pont erre valo; Java-ban a sok patternhuszar ugyis haromsoros classokba szervez mindent ( ), funkc. nyelvek meg altalaban tul tomorek ahhoz, hogy ilyen hosszu fuggvenyeket irjon az ember.
while (!sleep) sheep++;
-
buherton
őstag
válasz Jester01 #5244 üzenetére
Nem hiszem el, ismét user error... (legközelebb, akkor is lefordi'tom magamnál, ha triviális printf-ről van szó) Ezt tessék megnézni:
typedef struct
{
int a : 4;
int : 0;
int c : 6;
} struct_s;tely, baly, fojó, mennyél, mingyárt, telyföl, tolyás, malyd, kapú, egyenlőre, ejsd, jáccani, ahoz, fúj, hüje, muszály, alat, álok, lasan, fojtatás, ál, fontós, költsön, eggyüt, lyob (jobb?), mek, mongyak, milyért - !!! Tanúlyunk már meghejjessen irni... !!!
-
dabadab
titán
"Tehat vegulis az ok, amiert szet akarod szedni, az a konnyebb navigacio."
Nem csak a navigacio, hanem a fuggveny atlathatosaga is: ugyanis ilyen szerkezetnel siman elofordul, hogy olyan valtozokra hivatkoznak, aminek par szaz sorral korabban adtak valami erteket. (Ami IDE-kkel eddig talalkoztam, azok csak a komplett switchet tudtak osszehajtogatni, az egyes case agakat nem)
Bocs, de most tenyleg nagyon latszik, hogy soha az eletben nem kellett ilyenekkel szenvedned, azert nem gondolod ezt problemasnak
DRM is theft
-
nagyúr
válasz dabadab #5247 üzenetére
C/C++-ban tenyleg nem (amikor azzal dolgoztam, akkor maniakus overengineering ment a fejlesztes soran, es az kod nagy resze pure virtual osztalyokbol epult fel ), mas nyelvekben lattam hasonlot, de nem volt extra szenvedes, ez teny. (Es 40 agas switch/case szerkezetekkel se sokat talalkoztam, ez is teny; nem tudom, hogy ez szerencse, vagy tapasztalatlansag .)
Mondjuk azert masrol beszelunk. En azt mondtam, hogy onmagaban a fuggveny hossza nem problemas, te meg azzal jossz, hogy ha nagyon bonyolult switch/case szerkezetek vannak, vagy a valtozok deklaracioja/ertekadasa es felhasznalasa kozott van 40 kepernyonyi kod, az problemas. Ezt elfogadom/elhiszem, de ugye itt nem a kod hosszaval van a gond -- a kod hossza az kovetkezmenye a problemanak, de nem az oka.
APL(-szeru) nyelven neztem bazi hosszu, teljesen strukturalatlan kodokat - ott ugye nem jellemzoek a fuggvenyek, viszont az sem, hogy regesreg krealt ertekeket hasznalsz sokkal-sokkal kesobb; inkabb sok-sok egymas utan kovetkezo es egymasra epulo lepest irnak le. Peldaul ilyen esetben semmi problema nincs a hosszu koddal.
De tenyleg nem tudok az erveddel vitatkozni
while (!sleep) sheep++;
-
dabadab
titán
"APL(-szeru) nyelven neztem bazi hosszu, teljesen strukturalatlan kodokat - ott ugye nem jellemzoek a fuggvenyek, viszont az sem, hogy regesreg krealt ertekeket hasznalsz sokkal-sokkal kesobb; inkabb sok-sok egymas utan kovetkezo es egymasra epulo lepest irnak le."
Azert ott is joval olvashatobb es kovethetobb lesz a kod, ha ugy nez ki, hogy van egy fuggvenyed, hogy
do_something_complex()
{
do_something_simple();
do_something_even_simpler();
// ...
}es az egyes lepeseket kirakod sajat fuggvenybe. A fordito meg ugyis inline-olja a fuggvenyeket, szoval meg csak lassabb se lesz.
DRM is theft
Ú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!
Állásajánlatok
Cég: Ozeki Kft.
Város: Debrecen
Cég: Promenade Publishing House Kft.
Város: Budapest