Új hozzászólás Aktív témák
-
Jhonny06
veterán
válasz playnsmile #1860 üzenetére
Ezt ide kellett volna.
-
Jhonny06
veterán
válasz WonderCSabo #1658 üzenetére
Szinte biztos. A korábban linkelt oldalakon is ez volt a hibaüzenetre a legvalószínűbb megoldás.
Az stdio ugye C-s header, szóval..
-
Jhonny06
veterán
válasz dabadab #1646 üzenetére
Én VS-el kezdtem és nem volt overkill, abszolút. Az egyetlen generált vudu az "stdafx.h" precompiled header volt, gyorsan utánanéztem és legközelebb már kikapcsoltam.
Egyébként nem akkora kaland a kezelése, egy kezdőnek pár funkciót kell tudnia, csak sokakat elriaszt a tengernyi lehetőség, amikor először meglátják a kezelőfelületet. De aki programozó akar lenni, abban legyen annyi kitartás, hogy végigklikkelget a dolgokon és rájön, hogy miként működik az IDE.
[ Szerkesztve ]
-
Jhonny06
veterán
válasz Dave-11 #1565 üzenetére
Ezzel hozol létre egy vektort:
vector<Entry> phone_book(1000)
vector -> vektor, egy adatszerkezet, ami nagyon hasonló a tömbökhöz
<Entry> -> a vektor típusa, lehet pl. int, string, egy struktúra, kvázi amit akarsz
phone_book -> a vektor neve, értelemszerűen bármi lehet
(1000) -> a vektor mérete, nem kötelező megadni, mert dinamikusan tudja bővíteni magátÚgy éred el az elemeit, mint a tömbnek:
phone_book[0], stb..
Ha nem adsz meg neki méretet, akkor a push_back()-el tudsz egy elemet beilleszteni:
int x = 3;
phone_book.push_back(x);Röviden ennyi. Ne hagyd ki, mert elég alap dolog szvsz. Ha megy az angol, ezt érdemes átolvasni (meg úgy alapvetően ajánlom figyelmedbe az oldalt).
[ Módosította: philoxenia ]
-
Jhonny06
veterán
válasz Dave-11 #1562 üzenetére
Ha visszatérsz egy függvénnyel, az csak 1 érték (ráadásul ugye lokális, ennek nézz utána). Ellenben mutatókkal a függvényen belül annyit módosítasz, amennyit akarsz.
pl.:
int main(void) {
int a = 5;
int b = 3;
cout << osszead(a, b) << endl;
return 0;
}
int osszead(int x, int y) {
return x + y;
}Itt látszik a korlátja a dolognak. Egy összeadó függvénnyel tökéletesen működik, mert csak egy értékkel tér vissza, az eredménnyel. De ha mondjuk van egy olyan függvény, ami két számot külön-külön négyzetre emel, ott már elbukott az egész, mert érték szerinti paraméterátadásnál másolat készül a változóról és amit a függvényben változtatsz rajta, az visszatérés után/vagy nélkül elveszik. És csak 1 értéket tudsz visszaadni.
[ Szerkesztve ]
-
Jhonny06
veterán
Egy egész függvénykönyvtár áll a rendelkezésedre, nem kell int-é alakítani (érdekes is lenne). Ha mindegyiknek 192.168.100 az eleje, akkor simán tudsz szűrni, hogy egy csoportosításnál csak az azután lévő karaktereket vegye figyelembe, vagy a 3. pont utánit, ilyesmi. Azokat már lehet int-é alakítani, úgy rendezni, stb.
-
Jhonny06
veterán
Tehát ha a VS-ben létrehozok egy bármilyen C++ projektet, akkor az tuti Visual C++? Egyáltalán honnan ismerem meg, hogy standard C++-e vagy nem? Mert gyakorlatilag egy bármilyen IDE-be bemásolom a forrást és ugyanúgy lefut a VS-ben használt kód mondjuk egy Code::Blocks-ban is.
[ Szerkesztve ]
-
Jhonny06
veterán
válasz h1ght3chzor #1514 üzenetére
Nekem ez a sor gyanús, szerintem valami indexeléssel kapcsolat hiba lesz:
this->tomb=new Project [this->getprojektmeret()+1];
-
Jhonny06
veterán
válasz h1ght3chzor #1500 üzenetére
Én a CodeToGo-t használtam egy ideig, de nem tud sokat, úgyhogy ne várj csodát. Jobb szerintem nincs.
-
Jhonny06
veterán
Egy gyakornoki C++ feladatlapon volt egy olyan kódsor, hogy létrehoztak egy float-ot 1.1-es értékkel és egy double-t is ugyanazzal. Utána if-else, miszerint "x"-et ír ki (most csak mondtam valamit), ha egyenlőek és "y"-t, ha nem. Tudtam, hogy az utóbbi íródik ki (azaz elvileg nem egyenlőek), de nem tudtam kifejteni, hogy miért. Ötlet?
[ Szerkesztve ]
-
Jhonny06
veterán
Egy sima fa megvalósítása mennyiben tér el egy bináris fáétól? Korábban linkeltem ezt a kódot, most egy sima fa használatával kéne megoldanom egy feladatot. Gondolom nincs ilyen kikötés, hogy balra kisebb, jobbra pedig nagyobb értéknek kell állnia. Meg nincs bal és jobb oldal, hiszen nem csak 2 ága lehet minden parent-nek, hanem akárhány. Ezért célszerűbb lenne egy előző és következő nevű mutató, valamint egy elem hozzáadásánál nem kell leellenőrizni, hogy kisebb-e vagy sem, csak belepakolni. Kb. jó, amit írok? (Bár ez már inkább láncolt lista ) Ez az egy normális tutorial van, amit találtam, de template-ekkel most nagyon nem akarok szórakozni.
[ Szerkesztve ]
-
Jhonny06
veterán
Bináris fa kiiratásánál 4X is root == NULL-ba futok, nem értem miért, pedig fel van töltve. [link]
-
Jhonny06
veterán
Simán return;-al mennyire szerencsés visszatérni olyan esetben, amikor nem várt eredmény miatt meg akarjuk szakítani a folyamatot? Én return 1;-et szoktam használni, ezzel a megoldással egészen idáig nem is találkoztam.
-
Jhonny06
veterán
Nem tudom, hogy akkor mi lenne a jó.. ilyen "régi" nyelvekkel tuti nem tölteném az időmet, a C++ később megtérül. Hiába nem a programnyelv a lényeg, hanem a gondolkodásmód, akkor se.. mondjuk engem vonzanak a modern dolgok, szeretek a Visual Studio-val dolgozni, már csak ezért is gáz volt a pl. a Turbo Pascal-féle ocsmány GUI (persze ez a legjelentéktelenebb szempont).
-
Jhonny06
veterán
válasz CoolBoy323 #1387 üzenetére
Én ezzel kezdtem, 0-ról. Nem mondom, hogy tökéletes, de nem rossz, szerintem nincs is nagyon jobb most a piacon. A C++ jó első nyelvnek, semmiképp se kezdenék Pascallal, meg hasonló halott nyelvekkel. Amúgy neten rengeteg forrás van, csak keresni kell, gondolom egyedül is megy. Ha megy az angol, akkor pláne előnybe vagy.
[ Szerkesztve ]
-
Jhonny06
veterán
Sziasztok!
C++ gyakornoki pozícióra mennyi tudással érdemes pályázni, illetve az egyetem hanyadik évében? (Úgy általánosan, persze cégtől függ, hogy ki mit vár el.)
-
Jhonny06
veterán
válasz Jester01 #1321 üzenetére
Mondjuk nem tudom, hogy mire kell felhívni a figyelmet, amikor a fordító szól érte és egyértelműen le se fut a kód, csak úgy, ha az x-et is konstansként deklaráljuk, akkor pedig már nem lehet trükközni. Sok ilyen dolog van a C-ben, ami egyértelműen kerülendő és észrevehető, ha másért nem, akkor azért, mert nem fut le.
-
Jhonny06
veterán
Konkrétan az volt a kérdés (egy külföldi fórumon találtam) az interjún, hogy miért rossz, tehát rossz. Amúgy le se fordul a kód, ha kipróbálod, tehát tuti az. char** és const char** közötti konverzióról panaszkodik. Ezért próbálom megfejteni, hogy mi a magyarázat, a megoldás egyértelmű, csak nem sokat ér, ha nem értem, hogy miért.
-
Jhonny06
veterán
válasz Jester01 #1316 üzenetére
Igazából azt nem értettem, hogy akkor mi is a hiba az eredetileg írt kóddal (lehet, hogy benne volt a válasz, csak nem értem):
char* x;
const char** y = &xTehát ha az y nem tudja dupla indirekcióval megváltoztatni azt az értéket, amire az x mutat (illetve címet, most mindegy), akkor követelmény, hogy az x se tudja megváltoztatni, azaz azt is konstansként kell deklarálni, nem? Tehát nem lenne értelme annak (illetve helytelen lenne), ha az y az x-en keresztül nem tudná megváltoztatni, az x viszont igen. Erre jutottam.
[ Szerkesztve ]
-
Jhonny06
veterán
Ez a kód szerepelt egy junior c++ fejlesztő állás interjúkérdései között, hogy miért rossz:
char* x;
const char** y = &xGondolkoztam rajta, hogy konstans mutató nem kaphat új memóriacímet, de az inicializálásnál ez nem lehetne gond.
-
Jhonny06
veterán
Egy átlagos vektort tudok kezelni, ami sima elemeket tartalmaz, azzal nem szokott gond lenni. Itt viszont már bekavarnak az osztályok is.
Szerintem itt valami más lesz a rossz, mert most kikommenteltem az elérő függvényeket és áttettem public-ba a listát próbaként és így sem éri el a Hallgato osztály elemeit.
pl:
peldany.lista[0].valami
Tehát egy Hallgato példányokból álló tömb kéne az Adatbazis osztályban.
proci985: Mondjuk az is érdekes lenne, ha még ezzel is küzdök.
[ Szerkesztve ]
-
Jhonny06
veterán
-
Jhonny06
veterán
Ezzel a vektorral el lehet érni az objektumom adattagjait? Igazából két osztályom van, egy Hallgato meg egy Adatbazis, most az Adatbazis osztályon belül csináltam egy Hallgato objektumtömböt és ezen osztály elemeit szeretném egy Adatbazis példányon belül elérni, mármint a példánytömb segítségével. Tehát valahogy így:
Adatbazis peldany;
peldany.lista[0].erdemjegy; //ez már hibás[ Szerkesztve ]
-
Jhonny06
veterán
(Ilyenkor jövök rá, hogy mennyire nem tudok semmit.)
Szóval, most megpróbálom vectorral:
Osztálydeklarációnál, privát adattagként:
vector<Adatbazis> lista;
Ennek kéne elérő és módosító függvény, mert privát. Ez viszont nem megy, simán a "lista"-t nem engedi visszaadni.Mégis sikerült.A konstruktorban pedig lista.resize(random)-oltam, ez oké. És ezzel meg is van, vagy még for ciklusban inicializálni kéne, mint C#-ban a new taggal, minden egyes indexű elemet, vagy ez így ennyi? Ezt a részét nem értem C#-ban sem, hogy miért kell. Mármint a memóriafoglalásnak ezen része. Ezt csak akkor kell, ha deklarációnál nem adom meg rögtön a méretét, mert itt dől el, hogy mégis mekkora méretű lesz, nem? Így már van értelme. Bár gondolom vector-nál ezt nem kell, mert dinamikusan kezeli a memóriafoglalást.
(Ti is ennyit kérdeztetek kezdőként? Nyugtasson már meg valaki.)
[ Szerkesztve ]
-
Jhonny06
veterán
Na, még egy (bocs, utálok kérdezni, de sehol nem találok rá megoldást). Objektumtömb létrehozása privát adattagként(Osztalynev tomb[]) megvan, ezután konstruktorban random mérettel kéne feltölteni. Ilyen C#-osan próbáltam, hogy random értéktől függően for ciklus, majd tomb[i] = new Osztalynev();. Random érték nélkül, simán main()-ben létrehozva, azonnali méretadással nem nagy kaland, így viszont nem megy.
Szerk.: Mutatóval megy:
Hallgato *tomb[]
[ Szerkesztve ]
-
Jhonny06
veterán
Egy változó kell, ami minden példány létrehozásakor növekedik 1-el, ami oké, mert beleírom a konstruktorba, csak a legkisebb érték 100 lehet, azaz mondjuk 99-től indul. Az értem, amit írtál, de hova írjam a kezdőértéket? Az osztálydeklarációba nyilván nem lehet, a konstruktorba meg azért nem jó, mert minden példány létrehozásánál a kezdőértéket fogja megkapni.
-
Jhonny06
veterán
Sziasztok!
Ha az osztálydeklaráción belül nem tudok definiálni egy változót, akkor hogy tudom megoldani azt, hogy egy bizonyos értéktől kell indulnia (mondjuk 100) egy egész típusú változónak? Mert oké, hogy rakok a konstruktorba egy szam++-ot, de az 0-tól fog számolni, amikor létrehozok egy példányt. C#-ba simán meg lehetett adni neki a 100-as kezdőértéket. Köszönöm.
[ Szerkesztve ]
-
Jhonny06
veterán
Amikor ilyen apró pepecselős módosításokat kell végezni egy programon és fél percenként futtatni kell, hogy jó-e az eredmény, akkor ti mindig újrabuildelitek és debuggal futtatjátok? Én build és debug nélkül szoktam, de most észrevettem, hogy mintha nem mindig jegyezné meg a módosításokat, hanem az előző állapottal futtatja, én meg csodálkozok, hogy miért hibás még mindig, miután a 10. átnézésre is mindent rendben találtam.
-
Jhonny06
veterán
válasz haromegesz14 #1142 üzenetére
Mindenkinél más a kezdő, de szerintem ezek elég könnyűek (az eleje legalábbis mindenképp), a fokozatosság is megvan bennük. Ez ugyan egyetemi, de az alapfeladatok szerintem mindenhol egyforma nehézségűek. Nyilván ha a Hello World kiiratása sem megy, akkor hagyd, de ez elég alap tudást feltételez, a BME-re se úgy megy mindenki, hogy tud programozni, tehát nagyjából "elölről" kezdik az anyagot.
[ Szerkesztve ]
-
Jhonny06
veterán
válasz Barett 50cal #1138 üzenetére
"valaki megtudná nekem irni a progit?"
Legközelebb hogy fog menni?
-
Jhonny06
veterán
Van olyan függvény, ami érzékeli, hogy futásidőben változik az idő és az alapján írja ki? Mert ezt így hiába késleltetem (2 másodperccel ebben a példában), a fordítás időben olvasott idő az output.
#include <iostream>
#include <time.h>
//#include <fstream>
using namespace std;
int main()
{
char time[9];
_strtime(time);
cout << "Started at: ";
std::printf(time);
cout << endl;
int seconds = 2;
clock_t endwait;
endwait = clock () + seconds * CLOCKS_PER_SEC ;
while (clock() < endwait) {}
std::printf(time);
return 0;
}[ Szerkesztve ]
-
Jhonny06
veterán
Felkeltette a figyelmemet ez a cikk, van valami forrás erre, ahol meg lehet tanulni kvázi olvasni a fordító által generált kódot? Ez most asszem pont C#, de gondolom annyiban lényegtelen, hogy C++ is hasonló lehet, engem az utóbbi érdekelne.
-
Jhonny06
veterán
válasz lamajoe #1108 üzenetére
Én is ebből tanultam anno, nem rossz, bár egy kicsit érdekesen van összeállítva. Memóriakezelés, láncolt listák, meg sablonok vannak benne, de egy sima I/O műveletet egy egyszerű fájllal még véletlenül se raktak volna bele. Pedig ez alap, főleg aki emelt érettségire akar felkészülni.
[ Szerkesztve ]
-
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.
[ Szerkesztve ]
-
Jhonny06
veterán
Hanyagold az ilyen kéréseket, már párszor csináltam hasonlót gyakorlás/jószívűségem miatt, de soha nem jött semmi válasz vissza (na jó, talán egyszer).
Mondjuk az illető nagyobbat fog szívni, mert ha nem gyakorolja, akkor nem fogja tudni, esetleg következő alkalommal belekérdeznek.. meg kell adni neki az induláshoz a segítséget, aztán hagyni, hadd szenvedjen. Az ilyenek minek mennek progra?
[ Szerkesztve ]
-
Jhonny06
veterán
(Az előző kérdésemre azóta már találtam megoldást, bár nem túl elegáns és nem is teljes.)
Sziasztok!
Elkezdtem a Nell Dale-féle ~800 oldalas Data Structures könyvet, 100 oldal után egész jónak tűnik, bár nem könnyű angolul olvasni, főleg így kezdőként (mármint a C++-ba, nem az angolba ). Nem szeretek segítséget kérni, de van egy dolog, amit akárhányszor rágok át, akkor sem értek. Az adattípusoknál három felsorolt elem van: structure, class és array. Ezek közül egyedül az array-re írja azt, hogy struktúrált, a többi struktúrálatlan. Ez pontosan mit is jelent? Magyarul tudom, hogy mit jelent a szó, de nem tudom átvezetni a kifejezést. Az elemeket ismerem, stb., tehát az alapokkal nincs gond. Nagyjából sejtem, hogy miről van szó, gondolom az elemek elhelyezkedésére érti, de jobb biztosra menni.
Köszi,
J.
[ Szerkesztve ]
-
Jhonny06
veterán
Sziasztok!
Egy tömb indexelésénél meg lehetne oldani azt, hogy az üres memóriaterületre mutató elemeket átugorjam? Hangsúlyozom, nem a tömb végénél kéne megállnia, hanem pl. egy 20 elemű tömböt mindig eltérő számú változóval töltenék meg és ha esetleg két változó között lenne egy üres elem (mert esetleg egy for loopban a feltétel nem teljesül, de a növelés ugye mindenképpen megtörténik), akkor azt ugorja át, elég csúnyán néz ki az outputban a -858993460. Próbáltam if statement-et, hogy csak akkor legyen cout, amikor a változó!=NULL-al, de ez így elég necces megoldás és tulajdonképpen nem is működik.
[ Szerkesztve ]
-
Jhonny06
veterán
válasz likeaRAINBOW #892 üzenetére
Nem kell a C a C++ előtt, rögtön mehet az utóbbi. Egyébként az 1 év C#-nak gondolom megvan az eredménye, ennek sem sokkal másabb a logikai felépítése, egy csomó mindent egyből érteni fogsz. Ez jó lesz kezdetnek, aztán a Bjarne Stroustrup-féle kétkötetes, stb.
-
Jhonny06
veterán
Ja a cím szerinti átadás világos, elsőre azt hittem, hogy valami komolyabbról van szó (ezt most úgy mondtam, mintha akkora májer lennék, mindegy ).
Lefuttatom az általad bemásolt kódot és ugyanaz a hibaüzi, nem adhatsz meg csak simán something-et osztálynak, mert egy array-be vannak, mindenképpen ott kell lennie a [ ]-nek. Szerintem ez az egész alapvetően nem alkalmas arra, amit szeretnék, mert bárhogy próbálom, mindig ugyanahhoz a hibához lyukadok ki.
Azt kellene megvalósítanom, hogy miközben végigmegy a sorokon (pl. for szerkezettel) kilistázza azoknak a soroknak a neveit, amikben a szám == 2, például.
Tehát hiába hozok létre egy változót mondjuk 2 értékkel és írom be a tömbbe, pl.: something[változó].szam, mert utána nem írhatom azt, hogy something.nev, ez egy ördögi kör.
[ Szerkesztve ]
-
-
Jhonny06
veterán
1. Azt a példát csak gyorsan összedobtam, azért vannak felcserélve, véletlenül.
2. Ezt kifejthetnéd bővebben.A dinamikus tömbökről már korábban tanultam, csak most még nem jut eszembe használni, de kipróbálom így is.
A something.day viszont továbbra sem működik, mert alapvetően így olvastam be ugye az adatokat, hogy something[i].day, tehát dob egy szokásos hibaüzit, hogy .day must have a class/struct/union, tudod. Vagy ezt már a dinamikus tömbökkel kéne és menni fog?
A continue egy korábbi while-ból véletlenül maradt bent, figyelmetlen vagyok.
[ Szerkesztve ]
-
Jhonny06
veterán
Sziasztok!
Egy fájlból kéne kiolvasnom adatokat, soronként tartalmaz mondjuk egy számot és egy nevet, az első sorban a sorok száma, pl:
5
1 Aladar
2 Peter
2 Aniko
3 Erno
1 TiborAddig eljutottam, hogy beolvasom az adatokat és ki tudom íratni, hogy n-edik sorban milyen szám vagy név van. Viszont összetettebbek már nem mennek, például, hogy azokat a neveket irassam ki, amely sorokban a szám=1. OK, létrehozok egy változót 1-es értékkel, tömbbe pl. mintatömb[változó].név és végigmegyek mondjuk for-al a sorokon, akkor ki tudom listázni, hogy milyen nevek vannak, de ennek jelen pillanatban nem sok hasznát veszem, tehát az alapok mennek. De ha mondjuk már megvan a szám, akkor azt nem tudom, hogy annak a sornak a neveit irassa ki, mert ugye a tömbbe is kell valamit írni, így hibát kapok: mintatömb[].név. Lehet, hogy nem struct-al kéne megoldani ezt?
[ Szerkesztve ]
-
Jhonny06
veterán
válasz WonderCSabo #679 üzenetére
Huh, köszönöm a gyors választ!
-
Jhonny06
veterán
Sziasztok!
Egy külső forrást (.txt) kellen beolvasni, aztán kiírni belőle tetszőleges adatokat. Ezzel nem is lenne probléma.
Tegyük fel, hogy ilyen sorokkal van tele a txt:
1 2 3 vezetéknév keresztnév
Az első 3 adatot simán beolvasom minden sorból, a 4. és 5.-el viszont gondba vagyok. El tudnám tárolni 4.-nek egy tetszőleges változóba, de ugye a 4. csak a vezetéknév és nekem a vezetéknevet és keresztnevet egybe kellene tudnom kilistázni, egy változóba. C#-ből ugye ismerjük az összevonó operátort, csak azt se nagyon tudnám használni ilyen formában, mivel a változó kiiratásakor kéne lennie egy szóköznek a vezetéknév és a keresztnév között. Meg lehet ezt valahogy oldani? Köszi.
Új hozzászólás Aktív témák
● ha kódot szúrsz be, használd a PROGRAMKÓD formázási funkciót!
Állásajánlatok
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest