| | |
| Stránka: 1 z 1
| [ Príspevkov: 6 ] | |
Autor | Správa |
---|
Registrovaný: 24.06.10 Prihlásený: 06.08.13 Príspevky: 42 Témy: 20 |
Dobrý deň
Chcel by som sa spýtať, ako by sa v C++ dali vytvárať premenné automaticky.
Napríklad by som chcel vytvoriť program v ktorom by som vrámci cyklu využil napríklad
cyklom meniacu hodnotu "i" na to aby mi vytvárala pri každom zopakovaní cyklu
premennu ktorá by obsahovala nejak to "i" zakomponované v sebe
napr. aby sa k "i" prirátavalo vždy jedna a mne by vznikali premenne
m_1
m_2
m_3 atď
Nemusí to byť striktne takto(ja som to len takto videl v PHP), len by som potreboval pri každom cykle vytvoriť novú premennú do ktorej potom vložím určitú hodnotu (konkrétne text).
Počet opakovaní cyklu samozrejme na začiatku programu ešte neviem... Chcel by som teda poprosiť o radu, lebo v C++ som ešte začiatočník.
|
|
Registrovaný: 02.11.07 Prihlásený: 18.03.15 Príspevky: 470 Témy: 22 Bydlisko: Zilinska Un... |
No vsak na to vyuzi pole. Kazdu jednu dalsiu iteraziu v cykle zvacsis to pole o jeden prvok a vlozis do neho napriklad novy text. Pri klasickych poliach
Kód: string *pole = new string[10];
je to komplikovane v tom, ze musis spravit spravu pamate a pri kazdom zvacseni pola o jeden prvok nanovo prealokovat, teda si musis spravit docasny buffer na ukladanie dat.
Jednoduchsie je zobrat STL vektor, co je inteligentny kontajner na prvky, je to genitalna zalezitost a moznost prehladavat pole pomocou iteratora. Napriklad volanim jednej metody, ti automaticky zvacsi pole o prvok. Je to nakodene pomocou Templates, takze v datovom type to nema obmedzenie a je to standard C++ od std::. Nastuduj si to
http://www.cplusplus.com/reference/stl/vector/
alebo
http://www.builder.cz/art/cpp/cpp_vector.html
je to v kapitole o vektoroch a iteratoroch.
STL vektory su rychle, vhodne na real-time.
Potom su tam aj napr. STL Mapy, ktore predstavuju nejaky vektorovy par, ale je to o dost pomalsie ako vektor.
_________________ Notebook: HP EliteBook 8740w
You can see my work in my www |
|
Registrovaný: 24.06.10 Prihlásený: 06.08.13 Príspevky: 42 Témy: 20 | Napísal autor témy Gresthorn: 19.04.2011 19:42 | |
|
Vďaka (Ospravedlňujem sa za trošku oneskorenú reakciu, ale mal som problémy s internetom)
Trošku som sa pohral s tymi poliami a nakoniec to predsa funguje...
Pozeral som aj na tie Vectory, ale tie kody už vyzeraju trošku pokročilejšie. Ako som vravel, som začiatočník, takže asi ešte nazbieram nejaké tie skúsenosti...
Ale do budúcna budem brať na vedomie že niečo také existuje a jednoznačne sa k tomu vrátim
Ale ešte by som sa rád spýtal na jeden menší problém, s ktorým si neviem dať rady.
Z knihy "Mistrovství C++" mám programovacie cvičenie v ktorom by mal program požiadať o počet aut, ktoré chcem pridať do katalógu a na základe vloženého údaja vytvoriť pole o takom počte štruktúr. Každá štruktúra by mala mať priestor pre značku a rok výroby auta. Následne mám vyplniť pole údajmi... Vyzeralo to jednoducho a napísal som takýto kód...
Kód: #include <iostream> using namespace std; struct car { char znacka[20]; int rok; }; car * pocet(short udaj); int main() { cout << "\aKolko aut chcete pridat do katalogu : _\b"; short zadanie; cin >> zadanie; cin.get(); car * pole = pocet(zadanie); char * text = new char[20]; for (int i = 0; i < zadanie; i++) { cout << "\a\n\nZadajte znacku : "; cin.getline(text, 20); strcpy(pole[i].znacka, text); cout << "Zadajte datum vyroby : "; cin >> (pole[i].rok); cin.get(); }; delete [] text; cout << "\n\nZadali ste tieto udaje : \n\n"; for (int a = 0; a < zadanie; a++) { cout << "Automobil #" << (a + 1) << endl; cout << "Znacka :\t" << pole[a].znacka << endl; cout << "Rok vyroby :\t" << pole[a].rok << endl << endl; }; cin.get(); return 0; } car * pocet(short udaj) { car katalog[udaj]; return katalog; }
Vychádzal som z toho že funkcia pocet vráti adresu k polu katalog ktorý obsahuje pozadovany pocet struktur a tá sa uloží na ukazatel pole. Ale pri výpise údajov to vyhadzuje hlúposti... Neviete mi prosím poradiť, kde mám chybu?
|
|
Registrovaný: 02.11.07 Prihlásený: 18.03.15 Príspevky: 470 Témy: 22 Bydlisko: Zilinska Un... |
Cely ten kod je zle spraveny v mojich ociach. Ak budem mat cas, ti to pozriem, ak to niekto nespravi skor . Ak robis C++, pouzi string nie char, bude sa ti lepsie robit a namiesto struct pouzi class. Nepouzivaj globalne premenne, ked nemusis , tie sa pouzivaju hlavne pri statickych objektoch typu extern, ale aj to je stare . // pridané po 51 minútach od posledného príspevkuKukni si toto.
Kód: #include <iostream> using namespace std;
class Car { public: Car() { rok = 0; cout << "konstukcia objektu" << endl; }
virtual ~Car() { cout << "destrukcia objektu" << endl; }
char znacka[20]; int rok; };
int main() {
cout << "Kolko aut chcete pridat do katalogu:"; int zadanie; cin >> zadanie; cin.get();
Car * pole = new Car[zadanie];
//char * text = new char[20]; //netreba for (int i = 0; i < zadanie; i++) { cout << "Zadajte znacku " << i + 1 << ": "; cin.getline(pole[i].znacka, 20); //strcpy(pole[i].znacka, text); //netreba cout << "Zadajte datum vyroby " << i + 1 << ": "; cin >> (pole[i].rok); cin.get(); };
cout << "Zadali ste tieto udaje :\n" << endl;
for (int a = 0; a < zadanie; a++) { cout << "Automobil #" << (a + 1) << endl; cout << "Znacka :\t" << pole[a].znacka << endl; cout << "Rok vyroby :\t" << pole[a].rok << endl << endl; };
delete[] pole; return 0; }
Ta funkcia pocet() tam je uplne na nic, co si tym chcel spravit?
_________________ Notebook: HP EliteBook 8740w
You can see my work in my www |
|
Registrovaný: 24.06.10 Prihlásený: 06.08.13 Príspevky: 42 Témy: 20 | Napísal autor témy Gresthorn: 20.04.2011 20:39 | |
|
Teraz to funguje pekne, hoci triedy som som ešte nebral, ale dostanem sa k nim o 2 kapitoly neskôr... Ale aspoň som mal možnosť vidieť ako funguju
Ak som to správne pochopil tak to "public" sa vyvoláva pri tvorbe objetku a "virtual" pri jeho mazaní?
Ibaže v zadaní písalo, aby som to vyriešil pomocou štruktúr... Nepochybne je toto asi viac C++ spôsob, ale nešlo by to predsa len cez štruktúry?
Tá funkcia pocet() mala obdržať počet štruktúr pre ktoré mala vytvoriť pole car katalog[napr. 2] a potom vrátiť jeho adresu... V podstate je pravdou, že tam je na nič a dalo sa to aj priamo, ale chcel som si trochu zopakovať čo som sa naučil... ale ona mala uložiť tú adresu do ukazatela pole, či nie? // pridané po 32 minútach od posledného príspevkuUps... Až teraz som si uvedomil, že som tú funkciu som mal totálne zle!
Už som ju zmenil na toto
Kód: car * pocet(short udaj) { car * katalog = new car[udaj]; return katalog; }
a funguje to
Vyhodil som aj ten pointer "text" a to strcpy... To som tam dodal kvôli tomu že som skúšal všetko možné, keďže mi nič nefungovalo
Takže chyba bola hneď na začiatku! Ale vďaka za odpoveď, lebo keby nebolo toho upozornenia že ta funkcia je tam uplne na nic tak by som nad tym asi ešte stále špekuloval Vlastne som to myslel dobre, ale zle som to vyjadril...
|
|
Registrovaný: 02.11.07 Prihlásený: 18.03.15 Príspevky: 470 Témy: 22 Bydlisko: Zilinska Un... |
Gresthorn píše: :D Teraz to funguje pekne, hoci triedy som som ešte nebral, ale dostanem sa k nim o 2 kapitoly neskôr... Ale aspoň som mal možnosť vidieť ako funguju Ak som to správne pochopil tak to "public" sa vyvoláva pri tvorbe objetku a "virtual" pri jeho mazaní?
To si velmi zle pochopil.
1. medzi triedou a strukturou nie je ziadny funkcny rozdiel. Je to uplne to iste. Rozdiel je iba v podstate zabezpecenia public a private. Takze kludne mozes class prepisat na struct a malo by to fungovat.
2. Trieda ma tzv. urovne zabezpecenia, do ktorych mozes zadelovat premenne a metody. public: su verejne a private: su sukromne premenne. So sukromnymi premennymi mozes pracovat iba vo vnutri triedy. S verejnymi pracujes pomocou objektu. Protected: suvisi s dedicnostou, to ta nemusi zatial trapit.
3. To virtual, tam nemusi byt, to kludne vymaz. To tiez suvisi s dedicnostou, nemusi ta trapit .
4. Konstrukcia objektu sa vykonava v konstruktore Car() {...} a destrukcia sa vykonava v destruktore ~Car() {...}, musia byt public: (verejne), aby sa dali volat z vonku cez objekt. Konstruktor a destruktor nie su nutnostou, to si nastuduj, ako to funguje .
_________________ Notebook: HP EliteBook 8740w
You can see my work in my www |
|
| Stránka: 1 z 1
| [ Príspevkov: 6 ] | |
Podobné témy | Témy | Odpovede | Zobrazenia | Posledný príspevok |
---|
| C++ API Vykreslenie hodnoty premennej v Assembler, C, C++, Pascal, Java | 2 | 307 | 04.03.2013 23:38 Grash | | automaticka prevodovka [ Choď na stránku: 1, 2 ] v Automobily, motorky | 41 | 2857 | 08.11.2010 23:27 andymc | | iframe - automatická výška v HTML, XHTML, XML, CSS | 12 | 1382 | 09.01.2009 23:33 shaggy | | Automatická aktualizácia času W7 v Ostatné programy | 2 | 1068 | 29.06.2010 20:04 killer | | Automaticka pracka okolo 500€ v Ostatné | 12 | 748 | 28.08.2023 9:58 Iv0 | | automaticka kopia bunky v Exceli v Ostatné programy | 2 | 662 | 29.01.2008 17:31 luto | | Automatická inštalácia na disk D: v Operačné systémy Microsoft | 3 | 404 | 19.08.2017 23:49 Astac | | Automaticka zmena url na kod v PHP, ASP | 29 | 1007 | 04.01.2011 13:52 prohibit | | Windows 7-automatická inštalácia driveru. v Operačné systémy Microsoft | 9 | 1692 | 24.08.2011 0:31 matwej | | Automatická inštalácia na iný disk v Ostatné programy | 3 | 580 | 22.08.2015 12:12 valentinvrbovsky | | nastavenie crona - automatická optimalizácia mysql databázy v Redakčné systémy | 0 | 1042 | 19.09.2008 1:11 Slivka | | Schéma: Automatická nabíjačka miniaturných gomb. batérií v Elektronika | 0 | 2508 | 23.01.2007 6:58 Elektronic | | Update Checker, automatická aktualizácia softvéru vo Wind v Novinky | 4 | 647 | 01.09.2008 10:24 shiro | | automaticka synch. zdrojoveho adresaru do 150 adresarov v Webhosting a servery | 1 | 321 | 25.11.2013 10:32 don jebot | | automaticka zmena ip pri roznych wifi sietach v Siete | 1 | 891 | 02.01.2010 22:19 Jaro | | Automatická prenositeľnosť čísla od 5. mája, Orange a. v Novinky | 1 | 641 | 30.04.2008 20:51 dsljohn |
| Nemôžete zakladať nové témy v tomto fóre Nemôžete odpovedať na témy v tomto fóre Nemôžete upravovať svoje príspevky v tomto fóre Nemôžete mazať svoje príspevky v tomto fóre
|
|