Obsah fóra
PravidláRegistrovaťPrihlásenie




Odpovedať na tému [ Príspevkov: 6 ] 
AutorSpráva
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 24.06.10
Prihlásený: 06.08.13
Príspevky: 42
Témy: 20
Príspevok NapísalOffline : 14.04.2011 18:07

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. :roll:


Offline

Užívateľ
Užívateľ
C++ automatická tvorba premennej

Registrovaný: 02.11.07
Prihlásený: 18.03.15
Príspevky: 470
Témy: 22
Bydlisko: Zilinska Un...
Príspevok NapísalOffline : 14.04.2011 20:13

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
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 24.06.10
Prihlásený: 06.08.13
Príspevky: 42
Témy: 20
Príspevok Napísal autor témyOffline : 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?


Offline

Užívateľ
Užívateľ
C++ automatická tvorba premennej

Registrovaný: 02.11.07
Prihlásený: 18.03.15
Príspevky: 470
Témy: 22
Bydlisko: Zilinska Un...
Príspevok NapísalOffline : 19.04.2011 22:46

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íspevku

Kukni 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
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 24.06.10
Prihlásený: 06.08.13
Príspevky: 42
Témy: 20
Príspevok Napísal autor témyOffline : 20.04.2011 20:39

: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í?

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íspevku

Ups... :oops: 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 :D
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 :shock:

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 :lol: Vlastne som to myslel dobre, ale zle som to vyjadril...


Offline

Užívateľ
Užívateľ
C++ automatická tvorba premennej

Registrovaný: 02.11.07
Prihlásený: 18.03.15
Príspevky: 470
Témy: 22
Bydlisko: Zilinska Un...
Príspevok NapísalOffline : 22.04.2011 13:54

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
Odpovedať na tému [ Príspevkov: 6 ] 


Podobné témy

 Témy  Odpovede  Zobrazenia  Posledný príspevok 
V tomto fóre nie sú ďalšie neprečítané témy. C++ API Vykreslenie hodnoty premennej

v Assembler, C, C++, Pascal, Java

2

307

04.03.2013 23:38

Grash Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. automaticka prevodovka

[ Choď na stránku:Choď na stránku: 1, 2 ]

v Automobily, motorky

41

2857

08.11.2010 23:27

andymc Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. iframe - automatická výška

v HTML, XHTML, XML, CSS

12

1382

09.01.2009 23:33

shaggy Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Automatická aktualizácia času W7

v Ostatné programy

2

1068

29.06.2010 20:04

killer Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Automaticka pracka okolo 500€

v Ostatné

12

748

28.08.2023 9:58

Iv0 Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. automaticka kopia bunky v Exceli

v Ostatné programy

2

662

29.01.2008 17:31

luto Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Automatická inštalácia na disk D:

v Operačné systémy Microsoft

3

404

19.08.2017 23:49

Astac Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Automaticka zmena url na kod

v PHP, ASP

29

1007

04.01.2011 13:52

prohibit Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Windows 7-automatická inštalácia driveru.

v Operačné systémy Microsoft

9

1692

24.08.2011 0:31

matwej Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Automatická inštalácia na iný disk

v Ostatné programy

3

580

22.08.2015 12:12

valentinvrbovsky Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. nastavenie crona - automatická optimalizácia mysql databázy

v Redakčné systémy

0

1042

19.09.2008 1:11

Slivka Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Schéma: Automatická nabíjačka miniaturných gomb. batérií

v Elektronika

0

2508

23.01.2007 6:58

Elektronic Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Update Checker, automatická aktualizácia softvéru vo Wind

v Novinky

4

647

01.09.2008 10:24

shiro Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. automaticka synch. zdrojoveho adresaru do 150 adresarov

v Webhosting a servery

1

321

25.11.2013 10:32

don jebot Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. automaticka zmena ip pri roznych wifi sietach

v Siete

1

891

02.01.2010 22:19

Jaro Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Automatická prenositeľnosť čísla od 5. mája, Orange a.

v Novinky

1

641

30.04.2008 20:51

dsljohn Zobrazenie posledných príspevkov


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

Skočiť na:  

Powered by phpBB Jarvis © 2005 - 2024 PCforum, webhosting by WebSupport, secured by GeoTrust, edited by JanoF
Ako väčšina webových stránok aj my používame cookies. Zotrvaním na webovej stránke súhlasíte, že ich môžeme používať.
Všeobecné podmienky, spracovanie osobných údajov a pravidlá fóra