-
IT café
Új hozzászólás Aktív témák
-
kovisoft
őstag
válasz K1nG HuNp #11351 üzenetére
Szigorúan a magánvéleményem, de szerintem akinek nem ment a középiskolai matek, annak méginkább meg fog gyűlni a baja a felsőbb matematikával. Az érettségi csak arra jó visszajelzés, hogy a középiskolai szintet megugrottad, de ha ehhez már eleve egy csomót kellett pluszban küzdened, akkor mi lesz majd később?
-
kovisoft
őstag
-
kovisoft
őstag
válasz bandi0000 #11367 üzenetére
Néhány megjegyzés:
A string változó neve egyben a stringre mutató pointer is, tehát string bekérésekor nem kell & a változó neve elé (de persze lehet elé tenni &-t, ugyanaz lesz az eredmény).
Az if-ben az input változót kell hasonlítani a "help" stringgel.
Az strncmp-nek van egy harmadik (hossz) paramétere is. De szerintem ilyen esetben nem indokolt az strncmp. Az strncmp(input, "help", 4) ugyanaz lesz, mint az strcmp(input, "help").
-
kovisoft
őstag
válasz bandi0000 #11369 üzenetére
A scanf-nek a változóra mutató pointert kell átadni, amilyen címre a beolvasott értéket tenni kell. Tömbök esetében (a string is egy karakter tömb) a változó neve egyben a tömb első elemére mutató pointer is, tehát az input ugyanaz, mint az &input[0]. Más jellegű (pl. char vagy int) változók esetében természetesen kell az & a scanf-be, mivel ezeknél a változó nevét beírva a változó értékére hivatkozunk (tehát char-nál is kell & a scanf-be).
[ Szerkesztve ]
-
kovisoft
őstag
válasz dabadab #11372 üzenetére
Akkor van az, amit írsz, amikor a stringre egy char* típusú pointer mutat. A konkrét esetben viszont egy char input[10] típusú változóról, illetve annak a címéről van szó, és ennél input ugyanaz, mint &input. Lásd pl. ezt a választ.
-
kovisoft
őstag
válasz axioma #11374 üzenetére
Nem, ez nem fordítói jófejség, és nem csak a scanf-ben működik így, az egésznek mélyebb oka van. A char *ptr egy pointer, ahol a változó tartalma egy memóriacím, amire mutat. A változó értékét módosíthatod, és akkor egy másik memóriaterületre fog mutatni.
A char str[10] változó ezzel szemben ténylegesen azt a 10 byte-ot jelenti, amit lefoglalt számára a fordító, és nem változtathatod meg, hogy milyen memóriacímre mutasson. Tehát amíg ez legális: ptr=str, addig ez nem legális: str=ptr. De másként működik rájuk a sizeof is: sizeof(str)=10 lesz, nem pedig a pointer mérete (pl. 8).
Abban viszont tökéletesen egyetértünk, hogy nem jó gyakorlat a konkrét esetben &-tel használni, én sem szoktam, és nem is buzdítottam senkit erre. Ahogy írtad, egy kezdőnek az &input[0] a legbiztonságosabb forma.
-
kovisoft
őstag
válasz K1nG HuNp #11376 üzenetére
Szerintem tedd be az if-be az strcmp-t, és minden egyes új parancsot egy új "else if" ágban vizsgálj, pl. valahogy így:
...
if (strcmp(input, "help") == 0) {
printf("Jelenleg elerheto parancsok: korkt, szupermatekfv\n");
}
else if (strcmp(input, "korkt") == 0) {
korkt();
}
else if (strcmp(input, "szupermatekfv") == 0) {
szupermatekfv();
}
else {
printf("Nincs ilyen parancs.\nAz elerheto parancskhoz irj helpet.\n");
}Ha nem akarod, hogy a cmd ablak becsukódjon, akkor az egyik lehetőség, nem közvetlenül az exe-t futtatod, hanem nyitsz egy cmd ablakot, és abból indítod az exe-t. Másik lehetőség, hogy (ahogy írtad) a program végére beraksz valamilyen inputra várakozást, pl. egy getchar() vagy scanf() hívást, esetleg egy system("pause") parancsot.
[ Szerkesztve ]
-
kovisoft
őstag
-
kovisoft
őstag
Még néhány gyakori feladat:
- faktoriális számítás
- állapítsd meg két szám legnagyobb közös osztóját
- döntsd el egy számról, hogy prímszám-e
- döntsd el egy számról vagy stringről, hogy palindrom-e
- cseréld fel két változó értékét harmadik változó használata nélkül
- döntsd el egy láncolt listáról, hogy tartalmaz-e hurkot, ill. ugyanez extra memória (segédtömb, stb) használata nélkül
- fordíts meg egy egyszeresen láncolt listát
- fordíts meg egy számot
- bináris kereséssel keress meg egy elemet egy rendezett tömbben
- hagyd ki egy tömbből a duplikált elemeket
- állítsd elő egy string összes permutációjátMeg persze a szokásos "mit csinál az adott program", "mi a hiba az adott programban" típusú kérdések.
-
kovisoft
őstag
válasz bandi0000 #11473 üzenetére
Nem mindegy, hogy char-ként vagy short-ként, stb. adod össze a számokat, mert mindegyiknek más a tartománya, ami fölött túlcsordul a művelet. Byte-osan összeadva pl. a 250+10=4 lesz, mert max. 255-öt tudsz tárolni egy byte-on, de short-ként elfér ugyanez az összeg. Az sem mindegy, hogy hány elemű tömböket tudsz így összeadni, mert byte-ból egyszerre 8-at, de short-ból csak 4-et.
Az mm0-ban ugyanúgy tömbként lesz tárolva az eredmény, mint amilyen a bemenő operandus volt, innen ugyanúgy egy movq-val tudod kiírni memóriába (mondjuk egy C tömbbe).
-
kovisoft
őstag
válasz bandi0000 #11476 üzenetére
Túlcsordulás mindig lesz, csak az a kérdés, hogy milyen nagy számoknál következik be. Byte-os összeadásnál akkor, amikor az összeg eléri a 256-ot, word-nél 65536 elérésekor, stb. Mivel a padd tud 64 bittel műveletet végezni, ezért ha két 4 elemű tömböt akarsz összeadni, akkor definiálhatod őket short-ként, ahogy a korábbi példádban volt, de használd hozzá a word-ös paddw-t, ami 4 db 16 bites word-öt ad össze.
-
kovisoft
őstag
válasz bandi0000 #11480 üzenetére
A psub-nak mindegy, hogy előjeles vagy unsigned számokkal dolgozol, de a túlcsordulást ill. a negatív előjelet neked kell lekezelned (pl. csak viszonylag kis számokat vonsz ki, és akkor a legfelső bit mindig az előjel lesz).
A psubs csak előjeles számokat kezel, mert a túlcsordulást mindkét irányban a szélsőérték beállításával kezeli (szaturáció, telítés). Ezt leszámítva szerintem mindegy, hogy melyiket használod kellően kis számok kivonására. Viszont a végén kell még egy abszolút érték, ez a pabsb/pabsw/pabsd. Mármint ha jó értelmeztem a feladatot.
-
-
kovisoft
őstag
válasz Mr Dini #11555 üzenetére
Igen, most már látom, hogy a "[^"]+" típusú kifejezések azt akarják jelenteni, hogy "idézőjelek között bármi, ami nem idézőjel". Esetleg be tudnál másolni egy html részletet, amiben az adott reguláris kifejezés találatot kellene jelezzen? Csak mert ez a kifejezés nem túl általános, pl. kell egy sortörés legyen az "a" és az "img" tagek között, a kulcsszavak között pontosan egy szóköz lehet, a kulcsszavak egy adott sorrendben jöhetnek, stb, tehát ez nem egy általános html parszoló.
Viszont ha kipróbáltam egy kamu html szövegrészlettel, ami megfelel a fenti feltételeknek, akkor arra jelzett is találatot:
> for x,y in string.gmatch('<a href="aaa" class="bbb">\n<img src="ccc" class="ddd" alt="eee"','<a href="([^"]+)" class="[^"]+">\n<img src="([^"]+)" class="[^"]+" alt="([^\"]+)"') do print(x,y) end
aaa ccc -
kovisoft
őstag
válasz bandi0000 #11571 üzenetére
Ha 4 elemről van szó, akkor gondolom 16 bites word-öknek kell négyesével a maximumát venni, így a pmaxsw utasítást kell használni. Írnod kellene egy ciklust, ami 8 byte-onként (64 bitenként) végigmegy a tömbödön, és végrehajtja a pmaxsw utasítást a tömb legelején, ill. a tömb i-edit 8 byte-os szegmensén. Így a legvégén a tömböd legelejében benne lesz a 4 maximális érték.
Ha a folyamat során nem szabad elrontani a tömböt, akkor annyi plusz teendő van, hogy először át kell valahová másolni a tömb első 8 byte-ját, és aztán mindig ez a memóriaterület legyen a pmaxsw első operandusa (ugyanis ide íródik vissza a maximum érték), a második operandus továbbra is a tömb i-edik 8 byte-os szegmense.
-
kovisoft
őstag
-
kovisoft
őstag
válasz dangerzone #11614 üzenetére
Leginkább talán C++. A Tesla pl. C/C++ programozókat keres az önvezérlő szoftverek fejlesztéséhez (C-t a firmware-hez, C++-t a vezérléshez). De tudtommal a Google-nél is hasonló a helyzet.
-
kovisoft
őstag
válasz Chesterfield #11646 üzenetére
Néhány ötlet:
Ha magadnak csinálod (vagy belefér az, hogy nem teljesen automatikus, hanem a usernek ki kell adnia ehhez egy parancsot), akkor így:
git update-index --assume-unchanged path/to/file
Ha kvázi-automatikusra akarod, és belefér, hogy két config file-od van, akkor csinálsz egy (tracked) default config file-t és másik néven egy (untracked) local config file-t, azaz erről csak tudatod a felhasználót, mert ez nem lesz a repositoryban. Beolvasáskor megnézed, hogy van-e local config, és ha van, akkor az abban levő beállításokat használod, minden más beállítást a default config-ból veszel. És bele kell tenni a .gitignore-ba a local config nevét, hogy figyelmen kívül hagyja a git.
Vagy a fenti annyiban módosítva, hogy a default config file igazából csak egy sample, és ha még nem létezik az igazi config file, akkor deploy-kor átmásolod az igazi config file-ba (aminek a nevét szintén beleteszed a .gitignore-ba). Ezt a user már szabadon módosíthatja. És ekkor csak egy config file-t kell olvasni, de vagy kell egy deploy lépés vagy a usernek kézzel kell átmásolnia a file-t.
-
kovisoft
őstag
válasz K1nG HuNp #11652 üzenetére
+1 nélkül azért lesz üres a válasz, mert az olyasmit jelentene, hogy "melyik a legkisebb év, amikor indult az osztály, azon évek közül, amikor nem indult az osztály". Ez nyilván ellentmondás, így csak üres halmazt eredményezhet.
A +1 azért kell, hogy azon évek közül, amikor indult az osztály, a rákövetkezőket nézze, és ezek közül válassza ki a legkisebb olyat, amelyikben nem indult az osztály.
-
kovisoft
őstag
válasz Lokids #11670 üzenetére
Mi a célod a "double = long / long" művelettel? Ha a végén egy törtszámot akarsz kapni, akkor ez így nem lesz jó, mert a "long / long" egy egészértékű maradékos osztás, aminek az eredménye is egész (long) típusú lesz, tehát így elveszted a törtrészt, hiába teszed be utána egy double-be. Ahhoz, hogy törtszámot kapj, lebegőpontos műveletet kell végezz, amiben legalább az egyik változó valamilyen lebegőpontos formátumban van (pl. double). Tehát pl. valami ilyesmit:
double = double / long
double = long / double
double = double / doubleEhhez vagy az osztandót és/vagy az osztót is double-ként kell felvenned, vagy maradhatnak long-ok, és az osztáskor kell típuskonverziót alkalmazni.
[ Szerkesztve ]
-
kovisoft
őstag
Jogos, én a C-ből (és hasonló nyelvekből) indultam ki, de most utánanéztem, és VBA-ban úgy van, ahogy írod. Akkor viszont a problémája is más lesz. Írta is, hogy kis értékekkel működik, és csak akkor van gond, ha milliárdos értékekkel számol.
@Lokids: tudnál írni egy konkrét példát, amikor hibát kapsz?
-
kovisoft
őstag
válasz Lokids #11675 üzenetére
Ha ezt pl. az Excel-ben akarod használni, akkor ott úgy vettem észre, hogy a Long csak 32 bites, ami előjelesen csak valamivel több, mint 2 milliárdot tud tárolni. Ha összeadod az a és b változódat, akkor az összeg már 3 milliárd fölött van, tehát itt szerintem az összeadás fog túlcsordulni és nem az osztás.
-
kovisoft
őstag
válasz total90 #11905 üzenetére
A Mennyiseg nevű változó értékét nem növeled minden egyes pdf megtalálásakor, így amikor kiteszed a message box-ot, akkor 0-t mutat.
Ahol az MsgBox sorod van, oda a Mennyiseg változó növelését kellene tenni, az MsgBox sorodat pedig ki kellene tenni a ciklusok utánra. És én inicializálnám a kód elején a Mennyiseg-et 0-ra.[ Szerkesztve ]
-
kovisoft
őstag
válasz total90 #11907 üzenetére
Arra egyelőre nem jöttem még rá, hogy miért hagyja abba a számlálást egy db email után, de a Mennyiseg növelésénél mindig 1-et kellene hozzáadni, nem pedig oItem.Attachments.Count-ot, hiszen minden pdf-re 1-gyel akarod növelni a számlálót, nem annyival, amennyi akármilyen attachment-je van az adott email-nek:
Mennyiseg = Mennyiseg + 1
Szerk: Látom, közben megoldódott.
[ Szerkesztve ]
-
kovisoft
őstag
válasz BTminishop #12079 üzenetére
Előre szólok, hogy nagyon csúnya és nagyon nem hatákony megoldás következik:
Van az R1, R2 regiszterünk, R3=0, R4=0. Írsz egy ciklust, ami egyesével csökkenti (decrement) az R1-et, ezzel egyidőben egyesével növeli (increment) R3 és R4-et, amíg R1 el nem érte a 0-t. Ekkor R3 és R4-ben R1 van. Ezután kell egy másik ugyanilyen ciklus, ami ugyanazt csinálja, mint az első, csak most az R3-at dekrementálja, és az R1 és R4-et inkrementálja. Ennek a végén R4-ben már 2*(R1 kiinduló értéke) lesz, és R1 újra a kiinduló értéken van.
Na most ezt az egészet beágyazod egy külső ciklusba, ami az R2-n megy végig lefelé, minden egyes belső ciklus végrehajtásakor dekrementálva R2-t, amíg R2 is 0 nem lesz. Mivel igazából két belső ciklus van, ezért mindegyik végrehajtása előtt ellenőrizni kell, hogy elérte-e R2 a 0-t.
És a legvégén R4-ben ott lesz (R1 kiinduló értéke)*(R2 kiinduló értéke), miközben végig csak increment, decrement, feltételes jump utasításokat használtunk.
[ Szerkesztve ]
-
kovisoft
őstag
Valami ilyesmire gondoltam, a regiszter törlés is decrement-es ciklusokkal történik, ill. az R1=0 és R2=0 eset úgy van lekezelve, hogy először inkrementáljuk, majd rögtön dekrementáljuk a regisztert, és ha bármelyik 0, akkor rögtön vége:
CLEAR_R3:
DEC R3
JNZ CLEAR_R3
CLEAR_R4:
DEC R4
JNZ CLEAR_R4
INC R1
DEC R1
JZ END
INC R2
DEC R2
JZ END
LOOP1:
DEC R1
INC R3
INC R4
JNZ LOOP1
DEC R2
JZ END
LOOP2:
DEC R3
INC R1
INC R4
JNZ LOOP2
DEC R2
JZ END
JMP LOOP1
END:
; R4 = R1*R2[ Szerkesztve ]
-
kovisoft
őstag
válasz Chesterfield #12154 üzenetére
Amit írtál, az ugye N*N-es algoritmus, de meg lehet csinálni N*log(N) lépésben is:
(1) Lerendezed a listát úgy, hogy eltárolod az elemek eredeti indexeit is. Ez O(N*log(N)) lépés.
(2) Végigmész a rendezett listán a két végéről indulva, az első elemhez a végéről megkeresed azt, amivel az összegük már a keresett összeg alá esik, ekkor az alsóval lépkedsz felfelé, amíg az összegük túlnő a keresett összegen, aztán megint fentről lefelé, és így tovább. Ha bármikor megtaláltad a keresett összeget, akkor visszaadod az indexeket, különben null. Ez O(N) lépés.
Szerk: akkor ér véget az algoritmus, amikor a két végéről indulva összeérnek az elemek.
[ Szerkesztve ]
-
kovisoft
őstag
válasz kovisoft #12159 üzenetére
Kicsit még továbbgondoltam, és O(N) lépésben is meg lehet csinálni, ha használhatunk még plusz tárhelyet:
Végigmegyünk a tömbön és minden elemet (az indexével együtt) beteszünk egy hashtáblába. De mielőtt betesszük, megnézzük, hogy a keresett összeg mínusz az adott elem benne van-e már a hashtáblában. Ha igen, akkor találtunk egy párt, és visszaadjuk ezeknek az indexeit.
Annyi csúsztatás van a dologban, hogy O(1) komplexitást feltételeztem a hashtábla elérésében.
-
kovisoft
őstag
válasz smallmer #12257 üzenetére
A getElementsByTagName() a paraméterben megadott nevű node-oknak a listáját adja vissza, tehát ebből még közvetlenül nem kapod meg pl. a nevet. Először végig kell menni a kapott listán, és minden node-ra lekérni a megfelelő attribute értékét. Aztán hasonlóan a child node-okon is. Ha rákeresel a neten, rengeteg példát fogsz találni.
Vagy félreértelek és a namespace-szel (s:) van gondod?
-
kovisoft
őstag
válasz smallmer #12268 üzenetére
Szerintem a namespace-szel lesz a probléma. Az egyik lehetőség, hogy a local-name()-et használod, és nem foglalkozol a namespace-szel, pl. valahogy így:
xPath.evaluate("/*[local-name()='complexType']/*[local-name()='sequence']/*[local-name()='element']", ... ):
A másik lehetőség, hogy beállítod a namespace-t az XPath-ban, itt találsz rá példát.
-
kovisoft
őstag
válasz K1nG HuNp #12392 üzenetére
Okozhatja még inicializálatlan változó használata is vagy valamilyen random felülírás (pl. túlcímzés egy tömb írásakor). Ilyen esetben előfordulhat, hogy egyik rendszeren elszáll, egy másikon nem, sőt akár ugyanazon a rendszeren is egyszer elszáll, máskor meg nem. Nem tudsz bemásolni valami módosított kódot, ahol megváltoztatod pl. a változó- és függvényneveket?
-
kovisoft
őstag
válasz #83580928 #12430 üzenetére
Egy lehetséges megoldás (bár nem optimális, mert közel n-köbös, de nem volt szempont a gyorsaság):
Egy x változóval egyesével végigmész a karakterláncon. Minden egyes x pozícióra egy y változóval végigmész a rákövetkező karaktertől kezdve a fennmaradó pozíciókon. Egy h változóval addig mész, amíg az x és y kezdetű stringek karakterei megegyeznek, és amíg nincs átfedés (azaz x+h el nem éri az y-t). Tehát így h-ban lesz az aktuális ismétlődő szakasz hossza. Ha az így kapott h nagyobb, mint a korábban megjegyzett legnagyobb hossz, akkor megjegyzed a h hosszt és az x pozíciót egy-egy újabb változóban. Minden ciklus addig megy, amíg a string végére nem ér.
Ha ennél gyorsabb algoritmus kellene, akkor keress rá a "prefix tree"-re, egy ilyen struktúra felépítésével lényegesen gyorsabban lehet ismétlődéseket keresni egy stringben.
-
kovisoft
őstag
válasz Norbiiiiiii #12441 üzenetére
Nem az a baj, hogy ezeken a helyeken querySelector() helyett getElementById() kellene?
const ko_div = document.getElementById("k");
const papir_div = document.getElementById("p");
const ollo_div = document.getElementById("o");
-
kovisoft
őstag
válasz Norbiiiiiii #12444 üzenetére
Közben találtam még hibát: néhol userChoice.div van userChoice_div helyett.
-
kovisoft
őstag
Játsszunk egy kicsit, és a bejegyzésben cseréljük ki a foglalkozást egy másikra:
Sziasztok!
Teljesen nulláról szeretnék sebészetet tanulni és utána az EÜ szektorban elhelyezkedni. Tisztában vagyok vele hogy nem leszek nagy sebész ezzekkel a tanfolyamokkal. Nekem most elsődlegesen az lenne a célom, hogy ebben a szakmában tudjak elhelyezkedni és természetesen a későbbiekben tovább fejlődni.Nos mindezt munka mellett tenném, ezért olyan tanfolyamot keresek amit délután/este illtve hétvégén lehet elvégezni. Esetleg valaki tud ilyet?
Leginkább napközbeni tanfolyamokat találtam illetve szükséges volt mellé a gyakorlott angol nyelvtudás és/vagy piszkosul drága volt a képzés! A segítséget előre is köszönöm! -
kovisoft
őstag
válasz Norbiiiiiii #12466 üzenetére
Azért nem működik, mert a feltételben (if nem: ) azt vizsgálod, hogy a nem nevű változóban van-e valami, és persze van, hiszen a 'Ne hazudj!' szöveget tetted bele előtte. A feltételben a válasz nevű változóba kerülő értéket kellene hasonlítani, pl: if válasz=='nem': és persze ugyanígy az elif-ben is: elif válasz=='igen':
-
kovisoft
őstag
válasz I02S3F #12528 üzenetére
Linuxon kell dolgoznunk elég limitált rendszeren, igazán modern IDE nincs telepítve, de nekem nagyon kézre áll a vim, gyorsan tudok benne szöveget szerkeszteni. Hozzászoktam, hogy mindent billentyűzettel csinálok, sőt nemhogy az egérhez, de a kurrzornyilakhoz sem nyúlok ki, ezért nekem jobban bejön, mint egy IDE.
Új hozzászólás Aktív témák
● olvasd el a téma összefoglalót!
- XBOX ONE/PS4/PS5/XBOX SERIES/NINTENDO SWITCH konzolt vásárolnék!
- XBOX SERIES/PS4/PS5/XBOX ONE/NINTENDO SWITCH konzolt vásárolnék!
- PS5/PS4/XBOX ONE/XBOX SERIES/NINTENDO SWITCH konzolt vásárolnék!
- Új Dobozos Lenovo Ideapad Flex 5 x360 Érintős Ultrabook Óriás Tab 16" -40% Ryzen 5 5500U 16/512 QHD
- PS4/PS5/XBOX ONE/XBOX SERIES/NINTENDO SWITCH konzolt vásárolnék!