Hirdetés
-
Teaser traileren a Delta Force: Hawk Ops
gp A rövid betekintés után a jövő hónapi Summer Game Festen láthatunk további részleteket a játékról.
-
AMD Radeon undervolt/overclock
lo Minden egy hideg, téli estén kezdődött, mikor rájöttem, hogy már kicsit kevés az RTX2060...
-
Aktívan készül az LPDDR6 és DDR6 szabvánnyal a JEDEC
ph Egyelőre még egyik opció sincs véglegesítve, de a várható sebesség körvonalazódik.
Új hozzászólás Aktív témák
-
sssirius
tag
válasz kemkriszt98 #2550 üzenetére
Kipróbáltam és valóban 0-t eredményez bármilyen karakter beadása esetén. A system("PAUSE") hívást nem használtam még sosem, én cin.ignore(10000, "\n")-t használnék és utána cin.get().
Halvány emlékeimben még rémlik olyasmi, hogy a következő beolvasás előtt érdemes meghívni a cin.sync()-et is.A cin.clear() csak az error flag-et fogja helyrerázni, de ha közben leütsz egy billentyűt akkor az bennmarad a bufferben ezért kell a cin.ignore(10000, "\n") ami legfeljebb 10000 karaktert figyelmen kívül hagy, amíg nem érkezik egy újsor karakter. Így az ENTER-t leütve tudod folytatni a programodat (ha jól sejtem azért van benn a system("PAUSE").
[ Szerkesztve ]
-
kemkriszt98
aktív tag
-
Ragnar95
nagyúr
Sziasztok!
Olyan problémába futottam, hogy vektorok piszkálásánál hiba csúszott az algoritmusba, viszont jó lenne látni, hogy pontosan mi is az, így debuggolnám Netbeansben, viszont a debug nem írja ki a vektor értékeit, mint Javánál.
Van esetleg valami megoldás rá, hogy belelássak a vektorba debug közben Netbeansben?Előre is köszönöm a segítséget
Privátot privátba, fórumtémát fórumba. Aki ezt nem képes betartani, ne csodálkozzon, ha nem kap privátra választ.
-
kemkriszt98
aktív tag
Sziasztok, megint egy (számomra vicces esemény)
Valaki megkért, hogy dobjak össze egy kis programot ami legenerálja az összes lehetséges kódot a következők alapján:"PCxyzq", ahól az x,y,z és q az ÁBC összes nagy és kisbetűje illetve bármelyik számjegy lehet. Az ötletem a következő: 4db for ciklus megy '0'-tól 'z'-ig és a közbeeső speciális karaktereket simán átugrom... viszont a kimenet így néz ki. Csak ez olyan sokszor, hogy a txt 382mb-t foglal...
A programom:
int db=0;
ofstream f("pc-codes.txt",ios::out);
for(char a='0';a<='z';(int)a++){
bool b1,b2,b3;
b1 = (a>='0' && a<='9');
b2 = (a>='A' && a<='Z');
b3 = (a>='a' && a<='z');
if(!b1 && !b2 && !b3) continue;
for(char b='0';b<='z';(int)b++){
b1 = (b>='0' && b<='9');
b2 = (b>='A' && b<='Z');
b3 = (b>='a' && b<='z');
if(!b1 && !b2 && !b3) continue;
for(char c='0';c<='z';(int)c++){
b1 = (c>='0' && c<='9');
b2 = (c>='A' && c<='Z');
b3 = (c>='a' && c<='z');
if(!b1 && !b2 && !b3) continue;
for(char d='0';d<='z';(int)d++){
b1 = (d>='0' && d<='9');
b2 = (d>='A' && d<='Z');
b3 = (d>='a' && d<='z');
if(!b1 && !b2 && !b3) continue;
string s = "PC" + a+b+c+d;
f<<s << endl;
cout << "Wait...";
db++;
}
}
}
}"Tigris, tigris, csóvafény éjszakáknak erdején, mily kéz adta teneked szörnyü és szép termeted?" -William Blake-
-
Jester01
veterán
válasz kemkriszt98 #2554 üzenetére
Azért azt érzed, hogy ez borzalmas, ugye?
A hiba mindenesetre itt van: string s = "PC" + a+b+c+d;
Itt a + operátor az nem karakter hozzáfűzés, hanem a "PC" konstanshoz képest pointer művelet. Éljen az operator overloading
Egy lehetséges javítás: string s = string("PC") + a + b + c + d;Jester
-
Jester01
veterán
válasz kemkriszt98 #2556 üzenetére
Egyszeri használatra meg ez fölösleges program, sokkal egyszerűbben is le lehet ezeket gyártani.Na mindegy.
Jester
-
kingabo
őstag
válasz kemkriszt98 #2556 üzenetére
Az ideiglenes megoldások a legállandóbbak!
-
MODERÁTOR
Sziasztok!
Egy lottó húzó programot kellene írnom, ami véletlen számokat generál, és nem ismétlődhetnek. Viszont ezzel az ismétlődés kiszűréssel gondban vagyok, mert nem igazán akar működni. Az egyszerűség kedvéért direkt csak 0 és 5 között akarom kiválasztani a számokat, mert így ugye nagyobb az esélye alapból hogy ismétlődjenek. De valamiért legtöbbször van közte ismétlődő, holott csak ki kellene írnia a 0,1,2,3,4 számokat valamilyen sorrendben.. Mi lehet a gond?
Itt a progi: Kép
-
nagyúr
válasz pepe091 #2559 üzenetére
Nincs elottem C++ fordito, de valami ilyesmi a legegyszerubb:
#include <vector>
#include <iostream>
#include <algorithm>int main() {
std::vector<int>szamok (90);
std::iota (szamok.begin(), szamok.end(), 0);
for (int i = 0; i<5;++i) std::cout << szamok[i[ << std::endl;
}while (!sleep) sheep++;
-
attis71
tag
Sziasztok!
Tudnátok segítséget adni egy tömbben vannak ismétlődő számok, egy másik tömbbe ki kell írni ismétlések nélkül. Eddig jutottam:
int A[]={,2,2,4,4,6,6};
const int N=6;
for(int i =0; i<N-1;i++)
{ for(int j=i+1;j<N;j++)
{
if(A[j]<A[i])
{
}
}
}attis71
-
sssirius
tag
válasz attis71 #2566 üzenetére
Ha nem fontos a sorrendhelyesség, akkor használj std::set-et. A tömb összes elemét belerakod a halmazba, majd utána kiíratod őket, és minden elem csak egyszer fog szerepelni.
Egyéb megoldás:int out[N];
int size;
bool found;
for(int i=0; i<N;i++) {
found = false;
for(int j=0; j<i; j++) {
if(A[i]==out[j]) {
found = true;
}
}
if( !found ) {
out[size]=A[i];
size ++;
}
}Csak figyelni kell rá, hogy nem az egész tömb tartalmaz "értelmes" adatot.
Nem próbáltam ki, de kb. stimmel.[ Szerkesztve ]
-
PumpkinSeed
addikt
válasz attis71 #2566 üzenetére
Én úgy valósítanám meg, hogy az egészet elkezdem belemásolni egy új tömbbe, és minden elem másolása előtt megnézem, hogy a régi tömbben benne van-e már az átmásolandó elem. Ha mondjuk benne van akkor megszakítod a ciklust, ha nincs akkor átmásolod. Ha elakadnál a megvalósítással kérdezz.
"Akinek elég bátorsága és türelme van ahhoz, hogy egész életében a sötétségbe nézzen, elsőként fogja meglátni benne a fény felvillanását." - Kán
-
LW
őstag
Szerintem felesleges a set-et belevinni, az ellenőrzős megoldás jobb a programozás elsajátításához.
-
attis71
tag
Sziasztok,
köszönöm az eddigi hozzászólásotokat.
Ehhez is kellene egy kis segítség:#include <iostream>
#include <iomanip>
using namespace std;
//függvény deklarációk
void Buborek(int rendezettTomb[], int N);
void Paros(int parosTomb[], int N, int& darab);
const int N = 16;
//Főfüggvény
int main()
{
//tömbök, változók
int A[] = { 11, 22, 44, 22, 55, 88, 77, 55, 22, 88, 99, 44, 33, 55, 22, 66 };
int darab = 0;
int hivatkozas = 0;
// eredeti tömb kiiratás
cout << "Eredeti tomb:" << endl;
for (int i = 0; i<N; i++) cout << " " << A[i];
cout << endl;
// A tömb növekvő sorrendben I./a feledat
Buborek( A, N);
// Rendezett tömb páros elemei
Paros( A, N);
system("pause");
return 0;
}
//buborékos rendező függvény
void Buborek(int rendezettTomb[], int N)
{
for (int i = 1; i<N; i++)
{
for (int j = N - 1; j >= i; j--)
{
if (rendezettTomb[j - 1]>rendezettTomb[j])
{
int seged = rendezettTomb[j - 1];
rendezettTomb[j - 1] = rendezettTomb[j];
rendezettTomb[j] = seged;
}
}
}
cout << "A tomb novekvo sorrendben:" << endl;
for (int i = 0; i < N; i++) cout << " " << rendezettTomb[i];
cout << endl;
}
// Páros számokat kiválasztó függvény
void Paros(int parosTomb[], int N, int& darab)
{
int db = 1;
cout << "Rendezett tomb paros szamai:" << endl;
for (int i = 0; i < N; i++)
{
if (rendezettTomb[i] % 2 == 0)
{
parosTomb[i] = rendezettTomb[i];
cout << " " << parosTomb[i];
db++;
}
}
darab = db - 1;
cout << endl;
}A Buborek rendező függvény kimenetét szeretném tovább rendezni a Paros függvénnyel,
csak nem tudom hogyan adjam át vagy hivatkozzak rá.
attis71 -
attis71
tag
válasz PumpkinSeed #2568 üzenetére
Pontosabban eltudnád magyarázni?
attis71 -
LW
őstag
Amit tőletek kérnek:
int numbers[] = {3,4,1,2,2,5,2,1};
const int N = 8;
int output[N];
int counter = 0;
for(int i = 0; i < N; i++){
int j = 0;
for(; j < counter && output[j] != numbers[i]; j++);
if(j == counter){
output[j] = numbers[i];
counter++;
}
}
for(int i = 0; i < counter; i++){
cout << output[i] << " ";
}Ez pedig eggyel C++osabb megoldás:
int numbers[] = {3,4,1,2,2,5,2,1};
const int N = 8;
int output[N];
int counter = 0;
for(int i = 0; i < N; i++){
if(output+counter == find(output, output+counter, numbers[i])){
output[counter] = numbers[i];
counter++;
}
}
for(int i = 0; i < counter; i++){
cout << output[i] << " ";
} -
PumpkinSeed
addikt
válasz attis71 #2573 üzenetére
Mivel a fejlődésed érdekében nem szeretném megcsinálni helyetted itt egy részletes magyarázat:
(Ha bárminemű hibát találtok benne javítsátok én se vagyok túl nagy szakértő, illetve a kódom nem egy professzionális kód amelynek a futásideje n elemű tömb esetén is 1 nanomásodperc, úgy kérném véleményezni, hogy kezdő vagyok.)Adott az a[] tömb amiben bizonyos számú szám tárolódik. Ezen kívül létrehozol egy tömböt ami ugyan annyi elemet tárol mint az a tömböd, legyen mondjuk res[sizeof(a)]; Ha jól tudom C++-ban a sizeof függvény határozza meg a tömb méretét. Azért kell ugyan annyi eleme legyen a result tömbnek mint az eredeti tömbnek, mert tegyük fel, hogy egy ismétlődő elem sincs ezért mindent át kell másolni. (Nem tudom, hogy C++-ban hogyan néznek ki a dinamikus tömbök, vagy vektorok, vagy van-e megoldás erre.) Majd következik a program lényegi része. Kezdődik egy for ciklussal, amely végig indexeli a result tömböt i-től sizeof(a)-ig. Mivel az első elem átmásolásakor biztos nem lesz ismétlődés így egy if feltételben akár meg is lehet adni, hogy csak a második lefutás után vizsgálja meg az értéket, így az első futás egyszerűen res = a(i);. A következő futás lesz az érdekes ugyanis ide kell egy új for ciklus ahol ismét beindexeled a res[] tömböt, de j-től csak i-ig mész el. Itt megvizsgálod, hogy a[k] == res[j];,(a k változó a későbbiekben lesz érdekes érdemes 1-re deklarálni.) ha igen akkor egy változót ami most mondjuk cnt növeled eggyel, cnt++. Ha ennek a for ciklusnak a végén a cnt értéke 0 akkor a res tömbben az adott a(i) még nem szerepel ha 0-nál nagyobb akkor már szerepel. Értelemszerűen jól működő kód esetén ez nem lehet nagyobb 1-nél. Majd a cnt változót nullázod, ugyanis ha mindig benne hagynád az értéket akkor az első egyezés után soha többet nem másolna át értéket.
Itt fontos rész következik, ha a cnt értéke mint már mondottam 0-nál nagyobb akkor k++ ha viszont 0 akkor előbb átmásolod res(i) = a[k]-val az értéket majd utána k++.Remélem érthető volt és tudtam vele segíteni.
"Akinek elég bátorsága és türelme van ahhoz, hogy egész életében a sötétségbe nézzen, elsőként fogja meglátni benne a fény felvillanását." - Kán
-
cattus
őstag
Üdv.!
C++ alatt lehet olyat csinálni, hogy az ABC egyes betűinek előfordulási számát egy szövegben letárolom egy tömbben úgy, hogy pl. az "E" betű számosságát a t['E'] helyen lévő szám adja meg (azaz ahelyett, hogy az "E" betű számát a t[5] adná meg, lehet-e erre t['E']-ként hivatkozni?)
[ Szerkesztve ]
Do the thing!
-
jattila48
aktív tag
Sziasztok!
Az alábbi kódrészlet lefordul és le is fut, pedig szerintem nem kéne.
class Q{
private:
friend class P;
static int q(){return 9;}
};
class R : public Q{
//int r(){return Q::q();}
};
class P{
public:
int p(){return R::q();}
};void main(void)
{
P p;
printf("%d\r\n",p.p());
}A probléma az, hogy a P osztály eléri a az R::q-t, holott a q az R ősének (Q-nak) private tagja, és a P a Q-nak barátja, nem az R-nek. A kikommentezett sor természetesen nem fordul le, mert az R számára a private q tag nem elérhető. Úgy tűnik, hogy az R::q() hívás valójában Q::q(), csak nem értem miért.
[ Szerkesztve ]
„Kétségtelen, hogy nem tudjuk, mit tegyünk, de felkészültek és elszántak vagyunk.” - Olaf Scholz német kancellár
-
nagyúr
válasz jattila48 #2581 üzenetére
Ugye ez egy statikus fuggveny, forditasi idoben eldol, hogy melyik fuggvenyt hivja. Megnezi az R-t eloszor, latja, hogy nincs ott ilyen nevu fuggveny. Megy felfele az oroklesi hierarchiaban, megtalalja Q::q-t. Ezek utan megnezi, hogy a lathatosagi szabalyokkal mi a helyzet, es latja, hogy Q::q az lathato P-bol, mert P friendje Q-nak, es mar kesz is.
Ha R::q-t is definialnad, akkor mar nem mukodne. Tehat a fordito _eloszor_ keresi meg a fuggvenyt, amit hivni kellene, utana ellenorzi a lathatosagot.
[ Szerkesztve ]
while (!sleep) sheep++;
-
nagyúr
válasz jattila48 #2583 üzenetére
Jah, a lathatosag ellenorzese csak compile-time tortenik, es kizarolag azt nezi meg a fordito, hogy az az osztaly, amin _keresztul_ elered a metodust, az friend-e vagy sem. Ha a fuggveny, amit hivsz, virtualis, akkor igazabol barmi megtortenhet, lenyegeben a leszarmazott osztalyok azonos nevu (virtualis) metodusai mind elerhetoek lesznek a hivo (friend) szamara.
while (!sleep) sheep++;
-
dabadab
titán
"Ha a fuggveny, amit hivsz, virtualis, akkor igazabol barmi megtortenhet, lenyegeben a leszarmazott osztalyok azonos nevu (virtualis) metodusai mind elerhetoek lesznek a hivo (friend) szamara."
Igen, de csak akkor, ha az adott objektumra base class tipusu pointerrel hivatkozik az ember (mert kulonben latja a fordito, hogy a leszarmazott methodjat kellene hivni)
#include <stdio.h>
class Q
{
protected:
friend class P;
virtual int q()
{
return 9;
}
};
class R : public Q
{
protected:
virtual int q()
{
return 3;
}
};
class P
{
public:
int p()
{
R r;
Q* q=&r;
//return r.q(); // NOT OK
return q->q(); // OK
}
};
int main(void)
{
P p;
printf("%d\r\n",p.p());
}DRM is theft
-
attis71
tag
válasz PumpkinSeed #2576 üzenetére
Köszi.
-
LW
őstag
válasz attis71 #2588 üzenetére
Szia!
Papír-ceruza módszert ajánlom. Vezesd vég az algoritmust a bemeneti számokkal és úgy tanulod meg a legjobban. A belső for-nak két megállási feltétele van. Egy a túlindexelés ellen, egy a kereséshez. Ha megtalálta, akkor megáll, ellenkező esetben a túlindexelés ellen lép ki. Utóbbi esetben a tömb elemszáma == index.
Hol tanulsz?
-
attis71
tag
Szia,
meg fogattam a tanácsodat.
Értem most már a belső for-t.
A belső for első vizsgálatánál a feltétele első fele hamis érték ezért rövidzár miatt kilép,
az if-ben a kifejezés igaz és átmásolja numbers tömb 0.-ik elemét az output tömb-be és
counter-t 1 -el növeli. Jön a külső for, majd megint a belső. Itt már a belső for első feltétele
igaz (j<counter) a második miatt addig megy amíg azonosságot nem talál vagy túl indexelődik
(növeli j-t +1).
Ha talál kiugrik a belső for-ból átmásolja és counter-t +1.
Kérdés az if a túlindexelés miatti kiugrás miatt kell?
Ha valamit rosszul értelmeztem, javíts ki létszi.attis71
-
jattila48
aktív tag
BUÉK mindenkinek!
Egy kis agyalgás: Általában rossz ötlet publikusan származtatott osztályban elrejteni az ős valamely tagfüggvényét, mivel ez esetben a származtatott osztályból létrehozott objektum különbözőképpen viselkedik, ha az ős osztályra mutató pointeren/hivatkozáson keresztül hívjuk meg az adott tfv.-t, mint ha közvetlenül. Ez idáig tiszta sor, de mi a helyzet a statikus tfv.-ekkel? A statikus tfv.-ek ugyebár nem az objektumhoz, hanem az osztályhoz kötődnek (vagyis nem függenek/nincsenek hatással egy adott objektum állapotától/ra), így az előző tanács ilyenkor értelmetlen. Sőt, az ilyen osztályok könnyen lehetnek template argumentumok, amikor pontosan az kell, hogy a származtatással létrehozott osztály adott statikus tfv.-e másképp viselkedjen, mint az ős osztályban (leginkább ezért készül belőle származtatott osztály). Mi a véleményetek?
„Kétségtelen, hogy nem tudjuk, mit tegyünk, de felkészültek és elszántak vagyunk.” - Olaf Scholz német kancellár
-
proof88
addikt
válasz jattila48 #2592 üzenetére
Hello,
a mondandód első felére az a válaszom (ősosztály függvényének elfedése), hogy igazad van, és ezért virtuálisként kell definiálni az ősosztályban azt a függvényt, amit a származtatott osztály felüldefiniálhat, így nem lesz gond. Ezért is szoktuk alapból virtuálisként definiálni a destruktort is, hogy mindenképpen lefusson a származtatott osztály destruktora is törléskor.
Statikus tagokat nem lehet felüldefiniálni. Én csak simán átgondolom ilyenkor, hogy biztos statikus tagot akarok-e ebben az esetben. -
InterFox
senior tag
Sziasztok.
Befejeztem a C++ alapjait, most szeretnék továbblépni egy kis 3D programozásra.
Milyen fordító programot és oktatóanyagot javasoltok erre?
DEV C++, Code block vagy már?PSN ID: interfoxthedead
-
proof88
addikt
válasz InterFox #2594 üzenetére
Hello, DevCpp-t sajnos már nagyon régóta nem fejlesztik, legalábbis a legújabb verzió is már nagyon sok éve jött ki. Inkább próbálj CodeBlocks-ot, vagy Qt Creator, vagy Visual Studio Express Edition.
Milyen 3D-re gondoltál? Konkrétan a matekos háttere érdekel mélyen, vagy csak 3D-s alkalmazásokat akarsz összedobni? -
proof88
addikt
válasz InterFox #2599 üzenetére
Ha meg akarod úszni az alap dolgokat mint pl ablak létrehozása, OpenGL vagy D3D inicializálás, stb., akkor valamilyen már megírt játék- és/vagy 3D-motort ajánlok, amit felhasználhatsz játékkészítésre. Manapság már sok ilyen van, amihez ingyen hozzá lehet férni. Unity például. De itt van egy lista.
Szerintem érdemes ilyenekkel megismerkedni, bár én még mai napig egyiket sem próbáltam ki játékkészítés céljából. Én anno több mint egy évtizede még DarkBASIC-et kezdtem el használni játékkészítésre, akkoriban még programozásban is kezdő voltam, de kényelmes volt hogy egy függvényhívás egy 3D-s modell betöltése, stb. De akkoriban még nem voltak ilyen fejlett motorok elérhetően, mint ma.
Ú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!
- KIEMELT AKCIÓ: iPad Pro 9.7" Rose Gold 32GB wifi (MM172FD/A) kitűnő állapotban szuper áron eladó !!!
- Sony Xperia 10 V eladó ! Használt, sok garanciával.
- 2 év gari: Olcsó DDR5 PC/I5 12400F/16GB/500GB M2/Suprim X RTX 3070/Futár is
- -70% HP EliteBook 850 G7:i7 10610U,32GB RAM,512GB SSD,15.6" FHD,vil.MAGYAR numeri.bill,WWAN 4G,Win11
- ASUS TUF Gaming GeForce RTX 4070 Ti 12GB
Állásajánlatok
Cég: Ozeki Kft.
Város: Debrecen
Cég: Promenade Publishing House Kft.
Város: Budapest