C++ programozás - Szoftverfejlesztés fórum

üzenetek

hozzászólások


MiniXD55
(tag)

Beszéltem a tanárommal, aki tanítja nekem ezt az egészet, jelenleg úgy fogalmazott hogy ilyen rövid időn belül, amely rendelkezésünkre áll, a vizsgáig nem gondolja, hogy szükséges.
Ez a kód amit beküldtem, codeblocks-ban teljesen szuperül lefut, a vs amin futtatnám egy teljesen szűz vs.


CPT.Pirk
(Jómunkásember)
Blog

Sziasztok,

Arduino alatt működő, stewart platform koordináta transzformáló kód részletet szeretnék átvinni az őt irányító Raspberry-re, mert egyszerűen nem végez időben a gyenge kis Arduino a számításokkal.

Az Rpi-n fut a szerkezet vezérlő programja, ahová ebben a formában beépítettem: https://pastebin.com/PHkg33Xh

Nincs fordítási hibám, de mikor ehhez a sorhoz ér a kód futása, akkor elszáll a program hibaüzi nélkül:
platEnd[motor].x = rotationMatrix[0] * (platStart[motor].x - poi.x) + rotationMatrix[1] * (platStart[motor].y - poi.y) + rotationMatrix[2] * (platStart[motor].z - poi.z) + x + (platStart[motor].x - poi.x);
Akkor is, ha csak ennyi van ott: platEnd[motor].x = rotationMatrix[0];
A baloldali rész az int16, az egyenlőség jobb oldalán float van.

Próbáltam castolni igy, de elhal így is: platEnd[motor].x = static_cast<int16_t>rotationMatrix[0];
Viszont ha kézzel odaírok egy platEnd[motor].x = 12,3; -at, akkor azzal semmi baja.


dabadab
(titán)
Blog

A 12,3 az sima int, konkrétan 3 :)
A 12.3 (ponttal) a float.
Ha floor()-ral gyártasz intet floatból, az jó? a


CPT.Pirk
(Jómunkásember)
Blog

Hű, szerintem .-al írtam, de ez most jó kérdés.

Egyébként a google-ös találatok miszerint static_cast<int16_t> -al kellene castolni float-ból int-be, az stimmel? Ezt a floor() dolgot megpróbálom holnap, csak közben lebetegedtem kicsit, a cucc meg bent van így távgyógyítás lesz... :)

[ Szerkesztve ]


MiniXD55
(tag)

Mint kiedrült, ennek a dll a pótlásával sikerült megbírkoznom, de onnan jött a következő menet, jelenleg ebbe a hibába ütközöm:


MiniXD55
(tag)

Ha kikommentelem a bool utáni rész a program teljesen szuperül lefut.


kispx
(addikt)

Amit használni szeretnél, azt úgy hívják, hogy Variable Length Array (VLA). Az MSVC++ nem támogatja.
Használhatsz helyette dinamikusan allokált tömböt: bool* ultetve = new bool[darab];
Vagy az std::vector osztályt

[ Szerkesztve ]


MiniXD55
(tag)

bool ultetve[darab];
for (int i = 0; i < darab; i++) ultetve[i] = false; // kezdetben nincs egyikse ültetve
int beultetes = 0;
int felajanlasok = 0;
int seged5;
int i = 0;
for (i = 0; i < darab; i++)
{
//cout << kezdet[i] << " " << veg[i] << endl;
if (kezdet[i] < veg[i]) seged5 = 0;
else seged5 = kezdet[i];
//cout << seged5 << endl;
if (veg[i] >= kezdet[i])
for (int l = kezdet[i]; l < veg[i] + 1; l++)
{
felajanlasok++;
//cout << kezdet[i];// pl 1-3 esetén csak kkettőig futna le, mivel 3 nem kisebb mint 3
ultetve[i - 1] = true;
}
}
for (int i = 0; i < darab; i++) cout << ultetve[i] << " " ;
for (int i = 0; i < darab; i++) if (ultetve[i]) beultetes++;
{
//cout << beultetes;
if (darab == beultetes) cout << "Minden agyas beültetésére van jelentkezo.";
else if (felajanlasok >= darab) cout << "Atszervezessel megoldhato a beultetes.";
else cout << "A beultetes nem oldhato meg.";
}
string virag_szine[agyasokszama] = {""};
int virag_sorszam[agyasokszama] = { 0 };
for (int i = 0; i < agyasokszama; i++)
{
virag_szine[i] = "#";
virag_sorszam[i] = 0;
}
for (int m = 0; m < darab; i++)
{
for (int n = 0; n < agyasokszama; i++)
{
if (virag_szine[n] == "#")
{
if (n >= kezdet[m])
{
virag_szine[n] = szin[m];
virag_sorszam[n] = m + 1;
}
}
}
}
for (int i = 0; i < darab; i++)
{
cout << virag_szine[i] << " " << virag_sorszam << endl;
}
return 0;
}

[ Szerkesztve ]


MiniXD55
(tag)

Értem, de nem csak a bool-al van problémája hanem int-ekkel is


kispx
(addikt)

string virag_szine[agyasokszama] = {""};
int virag_sorszam[agyasokszama] = { 0 };

Ezt a két sor is át kell írni std:vectorra vagy dinamikusan allokált tömbre.
Ha átvan, akkor milyen hibaüzenetet ír ki a fordító?


MiniXD55
(tag)

Teljesen suta vagyok a vektorokkal kapcsolatban, így gondoltad?


kispx
(addikt)

vector<string> virag_szine(agyasokszama, "");
vector<int> virag_sorszam(agyasokszama, 0);

De linkelek egy tutorialt hozzá: https://www.codeguru.com/cplusplus/c-tutorial-a-beginners-guide-to-stdvector-part-1/ [link] , mert az eszközöket ismerete nélkül nem lehet programot írni.


cog777
(senior tag)

cmake kerdesem van. Egy eleg nagy projektben (600 cmakefiles) kell egy uj ficsort keszitenem. A problema a korkoros dependency.
Szoval protokol modul hasznalta a driver-t. Driver object-kent volt, protocol static-kent forditva.
Most az uj ficsor a driver-bol hasznal protokolt. Igy cmake kiirta hogy ez biza cyclic dependency es legalabb 1 target nem static.Valoban, driver nem az.
Nosza allittsuk at object-rol static-ra.
Lefordul, orom bodotta.
Vazz, a ficsor kodja lefordul, latom a logban de nem linkelodik ossze es nem is tudok breakpoint-ot tenni ra. Mikor objectkent volt linkelve akkor breakpoint mukodott.

Persze, megallapitottuk hogy ezt a reszt ujra kellene strukturalni, de most 1 ideiglenes megoldast kell csinalnom.

Megkoszonom ha valaki hozza tudna szolni a szituaciohoz es adni tanacsot :R


cog777
(senior tag)

Szerencsere dobtuk az otletet. :C


pocokxx
(Közösségépítő)
Blog

Sziasztok!

Egy-két amatőr kérdéssel fárasztanám a társaságot. Codeblocks-sal proóbálkozom.
A struct változót miért kell az int main() elé írni?
A struct mellé tömböt is deklarálni kell const paranccsal, aminek kötelező másik nevet adni?


dabadab
(titán)
Blog

Hajjaj :)

A struct változót

A struct az nem változó, hanem egy típus leírása, pont úgy, ahogy a class is. Az ott csak a típusleírás, abból önmagában még nem keletkezik semmiféle változó.

Nálad valószínűleg azért kell odaraknod, mert a C++ fordító a fordítási egységben fentről lefele halad és ha azelőtt használsz egy típust, mielőtt megmondtad volna, hogy mi az, akkor az fordítási hibát okoz.

A struct mellé tömböt is deklarálni kell const paranccsal, aminek kötelező másik nevet adni?

A const nem parancs, hanem kulcsszó és a const tulajdonságot adja hozzá az adott deklarációhoz/definícióhoz (hogy az konkrétan mit jelent, az attól függ, hogy konkrétan mihez adod hozzá, változóknál pl. azt, hogy a kezdeti értékadáson túl nem lehet megváltoztatni az értéküket).

Egyébként amit ott csinálsz, az az, hogy létrehozod ténylegesen egy változót (amit a struct ugye nem csinál meg). Ennek nem kell feltétlenül tömbnek lennie (sőt, C++-ben a C stílusú tömbök leginkább kerülendők, mert csak a baj van velük), lehet egy sima változó is vagy valamilyen STL-es container, akármi.

Nem kötelező másik nevet adni, mert a C++ fordító van annyira okos, hogy tudja, hogy hol számíthat változó- és hol típusnévre, de nagyon érdemes, hogy ne legyen belőle keveredés (az elég bevett konvenció, hogy a típusnevek nagybetűvel kezdődnek, a változók meg kisbetűvel).

De a kérdéseid alapján az látszik, hogy az alapok nagyon hiányoznak nálad, érdemes lenne legalább az elején elolvasni valami bevezető anyagot, pl. akár ezt (ez már csak azért is jó, mert ott a weboldalon a c++ fordító is, azzal nem kell külön vacakolni az elején, amikor még amúgy is minden nagyon zavaros).


pocokxx
(Közösségépítő)
Blog

Igen, tényleg nagyon hiányoznak az alapok, de tényleg szeretném megérteni...
Ilyesmi sorokról beszélek:

struct NEV {
string keresztnev;
string csaladnév;
}
...
const int MAXN=100
string NEV NEVEK [MAXN+1]

Beolvasásnál meg

cout << "Mennyi nev lesz?" ;
cin >> n;
for (i=1; i<=n; i++) {
cout << i << ". keresztnev: ";
cin Nevek[i].keresztnev;
cout << i << ". csaladnev:";
cin Nevek[i].csaladnev";}

Ez így jó, vagy nagyon zagyva?

[ Szerkesztve ]


cog777
(senior tag)

Itt van egy lehetseges megoldas: [link]
Nagyon ajanlom az online szerkesztoket, meg debuggolni is lehet bennuk. Neha en is itt nezek meg ezt azt, amit regen hasznaltam es elfelejtettem.


dabadab
(titán)
Blog

Azért javasoltam, hogy olvass el valamit, ami megadja az alapokat.

Ez, amit írtál, tulajdonképpen szintaktiailag helyes (a struct }-ja után mondjuk hiányzik egy pontosvessző meg a két utolsó cin után hiányzik a >>), meg lefordul, meg azt is csinálja, amit szeretnél (kivéve, ha pl. a user százegynél több nevet akar megadni (mert valamiért nem a MAX_NEVEK számára foglalsz tömböt, hanem annál eggyel többre)) - csak hát így nem írunk C++-t.

A "const" az inkább "constexpr" kellene, hogy legyen, mert az jól láthatóan fordítási idejű konstans, de nincs is rá szükség, mert a C stílusú tömbök azok pont ugyanannyira nem valók C++ kódba, mint a goto, tessék az STL-t használni, a vector<string> tökéletes ide.

Na, és ezek miatt kellene valami rendes anyag, amit használsz és kifejezetten friss, up-to-date kell (amit csinálsz az ránézésre valami magyar egyetemi jegyzetből lehet, mert a negyedévszázados C++ fejlesztői karrierem során csak ott találkoztam azzal, hogy stdin-ről olvasnak be dolgokat :DDD ), mert a C++ dinamikusan fejlődő nyelv.


pocokxx
(Közösségépítő)
Blog

Igen, valóban egyetemi jegyzet alapján dolgozom, és próbálom ezt megérteni. Igazából csak ebben a félévben kerül(t) elő, gondolom ezért foglalkozunk csak így vele.
De akkor jöjjön még egy ilyen fapados kérdés:

A kiválasztás (eldöntés + keresés) típusalgoritmusnál használhatok for ciklust simán bool nélkül?
Mondjuk, ha el kell döntenem, hogy van-e a bevitt adatok között negatív szám, akkor ez az eljárás miért hoz fals eredményt?

for (i=1; i <=n && bevittadatok[i]>=0; i++);
{ if (bevittadatok[i] < 0)
{ elsonegativindexe = i; }
}
cout << elsonegativindexe;


dabadab
(titán)
Blog

gondolom ezért foglalkozunk csak így vele.

Hát... hány éves vagy, királyfi?... :(

A kiválasztás (eldöntés + keresés) típusalgoritmusnál használhatok for ciklust simán bool nélkül?

Szerintem nem értem a kérdést.
A mellékelt kódban nem látszik, hogy az elsonegativindexe* hogyan és hol lett inicializáva (már ha egyáltalán), márpedig az az értéke nem fog változni, mert ha a bevittadatok[i]* negatív, akkor a for a ciklusfeltétel miatt pont azelőtt megszakítja a ciklust, hogy értéket adnál neki.

*: kódban ne használj magyar változóneveket és kommenteket. soha. tényleg soha.

[ Szerkesztve ]


pocokxx
(Közösségépítő)
Blog

Csak egy kódrészletet adtam; a deklarásokat most lespóroltam az elejéről... Azért adtam most ilyen nevet, hogy jobban átlátható legyen, hogy mit szeretnék kapni eredményképpen.
A linkelt feladatban mondjuk kérdés, hogy van-e negatív szám az adott halmazban, és ha van, akkor hányadik a sorban?
A "királyfi" 38, de most jutott el oda, hogy talán érdemes lenne foglalkozni kicsit mélyebben ezekkel a felszínkapargatás helyett...


Tomi_78
(tag)

Sziasztok!

Van itt valaki, aki Code Blocks-t használ wxWidgets-szel C++ programozáshoz?
Azért kérdezem, mert én megpróbáltam volna ezt, és ehhez fel is telepítettem mindkettőt a számítógépemre (CB 20.03 és wxWidgets 3.2.4-et), megcsináltam a beállításokat, indítás után be is jön a GUI, de amikor futtatnám a programomat, mindig az
ld.exe cannot find -lwxmsw31ud
hibaüzenetet mutatja.
Mit jelent ez és hogyan javítható ki?


dabadab
(titán)
Blog

Disclaimer: se CodeBlocksot, se wxWidgetset nem használtam soha.

Ez azt jelenti, hogy nem találja a wxmsw31ud.lib könyvtárat (gondolom ez lehet a wxWidgets). Ennek oka lehet pl. az, hogy a 3.2.4-es verzióban ez wxmsw32ud.lib néven fut (vagyis szólni kellene a Code Blocksnak, hogy ne 3.1-et akarjon használni) ésvagy nincs jól beállítva a CodeBlocksban a wxWidgets elérési útja.

[ Szerkesztve ]


Tomi_78
(tag)

Az a baj, hogy indításkor csak a wx3.1.x-ig kínálja fel a változatot. Ennek ellenére megkérdezi mindig az elérési mappáját, annak pedig jól megadom a 3.2.4-est, és erre már a képen látható hibát dobja fel, mikor beállítom neki a Configuration options-ban a dolgokat indításkor:


dabadab
(titán)
Blog

Hát, akkor a jelek szerint le kell vadásznod valahonnan egy 3.1.x-es wxWidgetset, mint legkézenfekvőbb megoldás.


Tomi_78
(tag)

Igen, 3.0.x.-essel már hiba nélkül működik; köszi a segítséget!
Azt hittem, a verzió kiválasztása a varázslóban csak amolyan tájékoztató jellegű, és ami fontos az az a mappa, amit én megadok, amiben a wxWidgets van. De úgy látszik, nem így van. Meg az is bekavart, hogy a legújabb CodeBlocks a legújabb wxWidgetst még nem ismeri.


cog777
(senior tag)

Tud valaki c++ teszteket? Lehetoleg advanced level-t vagy magasabbat, akarok allas interjuzni a kozeljovoben es bizonyos dolgokban berozsdasodtam. Linkedin-en van par kurzus c++20-al kapcsolatban, de ugy erzem jo lenne teszteket csinalgatnom.


Tomi_78
(tag)

Valami ilyesmikre gondoltál, mint:
[link]
vagy:
[link] ?
Nem tudom, milyen szintűek, de többek között ezeket adta ki a Google a "c++ programozás teszt" keresőszavakra.


cog777
(senior tag)

Koszi, az elsot nem tolti be. Igen, bar nekem evekkel korabban a Google sokszor nagyon alap kvizeket adott ki, ezt pl 25-bol 24-et sikerult eltalalnom, tul alap.

Most rakeresve "c++ quiz" kifejezesre, tobb tesztet talaltam, pl c++20 teszt. Bocs a zajt.
[link] , [link] , [link]


Archttila
(veterán)
Blog

Sziasztok!
Nem vagyok programozo, ezert szuksegem lenne egy kis segitsegre az alabbi program forditasahoz [link] ( PKGBUILD [link] )
Szoval a lenyeg, hogy miutan helyrepofoztam a fuggosegeket, ninja az alabbi hibaval eldobja az egeszet [link]
Abban bizom, hogy csak az env reszt kell kiegesziteni valamivel a PKGBUILD-be. ;]
    )
    env CC=clang CXX=clang++ arch-meson .. ${_opts[@]}
    ninja
}
Az SACD tamogatas miatt lenne fontos hogy mukodjon..

[ Szerkesztve ]


Archttila
(veterán)
Blog

Arra tudok meg gondolni, hogy valami regebbi clang verzioval kmpatibilis a kod.


Archttila
(veterán)
Blog

Na, csak megoldottam :) most viszont a decodernel problemazik (de legalabb mar kozelebb vagyok a vegehez) :)

Found ninja-1.11.1 at /usr/bin/ninja
[456/733] Compiling C++ object src/decoder/plugins/libdecoder_plugins.a.p/FfmpegIo.cxx.o
FAILED: src/decoder/plugins/libdecoder_plugins.a.p/FfmpegIo.cxx.o
clang++ -Isrc/decoder/plugins/libdecoder_plugins.a.p -Isrc/decoder/plugins -I../src/decoder/plugins -Isrc -I../src -I. -I.. -Isrc/lib/sacdiso -I../src/lib/sacdiso -I../src/lib/sacdiso/libdstdec -I../src/lib/sacdiso/libdstdec/binding -I../src/lib/sacdiso/libdstdec/decoder -Isrc/lib/dvdaiso -I../src/lib/dvdaiso -I../src/lib/dvdaiso/libmlpdec -I../src/lib/dvdaiso/libmlpdec/libavutil -I../src/lib/dvdaiso/libudf -I/usr/include/spa-0.2 -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/include/sysprof-6 -I/usr/include/opus -I/usr/include/pipewire-0.3 -I/usr/include/dbus-1.0 -I/usr/lib/dbus-1.0/include -I/usr/include/libinstpatch-2 -I/usr/include/SDL2 -fdiagnostics-color=always -D_GLIBCXX_ASSERTIONS=1 -D_LIBCPP_ENABLE_ASSERTIONS=1 -D_FILE_OFFSET_BITS=64 -Wall -Winvalid-pch -Wextra -Wpedantic -std=c++2a -ffast-math -ftree-vectorize -Wcast-qual -Wdouble-promotion -Wmissing-declarations -Wshadow -Wunused -Wvla -Wwrite-strings -Wunreachable-code-aggressive -Wused-but-marked-unused -fno-threadsafe-statics -fmerge-all-constants -Wextra-semi -Wmismatched-tags -Woverloaded-virtual -Wsign-promo -Wno-non-virtual-dtor -Wcomma -Wheader-hygiene -Winconsistent-missing-destructor-override -Wsuggest-override -fvisibility=hidden -ffunction-sections -fdata-sections -D_GNU_SOURCE -march=native -O2 -pipe -fno-plt -fexceptions -Wp,-D_FORTIFY_SOURCE=3 -Wformat -Werror=format-security -fstack-clash-protection -fcf-protection -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -Wp,-D_GLIBCXX_ASSERTIONS -g -ffile-prefix-map=/tmp/makepkg/mpd-sacd/src=/usr/src/debug/mpd-sacd -flto=auto -fPIC -pthread -D_REENTRANT -D_DEFAULT_SOURCE -D_XOPEN_SOURCE=600 -MD -MQ src/decoder/plugins/libdecoder_plugins.a.p/FfmpegIo.cxx.o -MF src/decoder/plugins/libdecoder_plugins.a.p/FfmpegIo.cxx.o.d -o src/decoder/plugins/libdecoder_plugins.a.p/FfmpegIo.cxx.o -c ../src/decoder/plugins/FfmpegIo.cxx
../src/decoder/plugins/FfmpegIo.cxx:28:10: error: use of undeclared identifier 'AVERROR_EOF'
28 | return AVERROR_EOF;
| ^
1 error generated.


Archttila
(veterán)
Blog

Lefordult :))

üzenetek