- Samsung Galaxy A54 - türelemjáték
- Xiaomi 13T és 13T Pro - nincs tétlenkedés
- iPhone topik
- Apple iPhone 16 Pro - rutinvizsga
- Honor Magic5 Pro - kamerák bűvöletében
- Samsung Galaxy S23 és S23+ - ami belül van, az számít igazán
- Keretmentesít a Galaxy S25 FE
- Apple Watch Ultra - első nekifutás
- Honor 200 - kétszázért pont jó lenne
- Kiborult a Nothing Phone (3) pletykakosara
Új hozzászólás Aktív témák
-
válasz
EQMontoya #2760 üzenetére
Na jó, csak azt kellene csinálnom, hogy az alábbi strukturában van egymás alatt rengeteg, nagy mennyiségű adat:
1 2 3 4 5
6 7 8 9 10
11 12 13 14 1516 17 18 .......
.....................
..........................................
....................
....................Na és ezt kellene az elpőbb felvázolt módon egymás mellé pakolgatni, hogy így nézzen ki:
1 2 3 4 5 16 17 18 ....... .....................
6 7 8 9 10 ..................... .....................
11 12 13 14 15 ..................... .....................Szóval akkor marad a fapados megoldásom?
-
Na még egy kis tanácsot szeretnék kérni.
Ugye fájlbaírás során egy olyasmit szeretnék, hogy a belolvasott adatokat először egy ehhez hasonló formátumban írom ki:1 2 3 4 5
6 7 8 9 10
11 12 13 14 15Az ezután kezdődőeket viszont rendre az első/második stb. sor után:
1 2 3 4 5 16 17 18 19 20
6 7 8 9 10 21 22 23 24 25
11 12 13 14 15A kiírásnál \n-el törtem a sort. Kinéztem, hogy ofstream::seekp és ostream::tellp függvényekre lenne szükségem. A probléma, hogy miután a seekp-vel visszaállítom a kurzort az 5-ös után, az nem kezdi el az 5-ös után írni a számokat, hanem amint kiderült: 1 2 3 4 5 \n 6 7 8 9 10 \n 6 7 8 9 10 szerűen látja a fájlt és ha visszaállítom az 5-ös mögé, akkor egyszerűen felülírja az utána következőket.
Most az jutott eszembe, hogy akkor, ha tudom ,hogy egy sor milyen hosszú lesz, akkor annyi töltelék karaktert beszúrok, hogy majd azt írja felül, de ez elég fapados megoldás.
Nem tudtok valami elegánsabb megoldást erre, vagy nincs valami célfüggvény vagy közismert algoritmus? Nem nagyon találtam semmit :/
Köszi -
A cél az lett volna, hogy a megadott input textfájlhoz hasonló formátumból a whitespace karakterekkel elválasztott string-eket szedje ki egyenként, és azokkal külön operáljon, utána mehet tovább a következőre.
Most string-gel ezt meg tudom csinálni egyszerűen? Van ilyen parancs hozzá? Vagy csak a getline? Ez utóbbi esetben akkor olvassam be soronként és strtok-kal tördeljem fel és úgy vegyem külön a karakterláncokat?
-
Sziasztok!
Kicsit kezd kiégni az agyam, ezért gondoltam kérek egy gyors segítséget.
A problémám, hogy valamiért nem akar működni bizonyos körülmények között a cout string-en. Tehát beolvasok egy fájlból string objektumba stringeket, utána a cout nem adja vissza. Bár ennél lehet kicsit komplexebb a probléma. Mutatom a kód részletet, amit kivettem az eredetiből tesztelésre:A testing.txt tartalma:
thr gbe jtk
fff thr lopMi lehet a baj? Falra mászok már tőle, egyszerűen nem értem, hogy miért csinál úgy, mnitha semmit nem olvasna be a fájlból....
-
Sztem végül mindenki talált jobb elfoglaltságot. Amit meg tudok érteni
-
Nem, semmi ilyesmi.
De ha valaki nagyon unatkozik és érdekli, akkor feltöltöttem a kódot a codeviewer-en.
MC_func.cpp //függvény definíciók
MC_func.h //header file
A program úgy működik, hogy a megadott helyzetű pontforrás a megadott paraméterű hengeres detektorba lövi ki a fotonokat. Izotróp módon, de úgy van megcsinálva a hatékonyság érdekében, hogy ne mindenfelé indítsa őket, csak a detektor köré írható gömb irányába.
Ezután a fotonok nagy része eltalálja a detektort és jó eséllyel valamilyen kölcsönhatásba lép az anyagával és lead valami energiát.a main 93. sorában az "sz2" számolja azokat a fotonokat, amik eltalálták a detektort. Amíg az el nem éri a megadott számot, addig a ciklus ismétlődik. Ha egy adott foton a detektorban van, akkor amíg benne van, vagy amíg van energiája, addig pedig a 3 kölcsönhatás típus közül mennek a sorsolások és azok ismétlődnek.
-
-
válasz
proof88 #2621 üzenetére
Na átírtam a függvényeket, hogy referenciaként kapják meg a vectorokat. Ez megoldotta a problémát, most már csak kb. másfélszer lassabb a függvényekbe szedett kód a spagettinél. Ezt már be lehet szerintem tudni a függvényhívás idejének. Valójában észrevettem, hogy a vectorok nagy részét már így is referenciaként kapja és nem úgy, ahogy szombaton mutattam. Erre úgy emlékszem azért volt szükség, mert ha értékként adtam át, akkor csak a függvényen belül létrehozott másolatban változtatta meg az értéket, de az eredetit nem módosította. Most átírtam referenciára azokat a vectorokat is, amelyeknek nem kell az értékét változtatni, ezért előzőleg nem írtam át őket referenciára.
Egyébként valóban azért adtam át mindent pointerként a függvényeknek, mert én C-t tanultam és nem C++ -t. Bár mostanában már C++ -t használok, és próbálom kihasználni az előnyeit a C-hez képest, de sajnos én még mindig C-ben írom a programokat C++ -os beütéssel. Próbálom megtanulni minél jobban a C++ -ban való kódolást.
Egyébként kivettem a pointereket és referenciaként adtam át őket a függvénynek, de ez a sebességen már nem változtatott.
Kösz a segítséget -
Rendben, hétfőn át fogom írni akkor. Amikor azt kerestem a neten, hogy hogy lehet vector-t átadni függvénynek akkor ezt a két módszert láttam. Már kicsit rozsdás a C++ tudásom, de próbálom feleleveníteni. Nem programozó vagyok, hanem fizikus, aztán van, hogy hosszabb ideig nem kell programozgatni és ilyenkor feledésbe merül pár dolog.
(#2619) proof88
Az *E1 és az *sz_E nem tömbökre mutató pointerek. Az E1 a foton aktuális energiája, az sz_E meg egyszerűen azt számolja, hogy hányszor lépett kölcsönhatásba (azaz hányszor történt energialeadás). Ugye a program úgy működik, hogy mindig indít egy adott energiájú fotont, az pedig a detektorba belépve kölcsönhatásba lép a detektor anyagával, szóródik, elnyelődik stb. és egy ilyen kölcsönhatás után veszít az energiájábólKöszönöm még egyszer a segítségetek.
-
válasz
proof88 #2615 üzenetére
Sajnos most hétvégén nem érem el a végleges verziót, de a függvény paraméterek nem változtak. Azok így néznek ki:
void InTheInfiniteTube(double *v1, double *v2, double *v3, int *sz2, double *xbe, double *ybe, double *zbe)
void AroundTheCylinder(double *v1, double *v2, double *v3, double xy_det_tav, double hatarszog, int *sz2, double *xbe, double *ybe, double *zbe)
void FreePath(double *v1, double *v2, double *v3, vector<vector<double>> hkm, vector<double> hkm_E, double *xbe, double *ybe, double *zbe, double *E1)
void ComptonScatter(double *v1, double *v2, double *v3, double *E1, int *sz_E, vector<double> E_tarolo)
void PhotoEffect(double *E1, int *sz_E, vector<double> E_tarolo)
void PairProduction(double *xbe, double *ybe, double *zbe, double *v1, double *v2, double *v3, double *E1, int *sz_E, vector<double> E_tarolo, vector<double> hkm_E, vector<vector<double>> hkm)
Végülis túlnyomórészt pointereket adok át nekik. Meg a vector-okat, de azok is pointerként működnek, mint a tömbök, nem? vagy legalábbis nem hiszem, hogy az okozná a problémát
-
válasz
proof88 #2613 üzenetére
Rendben, köszi!
Még egy kérdést engedjetek meg. Ez a programom eredetileg egy nagy spagetti kód volt, egy forrás fájllal és kb. 400 sorral. Mivel egy csomó ismétlődő rész volt benne, ezért egyértelműen adta magát a dolog, hogy egyes részeiből függvényt csináljak. De ekkor az a teljesen váratlan és megdöbbentő dolog történt, hogy a kód kb. 50-ed (!) részére lassult. Ami eddig 2-3 mp-es futás volt, az most 2 perc. És gyakorlatilag semmi mást nem csináltam, csak az ömlesztett kódot kicsit rendeztem azzal, hogy függvényt csináltam egyes részeiből. Kérdésem, hogy ez a függvény hívás tényleg ennyire időigényes dolog, hogy ennyire belassítja a futást?Egyébként először az eredeti forrás fájlba tettem a függvényeket is, a main() előtt definiálva. A futási sebességen nem változtatott, hogy utána a függvényeket külön forrásfáljban definiáltam és header-ben deklaráltam. A program egyébként egy NaI szcintillációs detektort szimulál fotonok detektálása közben. Mivel ez egy elég jól párhuzamosítható dolog, ezért az eredeti célom az volt, hogy CUDA-ra írom át a kódot, de lesokkolt, hogy mennyire belassult attól, hogy függvényekbe szedtem. Így szinte nincs is értelme átírni GPU-ra, mert még ha 10x-esére is gyorsul, akkor is jóval lassabb lesz, mint a spagetti-kód.
-
Sziasztok!
Lenne egy kérdésem, mert már megőrít a dolog. A programomban van két .cpp fájl, meg egy header. A header fájlban van definiálva 2 struktúra meg 7 függvény. A függvények közül többnek is van vector típusú argumentuma. A fordító viszont állandóan panaszkodik, hogy: error C2061: syntax error: identifier 'vector'Már beletettem a header-be, hogy #include <vector>, de ez sem segített. Valaki tudna segíteni?
Köszi!
Új hozzászólás Aktív témák
Hirdetés
● ha kódot szúrsz be, használd a PROGRAMKÓD formázási funkciót!
- Csere-Beszámítás! Lenovo Ideapad 3 Gamer notebook.I5 10300H / 16GB DDR4 / GTX 1650 / 250SSD +500HDD
- HP Victus 16-d10008tx 16.1" FHD IPS i7-12700 RTX 3060 16GB 512GB NVMe gar
- Lenovo Legion 5 Pro Gamer Laptop 2év garanciával (i7 13700HX, RTX 4060)
- IPhone 11 Pro max 64GB megkímélt új emelt kapacitású akku!
- Apple Pencil Pro bontatlan 1 év Apple jótállás
Állásajánlatok
Cég: CAMERA-PRO Hungary Kft
Város: Budapest
Cég: Promenade Publishing House Kft.
Város: Budapest