Ú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
● ha kódot szúrsz be, használd a PROGRAMKÓD formázási funkciót!
- Lenovo ThinkPad X13 Gen 4 i5-1345U 16GB DDR5 512GB SSD FHD+ Garancia 2027.11.10-ig
- HP EliteBook 640 G10 i5-1335U 16GB RAM 256GB SSD FHD Garancia
- Lenovo ThinkPad X13 Gen 2 i5-1145G7 16GB RAM 256GB SSD FHD+ gari.l 4g modem
- MSI Thin GF63 12UDX 15.6" FHD IPS i5-12450H RTX 3050 16GB 512GB NVMe magyar vbill gar
- Dell Precision 5570! 4K Touch / i7-12800H / RTX A2000 / 32GB DDR5 / 512GB NVMe! BeszámítOK
- Intel Core i5 3470 confidential Ivy bridge Quad Core
- REFURBISHED és ÚJ - Lenovo ThinkPad 40AY Universal USB-C Dock
- Bomba ár! Dell Latitude 5491 - i7-8850H I 16GB I 512GB SSD I 14" FHD I HDMI I Cam I W10 I Gari!
- HIBÁTLAN iPhone 13 mini 256GB Midnight -1 ÉV GARANCIA - Kártyafüggetlen, MS4078, 100% Akkumulátor
- BESZÁMÍTÁS! Dell Latitude 3530 üzleti notebook - i5 1235U 8GB DDR4 512GB SSD Intel Iris Xe WIN11
Állásajánlatok
Cég: BroadBit Hungary Kft.
Város: Budakeszi
Cég: ATW Internet Kft.
Város: Budapest





