Aktív témák
-
Miracle
senior tag
válasz
Jester01
#168
üzenetére
Mellesleg Miracle kódjával vigyázni kell, mert bár úgy látszik mintha új stringet adna vissza, valójában helyben fordítja meg. Ezzel két baj van: az összes többi helyen, ahol eltároltad a stringre mutató pointert szintén megfordul, illetve nem adhatsz be neki konstans stringet. Ha tehát úgy próbáltad ki pl. hogy megfordit(''abcde'') akkor az bizony segfault, mert a konstans string az nem írható, kivéve, ha erre külön kéred a fordítót (de ne tedd):
ha C kodot keszitek, akkor igyekszek olyat kesziteni, hogy az szepen simuljon a glibc-be, mert en altalaban ezt a C libet hasznalom. Szoval a fuggvenyem nem veletlenul vagy lustasagbol nem foglal helyet maganak, hanem azert, mert ez igy jobban hasznalhato, es szebben valasztja el a stringfordito viselkedest minden mastol, es igy tobb helyen fel lehet hasznalni, mint egy olyan fuggvenyt, ami maganak allokal teruletet. mindenfele C libek fejlesztoi is kifejezetten ugyelnek arra, hogy csak olyan fv foglaljon teruletet, aminek a funkcioja kifejezetten terulet allokalas, mint pl az atrdup(). persze nehany helyen meg kikerulhetetlen, hogy a lib foglaljon helyet nekunk, mert pl. valamilyen adatstrukturat kell feltoltenie, de ilyenkor a fuggveny definiciojaban szepen leirjakhogyha beleirsz halottvagy, es ami kell azt MASOLD ki, es utana szabaditsd fel az erre szolgalo fv.el. ha en allokalnek helyet, akkor konnyen elofordulhatna ilyen hiba:
str = megfordit (str); es rogton buktam nehany byteot, ami sosem jo. arrol az aprosagrol ne is beszeljunk hogy din. memoriafoglalas nem annyira gyors, mint inkabb lassu, nem minden rendszeren, es nem minden korulmenyek kozott erheto el, ha mar van 1 giga din.an foglalt memoriad linuxon pl mar konnyen lehet hogy elszall a progi meg ha 4 giga van is a masinaban. szoval egy fuggveny a leheto legkevesebb olyan muveletet vegezzen, aminek esetleg lehetnek mellekhatasai, es a leheto legkevesebb funkcionalitast valositsa meg, ami mar megfelel a specifikacionak. (szerintem)
u.i. elindexelesert sorry, elofordul nalam
-
Miracle
senior tag
windows alatt egyszer es nemolyanrossz kornyezet a devc++, freeware, google megmondja hol a honlapja. ha egyetemista vagy akkor erdemes visualstudiot megnezni campus licensszel, igaz az egy baromi nagy rendszer, kezdeni a devc++ sokkal jobb.
linux alatt g++ tetszoleges editorral (pl. (g)vim, emacs) vagy kdevelop. -
-
Miracle
senior tag
válasz
#53246592
#111
üzenetére
a temp egy lokalis valtozo, akkor lesz felszabaditva, amikor a blokk vegeter, amiben deklaraltad, tehat amikor a return meghivodik. DE! a te kodod mukodni fog, mert ertek szerint adod vissza a vektort, es mivel egy eleg egyszeru kis adatszerkezetnek tunik valoszinuleg jo hozza az alapertelmezett copy-konstruktor(ilyenkor hulyeseg sajatot irni), es ha ertek szerint adsz vissza, mint a jelenlegi helyzetben is (lehet meg ugy referenciat visszaadni, vagy akar pointert is) az fog meghivodni, es egy masik (az eredeti fugggvenyben letrehozott temporaris) CVector objektumba fogja belemasolni a temp objektumot(mezonkent). a hivasi stacken a hivas elott letrehozott objektum addig fog elni, amig ki nem ertekelodik az a kifejezes, aminek reszet kepezi. tehat ha ott a cimere allitasz egy masik referenciat, vagy pointert (amiert valoszinuleg warningot is dob a fordito) akkor hibat kovetsz el, de ha nem, akkor nincs semmi problema.
-
Miracle
senior tag
Hello.
a BC 3.x meg a 4.x meg a c++ szabvany megjelenese elotti dolgok, ezert a kovetkezo tippeket adnam:
ezt:
#include <iostream>
#include <string>
#include <fstream>
#include <set>
csereld ki erre:
#include <iostream.h>
#include <string.h>
#include <fstream.h>
#include <set.h>
es ha nem mukodik, akkor probald meg elhagyni a using namespace std; sort, mert az is elkepzelheto, h meg nem tettek a std libet a std nevterbe
ha ezek nem mukodnek, akkor a standard fuggvenyek meg nem ugy mukodnek, ahogy kellene nekik, es nem tudok segiteni sajnos, mert nincs BC++ 3.x em. -
Miracle
senior tag
Bővebben: link
sok sikert!
[Szerkesztve] -
Miracle
senior tag
válasz
silentBob
#54
üzenetére
1: NEM KELL TOBB HELYEN FELTENNI A KERDEST, ES VEGKEPP NEM KELL MINDEN HULYESEGNEK TOPICOT NYITNI, MERT ROHADT IDEGESITO!!!!
itt van 1 trinaris fa postorder bejarassal, szep kiiro es beolvas operatorokkal, a step fuggvenyt kell atirni h inorder legyen, csak ki kell cserelni 6 sor sorrendjet, de ha mar tudsz topicot nyitni nyilvan ez is menni fog.
//---------------------------------------------------------------------------
// Tree
//---------------------------------------------------------------------------
#ifndef TREE_H
#define TREE_H
#include <iostream>
#include <fstream>
#include <string>
#include <sstream>
#include <map>
#include <set>
template<class eT1>
struct tree_element
{
tree_element()
{
p_dat = new eT1();
p_left = 0;
p_mid = 0;
p_right = 0;
p_parent = 0;
}
tree_element(const eT1& t1,
tree_element* l,
tree_element* m,
tree_element* r,
tree_element* p)
{
p_dat = new eT1(t1);
p_left = l;
p_mid = m;
p_right = r;
p_parent = p;
}
~tree_element()
{
 .|. p_dat;
 .|. p_left;
 .|. p_right;
 .|. p_mid;
}
tree_element<eT1> *p_left, *p_mid, *p_right, *p_parent;
eT1* p_dat;
};
template<class cT1> class c_tree
{
public:
c_tree() :cap(0) {p_top = p_act = new tree_element<cT1>();}
~c_tree() {delete p_top;}
void reset() {p_act = p_top;}
void empty() {delete p_top; p_top = p_act = new tree_element<cT1>();}
/********** FELADAT MEGOLDÁSA ****************************************/
/**/void step(); //postorder
/**/cT1* get_first_repeating();//ez a feladat
/***************************************************************************/
bool read_tree(std :: istream& is, std :: ostream& os = std :: cout);
void print_tree(std :: ostream& os);
//Teszteléshez használt függvények
void set_act(cT1& const t1) {*p_actual -> p_dat = t1;}
int get_capacity() {return cap;}
tree_element<cT1>* get_top() {return p_top;}
tree_element<cT1>* get_act() {return p_act;}
cT1* get_data_adr() {return p_act -> p_dat;}
cT1 get_data() {return *get_data_adr();}
private:
void read_branch(tree_element<cT1> * p_a, int c, std :: istream& is, std :: ostream& os);
void print_branch(tree_element<cT1> *p_a, int c, std :: ostream& os, bool other_one = false);
tree_element<cT1> *p_top;
tree_element<cT1> *p_act;
int cap;
std :: map<int, bool> blocked_columns;
};
template<class fT1>
std::istream& operator>> (std::istream& is, c_tree<fT1>& t);
template<class fT1>
std::istream& operator>> (std::istream& is, c_tree<fT1>& t)
{
t.read_tree(is);
return is;
}
template<class fT1>
std:
stream& operator<< (std:
stream& os, c_tree<fT1>& t);
template<class fT1>
std:
stream& operator<< (std:
stream& os, c_tree<fT1>& t)
{
t.print_tree(os);
return os;
}
template <class fT1>
void c_tree<fT1> :: read_branch(tree_element<fT1> * p_a, int c, std :: istream& is, std :: ostream& os)
{
fT1 temp;
std :: string str_temp;
std :: istringstream isstr;
tree_element<fT1> *null_pointer = 0;
for(int i = 1 ; i < c ; ++i) os << ' ' << ((blocked_columns) ? ' ' : char(179)) << ' ' ;
os << ' ' << char(195) << char(196) << char(196) << char(194) << char(196);
is >> str_temp;
if (str_temp != ''x'')
{
blocked_columns[c]=false;
isstr.str(str_temp);
isstr >> temp;
p_a -> p_left = new tree_element<fT1>(temp, null_pointer, null_pointer, null_pointer, p_a);
read_branch(p_a -> p_left, c+1, is, os);
++cap;
}
str_temp = '''';
isstr.clear();
for(int i = 1 ; i < c ; ++i) os << ' ' << ((blocked_columns) ? ' ' : char(179)) << ' ' ;
os << ' ' << char(195) << char(196) << char(196) << char(194) << char(196);
is >> str_temp;
if (str_temp != ''x'')
{
isstr.str(str_temp);
isstr >> temp;
p_a -> p_mid = new tree_element<fT1>(temp, null_pointer, null_pointer, null_pointer, p_a);
read_branch(p_a -> p_mid, c+1, is, os);
++cap;
}
str_temp = '''';
isstr.clear();
for(int i = 1 ; i < c ; ++i) os << ' ' << ((blocked_columns) ? ' ' : char(179)) << ' ' ;
os << ' ' << char(192) << char(196) << char(196) << char(194) << char(196);
is >> str_temp;
if (str_temp != ''x'')
{
blocked_columns[c]=true;
isstr.str(str_temp);
isstr >> temp;
p_a -> p_right = new tree_element<fT1>(temp, null_pointer, null_pointer, null_pointer, p_a);
read_branch(p_a -> p_right, c+1, is, os);
++cap;
}
}
template <class fT1>
bool c_tree<fT1> :: read_tree(std :: istream& is, std :: ostream& os)
{
for(int i = 0; i < 3000; ++i) blocked_columns = true;
fT1 temp;
os << ''Kerem az adatokat\n'';
os << char(196) << char(194) << char(196);
is >> temp;
p_top -> p_dat = new fT1(temp);
read_branch(p_top,1, is, os);
return true;
}
template <class fT1>
void c_tree<fT1> :: print_branch(tree_element<fT1> *p_a, int c, std :: ostream& os, bool other_one)
{
for(int i = 1 ; i < c; ++i) os << ' ' << ((blocked_columns) ? ' ' : char(179)) << ' ';
os << ' ' << char (other_one ? 195 : 192) << char(196) << char(196) << char(( p_a->p_left != 0 || p_a -> p_right != 0) ? 194 : 196)<< char(196) << *p_a -> p_dat << endl;
if (p_a -> p_mid != 0)
{
if(p_a -> p_left != 0 && p_a -> p_right != 0)
{
blocked_columns[c+1] = false;
print_branch(p_a -> p_left, c+1, os, true);
print_branch(p_a -> p_mid, c+1, os, true);
blocked_columns[c+1] = true;
print_branch(p_a -> p_right, c+1, os, false);
}
if(p_a -> p_left != 0 && p_a -> p_right == 0)
{
blocked_columns[c+1] = false;
print_branch(p_a -> p_left, c+1, os, true);
blocked_columns[c+1] = true;
print_branch(p_a -> p_mid, c+1, os, false);
}
if(p_a -> p_left == 0 && p_a -> p_right != 0)
{
blocked_columns[c+1] = false;
print_branch(p_a -> p_mid, c+1, os, true);
blocked_columns[c+1] = true;
print_branch(p_a -> p_right, c+1, os, false);
}
}
else //(p_a -> p_left == 0 && p_a -> p_right == 0)
{
if(p_a -> p_left != 0 && p_a -> p_right != 0)
{
blocked_columns[c+1] = false;
print_branch(p_a -> p_left, c+1, os, true);
blocked_columns[c+1] = true;
print_branch(p_a -> p_right, c+1, os, false);
}
if(p_a -> p_left != 0 && p_a -> p_right == 0)
{
blocked_columns[c+1] = true;
print_branch(p_a -> p_left, c+1, os, false);
}
if(p_a -> p_left == 0 && p_a -> p_right != 0)
{
blocked_columns[c+1] = true;
print_branch(p_a -> p_right, c+1, os, false);
}
}
}
template <class fT1>
void c_tree<fT1> :: print_tree(std :: ostream& os)
{
for(int i = 0; i < 3000; ++i) blocked_columns =true;
print_branch(p_top, 1, os, false);
}
template <class fT1>
void c_tree<fT1> :: step()
{
if (p_act == p_top)
{
while(p_act -> p_left || p_act -> p_mid || p_act -> p_right )
{
if(p_act -> p_left)
{
p_act = p_act -> p_left;
continue;
}
if(p_act -> p_mid)
{
p_act = p_act -> p_mid;
continue;
}
if(p_act -> p_right)
{
p_act = p_act -> p_right;
continue;
}
}
}
else //(p_act != p_top)
{
if (p_act == p_act -> p_parent -> p_left)
p_act = ((p_act -> p_parent -> p_mid) ? (p_act -> p_parent -> p_mid) : ((p_act -> p_parent -> p_right) ? p_act -> p_parent -> p_right : p_act -> p_parent));
else if (p_act == p_act -> p_parent -> p_mid)
p_act = (p_act -> p_parent -> p_right ? p_act -> p_parent -> p_right : p_act -> p_parent);
else if (p_act == p_act -> p_parent -> p_right)
p_act = p_act -> p_parent;
}
}
template <class fT1>
fT1* c_tree<fT1> :: get_first_repeating()
{
std :: set<fT1> once_found;
typedef std :: set<fT1>::const_iterator SCI;
SCI temp = once_found.end();
reset();
step();
while(p_act != p_top)
{
temp = once_found.find(*get_data_adr());
if (temp == once_found.end())
once_found.insert(*get_data_adr());
else
return get_data_adr();
step();
}
return 0;
}
#endif // Unit1_H -
Miracle
senior tag
#include <iostream>
#include <string>
#include <fstream>
#include <set>
using namespace std;
string& conv(string&);
int main()
{
cout << ''Kerem a beolvasando file nevet:'';
string f, temp;
cin >> f;
ifstream ifs(f.c_str());
set<string> sorok;
while(ifs)
{
getline(ifs, temp);
sorok.insert(conv(temp));
}
cout << ''kerem a kiirando file nevet: '';
cin >> f;
ofstream ofs(f.c_str());
for(set<string>::iterator si = sorok.begin(); si != sorok.end(); ++si)
ofs << *si << '\n';
return 0;
}
string& conv (string& s)
{
for(int i = 0; i < s.size(); ++i)
switch(int(s))
{
case 130:
s = 'e';
break;
case 141:
case 161:
s = 'i';
break;
case 144:
s = 'E';
break;
case 148:
case 149:
case 162:
s = 'o';
break;
case 151:
case 163:
s = 'u';
break;
case 153:
s = 'O';
break;
case 154:
s = 'U';
break;
case 160:
s = 'a';
break;
//ha kihagytam volna ASCII kodokat, ide ertelem szeruen be lehet szurni
}
return s;
} -
Miracle
senior tag
minden fordito mukodik parancssoros modban, tehat eleg beszerezned egy forditot, es tetszoleges text-editorral irt c++ kodot le tudsz vele forditani.(akar gcc is)
persze vannak fejlesztokornyezetek is(a teljesseg igenye nelkul):
DevC++ ez egy igen alap, egyszeru, de tobbe kevesbe mukodo ingyenes kornyezet
Visualc++ 6 ez elegge c++ orientalt, de fizetos
visual studio .NET itt mar nem a c++ all kozeppontban, kezdonek nem ajanlom
borland c++ builder 6 delphi-szeru(VCL, CLX alapu) c++ fejlesztokornyezet c++-hoz, nagyon egyszeru hasznalni, es eleg alap c++ tudassal is tudsz vele grafikus feluletu programokat fejleszteni, van ingyenes, personal edition valtozata, letoltheto a borland.com -rol regisztracio utan
borland cBuilderX teljesen Javaban irott fejlesztoi kornyezet tobb platform ala(windows, linux, solaris alatt is mukodik) es tobb forditoval is, kivallo eszkoz multiplatform alkalmazasok fejlesztesehez, es szinten nagyon egyszeru hasznalni(istenkiraly debuggerrel), es letoltheto a borland.comrol.
[Szerkesztve] -
Miracle
senior tag
válasz
VladimirR
#38
üzenetére
Hello.
te egy komoly problemaval kerultel szembe, es ez nem mas, mint a windows lelkivilaga(semmifele pejorativ felhang, nincs jobb megoldas)
te azt latod, hogy konzol. aminek van win32 API interface. a konzol csak ilyen APIju szoffereket futtat. amikor te egy DOSos programot futtatsz, akkor egy beepitett picike VM reteg kerul a szoftver rendszerhivasai, es a WIN32 API koze(nem csak a konzol-megjelenitessel, mindennel kapcsolatban) es ekkor ez a VM szepen rendszeresen forditja a fent emlitett memoriateruletre erkezett valtoztatasokat(nem emlexem a cimre) szabvanos, win32 eljarasokra. de ez a VM csak akkor indul, ha 16bites, DOSos alkalmazast futtatsz a gepeden. tehat
vagy keritesz egy regi 16bites forditot(ez gany megoldas)
vagy megkeresed a win32 idevago fuggvenyeit (ez a legjobb)
vagy irsz kepernyfrissito eljarast, ami bar eleg lassu lesz, de mukodik majd rendesen egy adott konzolmeretre(erdemes 1 darab 80*25 meretu char*ban tarolni az egesz kepernyot, es ezt kiiratni futasonkent)
vagy jobban beleasod magad a cin-cout rendszerbe, mint en tettem, es megtalalod a pozicionalo fuggvenyt
vagy megnezed, hatha a compiler-specifikus C/C++ STD library tamogat ilyesmit.
szerintem. -
Miracle
senior tag
és próbáld meg ezt az lnko-t:
int lnko( int a, int b)
{
a = (a<0) ? -a : a; //nem kell szarozni a negatív számokkal
b = (b<0) ? -b : b;
while(a != b)
{
if (a < b) b -= a;
else a -= b;
}
return a;
} -
Miracle
senior tag
''Szemantikailag még nem néztem.
Ja és remélem az az <iostream> az elején, <iostream.h> -t akar jelenteni. ''
a legújabb kódoláűsi konvencióknak, és a c++ szabvány legújabb(amúgy már 5+ éves) változának megfelelően az
#include <iostream>
formátum használandó a standard könyvtár esetében, a .h kiterjesztésű változat kompatibilitási okokból támogatott, de sok helyen, pl. visual studio 7 nem egészen ugyan úgy működik. ha a kedvenc fordítód nem fogadja el a .h kiterjesztés nélküli std-lib includeokat akkor ideje frissíteni, mert már tényleg baromi régi lehet, sorry. nomeg asszem a .h kiterjesztésű változatokban még nincs az egész std névtérbe pakolva, bár erre nem mernék megesküdni, a VS6ba is belefért a 15 éve eltörölt for-változó-definíció-scope-bővítés ''feature'', sok ''nem túlképzett'' programozó életét megnehezítve ezzel. -
Miracle
senior tag
hát első ránézésre csak ennyi:
(d = d--);
ezt cseréld ki erre :
d--;
azért mert a d-- kifejezés először visszaadja d értékét majd csökkenti d értékét, és ekkor az operator= hajtódik végre, az eredeti d jobbértékkel, azaz nem a csökkentettel.
amúgy a fenti kifejezés nem determinisztikus, lehet, hogy van olyan fordító, amin működik, de mindenképpen hibás kód.
[Szerkesztve]
Aktív témák
- Kormányok / autós szimulátorok topikja
- Második kiadást készült az Artic asztallap aljára szerelhető PC-jéből
- OLED monitor topic
- Honor Magic6 Pro - kör közepén számok
- Forradalomi előrelépésként jellemzi az NVIDIA a DLSS 5-öt
- Parfüm topik
- Ez lehet a Vivo X300 Ultra premierjének dátuma
- DVB-T, DVB-S (2), DVB-C eszközök
- Milyen asztali (teljes vagy fél-) gépet vegyek?
- Nvidia GPU-k jövője - amit tudni vélünk
- További aktív témák...
- ThinkPad T14s Gen5 14" FHD+ IPS érintő Ultra 7 155U 16GB 512GB NVMe ujjlolv gar
- Eladó Lenovo Yoga Tab 11 (4GB/128GB, 2K kijelző) JBL hangszórókkal, dobozában!
- P16v Gen2 16" FHD+ IPS Ultra 7 165H RTX 2000 Ada 32GB 512GB NVMe ujjlolv IR kam gar
- Samsung Galaxy S25 Ultra 256GB,Újszerű,Dobozaval,12 hónap garanciával
- Gyönyörű Asus ROG strix G531GU-AL347 gamer laptop (2019)
- BESZÁMÍTÁS! Asus EX-B365M i5 9600K 16GB DDR4 500GB SSD RX 5500 XT 8GB Zalman T3 Plus 600W
- Surface Pro 7+ i5-1135G7 16GB 512GB 1 év garancia
- szinteÚJ! Microsoft Surface Laptop 5 13.5" i5-1245U 16GB 1TB Alcantara 1év garancia
- ÚJ Apple Airpods Pro 3 - www.stylebolt.hu - 1 Év Apple garancia - 27 százalékos Áfá-s száma !!!!
- LG UltraGear 39GX90SA-W OLED Monitor! 3440x1440 / 240Hz / 0.03ms / FreeSync / G-Sync
Állásajánlatok
Cég: Laptopműhely Bt.
Város: Budapest

de en is tanulni akarok.![;]](http://cdn.rios.hu/dl/s/v1.gif)
stream& operator<< (std:


