- Képernyőmentes aktivitáskövetőt mutatott be a Google, ez a Fitbit Air
- Google Pixel topik
- Yettel topik
- Milyen okostelefont vegyek?
- Samsung Galaxy A72 - kicsit király
- Poco X8 Pro Max - nem kell ide sem bank, sem akkubank
- Samsung Galaxy S23 Ultra - non plus ultra
- Samsung Galaxy Z Fold7 - ezt vártuk, de…
- Android szakmai topik
- Samsung Galaxy Watch (Tizen és Wear OS) ingyenes számlapok, kupon kódok
-
5300 - 5201
6397 - 6301 6300 - 6201 6200 - 6101 6100 - 6001 6000 - 5901 5900 - 5801 5800 - 5701 5700 - 5601 5600 - 5501 5500 - 5401 5400 - 5301 5300 - 5201 5200 - 5101 5100 - 5001 5000 - 4901 4900 - 4801 4800 - 4701 4700 - 4601 4600 - 4501 4500 - 4401 4400 - 4301 4300 - 4201 4200 - 4101 4100 - 4001 4000 - 2001 2000 - 1
-
Fórumok
Mobilarena - mobil fórumok
Okostelefonok Mobiltelefonok Okosórák Autó+mobil Üzlet és Szolgáltatások Mobilalkalmazások Tartozékok, egyebek Mobilarena blogokPROHARDVER! - hardver fórumok
Notebookok TV & Audió Digitális fényképezés Alaplapok, chipsetek, memóriák Processzorok, tuning Hűtés, házak, tápok, modding Videokártyák Monitorok Adattárolás Multimédia, életmód, 3D nyomtatás Nyomtatók, szkennerek Tabletek, E-bookok PC, mini PC, barebone, szerver Beviteli eszközök Egyéb hardverek PROHARDVER! BlogokIT café - infotech fórumok
Infotech Hálózat, szolgáltatók OS, alkalmazások SzoftverfejlesztésGAMEPOD - játék fórumok
PC játékok Konzol játékok MobiljátékokLOGOUT - lépj ki, lépj be!
LOGOUT reakciók Monologoszféra FototrendFÁRADT GŐZ - közösségi tér szinte bármiről
Tudomány, oktatás Sport, életmód, utazás, egészség Kultúra, művészet, média Gazdaság, jog Technika, hobbi, otthon Társadalom, közélet Egyéb Lokál PROHARDVER! interaktív
-
Frissítve: 2014-04-25 14:12 Téma összefoglaló
Új hozzászólás Aktív témák
-
buherton
őstag
Ha 8 bites mikrokontrollereken akarsz programozni, akkor felejtsd el a C#-t. C-zél vagy esetleg C++, de először a C-t javaslom.
-
G.A.
aktív tag
Ez veletlenul nem C#?... Mert akkor inkabb a C# programozás topikban erdemes kerdezni.
Elnézést, lehetséges.
Csak hobby szinten foglalkozom program írással és akkor is 8bites mikrokontrollerekre-re. Nekem a C, C++ és a C# egy kalap alatt van. (még nem látom az eltéréseket)GA
-
dabadab
titán
Üdv!
Akkor nincs egyszerűbb megoldás, végig kell zongorázni a karaktereken?
Erre jutottam:
int line_count = 0, byte_count = 0;
byte[] TXBuffer = new byte[262144];
byte[] hex_data = new byte[262144];
string text = System.IO.File.ReadAllText(@"L:\stk500.hex");
string[] textSplit = text.Split(':');
foreach (string line in textSplit)
{
line_count++;
foreach (byte character in line)
{
TXBuffer[byte_count++] = character;
}
}
for (int i = 0, x = 0, temp; i < byte_count; )
{
if(TXBuffer[i] <= 0x39)
{
temp = (TXBuffer[i] - 0x30)*16;
hex_data[x] += (byte)temp;
}
else if (TXBuffer[i] >= 0x41)
{
temp = (TXBuffer[i] - 0x37) * 16;
hex_data[x] += (byte)temp;
}
i++;
if (TXBuffer[i] <= 0x39)
{
temp = (TXBuffer[i] - 0x30);
hex_data[x] += (byte)temp;
}
else if (TXBuffer[i] >= 0x41)
{
temp = (TXBuffer[i] - 0x37);
hex_data[x] += (byte)temp;
}
i++; x++;
}Este még nem működött, mert ezek hex_data[x] += (byte)temp; helyett ezt hex_data[x] = (byte)temp; írtam... Jól éreztem, hogy rá kellett aludni egyet.
bucsupeti: köszönöm a segítséget!
GA
Ez veletlenul nem C#?... Mert akkor inkabb a C# programozás topikban erdemes kerdezni.
-
G.A.
aktív tag
végigiterálsz a sztringen karakterenként. a karaktert átalakítod 0-15 közti számértékké (ascii tábla tanulmányozása után egy egyszerű kivonás lesz az átalakítás) megszorzod 16-al, majd beolvasod a következőt számmá alakítod és az előző értékhez hozzáadod. ez lesz a tömböd első eleme. ezt a metódust folytatod amíg a végére nem érsz a sztringnek.
Üdv!
Akkor nincs egyszerűbb megoldás, végig kell zongorázni a karaktereken?
Erre jutottam:
int line_count = 0, byte_count = 0;
byte[] TXBuffer = new byte[262144];
byte[] hex_data = new byte[262144];
string text = System.IO.File.ReadAllText(@"L:\stk500.hex");
string[] textSplit = text.Split(':');
foreach (string line in textSplit)
{
line_count++;
foreach (byte character in line)
{
TXBuffer[byte_count++] = character;
}
}
for (int i = 0, x = 0, temp; i < byte_count; )
{
if(TXBuffer[i] <= 0x39)
{
temp = (TXBuffer[i] - 0x30)*16;
hex_data[x] += (byte)temp;
}
else if (TXBuffer[i] >= 0x41)
{
temp = (TXBuffer[i] - 0x37) * 16;
hex_data[x] += (byte)temp;
}
i++;
if (TXBuffer[i] <= 0x39)
{
temp = (TXBuffer[i] - 0x30);
hex_data[x] += (byte)temp;
}
else if (TXBuffer[i] >= 0x41)
{
temp = (TXBuffer[i] - 0x37);
hex_data[x] += (byte)temp;
}
i++; x++;
}Este még nem működött, mert ezek hex_data[x] += (byte)temp; helyett ezt hex_data[x] = (byte)temp; írtam... Jól éreztem, hogy rá kellett aludni egyet.
bucsupeti: köszönöm a segítséget!
GA
-
bucsupeti
senior tag
végigiterálsz a sztringen karakterenként. a karaktert átalakítod 0-15 közti számértékké (ascii tábla tanulmányozása után egy egyszerű kivonás lesz az átalakítás) megszorzod 16-al, majd beolvasod a következőt számmá alakítod és az előző értékhez hozzáadod. ez lesz a tömböd első eleme. ezt a metódust folytatod amíg a végére nem érsz a sztringnek.
-
Jester01
veterán
Melyik része okoz problémát? Két karakterenként szétvágod és számmá alakítod.
-
G.A.
aktív tag
Üdv!
A következőhöz szeretnék egy kis segítséget kérni.
Van egy ASCII karaktereket tároló stringem (19C020C01F) amit át szeretném vinni array-be, de úgy hogy a kapott array így nézzen ki: array = {0x19, 0xC0, 0x20, 0xC0, 0x1F}.
Ezt hogy lehet kivitelezni?
GA
-
Fire/SOUL/CD
félisten
-
#36268800
törölt tag
Köszönöm a válaszokat! Oda figyelek most már erre.

-
Reinkz
senior tag
-
Reinkz
senior tag
Nem ez sajnos nem tökéletes pl nagy ékeztes betűkkírása ugyan ugy nem megy vele, ha vki tudja mi a megoldás azt meg köszönném.
-
Ereshkigal
őstag
-
Reinkz
senior tag
sziasztok,
érdeklene hogyan tudnék kiíratni ékeztes karaktert windows alatt code blocksban (13:12)
linux alatt tökéltes működik azonban windowson hiába állítom w125x-re utf8ra semmi.
ötlet esetleg?
-
EQMontoya
veterán
Isten hozott a lebegőpontos számok világában!

Alapvetően két csúnya dolog van velük:
1. a pontosságuk korlátozott, vagyis előbb-utóbb lesznek kerekítési hibák
2. nem tizes, hanem kettes számrendszert használnak, így a tizes számrendszerben kevés tizedesjegyből álló számok simán lehetnek végtelen tizedestörtekHa kiíratnád a MAXP*0.57 értékét, akkor valószínűleg valami olyasmit látnál, hogy 0,57000001. Emiatt lebegőpontos számoknál számolni kell azzal, hogy az egyenlőség nem fog működni és nem egzakt egyenlőséget vizsgálni, hanem azt, hogy az adott szám benne van-e valamilyen tartományban.
...amely tartomány méretét érdemes igazítani a számábrázolás pontosságához és az összehasonlított számok nagyságrendjéhez, de kis számoknál sem túl alacsonyra menni.

-
dabadab
titán
A C Példatár alapján írtam egy programot: link
0-100ig megadsz egy egész számot és megkapod az értékelést. (tudom, hogy a szám nincs vizsgálva hogy biztosan 0 és 100 közé esik-e, de tegyük fel, hogy igen)
Minden értékre jól működik, kivéve az 57-re.
MAXP = 100
MAXP*0.57 = 57Ha beírom simán a feltételnek, hogy 57 működik, ha MAXP*0.57-et adok meg, akkor viszont az 57 pontot "közepesnek" értékeli! Miért?
Isten hozott a lebegőpontos számok világában!

Alapvetően két csúnya dolog van velük:
1. a pontosságuk korlátozott, vagyis előbb-utóbb lesznek kerekítési hibák
2. nem tizes, hanem kettes számrendszert használnak, így a tizes számrendszerben kevés tizedesjegyből álló számok simán lehetnek végtelen tizedestörtekHa kiíratnád a MAXP*0.57 értékét, akkor valószínűleg valami olyasmit látnál, hogy 0,57000001. Emiatt lebegőpontos számoknál számolni kell azzal, hogy az egyenlőség nem fog működni és nem egzakt egyenlőséget vizsgálni, hanem azt, hogy az adott szám benne van-e valamilyen tartományban.
-
#36268800
törölt tag
A C Példatár alapján írtam egy programot: link
0-100ig megadsz egy egész számot és megkapod az értékelést. (tudom, hogy a szám nincs vizsgálva hogy biztosan 0 és 100 közé esik-e, de tegyük fel, hogy igen)
Minden értékre jól működik, kivéve az 57-re.
MAXP = 100
MAXP*0.57 = 57Ha beírom simán a feltételnek, hogy 57 működik, ha MAXP*0.57-et adok meg, akkor viszont az 57 pontot "közepesnek" értékeli! Miért?
-
EQMontoya
veterán
-
#36268800
törölt tag
Elvárás volt - és le is cseréltem őket már.
Köszi a segítséget!Mi a gyakorlati különbség a float és a double között? Annyit tudok, hogy a float memóriafoglalási mérete kisebb, mint a double-nek.
-
Karma
félisten
Köszönöm a választ! Azt hiszem, megvilágosodtam!
Szerintem JÓL működik. Esetleg egy-két próbát tennél vele? Megvárom a válaszodat és csak utána adom be.Szerintem mehet.
Feltéve persze, hogy nem elvárás az, hogy bármilyen valós számok lehessenek az együtthatók - akkor az inteket le kellene cserélned double-re.
-
#36268800
törölt tag
Köszönöm a választ! Azt hiszem, megvilágosodtam!
Szerintem JÓL működik. Esetleg egy-két próbát tennél vele? Megvárom a válaszodat és csak utána adom be. -
Karma
félisten
Sziasztok!
Ezzel a kóddal kapcsolatban kérnék segítséget!
Az a része jól működik, hogy megmondja a program, hány megoldása van az egyenletnek, viszont csak 0.0000-kat ad vissza eredményül.
Gondolom a "double" - "int" részek kavarodnak, de már egy ideje görcsölök rajta és sehogy se jön össze. Valaki ki tudná javítani? Tanulnék belőle.
Ha nagyon nagy logikai hibák vannak a kódomban, akkor ne javítsátok ki, csak írjátok meg és megpróbálom összerakni máshogyan!!!Nem a double-int konverzióval van baj, sokkal nagyobb probléma, hogy a 34. és a 43. sorban a számítás végző függvényeket (pointerként) adod be a printf-nek, nem pedig meghívod őket.
A double kockázat megoldása annyi, hogy a 7. és a 14. sorban a hányadost 2-ről 2.0-ra átírod.
-
#36268800
törölt tag
Sziasztok!
Ezzel a kóddal kapcsolatban kérnék segítséget!
Az a része jól működik, hogy megmondja a program, hány megoldása van az egyenletnek, viszont csak 0.0000-kat ad vissza eredményül.
Gondolom a "double" - "int" részek kavarodnak, de már egy ideje görcsölök rajta és sehogy se jön össze. Valaki ki tudná javítani? Tanulnék belőle.
Ha nagyon nagy logikai hibák vannak a kódomban, akkor ne javítsátok ki, csak írjátok meg és megpróbálom összerakni máshogyan!!! -
zka67
őstag
(#5274) zka67
Igen, tudom, és az adatlapban is olvastam. A 750 ms az csak akkor szükséges, ha 12 biten ábrázoltatom vele a hőmérsékletet. Próbáltam belerakni 750 ms késleltetést __delay_ms(750);-el illetve szétdarabolva, pl. 200-200-as csoportokban. Le se fut ez a függvény(halmaz). Egyszerűen csak (mintha) átugorja, és küldi a többi mért adatot. Továbbá 16 C-nál magasabb hőmérsékleten tökéletesen működik a várakozás nélkül is. Szóval nem gondolnám, de persze lehetni LEHET!
(#5273) emvy
Erre én is gondoltam, hogy ez itt nagyon gyanús, hogy amikor 15-öt (00001111)-t kéne kijelezni, akkor 127 (11111111) jön helyette. De nem jutottam semmire se. Valami konkrét(abb) ötleted van?
Szia, jobban megnézve a kódodat, én úgy látom, hogy csak 8 bitet olvasol ki a 12-ből.
-
fraba
aktív tag
-
emvy
félisten
(#5274) zka67
Igen, tudom, és az adatlapban is olvastam. A 750 ms az csak akkor szükséges, ha 12 biten ábrázoltatom vele a hőmérsékletet. Próbáltam belerakni 750 ms késleltetést __delay_ms(750);-el illetve szétdarabolva, pl. 200-200-as csoportokban. Le se fut ez a függvény(halmaz). Egyszerűen csak (mintha) átugorja, és küldi a többi mért adatot. Továbbá 16 C-nál magasabb hőmérsékleten tökéletesen működik a várakozás nélkül is. Szóval nem gondolnám, de persze lehetni LEHET!
(#5273) emvy
Erre én is gondoltam, hogy ez itt nagyon gyanús, hogy amikor 15-öt (00001111)-t kéne kijelezni, akkor 127 (11111111) jön helyette. De nem jutottam semmire se. Valami konkrét(abb) ötleted van?
Amit mer, az egyebkent pontos? Tehat amikor 16 fokot jelez, akkor az megfelel a valosagnak?
-
fraba
aktív tag
(#5274) zka67
Igen, tudom, és az adatlapban is olvastam. A 750 ms az csak akkor szükséges, ha 12 biten ábrázoltatom vele a hőmérsékletet. Próbáltam belerakni 750 ms késleltetést __delay_ms(750);-el illetve szétdarabolva, pl. 200-200-as csoportokban. Le se fut ez a függvény(halmaz). Egyszerűen csak (mintha) átugorja, és küldi a többi mért adatot. Továbbá 16 C-nál magasabb hőmérsékleten tökéletesen működik a várakozás nélkül is. Szóval nem gondolnám, de persze lehetni LEHET!
(#5273) emvy
Erre én is gondoltam, hogy ez itt nagyon gyanús, hogy amikor 15-öt (00001111)-t kéne kijelezni, akkor 127 (11111111) jön helyette. De nem jutottam semmire se. Valami konkrét(abb) ötleted van?
-
zka67
őstag
Sziasztok!
Írtam egy DS1820 hőmérő IC-hez C-ben programot PIC-re, de sajnos nem úgy működik, ahogy kéne neki.
DS1820 kód. Jól és viszonylag pontosan mér, de 16 Celsius foknál kisebb hőmérsékleteknél 127 C-t jelez ki a putty egy USB-RS485 konverteren keresztül. Más, mért adatot is küldök ugyanezen a csatornán keresztül ugyanazzal a függvénnyel, így azt nem gondolnám rossznak. Valami ötlet?
Szia, említettem már neked, hogy a konverzió elindítása és az adat kiolvasása között legalább 750ms-et várni kell. Elképzelhető, hogy nem végzett a konverzióval...
-
emvy
félisten
Sziasztok!
Írtam egy DS1820 hőmérő IC-hez C-ben programot PIC-re, de sajnos nem úgy működik, ahogy kéne neki.
DS1820 kód. Jól és viszonylag pontosan mér, de 16 Celsius foknál kisebb hőmérsékleteknél 127 C-t jelez ki a putty egy USB-RS485 konverteren keresztül. Más, mért adatot is küldök ugyanezen a csatornán keresztül ugyanazzal a függvénnyel, így azt nem gondolnám rossznak. Valami ötlet?
127 az gyanusan megegyezik az SCHAR_MAX-al, szoval kicsit megneznem, hogy nincs-e valami tulcsordulas/alulcsordulas valahol.
-
fraba
aktív tag
Sziasztok!
Írtam egy DS1820 hőmérő IC-hez C-ben programot PIC-re, de sajnos nem úgy működik, ahogy kéne neki.
DS1820 kód. Jól és viszonylag pontosan mér, de 16 Celsius foknál kisebb hőmérsékleteknél 127 C-t jelez ki a putty egy USB-RS485 konverteren keresztül. Más, mért adatot is küldök ugyanezen a csatornán keresztül ugyanazzal a függvénnyel, így azt nem gondolnám rossznak. Valami ötlet?
-
buherton
őstag
-
emvy
félisten
-
#36268800
törölt tag
Tudna nekem valaki küldeni esetleg egy kicsit komplexebb C programot, amely forrásának átnézéséből tanulhatnék? Az igazat megvallva soha nem láttam még az "if-eken túl". Mindenféle "felajánlást" szívesen vennék!
-
buherton
őstag
Ki az a Kudlik Júlia?
Főiskolás koromig egyáltalán nem foglalkoztam programozással. A BASIC-hez pedig elég fiatal vagyok (24). No, most már ezt is tudom
. Viszont az off-ot befejezem, mert kezd sok lenni a topicban. -
dabadab
titán
A szivatas arra vonatkozott, hogy tenyleg nem ismerted fel a homecomputeres BASIC-et? Mert az kb. annyira mindenki altal ismert dolog, mint Kudlik Julia.
-
buherton
őstag
-
emvy
félisten
-
Pttypang
veterán
-
buherton
őstag
-
EQMontoya
veterán
"Goto-t igazából a C korszakban igyekeztek nagyon írtani"
Valójában Dijkstra ismert cikke '68-as, a C-n meg '69-ben kezdtek el dolgozni Ritchie-ék, szóval a goto utálata megelőzi a C-t és igazából az a fajta vallásos utálat, ami bizonyos körökben megvolt a gotoval kapcsolatban, nem igazán volt indokolt.
Szerintem sem volt indokolt, főleg nem azon a szinten, hogy egyetemen is teljesen tiltották, konkrétan zh-ban, beadandóban tilos volt használni. Aki ott tanult meg kódolni, az később se nagyon fogja.
-
emvy
félisten
"Goto-t igazából a C korszakban igyekeztek nagyon írtani"
Valójában Dijkstra ismert cikke '68-as, a C-n meg '69-ben kezdtek el dolgozni Ritchie-ék, szóval a goto utálata megelőzi a C-t és igazából az a fajta vallásos utálat, ami bizonyos körökben megvolt a gotoval kapcsolatban, nem igazán volt indokolt.
Barcsak Dijkstra egyeb cikkeit is ennyire komolyan venne a komjuniti.
@buherton:
csak irtal mar olyan kodot, hogy
10 print "Szia"
20 goto 10 -
buherton
őstag
"Goto-t igazából a C korszakban igyekeztek nagyon írtani"
Valójában Dijkstra ismert cikke '68-as, a C-n meg '69-ben kezdtek el dolgozni Ritchie-ék, szóval a goto utálata megelőzi a C-t és igazából az a fajta vallásos utálat, ami bizonyos körökben megvolt a gotoval kapcsolatban, nem igazán volt indokolt.
Pont a napokban turkálok egy olyan kódban, amiben goto van. Én még életemben nem írtam még goto-t kódba, de ezt annyira jól eltalálták és annyira leegyszerűsítette a program megértését és futását, hogy az már zseniális. Nem az ördögtől való, de csak akkor használja az ember, amikor tényleg ezzel egyszerűbb, mert nagyon átláthatatlan lesz. Főleg ha modulok között ugrál, nem csak függvényen belül.
MOD: off
-
dabadab
titán
"Goto-t igazából a C korszakban igyekeztek nagyon írtani"
Valójában Dijkstra ismert cikke '68-as, a C-n meg '69-ben kezdtek el dolgozni Ritchie-ék, szóval a goto utálata megelőzi a C-t és igazából az a fajta vallásos utálat, ami bizonyos körökben megvolt a gotoval kapcsolatban, nem igazán volt indokolt.
-
EQMontoya
veterán
Ettől a filetól átlag editor kiakad.

Goto-t igazából a C korszakban igyekeztek nagyon írtani, c++ esetén viszont tényleg nem nagyon van értelme leírni sem.
-
Jester01
veterán
-
emvy
félisten
Lazan kapcsolodik:
.Net CLR GC. 1200 kByte-os CPP fajl. Az elso verziojat Lispben irta Patrick Dussud, es irt hozza egy Lisp -> C++ transzlatort. Es egyebkent eleg szep.
-
Sk8erPeter
nagyúr
"ezt a hozzászólást már csak Lezsonak kell belinkelned, hogy c++ kulcsszóra miért nem találja meg a kereső"
Idézőjelek közé téve a keresőszót már megtalálja a kereső a topicot: [link]. A legtöbbször így kell itt kutatni a pontosság kedvéért (legalábbis ilyen jellegű keresőszavaknál biztosan), különben elég sok fura "valami hasonló" találat jöhet ki, ami valójában nem is hasonlít (mint pl. itt az idézőjelek nélküli változat).
-
kingabo
őstag
Jaja. Nekem clipper kódot kellett portolnom igaz C#-ra. Fv első sora if akármi, az endif x ezer sorral lejjebb. Képtelenség volt átlátni, hogy mit csinál. Ha a működés fel lett volna osztva további fk-re, akkor szépen látszott volna minden lépés, hogy mit is csinál a cucc. (pl kérd le az adatokat, szűrd le, számolj velük, generálj exportokat, mentsd a változásokat)
Ráadásul, ha ügyesen bontad szét a működést és jó fv neket adsz igen nagy mértékben le lehet csökkenteni a kommentek mennyiségét. Nem kell kiírni, hogy most ezt csinálom azt csinálom, mert az fv nevéből látszik. A sokkal fontosabb, hogy miért csinálom kommentek (ami a sok komment között elveszik) pedig szem előtt lesznek, keresés nélkül is.
A C#-os region-okra egyre több helyen tekintenek rosszként. Github-on pl több helyen is írták, hogy egyáltalán ne legyen a kódban... Mellesleg amikor egy rakat kódot összefogsz egy régióba, azt akár ahogy van ki is rakhatod egy fv-be. És késöbb, ha bele kell nyúlnod könnyebben találod meg, könnyebb módosítani, sőt még a többi x helyre se kell a fixet copy-paste-elni, mert mindenhonnan fv-t hívsz.
Persze One-Man-Army esetén úgy dolgozol, ahogy jól esik, de ha másokkal kell együtt dolgozni, vagy más kódját kapod meg, amit először meg akarnál érteni, akkor (legalábbis számomra) mindenképpen hasznos, ha fv-kba szét van robbantva a kód és átlátható, mintha azt sem tudod az 1000 sorban hol is vagy éppen.
Sztem. -
skylaner
senior tag
Majd amikor egy 3000 soros legacy fgv kell 100%san lefedve le UT-znod, akkor biztos nem fogod azt mondani, hogy milyen jó, hogy nincsen szétbontva.

-
emvy
félisten
"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.
A k/q write only, akarhogy strukturalsz

Ha meg van code folding, akkor
#region Do something complex
do_something_simple();
do_something_even_simpler();
#endregionDe ha sima C-rol van szo, akkor igazabol nincs gyakorlati tapasztalatom real life, szoval elfogadom, ami mondasz.
-
dabadab
titán
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

"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.
-
emvy
félisten
"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

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

-
alapz@j
tag
Csak tippelem, hogy 4 byte lesz a sizeof, mert bár kevesebbe is beleférne a 10 bit, de mintha 32 bites rendszeren ez alá nem paddingolna.
-
dabadab
titán
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."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

-
buherton
őstag
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; -
emvy
félisten
"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.
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. -
Jester01
veterán
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)
Hát nekem elsőre gyanús volt a nulla, de a biztonság kedvéért csak megpróbáltam lefordítani is

-
#36268800
törölt tag
-
EQMontoya
veterá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.
+1.
Ugyanez a fileokra is igaz.
Kolléga röviden így foglalta össze:
azert lassuk be, hogy az 500+ KB-os cpp fajl mar nem bad smell, hanem egy tarva-nyitva hagyott budi hasmenes utan -
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.
-
emvy
félisten
-
#36268800
törölt tag
Értem, köszi a választ. Ettől függetlenül egyelőre nekem már az is nagy előrelépés lenne, ha ki tudnám szervezni magamtól! Ha legalább az egyiket megkaphatnám, az alapján megcsinálnám a másikat. Tanulni szeretnék belőle!

-
emvy
félisten
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?
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).
-
#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?
-
buherton
őstag
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)
-
alapz@j
tag
#include <stdio.h>
void main() {
if(puts("Hello World")) {}
} -
Pttypang
veterán
-
EQMontoya
veterán
Hol tolsz progot? Egyetemeken a vizsgák értek véget most, oda ennél azért komolyabb dolgok kellenek.
-
dabadab
titán
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)
"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.
-
Ereshkigal
őstag
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)
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).
-
#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
-
Pttypang
veterán
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?

Köszi, nem tudom, miért ly-t irtam

Nem tanitjak, hogy magyar valtozoneveket hasznaljunk, csak "beszedeseket", ez mar az en hulyesegem, hogy itt magyarul irtam
.A tobbit is koszonom, vegul ez lett belole, igy mar normalisan megy

-
#36268800
törölt tag
Tenyleg belekavarodtal.
A negativ hatvanyok (amit egy gyors Google-kereses is megmond
) osztast jelentenek. A negativ szamokat C-ben kettes komplemenssel abrazoljak, olvasd el ezt.Egy kicsit magas nekem ez a számábrázolás... mennyire kell ezt vágni így a "programozói karrierem" hajnalán?

-
Jester01
veterán
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?

Gondolkodjunk is: a második ciklus tök felesleges. Minden számhoz csak egy másik olyan tartozik, amivel összeadva az öszeg n lesz.
Jogos!

-
EQMontoya
veterán
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?

-
Pttypang
veterán
-
Jester01
veterán
1. gyök(n)-ig mész, vagy szitálsz
2. csak azokat írod ki, ahol a második prím nagyobb vagy egyenlő mint az első (vagyis a második ciklus i-től induljon) -
Pttypang
veterán
-
#36268800
törölt tag
Tenyleg belekavarodtal.
A negativ hatvanyok (amit egy gyors Google-kereses is megmond
) osztast jelentenek. A negativ szamokat C-ben kettes komplemenssel abrazoljak, olvasd el ezt.Köszönöm szépen! Ahogy elolvastam a hozzászólásodat, rögtön beugrott a negatív hatványozás is... 2^-1 = 1/2^1, stimmel már!!! A számábrázolásról szóló Wiki cikket pedig átolvasom!

-
dabadab
titán
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!
Tenyleg belekavarodtal.
A negativ hatvanyok (amit egy gyors Google-kereses is megmond
) osztast jelentenek. A negativ szamokat C-ben kettes komplemenssel abrazoljak, olvasd el ezt. -
EQMontoya
veterán
-
dabadab
titán
-
EQMontoya
veterán
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.
-
#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
-
buherton
őstag
-
EQMontoya
veterán
Oke, linkeld be pls a c++ topicot!

-
buherton
őstag
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. -
emvy
félisten
O bazz, X perce nezem mar, hogy ez mi a fene.
Az enum-ot meg az unsigned parametert ki is hagyhatnad a trukkbol, csak elvonja a figyelmet 
Hint, ha mas se latja meg elsore: ket karakterrel meg lehet fixalni.
-
EQMontoya
veterán
-
Jester01
veterán
-
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;
}
-
emvy
félisten
Bringaval mindenki el tud, az nem erdekes

-
EQMontoya
veterán
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. -
dabadab
titán
"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

-
EQMontoya
veterán
Viszont ez minden elem elérésnél egy indirekt függvényhívás amit nem tud a fordító inline beágyazni. Bizonyos mennyiség fölött garantáltan sokkal lassabb lesz, mintha ténylegesen transzponáltad volna.
A másik, hogy a cache hatékonyságát nagyban befolyásolja a bejárás. Egy sorfolytonos bejárás sokkal gyorsabb lehet mint egy oszlopok szerinti. Az algoritmust ennek megfelelően választhattad meg, de ha a hívó egy függvénypointeresen transzponált mátrixot ad be, akkor amire a kód azt hiszi, hogy hatékony sorfolytonos az valójában nem az. Ugye bizonyos műveleteknél ezért éri meg ténylegesen transzponálni a mátrixot, a bejárás megváltoztatása helyett, még akkor is ha amúgy nincs függvénypointeres trükközés. Lásd még What every programmer should know about memory: "Through the simple transformation of the matrix we can achieve a 76.6% speed-up! The copy operation is more than made up. The 1000 non-sequential accesses really hurt. "
Virtuális mátrixokhoz viszont kétségkívül jó megoldás lehet.
Egy okosan megírt gettert miért ne tudnál inline-olni?
Egy jó iterátor sem lesz lassabb a transzponáltra, mint a simára, csak a ++ operátora lesz más. -
Jester01
veterán
> "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.
Igen, így értettem a "bizonyos mennyiség"-et.
-
emvy
félisten
Viszont ez minden elem elérésnél egy indirekt függvényhívás amit nem tud a fordító inline beágyazni. Bizonyos mennyiség fölött garantáltan sokkal lassabb lesz, mintha ténylegesen transzponáltad volna.
A másik, hogy a cache hatékonyságát nagyban befolyásolja a bejárás. Egy sorfolytonos bejárás sokkal gyorsabb lehet mint egy oszlopok szerinti. Az algoritmust ennek megfelelően választhattad meg, de ha a hívó egy függvénypointeresen transzponált mátrixot ad be, akkor amire a kód azt hiszi, hogy hatékony sorfolytonos az valójában nem az. Ugye bizonyos műveleteknél ezért éri meg ténylegesen transzponálni a mátrixot, a bejárás megváltoztatása helyett, még akkor is ha amúgy nincs függvénypointeres trükközés. Lásd még What every programmer should know about memory: "Through the simple transformation of the matrix we can achieve a 76.6% speed-up! The copy operation is more than made up. The 1000 non-sequential accesses really hurt. "
Virtuális mátrixokhoz viszont kétségkívül jó megoldás lehet.
> "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.
Új hozzászólás Aktív témák
-
5300 - 5201
6397 - 6301 6300 - 6201 6200 - 6101 6100 - 6001 6000 - 5901 5900 - 5801 5800 - 5701 5700 - 5601 5600 - 5501 5500 - 5401 5400 - 5301 5300 - 5201 5200 - 5101 5100 - 5001 5000 - 4901 4900 - 4801 4800 - 4701 4700 - 4601 4600 - 4501 4500 - 4401 4400 - 4301 4300 - 4201 4200 - 4101 4100 - 4001 4000 - 2001 2000 - 1
-
Fórumok
Mobilarena - mobil fórumok
Okostelefonok Mobiltelefonok Okosórák Autó+mobil Üzlet és Szolgáltatások Mobilalkalmazások Tartozékok, egyebek Mobilarena blogokPROHARDVER! - hardver fórumok
Notebookok TV & Audió Digitális fényképezés Alaplapok, chipsetek, memóriák Processzorok, tuning Hűtés, házak, tápok, modding Videokártyák Monitorok Adattárolás Multimédia, életmód, 3D nyomtatás Nyomtatók, szkennerek Tabletek, E-bookok PC, mini PC, barebone, szerver Beviteli eszközök Egyéb hardverek PROHARDVER! BlogokIT café - infotech fórumok
Infotech Hálózat, szolgáltatók OS, alkalmazások SzoftverfejlesztésGAMEPOD - játék fórumok
PC játékok Konzol játékok MobiljátékokLOGOUT - lépj ki, lépj be!
LOGOUT reakciók Monologoszféra FototrendFÁRADT GŐZ - közösségi tér szinte bármiről
Tudomány, oktatás Sport, életmód, utazás, egészség Kultúra, művészet, média Gazdaság, jog Technika, hobbi, otthon Társadalom, közélet Egyéb Lokál PROHARDVER! interaktív
● olvasd el a téma összefoglalót!
● ha kódot szúrsz be, használd a PROGRAMKÓD formázási funkciót!
- Luck Dragon: Asszociációs játék. :)
- Robot fűnyírók
- Audi, Cupra, Seat, Skoda, Volkswagen topik
- Kazy Computers - Fehérvár - Megbízható?
- Képernyőmentes aktivitáskövetőt mutatott be a Google, ez a Fitbit Air
- Bundle topik
- Google Pixel topik
- Milyen asztali (teljes vagy fél-) gépet vegyek?
- Óra topik
- Nintendo Switch
- További aktív témák...
- Garanciális samsung galaxy watch 8 classic
- Samsung QVO 870 SSD (1 TB) 100/100%
- Új, bontatlan - Apple MacBook Air 13 M4 16/256GB - Sky Blue
- Új Dobozos ASUS VivoBook Go 15 Laptop 15,6" -20% Ryzen 5 7520U 16/512 Radeon Graphics FHD OLED
- Új HP ZBook Firefly 16 G10 Profi Tervező Vágó Laptop -50% i7-1355U 16/1TB FHD+ RTX A500 4GB
- Apple Mac mini M1 2020 - 16GB/256GB SSD - Erősebb verzió! - Szép/Megkímélt állapotban
- HP EliteBook 845 G7 14" Ryzen 5 pro 4650U, 8-16GB RAM, 256-512GB SSD, jó akku, számla, 6 hó gar
- Telefon felvásárlás!! Honor Magic8 Lite / Honor Magic8 Pro
- Apple iPhone SE 2020 64GB, Kártyafüggetlen, 1 Év Garanciával
- Dell Latitude 5290, 2 az 1 ben,12.5",FHD,i5-8350U,8GB DDR4,256GB SSD,WIN11
Állásajánlatok
Cég: aiMotive Kft.
Város: Budapest
Cég: Laptopműhely Bt.
Város: Budapest



Főiskolás koromig egyáltalán nem foglalkoztam programozással. A BASIC-hez pedig elég fiatal vagyok (24). No, most már ezt is tudom
![;]](http://cdn.rios.hu/dl/s/v1.gif)


), 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
.)

.




