- Karácsonyfaként világíthat a Thermaltake új CPU-hűtője
- Az USA vizsgálja a RISC-V kínai terjedésének kockázatát
- Kicsit extrémre sikerült a Hyte belépője a készre szerelt vízhűtések világába
- Egészen nagy teljesítményspektrumon fedné le a mobil piacot az AMD
- Kihívás a középkategóriában: teszten a Radeon RX 7600 XT
- AMD Ryzen 9 / 7 / 5 7***(X) "Zen 4" (AM5)
- Milyen cserélhető objektíves gépet?
- ZIDOO médialejátszók
- Azonnali informatikai kérdések órája
- Egészen nagy teljesítményspektrumon fedné le a mobil piacot az AMD
- Milyen asztali (teljes vagy fél-) gépet vegyek?
- Autós kamerák
- Intel Core i5 / i7 / i9 "Alder Lake-Raptor Lake/Refresh" (LGA1700)
- Gaming notebook topik
- Milyen videókártyát?
Hirdetés
-
Karácsonyfaként világíthat a Thermaltake új CPU-hűtője
ph Az ASTRIA 600 ARGB ráadásul a hűtési teljesítmény szempontjából sem szégyenkezhet.
-
Már tudjuk, hogy mikor jön az idei Xbox Games Showcase
gp A showt egy külön Direct előadás követi, ami szinte biztosan az idei Call of Duty lelepelzése lesz.
-
Agyi chipes gyártóba fektetett a kriptocég
it A Tether 200 millió dollárt fektet a Blackrock Neurotech agyi chipes vállalatba.
Új hozzászólás Aktív témák
-
mezis
nagyúr
válasz dobragab #4189 üzenetére
Én az "Ultimate++"-t kezdtem használni. Érdemes váltanom az ajánlottak valamelyikére ? (Csal ingyenes verziók jöhetnek szóba.)
mezis
-
Ron Swanson
senior tag
Tudna valaki S.O.S. segíteni?
Van egy feladatom amit nagyjából sikerült megcsinálnom, de van benne hiba.
Így néz ki a kódom:
#include <iostream>
using namespace std;
const int maxMatrix = 1000;
int varosDb;
int napDb;
int homerseklet[maxMatrix][maxMatrix];
int main()
{
std::ios::sync_with_stdio(false);
cin >> varosDb >> napDb;
for(int i = 0; i < varosDb; i++){
for(int j = 0; j < napDb; j++){
cin >> homerseklet[i][j];
}
}
int maxHomerseklet[maxMatrix]={};
for(int i = 0; i < varosDb; i++){
for(int j = 0; j < napDb; j++){
if (homerseklet[i][j] > maxHomerseklet[j]){
maxHomerseklet[j] = homerseklet[i][j];
}
}
}
int hanyszorVan[maxMatrix]={};
int hanyszorVanHely[maxMatrix] = {};
for(int i = 0; i < varosDb; i++){
for(int j = 0; j < napDb; j++){
if (homerseklet[i][j] == maxHomerseklet[j]){
hanyszorVanHely[j] = i + 1;
hanyszorVan[i]++;
}
}
}
int hanyszorVanMax = 0;
for (int i = 0; i < varosDb; i++){
if (hanyszorVan[i] > hanyszorVanMax){
hanyszorVanMax = hanyszorVan[i];
}
}
int darab = 0;
for (int i = 0; i < varosDb; i++){
if (hanyszorVanMax == hanyszorVan[i]){
darab++;
}
}
cout << darab << " ";
for (int i = 0; i < darab; i++){
cout << hanyszorVanHely[i] << " ";
}
return 0;
}Probléma:
A példa inputtal jól működik a program, de ha megváltoztatom az inputot pl erre:
3 5
10 15 12 10 10
12 16 16 16 20
12 16 16 16 20
(a 2. és 3. sorban ugyanazok a számok vannak)
akkor az outputra azt adja ki, hogy: 2 3 3
De azt kéne kiadnia, hogy 2 2 3 (2 darab, 2. és 3. sor)Vagy egy másik input:
5 5
5 5 5 5 5
2 2 2 2 2
5 5 5 5 5
4 4 4 4 4
5 5 5 5 5Ennél az output: 3 5 5 5, de a helyes az 3 1 3 5 lenne
Hogyan tudnám ezt javítani?
[ Szerkesztve ]
-
kobe24
tag
válasz Ron Swanson #4202 üzenetére
for(int i = 0; i < varosDb; i++){
for(int j = 0; j < napDb; j++){
if (homerseklet[i][j] == maxHomerseklet[j]){
hanyszorVanHely[j] = i + 1;
hanyszorVan[i]++;
}
}
}Ebben a ciklusban van a hiba, hiszen itt a "hanyszorVanHely" tömmben minden egyes alkalommal felülírod a tömb elemeit az aktuális sorral. Gyakorlatilag erre a változóra nincs is szükség. Tehát ha ezt a ciklust kijavítod
for (int i = 0; i < varosDb; i++) {
for (int j = 0; j < napDb; j++) {
if (homerseklet[i][j] == maxHomerseklet[j]) {
hanyszorVan[i]++;
}
}
}erre, akkor megkapod, hogy az egyes városokban hányszor volt meg a napi maximum. Az utolsó ciklust kell már csak módosítani.
for (int i = 0; i < varosDb; i++) {
if (hanyszorVan[i] == hanyszorVanMax) {
cout << i+1 << " ";
}
}A "hanyszorVan" tömb elemei megegyeznek azzal, hogy az adott indexű városban hányszor fordult elő a napi maximum. Így még egy tömböt meg is spóroltunk
[ Szerkesztve ]
-
amdni
aktív tag
Üdv!
C#-ot tanultam eddig, de most kicsit szeretnék megismerkedni a c++-al.
Hogyan tudom egy listából kiolvasott elemet ellenőrízni hogy milyen típusú?
pl:csillag *a = new osztaly();
bolygo* b = new bolygo();List<egitest*> vilagur;
A csillag és a bolygő őse az égitest.
A listában mindkettőt szeretném tárolni, ezért egitest típusú.
De mikor kiolvasom, hogyan ellenőrzőm hogy csillag vagy bolygó?C#-ban ez az is operátorral valósul meg:
ha ( List[0] is csillag) akkor....Tudna valaki ebben segíteni?
Köszönöm. -
dabadab
titán
Erre van a typeid:
if ( typeid(*b) == typeid(bolygo) ) {
// ....
}C++-ban egyébként szerintem nem jó ötlet C-s pointereket alkalmazni: a legtöbb esetben egyáltalán nem kell pointer (főleg mióta van move semantics), a maradék nagy részében referenciákat lehet használni, ami meg ezek után is megmarad, ott meg a C++-os smart pointereket.
[ Szerkesztve ]
DRM is theft
-
amdni
aktív tag
-
amdni
aktív tag
Leírnám újra hátha nem vagyok egyértelmű:
van egy egitest típus
továbbá bolygó és csillag típus, ezeknek az őse az egitest.
Egy listában szeretnék őket tárolni.
list<egietst> lista;Szeretném kiolvasáskor megállapítani hogy pl. bolygó-e, és utána kasztolni az eredeti típusra, de nem tudom megoldani, alá van húzva a "b" betű.
bolygo temp;
for (Egitest* b : EgitestLista) {
if (typeid(Bolygo) == typeid(b)) {
temp = dynamic_cast<Bolygo*>(b); //itt a hiba! -
Silεncε
őstag
Az úgy szerintem nem lesz jó, hogy egy Bolygó típusú változónak egy Bolygó*-ot akarsz átadni. Ha emlékezetem nem csal, C++-ban működik, hogy (Bolygó*), de nem vagyok benne biztos.
Egyébként a VS az aláhúzás mellé magyarázatot is ad, azt is beírhatnád ide, valszeg hamarabb jönne válasz
[ Szerkesztve ]
-
mgoogyi
senior tag
A screenshotodban nem pointered van, hanem normál objektumod.
Gondolom a listáddal is ugyanaz a helyzet.Ezzel az a baj, ha csinász egy ilyet, hogy:
Bolygo b;
Egitest e;
e = b; // az EgitestHozzaad-nál gyakorlatilag ezt csinálodEzesetben az "e" egy ledarált Egitest méretű változó lesz, amit a "b" égitestből örökölt részei adnak.
Ez az egész castolás téma akkor nyerhet értelmet, ha pointert vagy ref-et castolsz.
Látom c# háttered van.
C++-ban a normál értékadás by value megy összetett típusokra is, amit pl. az EgitestHozzaad függvény bemenő paraméternél történik. (Kb. mint a struct c#-ban)
Ez azt jelenti, hogy mindig egy másolat változóba megy az adat, amibe vagy copy konstruktorral vagy = operatorral kerül be az adat.A a = b; // copy ctor
a = b; // = operatorHa ki akarod használni a polimorfizmust, akkor vagy referenciákkal vagy pointerekkel kell dolgoznod.
A * a / A & aMiért akarsz visszacastolni bolygóra? Nem azért tartod közös kollekcióban az objektumokat, hogy mind ugyanúgy kezelhesd a közös interfaceükön keresztül?
[ Szerkesztve ]
-
coco2
őstag
Sziasztok!
Fejlesztő eszközökről szeretnék érdeklődni.
Sztori. Részemről most állok át win7-ről win10-re, és az első sokkhatásoknál tartok. Példának okáért a win7 alatt még tuti dev-c++ 4.9.9.2 win10 alatt már nem akaródzik futni (a make valamiért elakad). Neten azt találtam, hogy álljak át az újabb verziókra. Az újabb csomagok, amik a dev-c++ utódjának címét követelik gyanúsan nagy "üres" exe-t fordítanak (128 kb a "semmire"), és ahol fórumja van a projecteknek, mindenütt vírusokra, meg gyanúsan beépült kódrészletekre panaszkodnak, amire a projectgazda részéről nulla a visszajelzés. Nem tudok azokban megbízni. Viszont valami akkor is kellene helyette, ami minimális környezetként el van látva a win crt libekkel + header fileokkal 64 bites környezethez, supportol ansi c / console app és legacy C dll fordítást, és mindezekhez nem kényszerít rám grafikus ui-t, tud fordítani parancssoros tool-okkal is (gui helyett a saját scriptjeimet szeretem használni fordításra).
Aki birkózott már meg ugyan ezzel a problémával, szíves tanácsát kérném.
[ Szerkesztve ]
កុំភ្លេចប្រើភាសាអង់គ្លេសក្នុងបរិយាកាសអន្តរជាតិ។
-
Z_A_P
addikt
1
A screenshotban nem
for (Egitest* b : EgitestLista) {
van, hanem
Egitest b - csilag nelkul.2
typeid(Bolygo) == typeid(b)
Ilyet nem hasznalunk, helyette dyamic_cast<>, ami NULL-t ad vissza ha nem sikerult a cast. Termeszetesen pointert/referenciat hasznalunk.3
Az egesz kod buzlik, ha a listadban Egitest van, es azon kell ilyeneket futtatni, akkor inkabb az Egitest classban kellene egy virtualis GetKeringesiTavolsag().+1
Borzaszto stilus a magyar/angol keveres "GetKeringesiTavolsag"
Hasznalj 100%-ban CSAK angol neveket, minding mindenre.
Ezzel csak nyerhetsz, meghozza sokat.[ Szerkesztve ]
OK
-
dangerzone
addikt
Sziasztok!
Szeretném gyakorolni a C++ programozást. Ehhez keresnék egyszerűbb feladatokat eltérő témakörökből, amihez van megoldás. Tudjátok, hol lehetne ilyet találni?
-
b.kov
senior tag
válasz dangerzone #4218 üzenetére
Szia,
Tudnám ajánlani ezt az oldalt: ExercismVannak fent egyszerűbb, illetve összetettebb feladatok is. Én csak a Swift-es dolgokat néztem, de nekem nagyon jól jött gyakorolni. Főleg, hogy a megoldásod után lehet nézni a community által megírtakat is, és tanulni belőlük.
[ Szerkesztve ]
-
DrojDtroll
addikt
Sziasztok!
adott a következő kód
#include <iostream>
#include "bitmap_image.hpp"
using namespace std;
int main()
{
int width = 2000;
int height = 2000;
bitmap_image image(width,height);
image.clear();
rgb_t color = make_colour(124, 143, 143);
for(int i = 0;i<width;i++){
for(int j = 0;j<height;j++){
image.set_pixel(i,j, color);
}
}
//image.save_image("test02.bmp");
//cout << "Hello world!" << endl;
return 0;
}Azt szeretném mérni vele, hogy mennyire performáns a c++, főleg a futási idő érdekelne. Code::Blocks-ot használtam a fejlesztéshez. F9-el futtatom. Első futtatásra 4mp, minden további futtatás 0.2 körül van. Ha változtatok egy nagyon keveset a kódon ugyan ez a helyzet. Mitől van ez?
-
dabadab
titán
válasz DrojDtroll #4220 üzenetére
Nem tudom, hogy mivel vagy hogyan méred, de így ránézésre a fordítás idejét is beleméred.
Az sem teljesen világos, hogy igazán mit akarsz mérni, de elég biztos vagyok abban, hogy nem ez a megfelelő módszer hozzá.DRM is theft
-
EQMontoya
veterán
-
EQMontoya
veterán
-
DrojDtroll
addikt
válasz EQMontoya #4224 üzenetére
Ugyan ezt, csak 4s körüli értékkel.
Úgy néz ki tényleg beleszámolja a fordítást is.
stavkoverflow:Measuring execution time of a function in C++
Ez alapján mindig ugyan azt mérem.
-
G.A.
aktív tag
Üdv!
Visual Studio 2015 Update 3-ban egy parancssoros programot irok C/C++ -ban.
Egy FTDI chip(FT2232H) (gyári DLL / header fileokat használok) és egy AVR(ATMega1284P) közötti SPI-n alapuló kommunikációt használok.
Ezzel nincs is igazából gond, a program ezen része azt teszi amit szeretnék. Szerintem.Röviden:
Valamitől módosul némely globális változom, anélkül, hogy használnám.A probléma:
Vannak globális változóim(részlet):uint8 AVR_Signature_Bytes[3] = { 0x00, 0x00, 0x00 };
uint8 AVR_Fuse_Bytes[3] = { 0x00, 0x00, 0x00 };
uint8 AVR_Lock_Byte, AVR_Calibration_Byte, AVR_Prog_Enable_Byte, AVR_Poll_Ready_Byte;
amiket egy funkcióval módosítok/változtatom meg:int32 AVR_WRD_Bytes(uint8* local_rx_buffer, uint8* local_tx_buffer, uint32 sizeToTransfer, ...)
{
int32 status = MPSSE_SPI_WRD(local_rx_buffer, local_tx_buffer, sizeToTransfer,...);
if (status == OK)
{
for(uint32 i = 0, txbptr = 3; i < sizeToTransfer; i++, txbptr += 4)
{
local_rx_buffer[i] = local_rx_buffer[txbptr];
}
}
return(status);
}
Az egyes változó módosításához definícióba raktam a funkciót: (elnézést ha ostobán fogalmaztam meg)#define AVR_Get_Fuse_Bytes() AVR_WRD_Bytes(AVR_Fuse_Bytes, Fuse_Bytes_RD, 12, )
#define AVR_Get_Signature_Bytes() AVR_WRD_Bytes(AVR_Signature_Bytes, Signature_Bytes_RD, 12)
#define AVR_Get_Lock_Byte() AVR_WRD_Bytes(&AVR_Lock_Byte, Read_Lock_Byte, 4)
#define AVR_Get_Calibration_Byte() AVR_WRD_Bytes(&AVR_Calibration_Byte, Read_Calibration_Byte, 4)
Ha lefuttatom a AVR_Get_Fuse_Bytes() funkciót és megjelenítettem (printf) a kapott eredményeket, akkor a várt eredmények jönnek. Mivel ezt ugye globális változóba mentettem, későbbi felhasználás céljából, gondoltam baj nem lehet.Viszont, ha a AVR_Get_Fuse_Bytes() után lefuttatom bármely másik funkciót pl. AVR_Get_Signature_Bytes()-ot és csak utána jeleníteném meg a AVR_Get_Fuse_Bytes() által kapott eredményeket, akkor azok már nem lesznek jók.
Milyen hibakeresési módszert javasoltok? Merre induljak?
(Lehet már nem látom a fától az erdőt... gyakori)GA
-
G.A.
aktív tag
Amint leraktam a fejem a párnára, jött is az eureka pillanat... legalábbis azt hittem. Csak egy hibát találtam.
Javítás:
int32 AVR_WRD_Bytes(uint8* local_rx_buffer, uint8* local_tx_buffer, uint32 sizeToTransfer, ...)
{
uint8 temp_rx_buffer[spi_buffer_size];
int32 status = MPSSE_SPI_WRD([B]temp_rx_buffer[/B], local_tx_buffer, sizeToTransfer,...);
if (status == OK)
{
for(uint32 i = 0, txbptr = 3; i < sizeToTransfer; i++, txbptr += 4)
{
local_rx_buffer[i] = [B]temp_rx_buffer[/B][txbptr];
}
}
return(status);
}A gond az előzővel az volt, hogy a local_tx_buffer mérete mindig 4-nek a többszöröse és az MPSSE_SPI_WRD() funkció így mindig 4*n byteot küld vissza. Ha viszont én az AVR_WRD_Bytes(uint8* local_rx_buffer,..) -be eleve csak 1 byteos változót adok meg, mint pl itt:
#define AVR_Get_Lock_Byte() AVR_WRD_Bytes([B]&AVR_Lock_Byte[/B], Read_Lock_Byte, 4)
akkor a local_rx_buffer (példéban: AVR_Lock_Byte) túlcsordul és más változókat is módosíthat,a miket nem kéne. Ezt javítja a temp_rx_buffer.
Sajnos a probléma még így is fenn áll.
-
G.A.
aktív tag
Megvan az erdő!
A for() ciklusban a feltétel a hibás:
for(uint32 i = 0, txbptr = 3; i < sizeToTransfer; i++, txbptr += 4)
{
local_rx_buffer[i] = temp_rx_buffer[txbptr];
}Javítva:
for(uint32 i = 0, txbptr = 3; txbptr < sizeToTransfer; i++, txbptr += 4)
{
local_rx_buffer[i] = temp_rx_buffer[txbptr];
}Az i helyett a txbptr-t (tx buffer pointer) kellett tesztelni.
-
leviske
veterán
Sziasztok!
Most felfogok tenni megint egy nagyon amatőr kérdést "good programming practice" témában.
Van egy programom, ami beolvas több száz, sokszor több ezer képet, hogy műveleteket végezhessen rajta. Főbb osztályokat tekintve van egy Feldolgozó, egy I/O és egy UI. Mindháromnak hozzá kell férnie ahhoz a vektor<mátrix> változóhoz, ami a képeket tartalmazza. Az I/O ugye betölti az adatokat, a UI megjeleníti az aktuális állapotot, a feldolgozó osztály meg elvégzi a műveleteket.
A kérdésem a következő:
Az a legjobb megoldás, ha a feldolgozó osztály tartalmazza ezt a vektort és a másik kettőnek a feldolgozó osztály egy objektívének pointerét adogatom oda VAGY az a szebb, ha létrehozok a három osztály számára egy base class-t ami static változó formájában tartalmazza ezt a vektort?Egyelőre az első verziót használom.
Előre is köszi a nem megalázó választ.
-
dabadab
titán
válasz leviske #4229 üzenetére
Én egy külön objektumként hoznám létre, aminek mindhárom másik objektum megkapja a reference-ét, mivel amúgy semmi sem indokolja, hogy a három közül pont a bármelyik tulajdonolja (és akkor már lehet, hogy nem egy nyers vektor<akármiként>, hanem kapna egy wrappert classt maga köré, mert pl. a C++ std template containerek nem teljesen thread safe-ek)
[ Szerkesztve ]
DRM is theft
-
Ron Swanson
senior tag
Volt egy beadandó feladatom, aminek tegnap este járt le a határideje. Nem sikerült elérnem a 100 pontból 50-et, és buktam a tárgyat. 40 pont volt a legjobb eredmény. Nagyon kiváncsi vagyok a helyes (vagy legalább helyesebb) megoldásra, szeretném megérteni ezt az algoritmust, illetve a jövőben ha újra felveszem ezt a tárgyat akkor sokat segítene.
Ez volt a feladat, mohó algoritmussal kellett megoldani:
3 féle megoldás született (mgoogyi és kobe24 fórumtársunk segített benne rengeteget):
27 / 100 pontos: pastebin
Ez a futási hiba, megszakítási kód 11 a sulis oldal leírása szerint: illegális memória hivatkozás.33 / 100 pontos: pastebin
40 / 100 pontos: pastebin
A suliban csak 1 órát foglalkoztunk ezzel, egy nagyon egyszerű feladatot oldottunk meg, ami így nézett ki: pastebin mohó gyak
Illetve egy minta kódot találtam még, ami ilyen: mohó mintafeladat
Az N max értéke 1 millió lehet, ezért pl a 2. és 3. kódnál amit belinkeltem túllépi az időlimitet, pedig valószínűleg helyes lenne az output.
Hogyan lehetne megoldani?
-
Zalanius
tag
válasz Ron Swanson #4243 üzenetére
Az én olvasatomban bármi, amiben van sort() az időpontokra, az legfeljebb olyasmire lesz jó, hogy mikor voltak a legkevesebben, de sok fontos info elveszik. A feladat meg nagyon nem erről szól, egy egyszerű "házigazda" példával könnyen megmutatható:
1 3
1 3
1 3
1 8
5 8
5 8Nyilván nem az a megoldás, hogy ki volt bent mondjuk 4-nél (a "házigazda" egyedül, de ő meg pont nem a megfejtés). Az meg már a múltkor is első olvasatra feltűnt a már törölt hozzászólásokban, hogy az 1 millió vendég és a 100 ezer időegység azért van a feltételek között, hogy kizárjon minden O(n^2)+ vagy teljes mátrixos próbálkozást.
[ Szerkesztve ]
--= Zalán =--
-
mgoogyi
senior tag
válasz Ron Swanson #4243 üzenetére
A mohó mintáshoz hasonló lesz a megoldás, sokat segített volna, ha az elején ismerem már azt a példafeladatot.
Annak a pdf-je többet mond, mint a kódja.
Szerintem távozási idő szerint kell rendezni a vendégeket, venni az elsőt és mindenki, akivel ő találkozik, azzal nem kell foglalkozni, mert az nem lehet jobb nála. Ez a halmaz kiesik és ugyanezt ismételni, amíg el nem fogynak a vendégek.Egyébként neked az alapokat kéne rendberakni, nem algoritmusokon görcsölni.
Majd nekifutok még1x, ha lesz kedvem.[ Szerkesztve ]
-
Tomi_78
tag
Sziasztok!
Tudna segíteni valaki, hogy Borland C++ Builder 6-ban saját függvényt hogyan lehet hívni egy futásidőben létrehozott időzítő OnTimer eseményével?
Így néz ki a függvényem fejléce (__fastcall-t nem írtam bele, mert - gondolom - nem muszáj, de vele is hibás):void alakmozgatas()
{
...
}
így pedig az időzítő:alakmozgato=new TTimer(this); //Időzítő létrehozása
alakmozgato->Interval=5; //Időtartam beállítása
alakmozgato->OnTimer=alakmozgatas(); //Ez történjen, ha lefutott.és az utolsó sorra azt írja ki, hogy: Not an allowed type.
Ha meg elhagyom a zárójeleit:
[C++ Error] Unit1.cpp(90): E2034 Cannot convert 'void (_fastcall *)(TObject *)' to 'void (_fastcall * (_closure )(TObject *))(TObject *)'Teljesen tanácstalan kezdő vagyok.
-
mgoogyi
senior tag
válasz Tomi_78 #4247 üzenetére
Nem vagyok otthon a Borland TTimer témában, de egy gyors google keresésnél ezt találtam:
https://programmersheaven.com/discussion/357230/creating-component-with-timer-in-it
Ez alapján:
Timer = new TTimer(this);
Timer->Interval = 5;
Timer->OnTimer = (TNotifyEvent) &alakmozgatas;
Timer->Enabled = true;
void __fastcall alakmozgatas(TComponent* Sender)
{
..... Do some stuff .....
}[ Szerkesztve ]
Ú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!
- Retro teló rajongók OFF topicja
- Milyen okostelefont vegyek?
- Politika
- Samsung Galaxy S23 és S23+ - ami belül van, az számít igazán
- BestBuy topik
- Luck Dragon: Asszociációs játék. :)
- Suzuki topik
- AMD Ryzen 9 / 7 / 5 7***(X) "Zen 4" (AM5)
- Xiaomi 13T és 13T Pro - nincs tétlenkedés
- Milyen cserélhető objektíves gépet?
- További aktív témák...