Aktív témák
-
tomcs
őstag
mindenesetre ez igy nekem is serti a szeperzekem, helyben forgatashoz hasznaljunk void fvt es akkor egyertelmuen latszik, hogy az eredetit cseszi el a program, mert a tieddel meg csak annyit er el hogy lesz ket pointere ugyanarra a (megforditott) stringre, pedig c++-os gondolkodasmod alapjan marhara nem ezt varna.
-
Jester01
veterán
Én csak azt mondtam, hogy vigyázni kell vele, nem azt, hogy rossz
Kezdõként szerintem könnyû belefutni abba a két problémába amit említettem.
Nekem spec. egy olyan függvény ami visszaad egy char*-ot azt sugallja, hogy új stringet kapok (értelemszerûen ha olyan függvényrõl van szó, ami módosít). De ez csak az én hülyeségem. Igen, tudom, hogy a c libben is több ilyen van. Nyilván ha az ember elolvassa a dokumentációt akkor egyértelmû hogyan kell használni az adott függvényt. -
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 -
Jester01
veterán
válasz
NikhodemuS #175 üzenetére
Nem
Igy:strcpy(str, forditva);
free(forditva);
return str;
A main-be pedig ilyesmit:char sz[81];
...
scanf(''%80s'', sz);
printf(''a szoveg: %s\n'', sz);
MOD: az sz-t persze malloc-cal is foglalhatod, de mindenképp a scanf elõtt, mert az akar beleírni. A szov változóra nincs szükség.
[Szerkesztve] -
NikhodemuS
csendes tag
válasz
Jester01 #174 üzenetére
Igy gondoltad?
char* megfordit(char *str)
{
int hossz=0,i = 0;
char* forditva;
while( *str++ ) ++hossz;
printf(''Checkpoint'');getch(); //ezt figyeld!
forditva=(char*)malloc(hossz+1);
while(!(str))forditva=str[hossz-i++];
forditva='\0';
str=forditva;
free(forditva);
return strcpy(str,forditva);
}
int main(void)
{char *sz,*szov; int i=0;
printf(''kerem a szoveget...'');
scanf(''%s'',&sz);
printf(''a szoveg:...%s'',&sz);
szov=(char*)malloc(strlen(sz));
printf(''forditva:...%s'',megfordit(szov));
getch();
return 0;
}
Itt valami nem tiszta...de koszi a joindulatot, remelem sikerul elmagyaraznotok, hol mind hibazok.... -
Jester01
veterán
válasz
NikhodemuS #173 üzenetére
Mindjárt jobban látjuk a hibát.
Sajnos a bekért stringnek is kell hely és azt is neked kell lefoglalni.
Valamint a scanf és a printf hívásban nem &sz kell hanem simán sz.
Az ideiglenes stringet (forditva) az strcpy után felszabadíthatod, nem törlõdik automatikusan.
MOD: A printf nem tesz soremelést automatikusan, neked kell \n formában.
[Szerkesztve] -
NikhodemuS
csendes tag
itt a kod. Lehet hogy a main-ben a hiba?
lassuk,tehat, ho a baj, nekem mar elszallt a maradek energiam is...
#include<string.h>
#include <stdio.h>
#include <conio.h>
#include <malloc.h>
char* megfordit(char *str)
{
int hossz=0,i = 0;
char* forditva;
while( *str++ ) ++hossz;
forditva=(char*)malloc(hossz+1);
while(!(str))forditva=str[hossz-i++];
forditva='\0';
/*ha felszabaditom a forditva-nak lefoglalt helyet, akkor mi kerul a str-be? vagy automatikusan torlodik a fuggveny elhagyasakor?*/
return strcpy(str,forditva);
}
int main(void)
{char *sz,*szov;
printf(''kerem a szoveget...'');
scanf(''%s'',&sz);
printf(''a szoveg:...%s'',&sz);
printf(''forditva:...%s'',megfordit(sz));
getch();
return 0;
}
[Szerkesztve] -
tomcs
őstag
válasz
NikhodemuS #167 üzenetére
c-ben tenyleg ENNYIRE gaz a sztringkezeles. gyakorlatilag nincs is..
az algoritmus amit miracle adott ''majdnem'' jo, csak az indexeles van elcseszve de az nem okoz szegmens hibat
helyesen:char* megfordit(char *str)
{
char temp;
int p = 0;
int l = strlen(str);
while (l - p > l/2)
{
temp = str[p];
str[p] = str[l-p-1];
str[l-p-1] = temp;
++p;
}
return str;
}
ezt ha <pre>char* akarmi = ''akarmi'' </pre><p> -kent deklaralt ''stringre'' hivod, az nem tom pontosan melyik szegmensben lesz de mindenesetre jo esellyel olyan helyen ahol nem szabad felulirnod, igy szepen vedelmi hiba lesz.
ezt a fv-t csak malloc-al foglalt char*-okra szabad meghivni, de malloc + akarmi = ''dasds'' mar megint nem jo mert az a pointert allitja at.
hogy ertsd mennyire korulmenyes, ez pl mar mukodne:int main(int argc, char *argv[])
{
char* nyekk = (char*)malloc(6);
nyekk[0]='n';
nyekk[1]='y';
nyekk[2]='e';
nyekk[3]='k';
nyekk[4]='k';
nyekk[5]='/0';
printf(nyekk);
nyekk=megfordit(nyekk);
printf(nyekk);
return 0;
}
ha deklaralasnal megadott stringekre akarod hasznalni, akkor masolatot kell keszitened a stringrol es azt visszaadnod, szal lekerdezed a hosszat, malloc-olsz neki 1el tobbet es abba pakolod a megforditott stringet, meg a vegere /0-t is. ekkor figyelni kell, hogy a kozepso betut is masolja at. (ha paratlan hosszu a stringed)</p></p>
[Szerkesztve]
[Szerkesztve] -
Jester01
veterán
válasz
NikhodemuS #167 üzenetére
Esetleg ha az egész programot megmutadnád. Jellemzõen ilyenkor máshol van a hiba
Ha az eredeti kódodba beszúrod a malloc-ot amit én írtam, akkor sem jó?
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):
-fwritable-strings
Store string constants in the writable data segment and don't uniquize them. This is for compatibility with old programs which assume they can write into string constants.
Writing into string constants is a very bad idea; ``constants'' should be constant. -
NikhodemuS
csendes tag
Koszi, Miracle....de ez megint seg fault....
nem akarja kivinni azt a stringet...sehogy sem. fordito bug lenne?...kezdek begolyozni. 30 orat toltottem el vele, kiprobalva minden(ertek es cim szerinti) atadasi megoldast,remelem jol...nem tud vki linket adni egy okes doksihoz, ami ezt (is) targyalja?
[Szerkesztve] -
tomcs
őstag
van egy aminel valaszthatsz hogy alapitvany vagy kiberiada es mindenfele szempontok meg kerdesek vannak megadva. csekkold meg a targy honlapjat a hps szerveren
a masik meg egy altalad valasztott sf konyvrol vagy novellarol szoljon meg lehetoleg vmilyen szinten filozofiai ismer tartod azt a konyvet olyan nagyon jonak, milyen filozofiai problemat piszkal, konkluzio meg ilyen egyeb nyavajak. vhogy ezen is tul kell lenni. (de hogy felig-meddig on legyek: szivesebben irnek vmi durva c++ beadandot helyette
)
-
tomcs
őstag
vegyel fel vmi vizsgaidopontot, az elott par nappal kuldj esszeket, beszelj rola vmennyit hogy miert irtad azt amit irtal es orulj az otosodnek.
(te allat fel birsz ilyenkor kelni? en inkabb ilyen ejszakai ize vagyok, foleg hogy mar nem kell bejarni. most fogom magam, ledontok kb 3 vodor kavet, irok egy zh-t majd jovok haza aludni)
-
Jester01
veterán
válasz
NikhodemuS #157 üzenetére
A forditott szövegnek nem foglalsz helyet. Ezt c-ben neked kell. És persze fel is kell szabadítani, ha már nincs rá szükség:
forditva = (char*)malloc(hossz + 1); /* a lezáró nulla bytenak is kell hely */
Egyébként egy string hosszát az strlen() függvénnyel le lehet kérdezni.
VladimirR: Köszi a bányászást, így már mindjárt más.
MOD: Ugyanakkor a dõlt betû megint továbbterjed a következõ hozzászólásra. Azt hittem ez már javítva
[Szerkesztve] -
VladimirR
nagyúr
válasz
NikhodemuS #157 üzenetére
eredeti kod (ha jol hamoztam ki a html-bol):
char *megfordit( char *szoveg ) {
unsigned int i = 0, hossz = 0;
char *forditva;
while( szoveg[hossz] != '\0' ) {
hossz++;
}; //megnezem a hosszat
while( szoveg[i] != '\0' ) {
forditva[i] = szoveg[hossz-1-i];
++i;
};
forditva[i] = '\0';
return forditva;
}
en nem latok benne hibat - mondjuk en nem ertek hozza
[Szerkesztve] -
NikhodemuS
csendes tag
Sziasztok!
Kezdo kerdes, mivelhogy en is kezdo vagyok c, c++-ban:
Hogy viszel ki egy megvaltoztatott string parametert egy fuggvenybol?
Es itt a kerdesem: hogy viszed ki a fuggvenybol a string valtozot, vagy az erteket ?--sehol nem talaltam eddig erre doksikat...
Vagy itt egy kodszelet: hol a baja?
char *megfordit(char *szoveg)
{ unsigned int i=0,hossz=0;
char *forditva;
while(szoveg[hossz] != '\0') {hossz++;};//megnezem a hosszat
while(szoveg!='\0'){forditva=szoveg[hossz-1-i];++i;};
forditva='\0';
return forditva;
}
DevC++ utolso betaja kidob a progibol az ertekatadas kozben(Hozzaferesi megsertes--Segmentation Fault )
[Szerkesztve] -
CrazyTM
csendes tag
EZT AZ OLDALT MINDENKINEK MEG KELL NÉZNIE: [link]
-
virtual
tag
Lenne egy C++ házim holnapra, amit úgy néz ki nem igazán tudok megcsinálni. Elvileg egyszerű feladat lenne, csak nem értek C++-hoz. Van egy minta is, ami alapján meg lehet csinálni, illetve fel lehet használni. Ha valaki tudna segíteni, küldhetne egy mailt.
Természetesen nem ingyen kérem, mivel elég fontos lenne hogy meglegyen.
Ide írjon akit érdekel, és küldöm a mintát és a feladatot is:
virtual(kukac)pro(pont)hu -
amargo
addikt
DEVC++ eddig 1x használtam, de nekem nem jött be. Ha nem akarjátok megvenni a Borlandod van Development változata is.. x ideig hazsnálható.. persze nem lehet vele eladni semmit.
Ezt csak azért írtam be, ha a nem ingyenesség miatt nem akarjátok használni. -
amargo
addikt
Már csípte a szemem a dölt -
Atom
aktív tag
Ilyen ritkan latogatjatok ezt a topikot?
Vagy van egy forgalmasabb c++ topik? -
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. -
lajafix
addikt
''void ASCIIHEX (unsigned char * origin);''
Ez egy mutatót vesz át (*), címmel kell meghívni(pl így: unsigned char a; ASCIIHEX(&a); ), és ez az értelme: mivel nem ad vissza semmilyen értéket(ezért void) hanem a hívásban megadott tárterületen dolgozik.(annak ugye nincs semmi értelme, hogy meghívsz valamit és nem ad vissza semmit, sehol.)
''Másik kérdésem, hogy ha több void om van (void az itt a szubrutin megfelelője,ha jól nézem?)
és amit uttánna adok meg változókat azokat végig viszi az egész programban.
Kicsit érthettőbben: van két voidom
void egy ( int a);
void ketto (int b);
a void ketto ben ha az ''a'' val számolok akkor az a void egy ben lévő utoljára felvett értékkel
lesz kiszámolva.
''
a void egy() szubrutinod átveszi az a értékét, összevissza számolhatsz vele, de csak az értékkel: visszatérés után nem változik az ''a'' értéke. Ebből jön, hogy void ketto ugyanazt az értéket kapja mint void egy, mert értékeket adsz át, nem változókat(azaz azok címeit)
Tehát:
main()
{int érték;
érték:=2;
egy(érték);
kettő(érték);
printf(''%d'', érték);
}
lefuttatása után 2 lesz kiírva érték tartalmaként, bármit csinál az így egy, kettő függvény(merthogy a C-ben minden függvény, ohne subrutin, mint pascal, basic) mert értékként kezeli az átvett változót.
''j= konvert(origin)<<4;''
A következőt csinálja:
1. origin értékét átadja a konvert függvénynek(ami gondolom nem void) ami visszad egy értéket
2. ezt az értéket megszorozza 16-tal.Mert << azt jelenti, hogy léptessd ballra a mellette levő változó bináris értékét 4 bittel. azaz alulra bejön 4 darab 0 bit, ami 16 -tal való szorzásnak felel meg. Profiknak C-ben így kell 16tal szorozni...
3. ez az érték lesz j értéke
Na csá! -
danixxx
csendes tag
Hellótok!
Ha valaki szeret c++-ban programozni, és nem okoz gondot egy olyan progi megírása, amivel tetszőleges(nem korlátlan) db mátrixszorzást lehet véghezvinni (a mátrixokat az user adja meg), annak kérném segítségét. A matematikai részével tisztában vagyok, a programozással már nem annyira (tehát papíron tudok mátrixokat szorozni)
Feladat: n db művelet ( tehát 2n db összeszorzandó mátrix), nincs külső file, mindent az user gépel be. Először megadja a mátrix dimenzióit (pl.:3x4), és a mátrix elemeit. majd a szorzómátrix dimenzióit (pl.:4x2) és elemeit. Ezt n-szer megcsinálja, és végül a progi kiszámolja az eredményt.
Ha valakinek van ötlete, illetve tud segíteni, köszi. Priviben vagy e-mailben is jó, nem fontos itt a helyet foglalni ezzel a problémával!
Előre is köszi minden segítségért!
[Szerkesztve] -
amargo
addikt
Esetleg kis segítség, ha a egy-ből az értéket nem adod át a kett-be akkor a kett-ben nem fogsz az 1el számolni, kivételek is vannak, ha statikusan hozod létre.
Példa_
Itt ugye az f-be érkező értéket négyzetezem, majd küldöm is vissza. Azért írtam csak le, mert nem írtad bele, hogy a függvényedet hogy hívod meg.
int TForm1::f(int x)
{
return x * x;
}
//---------------------------------------------------------------------------
(őőőő az első fügvény, amibe belépünk)
void __fastcall TForm1::eChange(TObject *Sender)
{
if(e->Text != '''')
{
int szam = f( StrToInt( e->Text ) );
l->Caption = IntToStr(szam);
}
else
l->Caption = '''';
}
//--------------------------------------------------------------------------- -
8472
aktív tag
''void ASCIIHEX (unsigned char * origin);''
Ez egy void típusú függvény deklaráció, azaz nem adhat vissza értéket(vagy csak nullát ha jól tudom) és unsigned char* típusú paramétert vár.
''void egy ( int a);
void ketto (int b);
...''
void ketto -ben nem számolhatsz ''a''-val, mivel egyik függvény nem látja a másik függvény paraméterét. Csak akkor számolhatnál ''a'' változóval, ha a ''ketto'' függvényen belül létehoznál ilyen nevűt.
[Szerkesztve] -
sonar
addikt
Helló Emberek!
Lenne pár ,C' vel kapcsolatos kérdésem.
void ASCIIHEX (unsigned char * origin);
Ezt most hogy kell értelmezni? Ilyen fajta típus megadással még nem találkoztam.
Másik kérdésem, hogy ha több void om van (void az itt a szubrutin megfelelője,ha jól nézem?)
és amit uttánna adok meg változókat azokat végig viszi az egész programban.
Kicsit érthettőbben: van két voidom
void egy ( int a);
void ketto (int b);
a void ketto ben ha az ''a'' val számolok akkor az a void egy ben lévő utoljára felvett értékkel
lesz kiszámolva.
Harmadik kérdésem:
j= konvert(origin)<<4;
ezt mesélje el nekem vki.
off
Nem vagyok teljesen hüle a programozáshoz,csak én Basic hez vagyok szokva.
Azt ismerem már egész jól. C hez meg még compilerem sincs.
És egy c algoritmust kellene átdolgoznom.
/off
Big THX -
repvez
addikt
Nos igen lényegében mindegy nekem melyik c-t tanulom meg csak mivel nincsen miböl és kitöl elsajátitani az alapokat igy több évig is nézhetem a monitort nem jutok elöbbre.
És a forumba se kérdezhetek meg minden sort hogy hogyan csináljam, de eddig nem találtam olyan könyvet ami tényleg semmilyen elöképzettség nélkül is érthetöen elmondaná mit hogyan. -
-
repvez
addikt
Üdv!
Szeretnék segitséget kérni töletek.Programozni szeretnék megtanulni.Milyen könyveket ajánlanátok amiböl a 0 szintröl meglehet tanulnia egy halandonak.
C++ szeretnék programozni.Megvan a DevC++4.0 és az MS VS 6.0.Dev-ben már készitettem egy egyszerü progit ,de csak a ''cin és a cout'' parancsok használatával ez az összes tudásom.
Eddig 2 könyvem van:1.C_Stroustrup 1200oldalas könyve
2. Kris Jamsa:egyszerüen c++
Az elsö könyv nem nagyon érthetö számomra ehhez már valamilyen elöképzetséget feltételez a megértése, a második jol magyarázza el a dolgokat csak nem fedi le a teljes skálát(nincs se OOP se grafika).Lehetöleg magyar és letölthetö formátumban érdekelnének, mivel nem tudok jol angolul és ezt a témát még magyarul is elég megérteni nem még egy ismeretlen nyelven.
Bocs a lámaságom miatt,de jo lenne egy használhato segitség amivel nem csak játékra használhatnám a gépem. -
BaLinux
tag
Apró kis probléma az ilyen oktatással, hogy az OOP-ról fogalmad nincs, bármennyi 30 soros progit írsz. Akkor lesz, ha nagy programot készítesz. Addig hajlamos az ember rondán struktúrált progikat írni, C style. Az a baj, hogy a nyelvet tanítják meg, azt is csak egy _kicsit_, viszont azt nem hogy hogyan használd, mit jelent és miért jó azt úgy csinálni, még akkor is ha 2x annyit kell dolgozni vele az elején mintha máshogy csinálnád... Bocsánat, hogy nem tudok segíteni, de ez mindig kiakaszt
[Szerkesztve] -
Boolash
aktív tag
Igen c++. Kis progikat csináltunk (primszámvizsgáló, számológép, osztóvizsgáló, másodfokúmegoldó, meg ilyesmik), de ezek mind 20-30 sorosak max... el nem tudom képzelni milyen progi lenne az ami 500-2000 soros, és ezek a programok megírásához elegendő tudásból meg lehetne csinálni...
-
Boolash
aktív tag
Sziasztok!
Én szeretnék írni c++-ban egy egyszerű karakteres játékot (házi...) de sajna nemigazán tudom, hogy kezdjem. 500-2000 sor közöttinek kell lennie. Én valami snake szerű játékra gondoltam. Nem tudtok valami linket ahol ilyesmik vannak. Most nem konkrétan arra gondolok, hogy valahonna letöltök egy programot, és azt adom be, hanem segédletek, talán programrészletek, szóval puskák kellenének, mert kezdő vagyok a programozásban. Ehhez kéne egy specifikáció is. Abba pontosan mi kell?
Köszönöm! -
Frakk
tag
Na, jó hát csak kezdő vagyok C++ ban. Mondjuk a kettő közötti kivonást nem engedte a fordító, de megnéztem azt a progit amit linkeltél, és ott úgy csináltak belőle normális változót, hogy mögé írták, hogy .QuadPart. Na ezzel most nekem is bejött, és működik is pontosan az idő mérése. Úgyhogy köszi a segítséget.
-
-
BaLinux
tag
Találtam neked egy javaslatot, ami crossplatform.
Ez a windózos implementáció, unixon nem kell ezt a függvényt definiálni mert POSIX szabvány.
Bővebben: link
Mikrosec pontossággal adja meg az időt, és remélem hogy jól viselkedik.
Még jobb megoldás, ha pl libSDL-t használnálsz, abban van SDL_GetTicks() függvény, nekem korrektul ment (igaz csak msec pontosságú, de ez mihez nem elég?).
Másrészt win alatt van még QueryPerformanceTimer(), ami ultranagy felbontású. Unixok alatt is biztosan hozzáférhető valahogy... -
Frakk
tag
Hello!
C++ és OpenGL használatával programozok egy kis játékot, és a fizika jó működéséhez kéne, hogy az egy frame alatt eltelt időt pontosan meg tudjam mérni. Eddig a time.h clock() függvényével próbálkoztam, ami milisec-ben adja vissza a program indításától eltelt időt (a frame végén mértből kivonom a frame elején mértet). Az a gond vele, hogy ilyen kicsi időnél (pl 1/75 = 0.0133 s azaz 13.3 ms), nem pontos. Azt csinálja, hogy 15-16-ot ad vissza, aztán időnként meg nullát, úgy, hogy hosszabb időt (pl. 1s) átlagolva már jó eredmény jön ki, de nekem pontosan az 1 frame alatt eltelt idő kéne, különben a fizikai animáció nagyon rosszul néz ki. -
-
-
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.
-
#53246592
törölt tag
Sziasztok!
Van egy ilyesmi kodreszlet:
CVector CVector::add(CVector param) {
CVector temp;
temp.x = x + param.x;
temp.y = y + param.y;
return (temp);
}
Ez ugyebar szepen összeadja ad ket vektort, az eredmenyt egy harmadikban adja vissza.
A problemam az lenne, hogy atemp
altal hivatkozott objektum (söt ovjektum
) memoriaterulete mikor illetve hol lesz felszabaditva?
En eddig azt hittem, hogy ez mint lokalis valtozo felszabadul amint kilepunk a fuggvenyböl, de akkor meg az egesz nem is muködhet... Hogy is van ez? -
flugi
tag
Ez aztán a vaskos lebukás, még szerencséd hogy nem tudni melyik nebuló vagy a sok közül
A te igazi ellenséged nem a beadandó, hanem a géptermi ZH, de erre már biztos rájöttél
(kívűlállóknak: ma írt az évfolyam egy jó nehéz ZH-t, és a nehézségnek az egyik oka éppen az, hogy kirostáljuk azt, aki másolja a beadandót) -
RedAnt
aktív tag
Nahat... ez nem er te most tudod hogy en ki vagyok (honlap) de en nem hogy te ki vagy. Na mind1.
De ha egy suliba jarunk akkor nem masolhatod le
Najo, a fo file ennyi:
#include <iostream>
#include <string>
#include ''aknak.h''
using namespace std;
int main()
{
Jatekmester jatek;
jatek.init();
jatek.jatszma();
jatek.befejezes();
return 0;
}
A tobbi kicsit hosszu lenne, kb 300 sor. Eddig dolgoztam, de lenyeg h mukodik, es tok jol el is lehet jatszogatni vele
[Szerkesztve] -
RedAnt
aktív tag
Hehe...
nekem is holnapra kene beadnom. En aknakeresot probalok osszehozni, reggel 8-ig kell beadnom. Ha sikerul addig, felteszem ha kell.
Ha valaki nagyon raer, beszallhat:
''Készíts programot, amivel aknakereső játékot játszhat egy ember. A játék szabályai: egy négyzetrácsos mezőn folyik a játék, ahol minden mező tartalmazhat egy aknát. Kezdetben a mezők tartalma nem ismert, a játékos ''ráléphet'' az egyes mezőkre. Aknára lépés esetén véget ér a játék, különben a felderített mezőn megjelenik a mezőt körülvevő aknák száma (0-8). Ha minden mezőt sikerül felderíteni, a játékos győz.
A programot a következő típusok segítségével készítsd el:
* ''Aknahely'' típus: az aknamező egy pontját (a négyzetrács egy kockáját) írja le. Tárolja, hogy van-e akna a mezőn, ismert-e a mező a játékos számára, meg tudja jeleníteni a mezőt.
* ''Aknamező'' típus: a teljes aknamezőt tárolja az előző típus segítségével. Tárolja az aknák teljes számát, meg tudja jeleníteni a teljes mezőt, rajta keresztül lehet elvégezni a mezők felderítését.
* ''Játékmester'' típus: kommunikál a játékossal, az előző típus segítségével vezérli a játékot.''
De csinalhatnek amobat is. (Nem lehet hogy ugyanoda jarunk? ha felismered a fenti feladatszoveget...) -
Batman
őstag
egy iciri piciri up
-
Batman
őstag
Hali!
Tudom hogy a kovetkezo hozzaszolasom miatt sokak ellenszenvet fogom kivaltani de akkor is megprobalom.
Tehat nincs veletlenul valakinek egy c++-ban megírt amoba programja nem kell semmi extra csak menjen es kesz.
Nem vagyok nagy programozas majer de ezt midnenkepp le kell adni holnap.
Ugy vagyok ezzel a tantargyal hogy kotelezo megcsinalni de......
(aknakereso progi is jo lenne)
Bocsi ha valamelyik nagytudásu programozot ezzel megbantottam, de nem midnenki tud és akar programozni.
Üdv
Batman -
bdav
őstag
van rá bármi esély hogy visualstudio .net alatt ha ékezetes karaktert akarok beolvasni fájlból, akkor az az is maradjon, vagy muszáj egyesével átállítgatni őket? (btw ha a forrából írok ki ékezetest azse lesz jó. ááá)
-
hjk
csendes tag
Sziasztok!
Van egy elég hosszú C program, amit szeretnék átkonvertálni Pascalba.
Van valami, ami ezt megcsinálja, vagy csak kézzel lehet?
És 1 plusz kérdés: itt nincs olyan lehetőség, hogy a felhasználónév E-mail címére újra elküldi a jelszót? Mert nem emlékszem mi volt az...
Köszi előre is!
umbroman@freemail.hu -
stromannn
csendes tag
Hali!
C++ -t tanulnék hozzáértőtől. Cél : 3d.
lovasss1<kukac>enternet<pont>hu -
#53172992
törölt tag
Off:Hát van már vagy 5 c++ topik , ahelyett, hogy ide írnának
-
#53172992
törölt tag
Jujjdeó megy
Örök hála neked
Viktor -
#53172992
törölt tag
Ja oké vesze akkor &1
Viktor -
BaLinux
tag
válasz
#53172992 #89 üzenetére
14 éves korban épp ideje van már C-t kezdeni.
Kicsit belédköthetek, hogy akkor mért a C++ topicban landolt e kérdés?
A bináris ÉS műveletet (&) úgy látom ismered nagyjából.
Ha van egy számunk, kettesben, és annak az n. bitjét akarod kimaszkolni (a biteket a legkisebb helyiértéktől számozzuk, 0-tól kezdődően) úgy, hogy az eredmény 1 legyen ha volt bit és 0 ha nem:
(szam >> n) & 1
Amit te írtál, az nyilván helytelen, mert 0xFF-fel, azaz binárisban 11111111-vel maszkoltad, így 0-255 között tizesben mindenféle szám kijöhetett... -
#53172992
törölt tag
#include <stdio.h>
void main ()
{
unsigned int a1,a2,a3,a4,a5,a6,a7,a8,szam;
a1=a2=a3=a4=a5=a6=a7=a8=0;
szam = 255;
a8 = szam& 0x00FF;
a7=szam>> 1 & 0x00FF;
a6= szam>> 2 & 0x00FF;
a5=szam>> 3 & 0x00FF;
a4=szam>> 4 & 0x00FF;
a3 =szam>> 5 & 0x00FF;
a2 = szam>> 6 & 0x00FF;
a1 = szam>> 7 & 0x00FF;
printf(''%d %d %d %d %d %d %d %d '',a1,a2,a3,a4,a5,a6,a7,a8);
}
Bocs, egy kicsit kezdő vagyok (ciklusokat nem ismerem annyira meg a tömböket)
Elvileg ennek folyamatosan maszkolnia kéne és a végén 2-es -ben kiirnia a szamot(csak 1 byte-on csinaltam meg)És 1 nél nagyobb szamokat is kiir
14(most leszek 15) vok szval csak óvatosan 2 hete c-zek elég kezdő vagyok(ezt én írtam)
ebbe kéne ezt belerakni:
#include <stdio.h>
void maszk()
{
int ax;
int maszk;
int maszktype;
printf(''Kerem az ax erteket!'');
scanf(''%X'',&ax);
printf(''Kerem a maszkot decimalisan!'');
scanf(''%X'',&maszk);
printf(''Milyen maszkolást akarsz?(1=Bitenkenti es,2=bitenkenti vagy,3 = bitenkenti kizaro vagy\n'');
scanf(''%d'',&maszktype);
printf(''ax= %X = %d \nmaszk:%X(hexadecimalis), azaz decimalisan %d\n'',ax,ax,maszk,maszk);
switch (maszktype)
{
case 1:
ax=ax & maszk;
printf(''bittorleses maszkolas eredmenye :ax = %X = %d\n'',ax,ax);
break;
case 2:
ax=ax | maszk;
printf(''bittorleses maszkolas eredmenye :ax = %X = %d\n'',ax,ax);
break;
case 3:
ax=ax ^ maszk;
printf(''bittorleses maszkolas eredmenye :ax = %X = %d\n'',ax,ax);
break;
default:
{
printf(''Hátte HÜLYE vagy\n'');
}
}
}
Kossz előre is!
Vucktor
Mod:0x00FF: asszem 254 amivel maszkolom, hogy csak az uccsó bit maradjon.
[Szerkesztve] -
flugi
tag
válasz
#53172992 #87 üzenetére
én mindig angol kiosztással dolgozom. Valószínűleg az a probléma, hogy az alt-w egy olyan gyorsbillentyű, amit lefoglalt magának az IDE. Érdemes körülnézni hogy lehet-e átdefiniálni a gyorsbillentyűket, és kitörölni a kérdéses sort.
(Dev-C++ és a pontosvessző magyar billentyűvel - ugyanez a helyzet) -
#53172992
törölt tag
Még egy dolog.
a | jelet nem birom beírni a fordítóban (visual c++ 6.0) wordból másolgatom ki
hogy lehetne ezen segíteni?
Vuck -
#53172992
törölt tag
megvan
& hiányzott -
#53172992
törölt tag
#include <stdio.h>
void main ()
{
int ax;
int maszk;
printf(''Kerem az ax erteket!'');
scanf(''%d'',&ax);
printf(''Kerem a maszkot decimalisan!'');
scanf(''%d'',maszk);
printf(''ax= %X = %d \nmaszk:%X(hexadecimalis), azaz decimalisan %d\n'',ax,ax,maszk,maszk);
ax=ax & maszk;
printf(''bittorleses maszkolas eredmenye :ax = %X = %d\n'',ax,ax);
}
Ez azt írja ki ,hogy hibát észlelt, bekéri az eredményt aztán hibajelentés küldése
Miért?
Help!
Viktor -
GodHeart
senior tag
nah belinkelem ide is.
most kezdtem a c++-t szoval nemkell nevetni!
Bővebben: link
erről lenne szó! :\ pls segítsetek -
GodHeart
senior tag
igen adminjogom van, és helyem is van.. jó sok! /mellesleg én is először erre gondoltam, de eddig semmi más progi nem panaszkodott, szal ezt elvetem/
a cd is hibátlan mivel eleve beszedetve használom!
foggalmam sincs, hogy mi lehet a hiba!!!
[Szerkesztve] -
GodHeart
senior tag
nemkapcsolódik tejesen ide a hozzászólásom, de valaholfelkell tennem!
nemtudom feltelepíteni a borlan c++ 6 -os programot! a telepítés végén, valami baja van a regisztrációs adatbázissal, és valami olyat ír ki, hogy nemtud bele írni. Ilyen kor 3 választásom van: ''retry'' ''ignore'' ''abort'', de valahogy egyik sem visz előbbre... valakinek valami 5lete!? pls!! -
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. -
pite_r1
csendes tag
Elsirom megint a bajom Miracle-nek szol ez elsosorban bar eddig is sokat segitett... :
Kene egy progi C++ ban megirva ami:
-beolvas egy txt-fajlt(ami NOTEPAD-ban van megirva)
-eszleli es atalakitja az ékezetes betuket simava (á--->a)
-beturendbe rendezi a sorokat
-egy uj txt fajlt hoz letre es elmenti ebbe a rendezett sorokat (ekezetek nelkul ugye)
Ez a progi fusson Turbo C++ 3.0-ban asszem ez a helyes neve...Amit adtal valamiert nem megy mi lehet a hiba segits legyszves!!!!
EZER HALA
(ha megvan email: pokyg@freemail.hu) (MSN cim is!!!!)
[Szerkesztve] -
Miracle
senior tag
Bővebben: link
sok sikert!
[Szerkesztve] -
Aidan85
aktív tag
Üdv mindenkinek, van egy kis problémám, remélem tud valaki segíteni. Egy algoritmust keresek, de nem találom sehol. Suilba kellene, most tanulunk C++ -ban programozni.
Szóval, az algoritmus neve:
Rendezés kupaccal (fás megvalósítás)
Ha valaki tudna segíteni, kérem!!! -
BaLinux
tag
Itt van néhány link, ahol referenciát találsz az STL-hez. Én mcedit-ben írom a progit amikor olyanom van, ami nem egy dev-c++, tehát ne várjál csodát semmitől, nem ismerek olyan editort ahol jól működne minden esetben a completion meg minden feature.
Bővebben: link
Bővebben: link
Az egyiknek az iostream, a másiknak a többi az erőssége, sajna nem ismerek normális/tekjeskörű dokumentációt...
Amúgy elhiszem, hogy megfelel a kétdim. tömb, viszont abban a pillanatban hogy kicsit módosul 1 paraméter (nem uolyan hosszúak a stringek, stb), felakasztod magad ezzel a megoldással, és évekig fogsz debuggolni. Én már megtanultam
Ez itt nem is a futási hatékonyságról szól (általában a világ nem arról szól manapság), hanem a fejlesztési hatékonyságról, ami a tömb esetén megkérdőjelezhető amikor már 2 órája segfaultolgat a program, míg a vector/string megoldásnál kevéssé valószínű ilyen probléma, és jobban lokalizálható. Csak mondom. -
Spyx
tag
Az alapokal egyébként tisztában vagyok.
tudom hogyan lehet létrehozni két dimenziós tömböket.
Csak ezekkel a rohadt karaktertömbökkel nem boldogulok túl jól.
Ha int-ről volna szó nem is kérdeztem volna.
(Már látom hogy ha statikus változórol van szó nincs különbség. Csak nekem a dinamikussal voltak problémáim)
Ja és kényelmesebb volt ide benyogni a problémámat mint a neten keresgélni mindenféle c++ tutorialban. Tudtam hogy itt úgy is vannak segítőkész emberek.
De azért köszi a segítséget. -
Spyx
tag
Kössz az iránymutatást. Tudtam eddig is hogy van ez a template library csak nem nagyon tudtam hogy mire való. majd kicsit jobban átbújom ha lesz rendes fejlesztőkörnyezetem. Most Dev-cpp-t használok és ez nem az igazi .
Egyébként nekem most a jelenlegi problémámhoz ez a két dimenziós tömb tökéletesen megfelel. nem a hatékonyságra mentem rá. -
-
pite_r1
csendes tag
Hali van egy kis gondom mi a sz*rt jelent az hogy : Function should return a value . vagy valami ilyesmi ezt irja ki a C++??? mi ez???
-
Azért írtam, mert nem lehet úgy programozni, hogy még az alapokkal sem vagy tisztában. Először mindenképpen érdemes elolvasni egy könyvet, hogy mit is tud az a nyelv, meg mi merre hogyan. Anélkül nem tudsz semmit csinálni. Nem cseszegetni akartalak, hanem értelme nincs ''programozni'' így.
Nem tudom, mennyire tudsz angolul, de angolul nagyon sok leírás van a nyelvről. Keress rá.
A programozzunk C nyelven könyv meg rengeteg könyvesboltban kapható, az ára sem túl húzós.
Remélem nem vettem el a kedvedet, de egy fórumon keresztül szerintem nem lehet megtanulni egy nyelvet sem. -
Spyx
tag
Valaki meg tuná mondani hogyan lehet két dimenziós tömböket kezelni C++-ban
Konkrétan egy karaktersorozatokat tároló tömböt szeretnék. ( 500 db 100kar hosszú szöveget kéne letárolni.)
Stringes megoldás is jöhet. A sebesség nem számít -
pite_r1
csendes tag
Ertem...kar
-
pite_r1
csendes tag
Miracle kosz a programhoz a megoldast ebben a rajzolosban is tudnal esetleg segiteni ?
-
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 -
silentBob
csendes tag
Sziasztok.
Nekem is lenne egy kérdésem. Van egy feladat amiben ha tdnátok segíteni akkor nagyon örülnék:
generálni kell egy fát. fa csúcsai a köv 3 mutatót tartalmazzák:bal-gyermek,jobb-
testvér,szülő.ezek segítségével bármely csúcs azonosítható a csúcs szülője és minden gyermeke.
inorder bejárás:a fa kulcsait rendezett sorrendben írhassuk ki.a fa gyökerében lévő kulcsot a baloldali részfájában lévő értékek után és a jobboldali részfájában lévő értékek elött -azok között írjuk ki.
a preorder bejárás a gyökér kulcsát a részfáinak kulcsai elött,míg a
posztorder bejárás esetén azok után írjuk ki.
a köv algoritmust találtam hozzá
INORDER-FA-BEJÁRÁS(x)
if xNEM= NIL
then inorder-fa-bejárás(bal[x])
print kulcs[x]
inorder fa bejárás(jobb[x])
na ez csak egy algoritmus ezt kéne vhogy kibővíteni vagy átírni ha lehet, de ha tudtok valami mást akkor kérlek írjaátok le azt. Jah és mindezt c-be .
aztán meg mátrixként kell kiíratni.
Elöre is mindenkinek thx -
pite_r1
csendes tag
Hello...Kosz a segitseget de van egy kis bibi meg ...A tanar kitalalta ha ezt megirtam irjak meg egy grafikus programot is..Ami ugy nez ki hogy :
-a hatter kek(eg)
-a talaj zold szinu
-a talajon van egy jeghegy ( feher)
-a jeghegy tetejen egy piros lobogo (piros)
-a jeghegy bal oldalan egy fa (fekete torzs zold lomb)
-a jeghegy jobb oldalan zudul le egy lavina(feher es egyszeru kor alak)
-a jobb felso sarokban napocska (sarga)
A lenyeg hogy azzal a 16 szinu kepernyokezelessel kene es a leheto legegyszerubben megoldani...a zaszlo lobogjon a lavina gorduljon le ...ennyi
Fontos lenne szerda este 20.00-ig !! le kell adnom ....Ha valaki megcsinalja megkoszonom .. -
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;
} -
pite_r1
csendes tag
Hali Nagyon fontos lenne nekem egy program C++ ban megirva ami:
-beolvas egy txt-fajlt(ami NOTEPAD-ban van megirva)
-eszleli es atalakitja az ékezetes betuket simava (á--->a)
-beturendbe rendezi a sorokat
-egy uj txt fajlt hoz letre es elmenti ebbe a rendezett sorokat (ekezetek nelkul ugye)
Fontos lenne ez a progi minel elobb es keresem az hogy minel egyszerubben megirva legyen es ha lehet kommentekkel soronkent mi micsinal ....ezen mulik a fosuli felevem es nem ertek a programozashoz ...Elore is kosz aki tud segiteni !
(ha megvan email: pokyg@freemail.hu) (MSN cim is!!!!) -
Khraath
csendes tag
Teljesen igaz, hogy a C++-ban ne használjuk a .h kiterjesztésü c-s headereket. Igaz, hogy a c++ lefordítja a c-s forráskódokat, de ez nem jelenti azt, hogy célszerü kevergetni a két nyelvet. Ha valamit c++-ben írunk, az legyen c++, ha c-ben legyen c.
Sok esetben a c++ program a keveredés miatt sokkal lassab, rosszabb lesz, már a c-sről nem is beszélve.
Szóval a lényeg az, hogy kerüljük c++-ben a c-s konvenciókat. -
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] -
ReJim
őstag
lécci segítsetek.
az lenne a kérdésem, hogy hogyan kell elkezdeni a c nyelvet...
mármint mivel kell írni, fordítgatni a forrásokat..
linux alatt tudom hogy kell forgatni forrásból, de nem értek többet hozzá...
szóval esetleg valaki elmagyarázni, mijen porgi kell hozzá??? visual c++?
és esetleg valami magyar tutorial, vagy egyéb oktató leckéket tud valaki linkelni??
előre is thx... -
VladimirR
nagyúr
van egy olyan erzesem, hogy 16 bites forditot hasznalok ('92-es borland c++ 3.1), a tobbinek meg majd utananezek, koszonom
meg annyit, hogy ezt as 80*25-os tombot, amit irtan, hogyan iratnam ki? teljesen szabvany modszerrel (printf, cout....) es csak azon lenne a hangsuly, hogy hogyan tarolom a kepernyon megjelenitendo cuccot? -
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. -
VladimirR
nagyúr
ez a memoriaterulet felelos a karakteres megjelenitesert (dos alatt mukodik hibatlanul es nekem eddig win-es dos ablakban is rendben volt)
tehat ha azt mondom, hogy: t[1][1][1]:='a'; akkor a bal felso sarokba (az 1, 1 koordinatakra) kirajzol egy a betut, ha meg azt mondom, hogy t[1][1][2]:=2; akkor atvaltja a szinet zoldre (asszem zoldre)
ez kellene nekem c++ alatt (eletjatekhoz, mert imho igy sokkal jobb lenne ujrarajzolni a kepernyot) -
VladimirR
nagyúr
hi
hogyan tudom c++-ban megmondani, hogy egy valtozo melyik memoriacimen jojjon letre?
egeszen pontosan arra lenne szuksegem, hogy egy 25*80*2-es tomb a $b800:00 cimen legyen
pascalban ez igy nez ki: t:array[1..25,1..80,1..2] of char absolute $b800:00; es azeret kene, mert igy ennek a tombnek a segitsegevel tudnam irni a kepernyot
remelem eryteni, amit prbalok kerdezni
koszi a segitseget
[Szerkesztve] -
VladimirR
nagyúr
csak a tisztanlatas kedveert:
if (roka[i-1]==0) nyul[i]+=nyul[i-1]+(a*nyul[i-1]);
if (nyul[i-1]==0) roka[i]+=roka[i-1]-(b*roka[i-1]);
nyul[i]+=nyul[i-1]+(a*nyul[i-1])-(c*nyul[i-1]*roka[i-1])
igy nez ki eredetileg? (PH! motor kiszedi a [i] reszeket es doltte teszi a szoveget) -
Lajtorja
aktív tag
Ebbe a három sorba ugyan mi lehet a szintaksz error?
(láma vagyok)
if (roka[i-1]==0) nyul+=nyul[i-1]+(a*nyul[i-1]);
if (nyul[i-1]==0) roka+=roka[i-1]-(b*roka[i-1]);
nyul+=nyul[i-1]+(a*nyul[i-1])-(c*nyul[i-1]*roka[i-1])
köff! -
8472
aktív tag
Köszi, hogy válaszoltál.
Dev-C++ -t használok, nem találtam olyan beállításokat sehol sem, amiket írtál. Ja, amúgy rákerestem a winmm kulcsszóra, és nem talált egy ilyen fájlt sem a meghajtón. Ez most azt jelenti, hogy ha meglenne az a beállítás amit írtál, akkor sem tudnám megcsinálni? -
clayman
aktív tag
A PlaySound egy külső könyvtárban található függvényre hivatkozik, és a compiler optionsnél nem linkelted hozzá a programodhoz.
A megoldás egszerűen annyi, hogy (pl MSVC++-al)
Project menu > Project properties > (All Configurations) > Input > Additional Dependencies : ott írd hozzá hogy ''winmm.lib'' és linkeld újra. Kész ;)
Mellesleg ez le volt írva a .cpp fileban -
Spyx
tag
Tud valaki olyan címet ahonnan Visual Studio C++-t lehet letölteni??
-
yksz
aktív tag
?Nem tudna valaki nakem küldeni egy primitív progi-t? Ultrakező vagyok. Csak ezért. Előre is kösz!
-
8472
aktív tag
Hali.
Leszedtem egy kódot innen:
http://www.gametutorials.com/download/DevC++/C++/PlaySound_Cpp_DEVC.zip
ami wav fájlt játszana le, de a fordításnál ezt írja ki a dev-c++:
[Linker error] undefined reference to `PlaySoundA@12'
Ez pontosan mit jelent és hogy tudom kijavítani? Kezdő vagyok, lécci segítsetek. -
Szalma
őstag
(Bővebben: link, ha még nem találtad volna meg a megoldást...)
Szeretettel:
Szalma -
Batman
őstag
up
-
Batman
őstag
up
-
Batman
őstag
up
-
Batman
őstag
devc++-ban ,hogyan vonok gyököt?
-
b14
senior tag
Hihi!
pont ezt csinalatam meg legutobb!
#include <stdio.h>
#include <conio.h>
main ()
{
int end, l, szam, i, m;
clrscr();
printf(''Kezdes: '');
scanf(''%d'',&szam);
printf(''Veg: '');
scanf(''%d'',&end);
m=szam;
for (szam=m;szam<end+1; szam++)
{
clrscr();
printf(''Most %d\n'',szam);
l=0;
i=szam;
while (i>0)
{
if (szam % i == 0 )
{
printf (''Ez az %d \n'',szam / i );
l++;
}
i--;
}
printf(''\nVolt: %d'',l);
getch();
}
getch();
return 0;
} -
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. -
angelka
csendes tag
Hát sajna így is 0-át ír!
-
Amúgy ez nagy számokra böhöm lassú, persze pár milláig simán elfut így is.
Ha bazi gyorsan akarod, akkor a főprogram részt ki kell cserélni erre:
// ha n a kisebb, akkor kicseréljük a 2 számot
if (n < m) {d = n; n = m; m = d;}
while (m)
{
d = m;
m = n % m;
n = d;
}
cout << ''LNKO = '' << n << endl;
Ez a híresneves euklídeszi algoritmus.
[Szerkesztve] -
angelka
csendes tag
Na jó így már kiírja az eredményt, de nem jól!
Pl.: n=25 és m=15 -re d=0-át ír! -
Niquis
aktív tag
Első látásra: while ((d>0) &&!(d/n && d/m));
nem jó, while után az első utasítást (avagy blokkot) hajtja csak végre. Nálad ez egy üres utasítás (;). Ezt így kell kiküszöbölni:
while ((d>0) &&!(d/n && d/m)) d--;
Szemantikailag még nem néztem.
Ja és remélem az az <iostream> az elején, <iostream.h> -t akar jelenteni.
[Szerkesztve] -
angelka
csendes tag
na most így néz ki
:
#include <iostream>
#include <stdlib.h>
using namespace std;
int main()
{
int n, m, d ;
cout << '' legnagyobb kozos oszto szamitasa !'' << endl;
cout << endl << '' kerem az elso szamot: '' ;
cin >> n;
cout << endl << '' kerem a masodik szamot: '' ;
cin >> m;
// főprogram d=lnko(n,m)
d = min(n,m);
while ((d>0) &&!(d/n && d/m));
d--;
// Az eredmény kiírása
cout << '' a legnagyobb kozos oszto: '' << d << endl;
char ch; cin >> ch;
return 0;
}
De most meg nem írja ki az eredményt!Bekéri a két számot , aztán leáll!?? -
angelka
csendes tag
na most így néz ki
:
#include <iostream>
#include <stdlib.h>
using namespace std;
int main()
{
int n, m, d ;
cout << '' legnagyobb kozos oszto szamitasa !'' << endl;
cout << endl << '' kerem az elso szamot: '' ;
cin >> n;
cout << endl << '' kerem a masodik szamot: '' ;
cin >> m;
// főprogram d=lnko(n,m)
d = min(n,m);
while ((d>0) &&!(d/n && d/m));
d--;
// Az eredmény kiírása
cout << '' a legnagyobb kozos oszto: '' << d << endl;
char ch; cin >> ch;
return 0;
}
De most meg nem írja ki az eredményt!Bekéri a két számot , aztán leáll!?? -
angelka
csendes tag
na most így néz ki
:
#include <iostream>
#include <stdlib.h>
using namespace std;
int main()
{
int n, m, d ;
cout << '' legnagyobb kozos oszto szamitasa !'' << endl;
cout << endl << '' kerem az elso szamot: '' ;
cin >> n;
cout << endl << '' kerem a masodik szamot: '' ;
cin >> m;
// főprogram d=lnko(n,m)
d = min(n,m);
while ((d>0) &&!(d/n && d/m));
d--;
// Az eredmény kiírása
cout << '' a legnagyobb kozos oszto: '' << d << endl;
char ch; cin >> ch;
return 0;
}
De most meg nem írja ki az eredményt!Bekéri a két számot , aztán leáll!?? -
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] -
angelka
csendes tag
Hello!
Ebben a progiban mi a baja a fordítónak a while!(d/n && d/m); résszel?
#include <iostream>
#include <stdlib.h>
#include <stdlib.h>
using namespace std;
int main()
{
int n, m, d ;
cout << '' legnagyobb kozos oszto szamitasa !'' << endl;
cout << endl << '' kerem az elso szamot: '' ;
cin >> n;
cout << endl << '' kerem a masodik szamot: '' ;
cin >> m;
// főprogram d=lnko(n,m)
d = min(n,m);
while !(d/n && d/m)
{
(d = d--);
}
// Az eredmény kiírása
cout << '' a legnagyobb kozos oszto = '' << d << endl;
return 0;
}
Aktív témák
Állásajánlatok
Cég: FOTC
Város: Budapest