- Jóárasított AI PC-ket szeretne látni az AMD
- Melyik tápegységet vegyem?
- Apple MacBook
- AMD K6-III, és minden ami RETRO - Oldschool tuning
- AMD Ryzen 9 / 7 / 5 / 3 3***(X) "Zen 2" (AM4)
- Amlogic S905, S912 processzoros készülékek
- Vezetékes FEJhallgatók
- ThinkPad (NEM IdeaPad)
- Azonnali notebookos kérdések órája
- NVIDIA GeForce RTX 5080 / 5090 (GB203 / 202)
Új hozzászólás Aktív témák
-
lamajoe
tag
Szerbusztok drága emlős társaim!
Segítsetek már mert az agyam kifolyik
Milyen ingyenes vagy trial résszel rendelkező C++ all in one fordítót tudnátok ajánlani? Jó ha adtok letöltési linket, de ha nem segáz, van egy titkom az a neve, hogy Google
Régebben borlandot használtam de szerintem ez meghalt, sehonnan se tom lekapni....
Bocs ha kicsit hülye vagyok ma de tényleg agyhalál fatalerror kékdeath! -
kittamama
csendes tag
válasz
Sk8erPeter #1097 üzenetére
Hello!
Sikerült az Union find nélkül is megcsinálni, csak == kellett megvizsgálnom, hogy rokonok-e.
Köszönöm, hogy válaszoltatok -
kittamama
csendes tag
válasz
Sk8erPeter #1095 üzenetére
Hello!
Március óta tanítják nekünk heti másfél órába (vagyis 10 alkalommal), szóval nem én vagyok a hibás, ha 3 hónap alatt nem vagyok profi.
Az eljutottam valameddiget meg úgy értettem, hogy már megvan a tömb, csak ezt az uniót nem tudom benne megcsinálni.
Pszeudokódot meg azért nem tudom c++-ra átültetni, mert nem tudom mit jelent a xRoot meg az x.parent. -
Sk8erPeter
nagyúr
válasz
kittamama #1094 üzenetére
"de nem tudom, hogy c-ben hogy valósítsam meg."
De Te a C++ topicba jöttél!Amúgy meg nem értem, ha eljutottál valameddig, akkor azt hogyan kell érteni? Szépen papíron levezetted magadnak, de a kódírásig már nem jutottál el?
Bár nem néztem végig, de a Gyuri16 által imént linkelt Wikipédia-cikkben vannak pszeudokódok is.
Ha azt nem tudod átültetni C++-ra, akkor valószínű, hogy a házi feladattal egyedül tényleg nem sokáig jutnál. Mással teljesen elkészíttetni meg totál semmi értelme, abból semmit nem tanulsz.Ha mutatsz kódot, amiből látszik, hogy próbálkoztál vele egy ideje, és van elképzelésed, de elakadtál, valaki a topicban biztosan fog tudni segíteni az előrelépésben, ha viszont egyáltalán nem megy a kódolás része, akkor valószínűsíthető, hogy nem fog megoldódni ez az ügy, legalábbis nem ebben a topicban vagy nem ingyér'.
===
(#1093) Gyuri16: igen, lehet, hogy le kéne írni az első hozzászólásban, hogy "puszira nincs komplett feladatgyártás, a topic nem erről szól
".
-
kittamama
csendes tag
válasz
Sk8erPeter #1092 üzenetére
Addig eljutottam, hogy halmazba rendezzem a rokonokat és utána megszámolom a halmazokat, de nem tudom, hogy c-ben hogy valósítsam meg.
-
Gyuri16
senior tag
válasz
kittamama #1091 üzenetére
Union find algoritmust hasznalhatod. az egyes halmazok az egymassal rokonsagban allo emberek fogjak alkotni. a megoldas a halmazok szama.
Sk8erPeter: +1, azt hiszem erre a szovegre gyarthatnank egy sablont, vagy vicces kepet vagy valamit
-
Sk8erPeter
nagyúr
válasz
kittamama #1091 üzenetére
Így nem sok esélyed van, a fórumot látogatók nem valószínű, hogy azzal szeretnék tölteni a hétvégéjük utsó napját, hogy "puszira" megcsinálnak valakinek egy feladatot a nulláról. Ha jutalmat ajánlanál érte, VAGY eljutottál volna valameddig, és konkrét kóddal, egész konkrét kérdésekkel, segítségkéréssel jöttél volna a topicba, úgy biztosan bárki szívesen segítene.
-
kittamama
csendes tag
Hello!
Valaki segítene ebben:
Adott N szülő-gyerek kapcsolat az X[N,2] mátrixban. (Pl. ha az 1. ember szülője a 2.-nak, a 2. pedig a 3.-nak, akkor N=2 és a mátrix a következőképpen néz ki:
1 2
2 3.)
Készíts C++ programot, amely megadja annak a legnagyobb csoportnak a létszámát, amelyben senki sem rokona senkinek! A mátrixot (N-et és X elemeit) klaviatúráról kell beolvasni, és az alapvető ellenőrzéseket el kell végezni az adatokon (pozitív számok-e). Beadandó: a program, a teljes dokumentáció, és –a mintadokumentációnak megfelelő-en– a tesztbemenetek fájljai!
Nem vagyok ebben jó és éjfélre le kellene adni a programot, de nem tudom megcsinálni.
Válaszotokat előre is köszönöm -
WonderCSabo
félisten
Próbából leforgattam a kódodat (a vackokat kigyomlálva) és a fajl<<elotte<<endl; sorban hibát dob. Ami nem csoda, hiszen itt vektorból fáljba akarsz írni, és ez magától nem fog működni, kell írni operátort hozzá. Rengeteg dolgot tudnék még mondani a kódra, de azt majd csak akkor, ha esetleg kérdezed, viszont ezt gondoltam leírom, hiszen le se fordul a kódod, nem is működik.
-
Sk8erPeter
nagyúr
int _tmain(int argc, _TCHAR* argv[])
Akkor ezt felejtsd el!
Ez viszont jó helyette:
int main(int argc, char *argv[])Viszont mivel úgysem használod fel az argumentumokat, ez is elég:
int main()---
system("pause");
Na, már megint...Ezt is felejtsd el. Ebben a topicban és a sima C-s topicban is már ötvenmilliószor volt szó róla, hogy ez nem jó.
Itt én is leírtam. Akár cin.get() is jó helyette C++ esetén.
Szerk.: ja, és tényleg tök felesleges ennyi szart beinclude-olni, amikor nem használod. Mindig csak a szükséges könyvtárakat include-old, ne növeld feleslegesen a kódod és a lefordított fájljaid méretét!
Kód bemásolásakor:
miután beillesztetted a kódodat, jelöld ki, és kattints a Programkód gombra. Így áttekinthető lesz. -
WonderCSabo
félisten
Mivel ahogy látom nem használsz ékezetes karaktereket, teljesen felesleges ide a TCHAR, használj helyette char -t.
Minek includeolsz ennyi cuccot, amikor nem is használod őket?
A system("pause")-t meg felejtsd el, használj helyette vmi más portolható megoldást.A kódot pedig programkód formázással küld be a hszbe.
-
Mar222
csendes tag
// proba.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
#include <vector>
#include <algorithm>
#include <numeric>
#include <cctype>
#include <cstdlib>
#include <iomanip>
#include <cmath>using namespace std;
struct cucc{
string nev;
string ertek;
};
//----------------
string b="";
string a="";
vector<cucc>adatok;
vector<string>elotte;
//---------------------------void feldolgoz(string sor){
cucc tmp;
int db=0;
for(int i=0;i<sor.size();i++){
if(sor.at(i)!='='){
db++;
}else{
break;
}}
if(db==sor.size()){
elotte.push_back(sor);
}else{
tmp.nev=sor.substr(0,db+1);
tmp.ertek=sor.substr(db+1,sor.size());
adatok.push_back(tmp);
}
}void beker(){
ifstream fajl;
string sor;
fajl.open("server.properties");
while(getline(fajl,sor)){
feldolgoz(sor);
}
}
void eldont(){
string t="=";
cout<<"Mit akarsz atirni?: "<<endl,
cin>>b;
cout<<"Mire akarod atirni a(z) "<<b<<" -t?: "<<endl;
cin>>a;
cout<<endl;b=b+t;
for(int i=0;i<adatok.size();i++){
if(adatok.at(i).nev==b){
adatok.at(i).ertek=a;
}
}}
void kiir(){
for(int i=0;i<elotte.size();i++){
cout<<elotte.at(i)<<endl;
}
for(int i=0;i<adatok.size();i++){
cout<<adatok.at(i).nev<<adatok.at(i).ertek<<endl;
}}
void felulir(){
ofstream fajl;
fajl.open("server.properties");for(int i=0;i<elotte.size();i++){
fajl<<elotte<<endl;
}for(int i=0;i<adatok.size();i++){
fajl<<adatok.at(i).nev<<adatok.at(i).ertek<<endl;
}fajl.close();
}
int _tmain(int argc, _TCHAR* argv[])
{
beker();
kiir();
cout<<endl;
eldont();
kiir();
cout<<endl;
felulir();
system("pause");
return 0;
}igen, tisztában vagyok vele, hogy nem konvertálás, csak ez maradt meg bennem
-
Mar222
csendes tag
Helló, kezdő vagyok programozás terén. Nos a következő problémám lenne: Készítettem egy programot windows alatt és ezt szeretném linux alatt futtatni, viszont amikor beírom terminálba a konvertáláshoz szükséges parancsot (g++ -o nev nev.cpp), akkor a következő hibát írja ki: TCHAR has not been declared. Mi okozza ezt a hibát, és hogy tudnám ezt kiküszöbölni? Választ előre is köszönöm
-
Jester01
veterán
válasz
WonderCSabo #1082 üzenetére
Miért őrülne meg? Az olvasási próbálkozás után a !f (ami igazából ugye f.fail()) szépen kilép. Probléma egy szál se
-
Jester01
veterán
válasz
WonderCSabo #1080 üzenetére
Nem, mert akkor az utolsó karaktert kétszer is feldolgozza. Példa
-
Jester01
veterán
válasz
FireKeeper #1078 üzenetére
Pedig az jó. Mint írtam is, az a default egyébként.
#include <fstream>
int main(int argc, char *argv[])
{
std::fstream f("test.txt");
while(true)
{
char c;
f >> c;
if (!f) break;
c ^= 0x20;
f.seekp(-1, std::ios::cur);
f << c;
f.seekp(0, std::ios::cur);
}
return 0;
} -
FireKeeper
nagyúr
válasz
WonderCSabo #1076 üzenetére
azzal nincs is gond.
csak hogy hogyan nyissam meg a file-t
ezzel próbáltam, de nem módosította a file-t:fstream infile(Filename, fstream::in | fstream:: out);
-
Jester01
veterán
válasz
FireKeeper #1075 üzenetére
Ha nem baj, hogy esetleg lassú lesz akkor read-write kell megnyitni a fájlt (ez egyébként fstream esetén default), és seekp-vel visszalépni az éppen beolvasott karakterre majd felülírni. Szabvány szerint írás-olvasás váltásnál kötelező egy seek, szóval a kiírás után, bár a pozíció az jó, mégis kell egy újabb seekp.
-
WonderCSabo
félisten
válasz
FireKeeper #1075 üzenetére
De ebben mi a nehéz?
Csinálsz egy tömböt (mondjuk egy n*2-et), amiben tárolod az eredeti karaktereket és a titkosított megfelelőjüket. Amikor beolvasol egy karaktert, kikeresed azt a tömbből, és a titkosított megfelelőjét írod le helyette.
-
FireKeeper
nagyúr
sziasztok!
egy szöveges fájlokat "titkosító" (azért van idézőjelben mert irtó gagyi, betűkeveréses titkosítás csak, de háziba ez is jó), szóval titkosító programot csinálok, és abban kéne egy kis segítség, hogy az adott problémát hogy tudnám esetleg megoldani:
a program a fájlon karakterenként végzi a titkosítást.
azt szeretném megcsinálni, hogy a program beolvas egy karaktert, kikeresi a titkosított megfelelőjét, és az eredeti fájlba írja vissza a forráskarakter helyére. -
Gyomman
aktív tag
válasz
Jester01 #1073 üzenetére
Igen, rájöttem, h az segített volna... Közbe rájöttem magamtól, hogy a const char* típusú fájlra nem akart működni (azt hittem pedig, h azt tudja kezelni, de mégse), így specializáltam a függvényt (meg átírtam végtelen ciklusból
) és most már működni látszik, köszönöm az útmutatásokat!
-
j0k3r!
őstag
válasz
Sk8erPeter #1070 üzenetére
koszonom szepen, az inicializalo lista nem volt teljesen tiszta
-
Gyomman
aktív tag
válasz
Sk8erPeter #1070 üzenetére
Tényleg nagyon nem láthatok valamit, mert azon kívül, hogy elnéztem, h cím szerint adjam át a tempet, nincs változás a kritikus részben, a kiegészített rész meg (és mégegyszer elnézést, h nem másoltam hozzá tesztprogramot és osztályt) ugyanaz, mint énnálam egyébként azzal az egy különbséggel, h nálam friend az operator>>.
template<typename G>
class F_file{
unsigned length;
FILE* file;
char* nev;
char* utvonal;
public:
..
template <typename E> friend void operator>>(istream&, F_file<E>&);
.. -
Sk8erPeter
nagyúr
válasz
Gyomman #1069 üzenetére
Azt egyáltalán megnézted, mit VÁLTOZTATOTT az operator>> függvényben?
Csak mert a hsz.-edből nem úgy tűnt.
Jester01 megmutatta a hiányosságokat a Te kódodban, és kiegészítette még egy lehetséges példakóddal is.(#1068) j0k3r!: ez az F_file osztály konstruktora, aminek van egy inicializáló listája is, ami értéket ad az egyes tagváltozóknak, igazából csak azért írta bele a kódba, mert Gyomman teljesen kihagyta az F_file kódját, így másnál nyilván elég nehéz lenne kipróbálni, miért is nem fordul a kód.
-
Gyomman
aktív tag
válasz
Jester01 #1066 üzenetére
Szia!
Elnézést, ha keveset másoltam be a programomból, de egész jól reprodukáltad, csak annyi a különbség, hogy nekem friend az operator>>, egyébként ugyanez (még pár plusz tagfüggvénnyel megspékelve).
Fura, h ennek ellenére amit te csináltál az lefordul, az enyém meg mégse.Természetesen ügyeltem arra, hogy a megadott bemeneti stream és elem párosra létezzen operator>>
Én ugyanúgy olyan típusokkal dolgozom, amire létezik az operator>>, csak alapból azt írja ki mégis hibának, hogy binary '>>' : no operator found which takes a left-hand operand of type 'std::istream' (or there is no acceptable conversion).Vagy mégiscsak elnézek valamit.
Azt akarnám am csinálni (ezek szerint rosszul, de arra majd rájövök, csak egyelőre ezen a problémán essek túl), hogy egy streamről jön egy adatfolyam hossza, majd utána maga az adat és a hosszát beolvasom a fájlhosszba, az adatot pedig utána a fájlba.
-
j0k3r!
őstag
válasz
Jester01 #1066 üzenetére
hello!
valoszinuleg nagyon alap kerdes, de sajnos ez a resz nem tiszta nekem a kododban:
F_file(const char* _utvonal, const char* _nev)
: file(0), length(0), nev(_nev), utvonal(_utvonal) {};mit csinal a fentebb beillesztett kod? (volna egy tippem, de nem akarok hulyeseget megjegyezni)
-
pityaa23
senior tag
válasz
Sk8erPeter #1065 üzenetére
Látod-látod! Vannak ilyen elvetemültek, csak elkéstem!
-
Jester01
veterán
válasz
Gyomman #1064 üzenetére
Már csak a hibaüzenet hiányzik, no meg hogy teljes lefordítható és futtatható kódot prezentálj. Ebből ugyanis hiányzik maga a példányosítás illetve az egész F_file. Én vettem a fáradságot és értelemszerűen kipótoltam valamivel, az szó nélkül működik. Természetesen ügyeltem arra, hogy a megadott bemeneti stream és elem párosra létezzen operator>> (arra gondolok, hogy neked esetleg ez hibádzik).
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
template <typename G>
class F_file
{
public:
F_file(const char* _utvonal, const char* _nev)
: file(0), length(0), nev(_nev), utvonal(_utvonal) {};
FILE* file;
int length;
const char* nev;
const char* utvonal;
};
template<typename G>
void operator>>(istream& in, F_file<G>& F)
{
if (F.file) fclose(F.file);
char* ttemp=new char[strlen(F.nev)+strlen(F.utvonal)+5];
strcpy(ttemp,F.utvonal);
strcat(ttemp,F.nev);
strcat(ttemp,".dat");
F.file=fopen(ttemp,"a");
G temp;
int len;
(in>>len).ignore(1); //szóközt eldobjuk
F.length+=len; //hosszt megnöveljük
while((in>>temp).ignore(1))
{
fwrite(&temp,sizeof(G),1,F.file);
}
delete [] ttemp;
}
int main(int argc, char *argv[])
{
F_file<int> f("/tmp/", "test");
cin >> f;
return 0;
}Az fwrite hívásból mellesleg hiányzott egy & jel, és úgy egészében véve sem értem mit akarsz csinálni, de ez így legalább valamit csinál
-
Gyomman
aktív tag
válasz
Jester01 #1063 üzenetére
template<typename G>
void operator>>(istream& in, F_file<G>& F)
{
fclose(F.file);
char* ttemp=new char[strlen(F.nev)+strlen(F.utvonal)+5];
strcpy(ttemp,F.utvonal);
strcat(ttemp,F.nev);
strcat(ttemp,".dat");
F.file=fopen(ttemp,"a");
G temp;
int len;
(in>>len).ignore(1); //szóközt eldobjuk
F.length+=len; //hosszt megnöveljük
while((in>>temp).ignore(1))
{
fwrite(temp,sizeof(G),1,F.file);
}
delete [] ttemp;
}Itt lenne szegény kód. Az eleje az csak annyi, h megnyitom a fájlt (kicsit bonyolultan van megoldva igaz), aztán az in>>temp résznél már szól, h neki az nem működik. Ha az ignore-on kívül teszem, akkor is szól, nem tudom hol lehet a baj.
-
Jhonny06
veterán
válasz
Sk8erPeter #1058 üzenetére
Én így ránézésre biztos meg fogom írni, jó kis gyakorlás, csak nem ma éjfélig.
Nem is lenne ezzel probléma amúgy, mert mindkettőnk jól jár, de tényleg időben kéne szólni.
-
Gyomman
aktív tag
Sziasztok!
Az lenne a helyzet, hogy lenne egy megoldatlan template-s problémám. Ugyanis az lenne a feladat, hogy input streamről beolvassak egy generikus fájlba adatokat. Viszont nem tudok olyan függvényt, amely erre jó lenne, mivel az in.read char*-ot vár (és nem bármilyen generikus adatot), az in>> operátora meg megint csak nem akarja az igazságot. Valakinek van valamit ötlete?
-
pityaa23
senior tag
válasz
Sk8erPeter #1058 üzenetére
Teljesen jogos amit mondasz, de egy próbát megért. Hátha van épp valaki aki unatkozik, és szabadidejében épp elszórakozna egy ilyennel. Természetesen ha olyan fontos lenne, akkor nem csokival erőlködnék. Egyáltalán nem kötelező ezt megcsinálni.
-
Sk8erPeter
nagyúr
válasz
pityaa23 #1057 üzenetére
A nulláról egy csokiért nem hiszem, hogy túl sokan tolakodnának egy ilyen jellegű feladat megoldásáért.
Akkor lenne esélyed, ha 1.) kicsit motiválóbb jutalmat ajánlanál, VAGY 2.) már elkészítetted volna a feladat nagy részét, és ott kérnél segítséget, ahol elakadtál.Ráadásul talán időben kellett volna szólnod.
Igazából nem is értem, egyes személyek miből gondolják, hogy a topic látogatóinak legjobb szórakozása mások házi feladatának megírása a nulláról.
-
pityaa23
senior tag
Sziasztok!
Suliban plusz pontért kaptunk házit, nekem sajnos nem volt időm még foglalkozni ezzel a tárgyal így ma 1 nap tanulás után nem tudom megoldani, de ha valaki megcsinálná, szívesen adok cserébe vmit! (sör, csoki...stb)
Ez volna a feladat:
10 pontos házi feladat
Definiáljon egy saját maga által kigondolt értelmes feladat megoldására egy osztályt,
legyen(ek) benne:
· legalább 4 adattag, dinamikus adattag esetén 2 is elegendő
· kétféle konstruktor, a paraméteres vegye át az adattagok kezdőértékét, a paraméter
nélküli pedig olvassa be a billentyűzetről az adattagokat
· destruktor, ha szükséges
· adattagokat lekérdező függvények
· FajlbaIr() függvény, mely az adattagokat kiírja egy bináris állományba
· FajlbolOlvas() függvény, mely az adattagokat egy szöveges állományból olvassa be
· két darab függvény, melyek az adattagokon valamilyen értelmes műveleteteket hajtanak
végre
A főfüggvényben definiáljon két objektumot (a kétféle konstruktorhoz) és tesztelje a tagfüggvényeket!
Az osztály definíciója külön .h fejlécállományban legyen!
A feladat megfogalmazása megjegyzésben legyen benne a forráskódban!
Házi feladat beküldésének határideje: 2011. május 5. éjfél
módja: gyakorlatvezető címére e-mailbenMint látjátok az idő sürget...
-
Gyuri16
senior tag
válasz
dani0907 #1049 üzenetére
megneztem valgrind-dal ( valgrind --leak-check=yes -v ./strc ), eredmeny:
==6235== 871 errors in context 1 of 1:
==6235== Mismatched free() / delete / delete []
==6235== at 0x4023881: operator delete(void*) (vg_replace_malloc.c:387)
==6235== by 0x8048D80: stringc::operator=(stringc) (stringc.hpp:61)
==6235== by 0x8048F98: load(_IO_FILE*, stringc) (stringc.hpp:103)
==6235== by 0x8049073: test_1() (strc.cpp:17)
==6235== by 0x80491C0: main (strc.cpp:42)
==6235== Address 0x42c5f20 is 0 bytes inside a block of size 1 alloc'd
==6235== at 0x40243B0: operator new[](unsigned int) (vg_replace_malloc.c:299)
==6235== by 0x8048C46: stringc::stringc(stringc const&) (stringc.hpp:46)
==6235== by 0x804905A: test_1() (strc.cpp:17)
==6235== by 0x80491C0: main (strc.cpp:42)(sorszamok nem fognak egyezni, mert kivettem belole az ifdefeket)
ebben a fuggvenyben:
stringc stringc::operator=(stringc s){
if(this == &s)
return *this; //önmagába nem másol
delete p;
h=s.h;
p= new char[h+1];assert(p!=0);
strcpy(p,s.p);
return *this;
}delete p; helyett delete [] p; kell.
-
dani0907
csendes tag
válasz
Sk8erPeter #1052 üzenetére
Megcsináltam ugyanúgy mint a hsz-be, de ugyanúgy, csak akkor jelez, ha nincs destruktor.
cporta meg csak egyetlen szót ad hibaüzenetnek -
Sk8erPeter
nagyúr
válasz
dani0907 #1051 üzenetére
És gondolod, a levlistás emberkék nem olvassák ezt a fórumot?
(Én is BME-s vagyok, simán lehetnék akár évfolyamtársad is.
)
Igen, Cporta elég háklis bárminemű hibára, mert Linuxos fordító.
Megpróbálhatnád esetleg Te is azzal.
Nekem most sajnos nincs időm debuggolgatni, de remélem, valaki rá tud nézni a kódodra!Még egy:
"Egyébként, benne van a #define _CRTDBG_MAP_ALLOC #include <stdlib.h> #include <crtdbg.h>"
És a többi dolog, ami a linkelt hsz.-ben látszik?
Lehet, hogy nem ártana az sem.Amúgy mi az egész pontos hibaüzenet? Vagy csak ennyi, h memóriaszivárgás? Én már nem emlékszem, kaptunk-e valami egzaktabb hibaüzit.
Mondjuk asszem nem.
-
dani0907
csendes tag
válasz
Sk8erPeter #1050 üzenetére
Igen, törlöm is ha megvan a megoldás, levlistára nem is raktam ki, mert ott csak lemásolnák, ((a kötelező kisházikat ellenőrizték, és csomóan egy megoldást adtak,be mert lenyúlták a kódokat.))
Egyébként, benne van a #define _CRTDBG_MAP_ALLOC #include <stdlib.h> #include <crtdbg.h> És ha törlöm a destruktort akkor működik is, jelzi a memória szivárgást, de ha megvan a destruktor akkor semmit, csak a cportának nem tetszik. -
Sk8erPeter
nagyúr
válasz
dani0907 #1049 üzenetére
Nem láttam még a kódodat (amúgy elég bátor dolog felrakni pastebin-re, később ezzel vigyázz, mert "Számítógépes grafika és képfeldolgozás" tárgyból emiatt könnyen plágiumvád érhet! - még ha a Te kódod is került fel netre...), DE
ide pont leírtam, hogyan lehet detektálni a memóriaszivárgás forrását: [link]Szerk.: félreértés ne essék, pastebin-re felrakni a kódot egyébként nagyon is jó dolog, csak ha para lehet belőle mondjuk házinál vagy egyéb esetben, akkor nem biztos, h jó ötlet.
-
dani0907
csendes tag
Sziasztok!
Van egy prog házim, és az lenne a gond hogy a feladatbeküldő rendszer memóriaszivárgást észlel (cporta, BME-seknek ismerős), de kipróbáltam Visual studioval, codeblocks-szal is és egyik se jelzett memóriaszivárgást.azt javasolták hogy ne fájlból olvassak D: de én úgy akarokValaki tudna segíteni?
HPP: http://pastebin.com/zjt6jz23
CPP: http://pastebin.com/313KN2h0
az example.datból olvasunk be
feladat:
Készítsen tetszőleges hosszúságú sorokból álló szöveges
állományt reprezentáló objektumot! Valósítsa meg a grep(1)
nevű UNIX program néhány, Ön által kiválasztott funkcióját! -
WonderCSabo
félisten
vagy
string s;
getline(cin, s);
f.open(s.c_str());fstream :: is_open helyett én fstream::good -ot szoktam használni
-
FireKeeper
nagyúr
válasz
FireKeeper #1044 üzenetére
azt már próbáltam,hogy a fájlnév helyére az elérési utat adom be de úgy nem működött (nem lepődtem meg rajta
).
-
j0k3r!
őstag
válasz
FireKeeper #1044 üzenetére
elvileg validalod az inputot, aztan osszefuzod egy stringbe(char *), aztan azt adod at az open-nek. pelda
-
FireKeeper
nagyúr
az megvan, hogy melyik függvényt kéne használnom (az fstream kell majd), hanem azt nem tudom hirtelen, hogy hogy kell azt kezelni, hogy a fájl nem a .exe mappájában van, hanem egy más elérési úton, hogy hogy kell beparaméterezni a függvényt, hogy bármilyen helyen lévő fájlból tudjon dolgozni.
vagyis a felhasználó megadja az elérési utat és a fájlnevet, és nekem utána ebből kell dolgoznom. -
j0k3r!
őstag
válasz
WonderCSabo #1042 üzenetére
igazabol teljesen jogos, amit mondasz (tavaszi szunet alatt eleg sokat c-ztem, aztan ott nincs fstream osztaly, biztos ezert ugrott be ez elsonek), koszonom a korrigalast
szoval akkor fstream :: open (elso parameter valtozatlanul char *), fstream :: is_open, fstream :: close -
j0k3r!
őstag
válasz
FireKeeper #1040 üzenetére
-
FireKeeper
nagyúr
sziasztok!
érdekelne, hogy hogy tudok fájlt megnyitni, ha mondjuk a felhasználótól bekérem az elérési utat és a fájlnevet egy stringbe (mondjuk "d:\mappa1\mappa2\file.txt")?
-
tamas60
csendes tag
Kellene egy olyan program ami nagy négyzetbe optimálisan el tudna helyezni adatbázisban szereplő kis négyzeteket.
Akit érdekel a téma keressen meg. -
j0k3r!
őstag
válasz
DiscoStu #1036 üzenetére
char *id vs. char id[5]
char *id egy pointer, ami a kezdocime egy karakterlancnak (karaktertombnek), aminek nem tudjuk a hosszat (futasidoben dol el), ezt hasznaljuk dinamikus memoriafoglalasnal.
amit te 2 lepesben tettel meg:
char *id; // definialtal egy pointert
id=new char[5]; // megadtad a meretetazt o megtette 1 lepesben (kihasznalva, hogy tudjuk elore, hogy max 4 karakter lehet):
char id[5]; // 5 elemu karaktertombot hoz letrefontos! mindig n + 1 db char-t kell foglalni, mivel van a vegen egy lezaro \0 (amibol kovetkezik, hogy egy karakterlanc elejet a pointer, veget a lezaro \0 hatarozza meg).
egy kis olvasnivalo evvel kapcsolatban: [link]esetleg mitől függ hogy melyik verziót érdemes használni?
attol, hogy tudod-e elore, hogy maximum (vagy pontosan) mekkora teruletet kell foglalnod.
-
DiscoStu
csendes tag
Helló
C++ órán volt egy feladat. lényege annyi hogy van egy osztály, amiben van két adattag
mindkettő char. Az egyiknél megvan a max méret (4 karakter), a másiknál nincs és kell egy
konstruktor.igy csináltam:
class a{
char *id;
char *nev;
public:
a(char *id1, char *nev1){
id=new char[5];
strcpy(id, id1);
nev=new char[strlen(nev1+1)];
strcpy(nev, nev1);
}
};Tanár megoldásában így láttam:
class a{
char id[5];
char *nev;
public:
a(char id1[], char *nev1){
strcpy(id, id1);
nev=new char[strlen(nev1+1)];
strcpy(nev, nev1);
}
};Mindekettő lefutott helyes kimenetekkel. Mégis mi a különbség? Teljesen jó megoldás
mindkettő? esetleg mitől függ hogy melyik verziót érdemes használni?előre is köszi
-
j0k3r!
őstag
válasz
Sk8erPeter #1033 üzenetére
talan ez lesz az.
-
Sk8erPeter
nagyúr
válasz
WonderCSabo #1032 üzenetére
Lehet, hogy kiveri a szememet, és csak én nem veszem észre, de a linken hol látható az API-ról a leírás?
Meg maguk az osztályok, stb.?
-
WonderCSabo
félisten
válasz
memphis_19 #1029 üzenetére
Hát, pl. Mediainfo APIval.
-
Karma
félisten
válasz
FireKeeper #1030 üzenetére
Hibás a szintaxis. *this-t hamarabb próbálhatsz meg visszaadni.
Osztályreferencia nem nagyon van, szerintem objektumreferenciára gondoltál. -
FireKeeper
nagyúr
sziasztok!
hogy tudok visszatérni egy osztály referenciájával? a
return this*; -ra emlékeztem, de azt aláhúzza. -
memphis_19
tag
Sziasztok!
Olyan kérdésem lenne, hogy egy videó fájlt kellene megnyitnom majd lekérdezni a video adatait(időtartam, képkockaszám), ezt hogyan tudnám megoldani?
Köszi a segítséget.
-
Gyuri16
senior tag
válasz
Gyuri16 #1027 üzenetére
ok, ez igy hulyeseg
kozben rajottem, mi volt a lenyegi gond, tehat az operator[] fv-nek egy referenciat kell visszaadni, itt konkretan egy pointerre.
erre jutottam, leirom azoknak, akik az elozot elolvastak es nem ertik min kinlodok
(ha esetleg lehet jobban, szoljatok)#include <iostream>
#include <vector>
using namespace std;
class ChildList {
private:
vector<int *>* v;
public:
ChildList(int n) {v = new vector<int *>(n);}
int* & operator[] (const int index);
};
int * & ChildList::operator[](const int index) {
return (*v)[index];
}
int main(int argc, char **argv) {
ChildList cl(10);
int * a = new int(5);
cl[0] = new int(5);
cl[1] = a;
cout << *cl[0] << *cl[1];
return 0;
} -
Gyuri16
senior tag
segitseget kernek pointerek vs operator overloading temaban. egy fa adatstrukturat csinalok, ahol minden node-nak lehet valamennyi pointere a gyerekeire. ezt egy vector<Node*> segitsegevel kepzeltem. elore kell lefoglalni a kontruktorban megadott szamu pointernek a tombot (akkor is ha null lesz csak az erteke) es fokozatosan hozzaadni a gyerekeket (tudom, hogy lehet jobban is, azt kesobb csinalom. a feladat osszehasonlitani a kulonbozo megoldasokat). szeretnek a Node osztalynak egy [] operatort, amivel a gyerekekhez pointerekkent lehetne hozzaferni. egyelore mindig referenciakkal csinaltam hasonlot,megmutatom mire jutottam:
class Node {
public:
int sigma;
// Node** child;
vector<Node*>* child;
int value;
Node(int sigma);
~Node();
Node& operator[](const int index);
};
Node& Node::operator[](const int index) {
return *(*child)[index];
}
Node::Node(int sigma): sigma(sigma), value(0) {
/* child = new Node *[sigma];
for (int i = 0; i < sigma; i++) {
child[i] = NULL;
}*/
child = new vector<Node*>(sigma);
}
Node::~Node() {
/* for (int i=0; i < sigma; i++) {
if (child[i] != NULL) {
delete child[i];
}
}
delete [] child;
*/
for (vector<Node*>::iterator it = child->begin(); it < child->end(); ++it) {
delete *it;
}
delete child;
}ami a kommentarokban van, az a regi megoldas tombokkel ami mukodik is jol, olyat szeretnek csak vectorral es operatorral, tehat ami eddig n->child[i ] volt az legyen n[i ] .
ezt az osztalyt kesobb szeretnem igy hasznalni:
Node n = new Node(10);
Node n[0] = new Node(10);
stb..remelem ertheto mi a problema, koszonom elore a segitseget.
-
dani0907
csendes tag
Igen Szebihez járok
A héten kellett bemutatni a specifikációt, aztán nem irtam bele semmit az operátor-átdefiniálással kapcsolatban, de nem is szólt érte egyáltalán a lab vezér. -
Sk8erPeter
nagyúr
válasz
dani0907 #1024 üzenetére
Hát amit én annak idején megcsináltam operátor-átdefiniálással, az a sorok tárolására szolgáló osztályban a következő:
string& operator[] (int n) // Indexoperátor a tároló megadott elemének elérésére (pl. itt egy adott sor)
Ez_a_te_taroloosztalyod& operator= (const Ez_a_te_taroloosztalyod&) // egyenlőség operátor a másik tároló lemásolásáraa tárolóosztályon belüli belső iterátor osztályban ezek lehetnek:
void operator++ () // pre-increment növelés
void operator++ (int n) // post-increment növelés
bool operator== (const iterator &other) const // egyenlő-e a két iterátor
bool operator!= (iterator &other) // egyenlő-e a két iterátor
string & operator* () // iterátor indirekcióTehát mint látható, igazából az iterátor osztályhoz kell pár operátor-átdefiniálással járó cucc, de amúgy tényleg nem kell annyira erőltetni.
Legalábbis nekem most épp nem jut eszembe más, de aztán amikor a feladatot megoldogatod, küldözgethetsz ide státuszjelentéseket, ha nem klappol valami, vagy eszedbe jutott újabb dolog, és akkor lehet, hogy még felmerül, hogy mégis kéne valami operátor-átdefiniálós metódus.Egykori előadónk honlapján megtalálsz egy konkrét példát az iterátor osztályról: [link]
Bár feltételezem a feladatleírásból, Te is BME-re jársz, Szebihez, vagy tévednék?
-
dani0907
csendes tag
válasz
Sk8erPeter #1021 üzenetére
Ebben a feladatban kérnek még operátor átdefiniálást, és iterátort, csak azokat nem írtam oda. Na most operátor átdefiniálásnak ebbe a feladatban van értelme? csak mert minden feladathoz be van vágva szerintem ez a feladatrész. Monjduk a + két file-t összefűz vagy nemtudom mi lehetne még. Az iterátort pedig még nem tanultuk
-
bpx
őstag
válasz
Sk8erPeter #1021 üzenetére
ezt se hallottam még, hogy ennek a módszernek ilyen szép neve van, hogy "cirkuláris buffer"
-
dani0907
csendes tag
válasz
Sk8erPeter #1021 üzenetére
Rendben, köszönöm
-
Sk8erPeter
nagyúr
válasz
dani0907 #1020 üzenetére
Hehe, csak nem "Szoftver laboratórium 2." BME-n?
Az első mondat annak idején nálam is ugyanez volt, csak nekem a tail programot kellett elkészítenem.
A tetszőleges hosszúságú sorokból álló szöveges állományt reprezentáló objektum vizsgálgatásához én cirkuláris buffert készítettem, ami tulajdonképpen egy olyan tároló, amibe folyamatosan pakolgatod bele az elemeket (én a tároló egy adott "rekeszében" a sorokat tároltam \n-ig), és amikor a tároló megtelt, akkor elkezded újból elölről feltöltögetni a tárolódat, és ezen végezgeted a grep-vizsgálatot. Ez azért jó, mert tulajdonképpen tetszőleges hosszúságú sorokból álló szöveges állományt tudsz vizsgálgatni, nem állhat elő olyan helyzet, hogy már olyan brutálisan sok memóriát foglaltál, hogy egyszerűen nincs több szabad memória (mert mondjuk minden szart eltárolsz), viszont talán egész hatékonynak mondható módja a tárolásnak.
Ja, és gondolom nálatok is úgy van, hogy STL-t nem lehet használni, így saját tárolót kell írni.A grep mondjuk elég összetett, ahogy a példa írja, válassz ki néhány megvalósítandó funkciót, ami nem tűnik olyan brutálnak (vagy ahogy érzed
), amikhez a megfelelő kapcsolók tartoznak, és azokat írd meg. Kezdd el írni, és ha elakadtál, konkrétan kérdezz rá, hogy mire gondoltál, mi nem megy, hogy szeretnéd megvalósítani, és akkor tovább is tudunk segíteni remélhetőleg.
-
dani0907
csendes tag
Üdv!
Valaki el tudná mondani hogyan kéne nekiállni / (mi a lényege) ennek a feladatnak?Készítsen tetszőleges hosszúságú sorokból álló szöveges
állományt reprezentáló objektumot! Valósítsa meg a grep(1)
nevű UNIX program néhány, Ön által kiválasztott funkcióját! -
#10382336
törölt tag
Sziasztok!
A következő kóddal lenne problémám.
BSTR clsname = SysAllocString(L"Win32_OperatingSystem");
BSTR MethodName = SysAllocString(L"Win32Shutdown");
IWbemClassObject* pClsProc = NULL;
IWbemClassObject* pInParams = NULL;
IWbemClassObject* pOutMethod = NULL;
IWbemClassObject* pClsProcInst = NULL;
hres = pSvc->GetObject(clsname, 0, NULL, &pClsProc, NULL);if( SUCCEEDED(hres) ) {
hres = pClsProc->GetMethod(MethodName, 0, &pInParams,NULL);if( SUCCEEDED(hres) ) {
hres = pInParams->SpawnInstance(0, &pClsProcInst);if( SUCCEEDED(hres) ) {
VARIANT pcVal;
VARIANT rsVal;
VariantInit(&pcVal);
pcVal.vt = VT_I4;
pcVal.lVal = 1;
VariantInit(&rsVal);
rsVal.vt = VT_I4;
rsVal.lVal = 0;
hres = pClsProcInst->Put(L"Flags", 0,&pcVal, 0 );
hres = pClsProcInst->Put(L"Reserved", 0,&rsVal, 0);if( SUCCEEDED(hres) ) {
hres = pSvc->ExecMethod(clsname, MethodName, 0, NULL, pClsProcInst, &pOutMethod, NULL);if(FAILED(hres)) {
cout << "Could not execute method. Error code = 0x" << hex << hres << endl;
Console:eadLine();
}
}
VariantClear(&pcVal);
VariantClear(&rsVal);
}
}
}[link]A kódot ennek az oldalnak a 6. pontja mintájára készítettem.
Az oldalon lévő eredeti kóddal nincs is probléma. Azonban a fenti kódot sehogy sem tudom működésre bírni.
Futtatás alatt ahogy a "hres = pSvc->ExecMethod(clsname, MethodName, 0, NULL, pClsProcInst, &pOutMethod, NULL);" részhez ér, ezt a hibaüzenetet írja ki: 0x8004102f
[link]Win32Shutdown -leírása itt.
Ha valaki tudja a hiba okát, kérem segítsen.Köszi.
-
PazsitZ
addikt
válasz
Berenyimiki #1015 üzenetére
Azt, hogy megírod a progit, lefordítod és így hívod meg: prog AI-N10
így a programod parancssorból mint argumentum kapja meg a keresendő kódot.
[link] -
WonderCSabo
félisten
válasz
Berenyimiki #1015 üzenetére
-
Berenyimiki
csendes tag
Szép napot Mesterek!
Egy olyan kérdéssel fordulok hozzátok, h van egy feladatom, ami így hangzik:
"Az adat1.txt szöveges állomány legfeljebb 7 hasznos jelből álló kódokat tárol újsor jellel lezártan.
Írjon olyan programot, ami meghatározza, hogy az adat1.txt állományban hány darab adott kódú tétel szerepel! A kódot parancssori argumentumként adjuk meg (például legyen a kód AI-N10)!"
Az lenne a kérdésem, h mit jelent az h "A kódot parancssori argumentumként adjuk meg (például legyen a kód AI-N10)!"Az adat1.txt így néz ki: AI-N10
AI-N10
AG-L08
AG-N10
AM-L
AG-L07
AI-L10
AG-L09
AM-L08
AG-N07
AG-L09
AI-N07
AI-N10
AI-N09
AI-N09
TMI-L09
.
.
.Köszi a segítséget!
-
#10382336
törölt tag
Sziasztok!
Egy olyan kérdésem lenne, hogy dev-c++ -ban hogyan lehet a console ablakot eltüntetni?
Pl.: ha csak form, vagy egy alkalmazás elindítására szeretném használni.HWND hWnd = GetConsoleWindow();
ShowWindow( hWnd, SW_HIDE );Ha ezt a két sort alkalmazom, akkor ugyan rövidebb ideig, de mégiscsak felbukkan az ablak.
-
Jester01
veterán
válasz
Sk8erPeter #1009 üzenetére
Azért van mert a csoda c++ nyelvben bizonyos dolgok kétértelműek. A te My_Mouse_Class MyMouse(); sorod egy függvény prototípus lett, mégpedig egy MyMouse függvényé ami nem vár paramétert és visszatér egy My_Mouse_Class példánnyal.
-
Sk8erPeter
nagyúr
Sziasztok!
Van egy grafika házim, a lényege, hogy egérrel kell mászkálni labirintusban, nem is nagyon részletezném, igazából csak C++ szintaktikai kérdésem van:
ha így példányosítom az osztályt (globálisan elérhető lesz, mert a feladat miatt így kell most megcsinálnom):
My_Mouse_Class MyMouse();
és aztán így hívom meg egy függvényen belül:
MyMouse.Display();Akkor Visual Studio hibaüzenete:
"Error: expression must have class type"Ha viszont így példányosítom:
My_Mouse_Class MyMouse;
és ugyanúgy hívom meg:
MyMouse.Display();
akkor semmi baja.
Egyetlen különbség a hibás változathoz képest a zárójel hiánya.A My_Mouse_Class konstruktora maga semmi különlegesség, egyelőre üres, csak inicializáló lista van ott:
My_Mouse_Class(void): mouse_x(0.0), mouse_y(0.0) {
}Vajon a void kulcsszó miatt van az eredeti hiba? A fordító ilyenkor hibát érzékel, ha mégis a zárójeles módon hívjuk a konstruktort?Nem, a void tök mindegy, ott van-e. Legalábbis tippre amúgy is "odafordítódik".
Vagy miért?
Lehet, hogy rég volt C++, de hirtelen nem vágom a magyarázatot. -
PazsitZ
addikt
válasz
Dave-11 #1005 üzenetére
Nagyon nem ajánlom. cygwin-el nekem sem ment.
MinGW-t raktam fel végül, de az pedig olyan hibákat dobált, amelyeket nem is tudtam feloldani. Az időm nagy részét azzal k*rtam el, hogy ezeket próbáltam javítani/debuggolni.
Kipróbálva winen dev-cpp-ben és linuxon gcc-vel a kódom simán fordult és amivel azelőtt napokig szenvedtem egy nap alatt összeraktam.
Szóval max fejlesztésre, de fordításra nem ajánlom a netbeans esetleges megoldását.note: Azért próbálkoztam netbeans-el, mert addig php,java fejlesztésre ezt használtam, megszoktam és szeretem.
-
Dave-11
tag
Sziasztok!
Letöltöttem egy NetBeans 6.9.1 -es verziót, és kéne hozzá compiler, ami leellenőrzi a készített fájlokat, meg amivel le tudnám futtatni őket, de sehogysem jön összePróbáltam a cygwin nevű programmal. Ki kell választani a Beans mappájában a "base directory"-t, de azt írja nincs compiler azt adott mappában, pedig YouTube-os videótutorialokon ugyanezt csinálják. Nem értem
Kérlek segítsetek! -
Jester01
veterán
válasz
WonderCSabo #1002 üzenetére
Vagy: if (strchr("+-*^/%", c))
-
j0k3r!
őstag
válasz
WonderCSabo #1001 üzenetére
#include <iostream>
using namespace std;
int main()
{ char c='+';
if(c == '+' || c == '-' || c == '*' || c == '^' || c == '/' || c == '%')
{
cout<<"jo";
}
else {cout<<"nem";}
return 0;
}nalam igy mukodik
szerk: kozben latom meglett
-
WonderCSabo
félisten
válasz
WonderCSabo #1001 üzenetére
Hülye vagyok, megvan:
if(c == '+' || c =='-' || c =='*' || c =='^' || c =='/' || c =='%')
-
WonderCSabo
félisten
Üdv!
Nagyon szégyellem magam, hogy felteszem ezt a kérdést, de nem tom miért nem működik a dolog.
Kezdek megőrülni. Egy bonyolult dolgot írok, de vmiért még az alapvető dolgok sem működnek.
Lebontottam alap példára:
ha '+' vagy '-' stb a karakter, akkor írja ki "jo"
ha egyéb más, akkor írja ki: "nem"Nekem ezzel a kóddal bmely karakterre "jo"-t ír, miért? :S
#include <iostream>
using namespace std;
int main()
{ char c='6';
if(c == '+' || '-' || '*' || '^' || '/' || '%')
{
cout<<"jo";
}
else {cout<<"nem";}
return 0;
}
Új hozzászólás Aktív témák
Hirdetés
● ha kódot szúrsz be, használd a PROGRAMKÓD formázási funkciót!
- Jóárasított AI PC-ket szeretne látni az AMD
- Melyik tápegységet vegyem?
- Apple MacBook
- AMD K6-III, és minden ami RETRO - Oldschool tuning
- E-roller topik
- Autós topik látogatók beszélgetős, offolós topikja
- Kerékpárosok, bringások ide!
- PlayStation 1 / 2
- VoLTE/VoWiFi
- Audi, Cupra, Seat, Skoda, Volkswagen topik
- További aktív témák...
- 120 - Lenovo Legion Pro 5 (16ARX8) - AMD Ryzen 7 7745HX, RTX 4070 (48 hónap garancia!)
- ÁRGARANCIA! Épített KomPhone i5 14600KF 16/32/64GB RAM RTX 5070 12GB GAMER PC termékbeszámítással
- ÁRGARANCIA! Épített KomPhone i5 14400F 32/64GB RAM RX 9060 XT 8GB GAMER PC termékbeszámítással
- AKCIÓ! MSI B460M i5 10400F 16GB DDR4 512GB SSD RX 6650XT 8GB Cooler Master MB600L Chieftec 600W
- Bomba ár! Lenovo X1 Yoga 2nd - i7-7G I 8GB I 256SSD I 14" WQHD I HDMI I W11 I CAM I Garancia!
Állásajánlatok
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest
Cég: Promenade Publishing House Kft.
Város: Budapest