- Android alkalmazások - szoftver kibeszélő topik
- Profi EKG-s óra lett a Watch Fitből
- Honor 400 Pro - gép a képben
- Samsung Galaxy S21 és S21+ - húszra akartak lapot húzni
- Honor Magic7 Pro - kifinomult, költséges képalkotás
- Samsung Galaxy A54 - türelemjáték
- Milyen okostelefont vegyek?
- Telekom mobilszolgáltatások
- Apple iPhone 16 Pro - rutinvizsga
- India felől közelít egy 7550 mAh-s Redmi
-
Mobilarena
Új hozzászólás Aktív témák
-
kovisoft
őstag
válasz
btraven #20447 üzenetére
Sosem késő megtanulni, én legalább 15 évig "koca módon" gépeltem, aztán elkezdtem gyakorolni a 10 ujjal gépelést (talán a keybr.com-on, de rengeteg oktató weboldal, program, játék létezik), és immár szintén legalább 15 éve 10 ujjal gépelek. Ami sokat tud még lendíteni a sebességen, ha minél inkább az alap billentyűzet fölött tudod tartani a kezedet, nem nyúlkálsz ki sem az egérhez, sem a kurzorbillentyűkhöz. Persze én sokat használom a vim-et, ott könnyű ez megtenni, mert a kurzormozgatás is betűkkel történik. A Ctrl-t pedig nem az ujjammal nyomom le, hanem a kézfejem külső élével (ehhez a Ctrl a sarokban kell legyen).
-
kovisoft
őstag
válasz
pmonitor #20154 üzenetére
Az asm program az inputot kapja mondjuk az stdin-ről. Ez lehet a user által éppen begépelt adat, de lehet egy file-ba már előzetesen beírt adat is, aminek a tartalma pipe-olva van az asm program stdin-jébe. Tehát ezen logika alapján az első esetben nem rendezést végez az asm program, hiszen az adat még nem létezik a program indulásakor. A második esetben viszont rendezést végez, hiszen a rendezendő adat már létezik egy file-ban a diszken. Érdekes megközelítés lenne, főleg, hogy amúgy mindkét esetben maga a program ugyanazt csinálja.
-
kovisoft
őstag
válasz
pmonitor #20150 üzenetére
Természetesen ez is rendezés, mégpedig beszúrásos rendezés. Nincs olyan definíció, hogy egy rendezésnél a rendezendő lista vagy tömb teljesen ott kell legyen a memóriában, mielőtt elindulna a rendezési folyamat. Ellenkező esetben pl. nem beszélhetnénk rendezésről olyan esetben, amikor akkora fájlt kell rendezni, ami nem is fér el egyszerre a memóriában, azaz csak részenként, több menetben hajtható végre.
-
kovisoft
őstag
válasz
VikMorroHun #19672 üzenetére
Nem tudom, milyen nyelv ez, de nem lehetett a kiírás az if blokkon kívül?
-
kovisoft
őstag
válasz
siskad #19066 üzenetére
Általában ha folyamatos nyomvatartást akarsz detektálni, akkor a keydown és keyup eseményeket kell elkapni. OpenGL-ben: a glutKeyboardFunc()-nak megadod a keydown, a glutKeyboardUpFunc()-nak pedig a keyup eseményt lekezelő függvényedet, amelyekben figyeled és eltárolod az adott billentyűk állapotát. A glutIgnoreKeyRepeat()-tel ki tudod kapcsolni a repeat funkciót, azaz hogy ne jöjjenek be folyamatosan keyup/keydown események, amíg nyomva tartasz egy billentyűt. A main loopban pedig a billentyű állapotától függően módosítod az autó koordinátáit.
-
kovisoft
őstag
válasz
repvez #18695 üzenetére
Mások nevében nem tudok nyilatkozni, de nekem speciel fogalmam sincs, mi lehet a konkrét probléma nálad. Ha nekem kellene rájönnöm, hogy miért van fordítási hiba, és nem lenne egyből nyilvánvaló a hibaüzenetekből, akkor valószínűleg én is a már javasolt "móricka módszerrel" próbálkoznék. De ehhez nyilválvalóan szükséges némi alapismeret, amúgy csak ész nélkül lesznek kikommentezve dolgok, ami csak újabb fals hibákat fog eredményezni. Tehát vagy magad csinálod, de akkor előtte nem árt megszerezni legalább az alapvető alapismereteket, vagy mással csináltatod, vagy ha szerencséd van, akkor valaki más már belefutott ebbe a problémába (de eddig nem úgy tűnik).
Egyetértek a többiekkel, ha meg akarsz tanulni programozni, akkor az alapokkal és a legegyszerűbb dolgokkal kell elkezdeni.
-
kovisoft
őstag
válasz
pmonitor #16744 üzenetére
Ha ellenpélda kell, csak oldjuk meg az 5*x-2^32>x, 2*(5*x-2^32)<2^32 egyenlőtlenségeket, és máris találunk pl. egy x=1073741825 megoldást, aminél az 5*x túlcsordul és 1073741829 lesz, ami nagyobb x-nél, ennek 2-szerese már nem csordul túl. Tehát ha a végére teszünk még egy digitet és az input pl. 10737418250, akkor ennek a túlcsordulását nem fogja detektálni.
-
kovisoft
őstag
válasz
Netszemete #16738 üzenetére
Windows-on is?
-
kovisoft
őstag
válasz
pmonitor #16733 üzenetére
Ezzel szerintem megint az lesz a baj, mint a korábbiakkal, azaz hogy a túl nagy vagy túl kicsi számokra is visszaad valami látszólag értelmes integert. Persze most megint visszatérhetünk oda, hogy az atoi() mit is kell visszaadjon invalid inputra. De a kódban látom az igyekezetet, hogy észrevegye a túlcsordulást. Ugyanakkor ezt úgy próbálja megtenni, hogy azt nézi, hogy az aktuális részösszeg 10-zel szorozva negatív lesz-e. De mi van pl. a 999999999x esetén? Az utolsó előtti számjegynél a részösszeg 999999999, ez 10-zel szorozva ugyan túlcsordul, de a túlcsordult érték pozitív lesz. Tehát nem veszi észre a túlcsordulást és visszaad valami random integert.
-
kovisoft
őstag
válasz
Netszemete #16725 üzenetére
Lehet, hogy igazad van, én a legelső google találatot néztem, ott ezt írják:
"This function returns the converted integral number as an int value. If no valid conversion could be performed, it returns zero."
-
kovisoft
őstag
válasz
pmonitor #16718 üzenetére
Csak gyorsan átfutottam, úgyhogy nem biztos, hogy igazam van, de szerintem INT_MAX-nál nagyobb vagy INT_MIN-nél kisebb számokra továbbra is vissza tud adni valami szemetet. Az i 10-zel szorozgatva ilyenkor egyszercsak túlcsordul, aztán akármi is előállhat a ret-ben.
Az INT_MIN esetet most nem látom teljesen át, gondolom, kipróbáltad. A kódból nekem úgy tűnik, hogy INT_MIN esetén (mivel nemnegatív számokkal dolgozol, ezért) túlcsordul, de lehet, hogy aztán valahogy lekezeled ezt a túlcsordulást.
Azért az az
strcmp(arr, "2147483647")
eléggé feltételezi, hogy 32 bites intjeid vannak... -
kovisoft
őstag
válasz
pmonitor #16597 üzenetére
Nem látom sok értelmét annak, hogy egy általad pontosan nem ismert működésű függvény (legyen ez akár az sprintf, akár az itoa) futásidejét hasonlítgatod egy Assembly kódhoz, ami látszólag ugyanazt csinálja, majd ebből próbálsz meg következtetést levonni a C vs Assembly sebességére. Ha ilyen összehasonlítást akarsz tenni, akkor írj két függvényt (az egyiket C-ben, a másikat Assemblyben), amik ugyanazt csinálják, de úgy, hogy egyikben sincs plusz ismeretlen tartalmú függvényhívás. Például fordítsd vissza az Assembly kódodat C-re, fordítsd le sebességre optimalizálva, és ezeket hasonlítsd össze.
-
-
kovisoft
őstag
Itt most a sebességről volt szó, és lehet, hogy a C fordító nem használja olyan cizelláltan a carry flaget, mint ahogy lehetne, de cserébe jobban tudja, hogy milyen utasításokat milyen sorrendben rakjon egymás mögé, hogy minél több tudjon párhuzamosan végrehajtódni minél kevesebb órajel alatt. Nem azt mondom, hogy lehetetlen gyorsabb assembly kódot írni, mint amit egy C fordító gyárt, csak azt, hogy nagyon nehéz, és az is csak valamivel lesz gyorsabb, de messze nem a "min. 15 éves gépeken is pont úgy menne egy mai/2021-es játék, mint a mai erőműveken" kategória lesz.
-
kovisoft
őstag
válasz
Fire/SOUL/CD #16427 üzenetére
Ez egy ideje már nagyon nem így van. Gyakorlatilag szinte esélytelen gyorsabb kódot írni assemblyben, mint amilyet mondjuk egy normálisan optimalizáló C fordító fordít. Ehhez komoly mértékben kellene tudni ismerni és alkalmazni a modern CPU architektúrák finomságait (pl. milyen utasítás mivel tud párhuzamosan lefutni, milyen utasítás milyen körülmények között hány órajelet vesz igénybe, stb). Ezeket ugyanakkor beépítik a fordítóprogramokba.
-
kovisoft
őstag
válasz
kovisoft #16420 üzenetére
Vagy akár szimplán duplikálhatod a Bevitel, Vizsg, Tarol-t így: Bevitel1/Bevitel2, Vizsg1/Vizsg2, Tarol1/Tarol2, ahol az 1-esek az ertek1-gyel, a 2-esek az ertek2-vel dolgoznak. Az 1-est a szam1 menüből, a 2-est a szam2 menüből hívod meg. Ekkor is nyilván kell tartani, hogy megvan-e már az ertek1/ertek2, akkor végzett a program, ha mindkettő megvan.
-
kovisoft
őstag
válasz
Micsurin #16417 üzenetére
Megvan az eredeti programkód, ami 4 számjegyet kér be? Legjobb lenne ebből kiindulni.
Pl. csinálhatod azt, hogy a szam1 vagy szam2 menüponttól függően állítod be a di-ben az offset-et ertek1 vagy ertek2-re. Itt érdemes lehet pluszban még valahová (regiszterbe vagy memóriacímre) elmenteni ugyanezt, hogy később tudni lehessen, hogy melyik szám 4-es beolvasása folyik éppen.
A Bevitel/Vizsg kb. maradhat, ahogy eredetileg volt, mert úgyis csak annyit csinál, hogy bekér egy karaktert és ellenőrzi, majd beleteszi az al-be.
A Tarol-ban kell valami extra vizsgálat, hogy mindkét számból beolvasásra került-e már a 4+4 db karakter. Az eredeti kód gondolom csak annyit nézett, hogy a di elérte-e az ertek1+4-et. Itt lehetne használni a korábban elmentett címet, és a di-t az elmentett cím+4-gyel hasonlítani.
Plusz kell még valami, amiben eltárolod, hogy megvan-e már az ertek1 ill. megvan-e már az ertek2. Amíg valamelyik hiányzik, addig a Tarol végén visszaugrasz a Start-ra.
-
kovisoft
őstag
válasz
Micsurin #16413 üzenetére
Igen, az első int 16h előtt a 11. sorban hiányzik az ah nullázása (mármint ha itt is szeretnél karaktert beolvasni).
Milyen billentyűket nyomsz le és mit szeretnél, hogy történjen, mit kellene csináljon a program? Mert én úgy látom, hogy ha először nem 'a'-t nyomsz, akkor a Bevitel-re ugrik, onnan a Vizsg-re megy. Az 'a' utáni 'b' vizsgálatnak így már nincs is értelme, mert 'b' esetén már a vizsgálat előtt elugrott, ez a vizsgálat mindenképpen igaz lesz, tehát 'a' nyomásra Program_Vege-re ugrik.
-
kovisoft
őstag
válasz
pmonitor #16332 üzenetére
Engem pl. véglegesen kitiltottak a C programozás témából. Kérdezd meg, hogy érdekel. Leszarom!
vs
Tehát ami bajom van az az, hogy véglegesen tiltanak ki valakit.
-
kovisoft
őstag
Szerintem általános szabály nincs erre, legfeljebb egy adott 3d engine keretein belül. Pl. már az sem egyezményes, hogy egy adott rendszer bal vagy jobbkezes koordinátarendszert használ (azaz hogy ha x jobbra, y fel mutat, akkor z felém vagy az ellenkező irányba mutat). Ha jól tudom, kezdetben pl. a Direct3d balos, az OpenGL jobbos koordinátarendszert használt, de most már talán mindegyikben be lehet bármelyiket állítani.
Ha egy adott 3d object fájlformátumra vagy kíváncsi, az adott file leírásában biztosan megtalálható ez is. Itt pl. van egy rakat leírás különböző 3d fájlformátumokhoz. A wavefront obj fájlnál pl. ezt írja:
"Face elements use surface normals to indicate their orientation. If vertices are ordered counterclockwise around the face, both the face and the normal will point toward the viewer. If the vertex ordering is clockwise, both will point away from the viewer."
De pl. a LightWave Object file-ra pont a fordítottját írja:
"The vertex list for each polygon should begin at a convex vertex and proceed clockwise as seen from the visible side of the polygon"
-
kovisoft
őstag
válasz
sztanozs #15930 üzenetére
- Protokollprogramod van?
- Az az elsõdleges funkcióm. Ismerem az etikettet.
- Ilyen droid nem kell.
- Persze hogy nem. E vidéken nem.
- Olyan kell, amely érti a párologtatók bináris nyelvét.
- Az elsõ munkám emelõk bináris programozása volt.
- Tudsz bocceul?
- Hogyne. Második anyanyelvem.
- Jó, fogd be. Megveszem. -
kovisoft
őstag
válasz
pmonitor #15666 üzenetére
Mivel angolszász nyelvterületen más a terminológia. Ők - különféle jelzőket ráaggatva - több mindenre használják a permutation elnevezést, mi ezek egy részét szintén permutációnak, más részét (német mintára) variációnak hívjuk.
Ez talán a hivatalos angol elnevezés, de láttam már ezeket másképp is emlegetve:
ismétlés nélküli permutáció = permutations
ismétléses permutáció = permutations with repetitions
ismétlés nélküli variáció = k-permutations
ismétléses variáció = permutations with replacements
ismétlés nélküli kombináció = combinations
ismétléses kombináció = combinations with repetitions -
kovisoft
őstag
válasz
pmonitor #15603 üzenetére
Nem gondolnám off topicnak a témát, bármit meg lehet értelmesen vitatni, de ha valaki úgy kezdi, hogy ez meg az milyen sz@r, ezek meg azok milyen hülyék, stb, akkor azzal óhatatlanul belegázol valaki másnak a lelkébe, aztán nem győznek takarítani a modik.
Az adott feladat és a rendelkezésre álló erőforrások döntik el, hogy elfogadható-e ez a futásidő vagy nem. Sokszor elfogadható, máskor meg nem. Ha nem elfogadható, akkor valahogy gyorsítani kell a programot, és ennek többféle módja is lehetséges, nem csak a váltás egy másik programnyelvre, pláne ha több millió soros kódbázisról van szó. Első körben nyilván az ember az adott programnyelven az adott programrészt próbálja optimalizálni (pl. gyorsabb algoritmusok használata, heurisztikák beépítése, caching, párhuzamosítás, stb). Bizonyos esetekben lehet hardvert bővíteni vagy nagyobb teljesítményűre cserélni. Nyilván szóba jöhet a kódnak vagy egy részének egy másik programnyelvre való átültetése is, de mit csináljon pl. az, aki már eleve C-ben (vagy akár Assemblyben) oldotta meg a feladatot, és még így is lassú?
Aztán meg olyan is van, hogy ugyan tudnánk gyorsítani a kódon, de ez túl nagy munka lenne és sokba kerülne a cégnek vagy a megrendelőnek, és így máris elfogadhatóvá válik a hosszabb futásidő.
-
kovisoft
őstag
válasz
pmonitor #15586 üzenetére
Említetted az ismétléses permutációt, az előző kódomat egy kis módosítással alkalmassá tehetjük ezeknek az előállítására is. Csupán ki kell cserélni a < és > jeleket <= ill. >=-re, hogy a megegyező elemeket is átugorják a ciklusok. Valamint a tömb inicializálásakor fel kell sorolni ismétlésekkel együtt növekvő sorrendben az elemeket (ha mindegyik elem különböző, akkor visszakapjuk az ismétlés nélküli permutációt). Valahogy így:
int a[] = {1,1,2,2,2,3};
int n=6;
...
// megkeressuk, hol kezdodik az utolso monoton csokkeno reszsorozat
for (i=n-2; i>=0 && a[i]>=a[i+1]; i--);
...
// a csokkeno reszsorozat elotti elemet ki kell cserelnunk a reszsorozatban nagysag szerint rakovetkezovel
for (j=n-1; a[j]<=a[i]; j--);
...Ennek a sebességét sem teszteltem, nem tudom, hogyan viszonyul más módszerekhez.
-
kovisoft
őstag
válasz
pmonitor #15582 üzenetére
Még régebben írtam egy rövid függvényt, ami kiírja a N szám permutációit rendezett formában. Most sehol sem találom, de emlékeim alapján megpróbáltam újra lekódolni C-ben:
int a[50];
int n=5;
int i, j, temp;
// az 1 2 3 ... n sorozatbol indulunk ki
for (i=0; i<n; i++)
a[i] = i+1;
for (;;)
{
// kiirjuk az aktualis permutaciot
for (i=0; i<n; i++)
printf("%d ", a[i]);
printf("\n");
// megkeressuk, hol kezdodik az utolso monoton csokkeno reszsorozat
for (i=n-2; i>=0 && a[i]>a[i+1]; i--);
// ha a teljes sorozat monoton csokkeno, akkor vegeztunk
if (i < 0)
break;
// a csokkeno reszsorozat elotti elemet ki kell cserelnunk a reszsorozatban nagysag szerint rakovetkezovel
for (j=n-1; a[j]<a[i]; j--);
temp=a[i]; a[i]=a[j]; a[j]=temp;
// tovabbra is monoton csokkeno a reszsorozatunk, forditsuk meg, hogy monoton novekedo legyen
for (j=i+1; j<n+i-j; j++)
{
temp=a[j]; a[j]=a[n+i-j]; a[n+i-j]=temp;
}
}Nem teszteltem a sebességét, nem állítom, hogy ez a létező leggyorsabb módszer, de viszonylag rövid és egyszerű. Egyébként most, hogy jobban megnézem, ez majdnem az a módszer, mint amiben a quicksort van. Az igazat megvallva soha nem értettem, hogy miért kell itt meghívni egy quicksortot, hiszen amikor ide érünk, akkor a sorozat vége már rendezve van, csak éppen csökkenő sorrendben, tehát elég szimplán megfordítani.
-
kovisoft
őstag
Azt is csinálhatod, hogy az eredeti megoldásodat annyiban módosítod, hogy a bekertSor és bekertOszlop értékadást ismételgeted, ha olyan értékeket kaptál, hogy az adott helyen a jatekter-ben van már valami. Pl.:
int bekertSor;
int bekertOszlop;
do {
bekertSor = rnd.Next(0, 3);
bekertOszlop = rnd.Next(0, 3);
} while (jatekter[bekertSor, bekertOszlop] != '_');Itt lehetne ugye végtelen ciklus akkor, ha már minden mező ki van töltve (vagy ha annyira rossz a véletlenszám-generátor, hogy bizonyos kombinációt soha nem dob ki). A korrekt megoldáshoz ezt az esetet is le kellene kezelned valahogy (pl. megnézed, van-e még egyáltalán üres mező, vagy csak szimplán kilépsz kellően sok lépés után, stb.).
De mivel ez egy beadandó, és a legegyszerűbb megoldás elkészítése is gondot okoz, ezért szerintem a korábbi értekezést a tökéletes megoldásról most javarészt figyelmen kívül hagyhatod, feltéve, hogy nem hívod meg a függvényedet azután is, hogy már betelt a jatekter. De azért nem árt, ha tisztában vagy ennek a megoldásnak a buktatóival.
-
kovisoft
őstag
válasz
dabadab #15551 üzenetére
Erre a véletlenszám-generátorra gondolhatott.
-
kovisoft
őstag
válasz
Weareus #15534 üzenetére
Ha a címszavak mindig a sor elején vannak, és amennyiben több címszó van egy sorban, úgy mindig vesszővel vannak elválasztva, akkor a Domonkos által javasolt cserét lehet úgy módosítani, hogy csak az olyan szóköztől kezdje a törlést, amit nem előz meg egy vessző:
Find: ([^,]) .*$
Replace: \1 -
kovisoft
őstag
válasz
kovisoft #15529 üzenetére
Kis korrekció kell, mert így még bennmaradnak azok a sorok, amikben egyáltalán nincs címszó, és aztán nem lehet majd azoktól szétválasztani. Úgyhogy legelsőként az ilyen sorokat kellene törölni (na, ez egyre ocsmányabb kezd lenni
):
0. lépés:
Find: ^(?!.*?</?b>).*$
Replace: (üres string) -
kovisoft
őstag
válasz
Weareus #15527 üzenetére
Ha továbbra is Notepad++-ban akarod megoldani, akkor olyan reguláris kifejezést kell használni, ami pl. a </b> és <b> közötti részeket kitörli. Kérdés, hogy egy sorban lehet-e több címszó? Ha lehetséges, akkor szükség lehet több lépésre:
1. Lecserélni egy sortörésre egy adott soron belül az előző címszót záró </b> és a következő címszót kezdő <b> közötti akármit (lazy ? operátor kell, nehogy a köztes <b>-k is törölve legyenek):
Find: </b>.*?<b>
Replace: \n2. Ugyanaz, mint az előbb, csak a sor elejétől a kezdő <b>-ig, és sortörés sem kell:
Find: ^.*?<b>
Replace: (üres string)3. Ugyanaz, mint az előbb, csak az utolsó </b>-től a sor végéig, és itt sem kell sortörés:
Find: </b>.*?$
Replace: (üres string)Szerk: Feltételeztem, hogy a bold szöveg <b>címszó</b> formában van a file-ban, de természetesen más markuppal is hasonlóan megy a dolog.
-
kovisoft
őstag
válasz
Weareus #15520 üzenetére
A pdf értelmezésében nem nagyon tudok segíteni. Talán a Ghostscript tud olyat, hogy pdf-et valamilyen más szövegformátumra konvertál, esetleg olyanra is, ami megőrzi a betűtípust. A pdf-fel ugyanis az a baj, hogy nem egy markup language, és talán úgy lesz félkövér valami, hogy más (félkövér) font-tal kell az adott szövegrészt renderelni. Nincs benne olyan, mint mondjuk html-ben a <b>...</b>.
Ha előáll egy olyan szövegfájlod, amiben valamilyen szabályszerűség alapján el lehet dönteni, hogy mi tartozik a címszavak közé, akkor arra lehet kreálni egy reguláris kifejezést. A pdf részt viszont passzolom.
-
kovisoft
őstag
válasz
Weareus #15517 üzenetére
Természetesen
ezt is meg lehet oldani reguláris kifejezésekkel. Első lépésként minden sor elejére beteszünk jó sok szóközt. Pl:
Find: ^
Replace: (jó sok szóköz, nem írom ide, mert úgysem látszik)Második lépés: minden sornak csak az utolsó N db karakterét hagyjuk meg. Pl. N=20 esetén:
Find: ^.*(.{20})$
Replace: \1Ez az utolsó 20 karakterből csinálja az 1. számú csoportot, és csak ezt hagyja meg a sorban.
Ha a szólistában lennének a szavak végén kóbor whitespace karakterek, akkor lehet úgy módosítani, hogy azokat is szedje le.Ezután lehet rendezni a sorokat (Edit/Line Operations/Sort Lines Lexicographically). Majd a végén le lehet szedni a fölösleges szóközöket a szavak elejéről:
Find: ^ *
Replace: (üres string) -
kovisoft
őstag
válasz
Weareus #15514 üzenetére
Ha Notepad++-ban szeretnéd megoldani (vagy bármilyen más szövegszerkesztőben, ami kezel reguláris kifejezéseket), akkor először biztosan kell tudni, hogy milyen szabály alapján lehet megtalálni, hogy meddig tart a szerző és hol kezdődik a mű címe.
Az egyik lehetőség, ha - mint írtad - a kettő között van egy tabulátor. Ekkor egy olyan reguláris kifejezést kell használni, amiben a csoportokat tabulátorok választják el. Pl:
Find: ^([^\t]*)\t([^\t]*)\t(.*)$
Replace: \2\t\1\t\3ahol a Find kifejezés 3 csoportot hoz létre, az 1. a név, ez az első tabulátorig tart, a 2. a cím, ez a második tabulátorig tart, a 3. az utolsó zárójeles rész. A Replace kifejezés pedig felcseréli az 1. és 2. csoportot, és tabulátort tesz közéjük.
Ha nincsenek a mezők tabulátorral elválasztva (mindenhol csak szóközök vannak), akkor nem igazán lehet automatikusan megoldani, hiszen nem tudjuk, hogy az első 2 szó a név, utána kezdődik a cím, vagy az első 3 (vagy akár több) szó a név (mert többnevű a szerző). De ha mondjuk feltételezzük, hogy a legtöbb sor esetében 2 szóból áll a név, akkor arra egy olyan reguláris kifejezést lehet használni, amelyik az első 2 szót rakja bele az első csoportba. Pl:
Find: ^(\S+ \S+) (.*) (\([^()]*\))$
Replace: \2 \1 \3ahol a Find szintén 3 csoportot hoz létre, de most az 1. csoport az első két szó szóközökkel elválasztva, a 2. csoport minden, ami az utolsó zárójeles részig tart, a 3. csoport az utolsó zárójeles rész a sorvége előtt (ugyanis lehet még zárójel a címben is). A Replace itt is felcseréli az 1. és 2. csoportot, de szóközt teszt közéjük.
Sajnos ez utóbbi esetben végig kell majd nézni a szöveget, hogy hol van olyan sor, ahol a szerző(k) neve nem csupán 2 szó.
-
kovisoft
őstag
válasz
pmonitor #15375 üzenetére
Én örülök neki, hogy kiírja, rengetegszer vettem már hasznát. Általában lehet látni, hogy melyik könyvtárban időzik. Van, hogy az ember rájön, hogy ott nem is akart keresni, és lelövi a keresést. De arra is jó, hogy lássuk, hol jár a keresés, kb. mire számítsunk, meddig fog még tartani. Nem hiszem, hogy érdemben lassítana, nem ír ki minden egyes fájlnevet. Számomra sokkal gyűlöletesebb user interface a szimpla kerregő homokóra és társai, amikor semmi visszajelzésem nincs arról, hogy mit csinál a gép, és az várhatóan meddig fog még tartani.
-
kovisoft
őstag
Azt megfigyeltétek már, hogy a filmekben jelszavakat a legtöbb esetben karakterenként egyesével fejtik meg? Elindul egy keresés, és egymás után sorban megtalálja a jelszó karaktereit. Mintha bármi köze lenne a jelszó elejéből képzett hash-nek a teljes jelszóból képzett hash-hez.
-
-
kovisoft
őstag
válasz
FrozeN` #15325 üzenetére
Konkrétan a php regexet nem ismerem, inkább a vi félét, de az is hasonló, és a * (0 or more), + (1 or more) mellett szokott lenni ? (0 or 1) is. Ezzel meg lehetne talán oldani, pl:
/\^\^?([0-7])[0-7]?([^\^]+)/g
ahol:
\^ = ^
\^? = ^ vagy semmi
([0-7]) = számjegy (1 db, group-ban, ezt a group-ot lehet használni a számértéknek)
[0-7]? = számjegy vagy semmi -
kovisoft
őstag
-
kovisoft
őstag
válasz
Mechorganic #15287 üzenetére
Ha a sebesség számít, akkor lehet, hogy jobban jársz, ha C-ben írod meg a kódot, és rábízod az optimalizálást a fordítóra. A modern CPU-k bonyolult architektúrával rendelkeznek, kézzel nehéz olyan assembly kódot írni, ami gyorsabb kódot eredményezne annál, mint amit egy jó C compiler előállít sebességre optimalizált módban, mert ismerni kell, hogy mely utasítások milyen körülmények között tudnak párhuzamosan végrehajtódni, mikor mi mire vár, stb. Ha érdekel a téma, akkor ezen az oldalon találsz rengeteg infót az optimalizálással és a CPU architektúrákkal kapcsolatban.
-
kovisoft
őstag
válasz
kovisoft #15245 üzenetére
Közben látom, hogy elég lightos ez a wiki oldal. Talán többre mész ezzel az alapozóval., de itt is található még plusz infó.
-
kovisoft
őstag
válasz
Primary92 #15244 üzenetére
A Scratch színes-szagos, ezt szeretni szokták a gyerekek (a fiaim legalábbis szerették, de az még régen volt
). Gyors összefoglalónak nézd meg a magyar wiki oldalt is, talán jó lesz kiindulási alapnak. Tuti könyvet nem tudok, de lehet, hogy más itt a topikban tud segíteni.
-
kovisoft
őstag
válasz
Postas99 #15033 üzenetére
Hogyan is kapjuk az Y XOR (Y>>1) egy adott bitjét? Ez akkor lesz 1, ha az adott bit Y-ban eltér a tőle eggyel balra lévő bittől, mivel Y-t az eggyel jobbra shiftelt értékével XOR-oljuk. És akkor lesz az adott bit 0, ha az adott bit Y-ban ugyanaz, mint a tőle eggyel balra lévő bit.
Ha ezt megfordítjuk, és vesszük X egy bitjét, akkor ha ez 0, abban az esetben Y-ban ugyanezen a helyen lévő bit meg kell egyezzen a tőle balra lévővel.
Ha elindulunk X legfelső bitjétől, akkor ez alapján megállapíthatjuk Y legfelső bitjét, mert Y>>1-nek a legfelső bitje 0, ezzel XOR-oljuk Y-t. Tehát Y legfelső bitje ugyanaz lesz, mint X legfelső bitje. Innen haladhatunk lefelé: ha X következő bitje 0, akkor Y következő bitje megegyezik Y előző bitjével. Ha X következő bitje 1, akkor Y következő bitje ellenkezője Y előző bitjének.
-
kovisoft
őstag
Miért van külön always blokkokba téve a számolás, a maxos-t meghatározó ciklus, ill. a maxos-ből a prediction_-t meghatározó case? Ezek egymásra épülnek, nem egymás után kellene végrehajtódniuk? Nem igazán értek hozzá, úgyhogy bocs, ha hülyeséget írok, de az always blokkok nem párhuzamosan hajtódnak végre? Mert akkor a végeredmény meglesz már mielőtt ki lenne számolva (mint a Tanú c. filmben az ítélet
). Nem kellene az egészet egy nagy always blokkba tenni?
-
kovisoft
őstag
válasz
kovisoft #14876 üzenetére
Plusz az nem probléma, hogy az i változót két dologra is használod két különálló always blokkban? Az egyik blokkban lépteted 0-tól 6-ig a neuronháló szintjeinek végigszámolásához, a másik blokkban ciklusváltozónak használod. Nem kellene a második always-ben megvárni, amíg i==6 lesz?
-
kovisoft
őstag
A lenti kódrészben az i 25-től megy 34-ig, ezért a maxos 5-től 14-ig vehet fel értéket. A case-ben viszont 0-tól 9-ig vizsgálod. Ezt biztos, hogy így akartad? Nem maxos = (i - 25) kellene? És a max_ nem kap kezdőértéket, biztos, hogy alapból 0 az értéke és nem valami szemét van benne, ami miatt esetleg soha bele sem megy az if-be (és akkor a maxos-ba is valami szemét kerül)?
integer maxos;
always @(posedge clk)begin
for(i = 25; i < 35; i = i + 1)begin
if(neurons[i] > max_)
max_ = neurons[i];
maxos = (i - 20);
end
end
always @(posedge clk)
case(maxos)
0: prediction_ = 10'b1000000000;
1: prediction_ = 10'b0100000000;
2: prediction_ = 10'b0010000000;
3: prediction_ = 10'b0001000000;
4: prediction_ = 10'b0000100000;
5: prediction_ = 10'b0000010000;
6: prediction_ = 10'b0000001000;
7: prediction_ = 10'b0000000100;
8: prediction_ = 10'b0000000010;
9: prediction_ = 10'b0000000001;
endcase -
kovisoft
őstag
válasz
pomorski #14869 üzenetére
Én sem igazán értek a fortranhoz, de szerintem ott lehet a gond, hogy a reduction-ben a jk-t összegzed, de ez csak a reduction végén történik meg, közben pedig minden szálnak saját private jk példánya van, nem az lesz, hogy a jk egyesével növekedne, mint ahogy az egyszálas futásnál történik. Ugyanakkor később a ciklus magjában kihasználod, hogy mi a jk értéke.
Igazából nem tudom, mi lenne a megoldás, talán a jk-t kivenni a reduction-ből és valami ordered-del rávenni, hogy márpedig jó sorrendben kapja az értékeket. De igazából passz.
-
kovisoft
őstag
válasz
DrojDtroll #14203 üzenetére
ládapakolás
-
kovisoft
őstag
válasz
janos1988 #14151 üzenetére
Alapvetően az a probléma mindkét megoldásoddal, hogy az a feltétel, ahogyan vizsgálod az új szó kezdetét, az nem érvényes a string legvégén. A szöveg közepén amikor a szóköz jön, akkor az aktuális előtt lévő karakter a szó utolsó betűje, amikor viszont a szöveg utolsó karakteréhez értél, akkor ez nem igaz, mert ott az aktuális karakter a szó utolsó betűje.
Az első változatodban figyelmen kívül hagyod azt, hogy a szöveg végén nem lesz szóköz, tehát ott marad a "levegőben" még az utolsó szó, amivel nem csinálsz semmit. Ezt még valahogy le kellene kezelni a ciklus után.
A második változatodban valami ilyesmit csinálsz: a szónak akkor van vége, ha szóköz karakter jön vagy ha a szöveg utolsó karaktere jön. De ez nem igaz, mert így kimarad a legutolsó karakter. Ehelyett valami ilyesmit kell csinálnod: a szónak ez az utolsó karaktere, ha tart még tovább a szöveg és szóköz lesz a következő, vagy ha ez a szöveg utolsó karaktere. Az nem korrekt megoldás, hogy túlfuttatod a ciklust, legfeljebb akkor, ha gondoskodsz róla, hogy a túlfuttatott n+1. tömbelemre semmiképpen sem fogsz hivatkozni.
A többieknek: ez Pascal-szerűség, itt 1-től indul a ciklus.
-
kovisoft
őstag
válasz
janos1988 #14035 üzenetére
Ha mindenáron ki akarod hagyni az if-et, akkor ezt esetleg egy while ... do ciklussal tudnád megoldani úgy, hogy először (még a cikluson kívül) bekéred az a-t, majd jön a while ... do, ami az elején tesztel nemnulla a-ra (a while fordítva működik, mint az until), és a ciklus legvégén mindig újra bekéred az a-t.
-
kovisoft
őstag
válasz
janos1988 #14032 üzenetére
A második változatod az "a" változó beolvasása után nem ellenőrzi, hogy annak nulla-e az értéke, ezért 0-ra is végigcsinálja a ciklus belsejét és csak a végén az "until a=0" tesztel 0-ra. Az első változatban ott van egy "if a>0", emiatt nem csinál semmit 0-ra.
Számomra nem világos, hogy mit akartál csinálni. Olyan, mintha egy elöl tesztelő ciklusból akartál volna hátul tesztelőt csinálni úgy, hogy egyszer mindenképpen végrehajtódjon a ciklusmag. Viszont neked már eleve hátul tesztelő ciklusod van, ebből max egy még hátrébb tesztelő lesz így.
-
-
kovisoft
őstag
válasz
instantwater #13547 üzenetére
Amikor a matematikai alapokról van szó, akkor fölösleges kiragadni olyanokat, hogy "a képzeletbeli (sic!) számokat hogyan tudnánk felhasználni profittermelésre", mert ezeket azért oktatják, hogy meglegyen egy (jobb esetben) kerek matematikai rendszer, amire alapozva lehet majd specializáltan tovább fejlődni, kinek milyen irányban szükséges. Azon persze megy az örök vita, hogy ez mennyire sok-kevés, de talán abban a legtöbben egyetértenek, hogy valamilyen legalább minimális matematikai alapokra szükség van, pl. mindjárt ahhoz is, hogy "hogyan lehet gyorsabbá tenni a kódot".
-
kovisoft
őstag
Kis kiegészítés: az Algoritmus egy függvény lesz, a visszatérési értéknek (nem ad vissza semmit, tehát void) és a bemenő paramétereknek is kell típust definiálni, tömböt át tudsz adni pl. pointerként (*):
Algoritmus Osszefesules_2(N, X, M, Y, db, Z) ->
void Osszefesules_2(int N, int *X, int M, int *Y, int db, int *Z)
{
...
}Az Algoritmus ... Algoritmus, Ciklus ... Ciklus, Ha ... Ha típusú konstrukciókban a lezáró elem egy '}' lesz, és persze kell egy nyitó '{' is:
Ciklus feltétel ... Ciklus -> while (feltétel) { ... }
Ha feltétel akkor ... különben ... Ha -> if (feltétel) { ... } else { ... } -
kovisoft
őstag
Nyilván ízlések és pofonok, és én magam is leginkább rockzenét szeretek hallgatni szabadidőmben, de el nem tudom képzelni, hogy bármi ilyesmit hallgassak programozás közben. Egyszerűen elvonja a figyelmemet, nem tudok a problémára koncentrálni, pláne ha ének is van benne. Ehhez képest a metál és a rock talán a két leggyakrabban hallgatott kategória a felmérés szerint. Érdekes...
-
kovisoft
őstag
válasz
Szevam #12848 üzenetére
Én mondanék még egy módszert a gyakorláshoz: vannak oldalak, amik kisebb (de általában egyre nehezedő) feladatokat adnak a választott programnyelven, ezeket megoldva lehet gyakorolni a programozási technikákat. Ilyenek pl. Java vagy Python esetén a CodingBat, vagy tetszés szerinti programnyelven a Project Euler, de nyilván rengeteg egyéb hasonló létezik.
-
kovisoft
őstag
válasz
MATEO6600 #12715 üzenetére
Még néhány ötlet, bár valószínűleg már ezekre is gondoltál már:
(1) Amplitúdó tengelyen normalizáció, hogy a maximális kitérés mindig ugyanakkora legyen (persze csak a csúcsok helyének meghatározásához).
(2) Időtengelyen (ha a peak detection algoritmusod valamilyen ablakmérettel dolgozik): szintén fourier transzformációval meghatározni a karakterisztikus periódushosszt, és ehhez igazítani az ablakméretet.
(3) MP3 konverzióhoz hasonlóan szeletekre osztani az idősort, és egy-egy szeleten belül (naná hogy szintén fourier transzformációval
) frekvencia-összetevőkre bontani a mintát, a kis amplitúdójú összetevőket kihajítani, a maradékból visszaállított mintában talán könnyebb csúcsokat keresni.
Új hozzászólás Aktív témák
Hirdetés
● olvasd el a téma összefoglalót!
- ÁRGARANCIA! Épített KomPhone Ryzen 5 4500 16/32/64GB RAM RTX 3060 12GB GAMER PC termékbeszámítással
- PlayStation Network Card (PSN) ajándékkártyák, egyenesen a Sony-tól!
- Bomba ár! Lenovo ThinkPad T490s - i5-8GEN I 16GB I 512SSD I 14" FHD I Cam I W11 I Gari!
- AKCIÓ! ASRock H310CM i3 9100F 8GB DDR4 240GB SSD 1TB HDD GTX 1060 3GB AeroCool Strike-X 500W
- Bomba ár! Lenovo ThinkPad T490s - i7-8GEN I 16GB I 256SSD I 14" WQHD HDR I Cam I W11 I Gari!
Állásajánlatok
Cég: PC Trade Systems Kft.
Város: Szeged
Cég: Promenade Publishing House Kft.
Város: Budapest