Hirdetés
- Leleplezte az új Radeon generációt az AMD
- MWC 2025: Xiaomi Pad 7 és Pad 7 Pro - munkabírásból jeles
- NVIDIA GeForce RTX 4080 /4080S / 4090 (AD103 / 102)
- Házi barkács, gányolás, tákolás, megdöbbentő gépek!
- Amlogic S905, S912 processzoros készülékek
- Sapka nélküli processzorok garanciával
- AMD K6-III, és minden ami RETRO - Oldschool tuning
- AMD GPU-k jövője - amit tudni vélünk
- Ventilátorok - Ház, CPU (borda, radiátor), VGA
- Projektor topic
Új hozzászólás Aktív témák
-
DrojDtroll
veterán
válasz
Steve_Brown #4461 üzenetére
Nem. Webes lesz. Sok mindent nem akarok, a háttérben prefetch-elem a szükséges értékeket, ebből egy statikus html oldalt készítek. Sok lesz az igen/nem kimenetelű mérés. Ezeket aggregálni szeretném, és csak a hibákat külön megjeleníteni. Ahol számértékek lesznek ott egyszerű táblázatok fogok használni az adatok megjelenítésére.
-
Steve_Brown
senior tag
válasz
DrojDtroll #4460 üzenetére
Qt-val csinálnád?
-
DrojDtroll
veterán
válasz
Steve_Brown #4459 üzenetére
Én most akarok belefogni egy hobby c++ projektbe. Akarok egy olyan dashboardot a homelab-hoz ami egy szempillantás alatt betölt.
-
Steve_Brown
senior tag
Elég kihalt ez a topik. Pedig a menők C++-ban programoznak.
-
cog777
senior tag
https://godbolt.org/-ot nem is ismertem, asm-et mutat egy c++ programrol.
-
cog777
senior tag
Tobb megoldast kaptam, itt lehet elolvasni.
Lenyeg: van lehetoseg trukkozni, de az tenyleg trukkozes, inkabb template specializaciot valasztanek.Ez a megoldas tetszett jobban:
#include <fmt/format.h>
#include <array>
#include <cstddef>
#include <mutex>
enum class thread_safety_mode {
safe,
unsafe,
};
template <typename T, std::size_t Size, thread_safety_mode Mode>
class circular_buffer;
template <typename T, std::size_t Size>
class circular_buffer<T, Size, thread_safety_mode::unsafe> {
public:
// Push an item to the tail
bool push(const T& item) {
if (is_full()) return false;
buffer_[head_] = item;
head_ = (head_ + 1) % buffer_.size();
return true;
}
// Pop an item from the head
bool pop(T& item) {
if (is_empty()) return false;
item = buffer_[tail_];
tail_ = (tail_ + 1) % buffer_.size();
return true;
}
// Check if the buffer is full
bool is_full() const { return (head_ + 1) % buffer_.size() == tail_; }
// Check if the buffer is empty
bool is_empty() const { return head_ == tail_; }
private:
std::array<T, Size> buffer_;
std::size_t head_{0};
std::size_t tail_{0};
};
template <typename T, std::size_t Size>
class circular_buffer<T, Size, thread_safety_mode::safe> {
public:
bool push(const T& item) {
std::lock_guard<std::mutex> lk(m);
fmt::println("locked for push()");
return unsafe_buffer.push(item);
}
// Pop an item from the head
bool pop(T& item) {
std::lock_guard<std::mutex> lk(m);
fmt::println("locked for pop()");
return unsafe_buffer.pop(item);
}
// Check if the buffer is full
bool is_full() const {
std::lock_guard<std::mutex> lk(m);
fmt::println("locked for is_full()");
return unsafe_buffer.is_full();
}
// Check if the buffer is empty
bool is_empty() const {
std::lock_guard<std::mutex> lk(m);
fmt::println("locked for is_empty()");
return unsafe_buffer.is_empty();
}
private:
circular_buffer<T, Size, thread_safety_mode::unsafe> unsafe_buffer{};
mutable std::mutex m{};
};
auto main() -> int {
//
circular_buffer<int, 42, thread_safety_mode::safe> cb{};
cb.push(43);
cb.push(44);
cb.push(45);
int val;
cb.pop(val);
fmt::println("val: {}", val);
cb.pop(val);
fmt::println("val: {}", val);
cb.pop(val);
fmt::println("val: {}", val);
} -
cog777
senior tag
Masik kerdes.
Adja magat egy thread es egy nem thread safe verzioja a circual_buffer-nek.
Forditasi idoben meg tudom mondani hogy a mutex-es sorok letiltodjanak vagy engedelyezve legyenek template-et hasznalva?Valami ilyesmire gondoltam, ugyanakkor forditasi hibaim vannak:
#pragma once
#include <array>
#include <stddef.h>
#include <mutex>
enum class THREAD_SAFETY
{
THREAD_SAFE = 0,
NOT_THREAD_SAFE
};
template <typename T, size_t S, THREAD_SAFETY TH>
class circular_buffer
{
public:
explicit circular_buffer() {}
// Push an item to the tail
bool push(const T &item)
{
if constexpr (std::is_same<TH, THREAD_SAFETY::THREAD_SAFE>::value)
{
std::lock_guard<std::recursive_mutex> lk(m);
}
if (is_full())
return false;
buffer_[head_] = item;
head_ = (head_ + 1) % buffer_.size();
return true;
}
// Pop an item from the head
bool pop(T &item)
{
if constexpr (std::is_same<TH, THREAD_SAFETY::THREAD_SAFE>::value)
{
std::lock_guard<std::recursive_mutex> lk(m);
}
if (is_empty())
return false;
item = buffer_[tail_];
tail_ = (tail_ + 1) % buffer_.size();
return true;
}
// Check if the buffer is full
bool is_full() const
{
if constexpr (std::is_same<TH, THREAD_SAFETY::THREAD_SAFE>::value)
{
std::lock_guard<std::recursive_mutex> lk(m);
}
return (head_ + 1) % buffer_.size() == tail_;
}
// Check if the buffer is empty
bool is_empty() const
{
if constexpr (std::is_same<TH, THREAD_SAFETY::THREAD_SAFE>::value)
{
std::lock_guard<std::recursive_mutex> lk(m);
}
return head_ == tail_;
}
private:
std::array<T, S> buffer_;
size_t head_{0};
size_t tail_{0};
if constexpr (std::is_same<TH, THREAD_SAFETY::THREAD_SAFE>::value)
{
mutable std::recursive_mutex m;
}
};main.cpp-ben:
circular_buffer<int, 5, THREAD_SAFETY::THREAD_SAFE> buffer;
De sajnos hibakat ir ki:
/home/zoltan/dev/learning/CPP/algorithms/producer-consumer/circular_buffer.h:70:5: error: expected unqualified-id before ‘if’
70 | if constexpr (std::is_same<TH, THREAD_SAFETY::THREAD_SAFE>::value)
| ^~
/home/zoltan/dev/learning/CPP/algorithms/producer-consumer/circular_buffer.h: In member function ‘bool circular_buffer<T, S, TH>::push(const T&)’:
/home/zoltan/dev/learning/CPP/algorithms/producer-consumer/circular_buffer.h:21:66: error: type/value mismatch at argument 1 in template parameter list for ‘template<class, class> struct std::is_same’
21 | if constexpr (std::is_same<TH, THREAD_SAFETY::THREAD_SAFE>::value)Masreszt nem vagyok biztos hogy a constexpr if-ek valodi blokkent mukodnek, tehat a lock_guard mukodni fog-e...
[ Szerkesztve ]
-
cog777
senior tag
Le tudna valaki csekkolni ezt a kodot? Tok mas teruleten dolgoztam mostanaban es radobbentem, hogy bizonytalan vagyok most ebben az alap kerdesben. Consumer-producer, thread safe circular buffer-rel + recursize mutex.
Lefordul, mukodik crash nelkul, de kivancsi vagyok hogy elszabtam-e valamit... koszi elore is.
Circular buffer kodja:
circular_buffer.h#pragma once
#include <array>
#include <stddef.h>
#include <mutex>
template <typename T, size_t S>
class circular_buffer
{
public:
explicit circular_buffer() {}
// Push an item to the tail
bool push(const T &item)
{
std::lock_guard<std::recursive_mutex> lk(m);
if (is_full())
return false;
buffer_[head_] = item;
head_ = (head_ + 1) % buffer_.size();
return true;
}
// Pop an item from the head
bool pop(T &item)
{
std::lock_guard<std::recursive_mutex> lk(m);
if (is_empty())
return false;
item = buffer_[tail_];
tail_ = (tail_ + 1) % buffer_.size();
return true;
}
// Check if the buffer is full
bool is_full() const
{
std::lock_guard<std::recursive_mutex> lk(m);
return (head_ + 1) % buffer_.size() == tail_;
}
// Check if the buffer is empty
bool is_empty() const
{
std::lock_guard<std::recursive_mutex> lk(m);
return head_ == tail_;
}
private:
std::array<T, S> buffer_;
size_t head_{0};
size_t tail_{0};
mutable std::recursive_mutex m;
};main.cpp
#include "circular_buffer.h"
#include <iostream>
#include <thread>
#include <mutex>
#include <condition_variable>
circular_buffer<int, 5> buffer;
std::mutex mtx; // Mutex for protecting shared data
std::condition_variable empty, full; // Condition variables
void producer(int loops)
{
for (int i = 0; i < loops; ++i)
{
std::unique_lock<std::mutex> lock(mtx);
while (buffer.is_full())
{
empty.wait(lock); // Wait if buffer is full
}
buffer.push(i);
full.notify_one(); // Signal that buffer is not empty
std::cout << "Produced: " << i << std::endl;
}
}
void consumer(int loops)
{
for (int i = 0; i < loops; ++i)
{
std::unique_lock<std::mutex> lock(mtx);
while (buffer.is_empty())
{
full.wait(lock); // Wait if buffer is empty
}
int tmp;
buffer.pop(tmp);
empty.notify_one(); // Signal that buffer is not full
std::cout << "Consumed: " << tmp << std::endl;
}
}
int main()
{
int loops = 10;
std::thread prodThread(producer, loops);
std::thread consThread(consumer, loops);
prodThread.join();
consThread.join();
return 0;
}[ Szerkesztve ]
-
-
válasz
Archttila #4452 üzenetére
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. -
-
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 ]
-
cog777
senior tag
válasz
Tomi_78 #4449 üzenetére
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] -
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
aktív tag
válasz
dabadab #4446 üzenetére
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. -
Tomi_78
aktív tag
válasz
dabadab #4444 üzenetére
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
válasz
Tomi_78 #4443 üzenetére
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
aktív 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? -
pocokxx
Közösségépítő
válasz
dabadab #4441 üzenetére
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... -
dabadab
titán
válasz
pocokxx #4440 üzenetére
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ő
válasz
dabadab #4439 üzenetére
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
válasz
pocokxx #4437 üzenetére
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), mert a C++ dinamikusan fejlődő nyelv.
-
pocokxx
Közösségépítő
válasz
dabadab #4436 üzenetére
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 ]
-
dabadab
titán
válasz
pocokxx #4435 üzenetére
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ő
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? -
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 -
kispx
addikt
válasz
MiniXD55 #4431 üzenetére
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.
-
MiniXD55
tag
válasz
MiniXD55 #4426 üzenetére
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 ]
-
CPT.Pirk
Jómunkásember
válasz
dabadab #4423 üzenetére
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 ]
-
CPT.Pirk
Jómunkásember
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 egyplatEnd[motor].x = 12,3;
-at, akkor azzal semmi baja.
-
MiniXD55
tag
válasz
dabadab #4414 üzenetére
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. -
-
daninet
veterán
válasz
DrojDtroll #4417 üzenetére
Igen, meg az első homingnál lehetne az időt mérni, mert ugye mindig máskor kapcsolom ki. Vannak elméleti ötleteim. Ezt egy arduinonál még lehet megoldanám, csak itt bőven meghaladja a képességeimet.
Azt is elfogadom válasznak, ha nem lehet ennyivel megoldani, valamiért azt várom picit lesz valaminegysoros akármi amit oda berakhatok és menni fog. De azt is elfogadom válasznak ha nincs ilyen. -
daninet
veterán
válasz
dabadab #4415 üzenetére
Elvileg C++, igen (70%-ban, 30-ban C). De javíts ki ha nem, átrakom másik topikba. Marlin firmware-t akarom módosítani. Volt már itt téma, akkor te segítettél, de az igényeim alacsonyabbak voltak
, csak újra akartam indítani a sorozatot, működött is.
Szóval alant a kódban a random(2,10); függvényt használtam, de mint írtátok, ez ugyanazt a sorozatot generálja mindig, nekem ez nem jó.
Hogy értsétek, erről a homokba rajzolós asztalról van szó. SD kártyán vannak a minták, indításnál az auto0.g fájl tartalmazza a homing sequence-t, a többi auto1.g - auto9.g a mintákat amiket rajzol. Mivel ezek órákig mennek nem poén, ha mindig bekapcsolom és ugyanazzal indul. Jó lenne, ha random választana egy számot 2-10ig (függvényben alul van egy x-1) és akkor valamelyik mintát elkezdené rajzolni.
Kontextusnak annyi, hogy elkezdi beolvasni az SD kártya tartalmát a program, és ha nincs ott egy fájl amit áramkimaradás esetén akkor kezdi a kód szerint az auto0.g-tmod: elég rossz itt a kódformázás, itt egy pastebin link: https://pastebin.com/zFwjc0y9
#if DISABLED(NO_SD_AUTOSTART)
/**
* Run all the auto#.g files. Called:
* - On boot after successful card init.
* - From the LCD command to Run Auto Files
*/
void CardReader::autofile_begin() {
autofile_index = 1;
(void)autofile_check();
}
/**
* Run the next auto#.g file. Called:
* - On boot after successful card init
* - After finishing the previous auto#.g file
* - From the LCD command to begin the auto#.g files
*
* Return 'true' if an auto file was started
*/
bool CardReader::autofile_check() {
if (!autofile_index) return false;
if (!isMounted())
mount();
else if (ENABLED(SDCARD_EEPROM_EMULATION))
settings.first_load();
// Don't run auto#.g when a PLR file exists
if (isMounted() && TERN1(POWER_LOSS_RECOVERY, !recovery.valid())) {
char autoname[10];
sprintf_P(autoname, PSTR("/auto%c.g"), '0' + autofile_index - 1);
if (fileExists(autoname)) {
cdroot();
openAndPrintFile(autoname);
// Generate a random number between 2 and 10
int randomNumber = random(2,10);
autofile_index = randomNumber;
//
return true;
}
}
autofile_cancel();
return false;
}
#endif
[ Szerkesztve ]
-
dabadab
titán
válasz
MiniXD55 #4411 üzenetére
Hát, akkor ideje lenne megismerkedni a C++-os konténerekkel
Mondjuk az std::vector használatához alig valami kell változtatni.
[ Szerkesztve ]
-
sztanozs
veterán
válasz
daninet #4412 üzenetére
Amit tudsz csinalni az az, hogy eltarolod az utolso erteket az epromban es a kovetkezo inditaskor azt hasznalod seednek... mondjuk ez eleg gyorsan le tudja gyilkolni az epromot, de ha van egy barmi mas (irast jobban turo) perzisztens memoriad, akkor az mar jobb lehet...
[ Szerkesztve ]
-
daninet
veterán
Sziasztok!
Teljesen noob kérdés:
Random int számot kellene generálnom egy mikrokontrolleren, de nincs órája és limitált a memória. Szóval kóddal kellene megoldalni anélkül, hogy behívok bármilyen library-t.
Végignéztem a keresőben egy csomó találatot de mindenhol az órával variálnak. Nekem ugyanez kóddal kell, valami memória hash-elős akármilyen trükkel.
Hogyan oldható ez meg? -
MiniXD55
tag
Sziasztok!
Újra én lennék az akinek segíteni kellene, mellékelek egy képet illetve a kódot is amit írtam:#include <iostream>
#include <fstream>
#include <math.h>
#include <iomanip>using namespace std;
int eltelt(int ido1, int ido2);
int main()
{
int ora[1000];
int perc[1000];
int mperc[1000];
int xkor[1000];
int ykor[1000];
int ido[1000];
int darab=0;
cout << "1. feladat" << endl;ifstream befajl;
befajl.open("jel.txt");
while(!befajl.eof())
{
befajl >> ora[darab] >> perc[darab] >> mperc[darab] >> xkor[darab] >> ykor[darab];
darab++;
}
for(int i=0; i<darab-1;i++)
{
ido[i]=ora[i]*3600 + perc[i]*60 + mperc[i];
//cout << ora[i] << perc[i] << mperc[i] << xkor[i] << ykor[i] << endl;
//cout << ido[i] << endl;
}
befajl.close();cout << "2. feladat" << endl;
int sorszam;
cout << "Adja meg a jel sorszámát! ";
//cin >> sorszam;
sorszam = 3;
cout << "x=" << xkor[sorszam-1] << " y=" << ykor[sorszam-1];
int eltelt_ido=eltelt(ido[0],ido[darab-2]);
cout << "4. feladat\nIdotartam: " << eltelt_ido/3600 << ":" << eltelt(ido[0],ido[darab-2])/60%60 <<":" << eltelt(ido[0],ido[darab-2])%60;cout << "5. feladat" << endl;
int min_x=xkor[0];
int min_y=ykor[0];
int max_x=xkor[0];
int max_y=ykor[0];
for(int i=0; i<darab-1;i++)
{
if (min_x>xkor[i]) min_x=xkor[i];
if (min_y>ykor[i]) min_y=ykor[i];
if (max_x<xkor[i]) max_x=xkor[i];
if (max_y<ykor[i]) max_y=ykor[i];
}
cout << "Bal alsó: " << min_x << " " << min_y << ", jobb felsõ: " << max_x << " " << max_y;cout << "6. feladat" << endl;
float elmozdulas=0.000;
for(int i=0; i<darab-2;i++)
{
elmozdulas+=sqrt(pow(xkor[i]-xkor[i+1],2)+pow(ykor[i]-ykor[i+1],2));
//cout << elmozdulas << endl;
}cout << round(elmozdulas);
return 0;
}[ Szerkesztve ]
-
MiniXD55
tag
Sziasztok!
Szeretnék segítséget kérni, visual studio 2019-el kezdek programozni, és jelenleg egy olyan problémába futok bele minden egyes feladatnál, hogy a visual studio nem akarja megnyitni az adott txt file-t. A következő error kódot kapom: MSB8020 BUILD TOOLS V143.
Tudnátok ebben segíteni, hogy mi lehet a probléma?
Próbáltam a debug mappába berakni a fájlt, de ott se találja illetve próbáltam manuálisan tallózni, de akkor se akarta.
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
int main()
{
string datum[400];
string nev[400];
string resz[400];
int hossz[400];
int latta[400];
int n = 0;
ifstream be;
be.open("lista-1.txt",);
while(!be.eof())
{
be >> datum[n] >> nev[n] >> resz[n] >> hossz[n] >> latta[n];
n++;
} -
Tomi_78
aktív tag
Sziasztok ismét, szakértők!
Felmerült még pár hiba kicsiny programom fejlesztése közben, amit segítség nélkül nem tudok megoldani.
Az első, hogy így íratok ki szöveget:static const WCHAR pontszoveg[]= L"PONTJAID:";
TextOut(Memhdc,80,4,pontszoveg,wcslen(pontszoveg));
ami így jó is, viszont számokat már nem tudok kiíratni, mert pl. erre:char jatpontjai[3];
itoa(jatekospontjai,jatpontjai,10);
TextOut(Memhdc,80,4+28,jatpontjai,wcslen(jatpontjai));
már ezt a hibaüzenetet kapom:
|911|error: cannot convert 'char*' to 'const wchar_t*' for argument '1' to 'size_t wcslen(const wchar_t*)'|
A második kérdésem, hogy meg lehet-e határozni és ha igen, akkor hogyan egy ilyen szöveg képpontokban mért szélességét, hogy a képernyő közepére lehessen kiírni:static const WCHAR cimszoveg[]= L"Játék címe";
TextOut(Memhdc, ablakszel/2,4,cimszoveg,wcslen(cimszoveg));
és végül, le lehet-e valahogy tiltani a játékablak átméretezhetőségének lehetőségét, hogy a felhasználó csak egy fix, teljesképernyős módban használhassa a programot?
Ú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!
- One otthoni szolgáltatások (TV, internet, telefon)
- Építő/felújító topik
- Leleplezte az új Radeon generációt az AMD
- Villanyszerelés
- MWC 2025: Xiaomi Pad 7 és Pad 7 Pro - munkabírásból jeles
- Hardcore pizza és kenyér topik
- Robotporszívók
- NVIDIA GeForce RTX 4080 /4080S / 4090 (AD103 / 102)
- Tesla topik
- Folyószámla, bankszámla, bankváltás, külföldi kártyahasználat
- További aktív témák...