[ 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 | 20
NapísalOffline : 14.04.2011 18:07 | C++ automatická tvorba premennej

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 | 22
Bydlisko: Zilinska Un...
NapísalOffline : 14.04.2011 20:13 | C++ automatická tvorba premennej

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 | 20
Napísal autor témyOffline : 19.04.2011 19:42 | C++ automatická tvorba premennej

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 | 22
Bydlisko: Zilinska Un...
NapísalOffline : 19.04.2011 22:46 | C++ automatická tvorba premennej

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 | 20
Napísal autor témyOffline : 20.04.2011 20:39 | C++ automatická tvorba premennej

: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 | 22
Bydlisko: Zilinska Un...
NapísalOffline : 22.04.2011 13:54 | C++ automatická tvorba premennej

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
 [ Príspevkov: 6 ] 


C++ automatická tvorba premennej



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

347

04.03.2013 23:38

Grash

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

2949

08.11.2010 23:27

andymc

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

iframe - automatická výška

v HTML, XHTML, XML, CSS

12

1431

09.01.2009 23:33

shaggy

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

Automatická aktualizácia času W7

v Ostatné programy

2

1107

29.06.2010 20:04

killer

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

Automaticka pracka okolo 500€

v Ostatné

12

1111

28.08.2023 9:58

Iv0

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

Automatická inštalácia na iný disk

v Ostatné programy

3

614

22.08.2015 12:12

valentinvrbovsky

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

automaticka kopia bunky v Exceli

v Ostatné programy

2

696

29.01.2008 17:31

luto

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

Automaticka zmena url na kod

v PHP, ASP

29

1033

04.01.2011 13:52

prohibit

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

1724

24.08.2011 0:31

matwej

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

444

19.08.2017 23:49

Astac

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

2586

23.01.2007 6:58

Elektronic

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

1080

19.09.2008 1:11

Slivka

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

automaticka zmena ip pri roznych wifi sietach

v Siete

1

931

02.01.2010 22:19

Jaro

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

Update Checker, automatická aktualizácia softvéru vo Wind

v Novinky

4

680

01.09.2008 10:24

shiro

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

automaticka synch. zdrojoveho adresaru do 150 adresarov

v Webhosting a servery

1

355

25.11.2013 10:32

don jebot

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

678

30.04.2008 20:51

dsljohn



© 2005 - 2024 PCforum, edited by JanoF