Anonymní profil Vitamin – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Anonymní profil Vitamin – Programujte.comAnonymní profil Vitamin – Programujte.com

 

Příspěvky odeslané z IP adresy 95.105.128.–

C / C++ › Při zkompilování okno jen pr…
12. 12. 2011   #151159

#6 Martin

Ved KIIV ti povedal co sa deje. Precitaj si to este raz a pri tom si uvedom ze pocitac je velmi rychly :)

fasffa ti zas napisal jedno z mnoha rieseni tvojho problemu (funguje na windowse).

C / C++ › divné chování vstupů (scanf,…
11. 12. 2011   #151115

#1 lDm
Nacitavanie vsetkych stringov pomocou scanf mas zle. %s vyzaduje ako parameter pointer na prvy prvok retazca.      

scanf("%49s", jmeno);
//alebo
scanf("%49s", &jmeno[0]);
C / C++ › kombinace sablony a tridy st…
11. 12. 2011   #151099

Mam inu otazku, preco chces vytvarat maticu stringov? :)

C / C++ › kombinace sablony a tridy st…
11. 12. 2011   #151097

#1 fnenks
miesto:

       inventory(Type = 0);	//do stringu nemozes zpisat integer

pouzi 2 konstruktori.

       inventory(const Type &t);		
       inventory();				

vo funkcii operator(int, int) sa tiez snazis do stringu priradit 0. 

Na indexovanie matice nebudes potrebovat zaporne cisla, pouzi unsigned, pripadne size_t.

To ze sa skoro vsetko indexuje od 0 ale tvoje funkcie budu indexovat od 1 bude fakt prehladne :)

Nerob funkcie moc blbovzdorne, radsej napis komentar ako sa maju pouzivat.

C / C++ › operator[] ve tride
10. 12. 2011   #151073

#1 fnenks
Pri pretazeni operatora nemozes menit jeho prioritu ani pocet parametrov.

Operator [] moze ale vracat premennu. Takze pretazis [] napr takto:

int &operator[](const unsigned &n);

Cize operator vrati referenciu na int (pripadne na iny typ). Referencia sa da pouzit ako lvalue, cize mozes pozuit naslende priradenie cez = .  

C / C++ › Chyba při nahrazení a posunu…
9. 12. 2011   #151057

 
Ten algoritmus ma ale dost velku zlozitost (je pomaly). Da sa napisat jednoduzsi algoritmus ktori nepozuiva strlen() a na spracovanie retazca mu staci 1 prechod cez cele pole(retazec).

	char *a, *b;
	for(a= b= str1; *b != '\0'; b++){
		if(*b != 'x' && *b != 'w'){
			*a = *b;
			++a;
		}
	}
	*a = '\0';
C / C++ › Chyba při nahrazení a posunu…
9. 12. 2011   #151055

#5 Wannabie
Skus si tam zadat "axxbxxc". Ked narazis na prve 'x', tak posunies zvysok retazca. Lenze na miesto povodneho 'x' vlozis nasledujucu hodnotu ktora je v tomto pripade zas 'x'. Kedze vo for-e inkrementujes p tak toto dalsie 'x' uz netestujes a ostane ti v retazci.

C / C++ › Matica- horná trojuholnikova…
9. 12. 2011   #151032

#3 morfeus
Tak skus pouzit GEM.

C / C++ › Matica- horná trojuholnikova…
8. 12. 2011   #150976

Aka je to "horna trojuholnikova" matica, co reprezentuje ta matica, ako ju chces upravovat a co vlastne pocitas?

Zatial mi to pripada ze matica reprezentuje rovnice o viacerych premennych a chces ju upravyt na stupnovyty tvar (cez gem?) a potom vypocitat korene. Mozno len taram blbosti a pocitas daco ine :)

C / C++ › Načítanie súboru do matice
6. 12. 2011   #150892

#7 Marcel
vo funkcii vypis() pouzivas neinicializovanu maticu, ked nacitas/vytvoris maticu, tak ju musis dostat do funkcie ako parameter (alebo this, globalnu premennu, ...) . Cize funkcia bude vyzerat dako takto: 

void vypis(int ** mat, size_t riadky, size_t stlpce);

Kedze programujes v c++, tak sa uplne ziada pouzit na maticu triedu ktora bude obsahovat samotne data, pocet riadkov a stlpcov. Potom moze vyzerat funkcia takto:

class matica{
	int **mat;
	size_t riadky;
	size_t stlpce;
	public:
	//konstruktor
	//destructor
	//...
};

void vypis(const matica &mat);

alebo rovno:

class matica{
	//...

	void vypis();
	void nacitaj(const string &meno_suboru);
};

Mozno by bolo dobre alokovat maticu ako jednorozmerne pole( new int[riadky*stlpce]), bude zaberat menej miesta, alokacia bude rychlejsie a bude sa lepsie zapisovat do suboru; Na pristup k prvkom matice sa da pekne pretazit operator []

C / C++ › Pointer na vector
4. 12. 2011   #150858

   

int main (int argc, char *argv[]) {
	vector<int>    		v;		//vytvori vektor (kontajner)
	vector<int>::iterator 	i;		//vytvori iterator(iterator odkazuje na prvok kontajneru, v tomto pripade vektor<int>, zatial je neinicializovany)
	
	v.push_back(1);					//vlozi na koniec vektora cislo 1
	v.push_back(2);					
	v.push_back(3);				
		
	//vypisanie obsahu vektora pomocou ciselnych indexov:
    	for(size_t n = 0; n < v.size(); ++n){
		cout << v[n] << endl;	
	}
    
    	//vypisanie obsahu vektora pomocou iteratora:
   	 for(
		i = v.begin();		//inicializuje iterator na prvy prvok vektora
		i != v.end();		//iterator i sa nesmie rovnat poslednemu prvku vektora(kontajnera), treba si uvedomit ze funkcia end() nevracia iterator na psoledny nami vlozeny prvok ale iterator na prvok co by nasledoval za nim (to akym sposobom je to implementovane nie je podstatne)
		++i){				//inkrementuje iterator
			cout << *i << endl;	//vypise hodnotu na ktoru ukazuje iterator
	}
    

	v.clear();	//zmeze obsah vectora(kontajnera)

     return 0;
  
}
C / C++ › Jak sjednotit string v poli?
26. 11. 2011   #150522

Ak mozes pouzit stl tak si skus pozriet set. Mozes to potom velmi jednoducho zjednodusit.

Mohol by si pouzit referencie v parametroch:

        bool obsahuje(const string &prvek)const; 
        void vypis()const;       
        int getVelikost()const;                 
        const string &getPrvek(int index)const;   
        bool addPrvek(const string &prvek);        
        Mnozina operator+(const Mnozina &param)const;
        Mnozina operator-(const Mnozina &param)const;
        Mnozina operator*(const Mnozina &param)const;
C / C++ › Začátek GUI v C
24. 11. 2011   #150432

Ja by som doporucoval vyhnut sa winapi :)

Radsej QT alebo wxWidgets, pripadne si gui sprav v c#

C / C++ › Jak pracovat s knihovnou std…
21. 11. 2011   #150264

stdarg.h obsahuje macra na pracu s funkciami ktore maju premennlivy pocet parametov.

printf a fprintf su funkcie ktore maju premenlivy pocet parametrov a zrejme vyuzivaju macra v stdarg.h.

v podstate si musis vytvorit novu funkciu, napr:

xprintf(FILE *f, const char * str, ...);

tato funkcia bude volat aj printf aj fprintf s rovnakymi parametrami (okrem prveho, ten je u printf standartne stdout).

Cize musis zyskat vsetky "premenlive" parametre z xprintf a zavolat s nimi fprntf a printf (mozno ich bude treba aj pretypovat).

Alebo mozes pozit  vfprintf

C / C++ › C++ - friend operator
19. 11. 2011   #150206

#1 jupiik
 Funkcia operator* je template, cize musis specifikovat podla akych typov sa ma generovat. V tvojom pripade podla typov <T, K>

template <typename T, typename K>
class Matrix
  {
      public:
         friend Matrix<T,K>& operator*<T, K>(const K left, Matrix<T,K>& right);
};
C / C++ › Hľadá sa programátor!
17. 10. 2011   #148737

#1 Diwad
Bolo by dobre napisat o co pojde v tej hre, aky to bude zaner a pod(ale pochybujem ze dakoho najdete). Z toho co si napisal nie je jasne skoro nic, aspon ze nechcete robit 3D MMORPG :)

C / C++ › parsování části obsahu soubo…
6. 10. 2011   #148345

#4 devilfish
Ten priklad je v c++, tam netreba pisat struct :)

vit
C / C++ › okamžitá reakce
30. 9. 2011   #148099

toupper zmeni male pismena na velke, takze staci testovat 'A' a 'N'.

 Nasledna podmienka bude vzdy pravdiva.

if(c == 'A' || 'a')

Spravne by mala byt takto, ale kedze je tam predtym toupper tak je to zbytocne...

 

if(c == 'A' || c == 'a')
vit
C / C++ › okamžitá reakce
30. 9. 2011   #148092

 toto bude mozno fungovat, ale neskusal som to


if(kbhit()){
	 char c = toupper(getch());
	 if(c == 'A')/* ... */;	
	 else if(c == 'N')/* ... */;		
}
vit
C / C++ › mazání tempů
30. 9. 2011   #148089

del /S /Q <zlozka>

vit
C / C++ › okamžitá reakce
30. 9. 2011   #148088
vit
C / C++ › pomoc
9. 9. 2011   #147368

#1 piwolukas

int x=strlen(jmeno +1)

tato cast bude fungovat len ak je retazec nenulovej dlzky, ak je nulovy tak inkrementujes poziciu retazca za '\0' a  strlen bude pracovat s neukoncenym retazcom (v lepsom pripadne program havaruje) 

lepsie je pouzit toto:

int x=strlen(jmeno)-1

vit
C / C++ › Tvorba 3D hry
13. 4. 2011   #141026

Ucit sa programovat na 3D hernom engine je fakt velke sústo :)

Vit
C / C++ › iterator na vnorenu template…
7. 4. 2011   #140774

Dik.

Vit
C / C++ › iterator na vnorenu template…
6. 4. 2011   #140737

Mam nasledovny problem:



template <class T>
class C{
T t;
};

template <class T>
class A{
public:

list<C<T> > lb; //<-- bez chyby
list<C<T> >::iterator i; //<-- chybne
list<C<int> >::iterator k; //<-- pre konkretny typ bez chyby
};

Neviem prist na to ako vytvorit iterator i.
Neviete kde mam chybu?

vit
C / C++ › dedenie
26. 2. 2011   #139415

To Grungy :
Presne tak, ale uz som asi zistil cim to bude.
Volanie virtualnych tried sa robi cez tebulky virtualnych metod (pekne vysvetlene tu: http://www.learncpp.com/cpp-tutorial/125-the-virtual-table/)
Tieto vtables neuchovavaju udaje o pristupovych pravach, cize prekladac vyuzie pristupove prava triedy z ktorej je metoda volana.
V mojom priklade bola metoda volana z triedy B. V tejto triede je B verejna a to ze v skotocnosti sa pouzie trieda D kde je privatna nemal prekladac ako zistit. Ale je zaujimave ze sa to da takto okaslat :)

vit
C / C++ › dedenie
26. 2. 2011   #139389

Mam jeden "problem". Potreboval by som vysvetlit nasledujuci kod:



#include "iostream"
using namespace std;

class B{
public:
virtual void fun(){cout << "B::fun()" << endl;}
};

class D : public B{
private:
void fun(){cout << "D::fun()" << endl;}
};
int main()
{
D d;
B *x= &d;

x->fun();

return 0;
}

Tento program po spusteni vypise: "D::fun()"
To znamena ze verejna virtualna metoda v zakladnej triede B je redefinovana privatnou metodou z D. Tym padom ked vytvorim pointer zakladnej triedy B* a neham ho ukazovat na odvodenu triedu typu D, tak po zavolani metody fun() cez pointer B* z main() (main nie je clenom ani friendom ziadnej z tried B, D) sa zavola privatna metoda z D. Znamena to ze pri vytvarani virtualnych tabuliek metod sa neberu do uvahy pristupove prava public/privat/protected alebo ako to vlastne funguje? :)

vit
C / C++ › Využití procesoru
14. 2. 2011   #138874

Moze 2+ vlaknovy proces vyuzit viac procesorov alebo treba vytvorit viac procesovy program?

vit
C / C++ › Mistrovství v C++, ukazale
29. 1. 2011   #138277

Ukazatele su v c/c++ vsade. Polia, retazce, dynamicka allokacia pamete(vsetko je zviazane s ukazatelmi)... Neskor pri oop to bude este zaujimavejsie(dedenie + pointre + virtualne funkcie :) ). Dalej ukazatele na ukazatele, ukazatele na funkcie. Cim skor sa ich naucis, tym lepsie. Nevyhnes sa im, vpodstate su aj jednoduche.

vit
C / C++ › C nebo C++
20. 12. 2010   #137038

V podstate je velka cast jazyku c podmnozinou c++, samozrejme su tam dake rozdiely. Jazyk c je rychlejsi a jednoduhsi ako c++ lebo neobsahuje kopu oop balastu ale zas v c++ napises vela veci rychlejsie a prehladnejsie. Dobre je vediet c aj c++ :) . Samozrejme mozes kombinovat jazyky, cast programu napises v c, inu cast v c++, dalsiu trebarz v jave/c# ...
Ako spomenuli vyzsie, hlavne je dvolezite naucit sa principy programovania (algoritmizacia, ...). Ked uz vies daky prgramovaci jazyk, tak naucenie dalsieho je radovo jednoduhsie a rychlejsie.

Vit
C / C++ › Nápad na projekt
12. 12. 2010   #136837

Ja som robil ako semestralku maticovu kalkulacku (s moznostou zadavania jednoduchych scriptov, napr "( A * B) / sin(C) + det(D)..." kde pismena mohly byt cisla(int, real), matice, premenne pripadne aj retazce ). Naucil som sa pri tom toho dost :)

Vit
C / C++ › Vytvorenie predka s hodnotou…
7. 12. 2010   #136704

Neviem ci je dobre pri dedeni rozlisovat triedy na rodica a potomka(to skor pri procesoch)...
Mozno si chcel nieco taketo:



class Predmet
{
private:
int aPosX;
SDL_Surface *aPovrch;
public:
Predmet(int x, SDL_Surface *p=NULL){ aPosX = x; aPovrch = p; }
};


class Terc : public Predmet
{
public:
Terc(int x):Predmet(x, SDL_LoadBMP("..\\terc.bmp") ){}
};

Vit
C / C++ › Vytvorenie predka s hodnotou…
7. 12. 2010   #136674

Constructor a destructor v triede Terc ma tiez divne meno :)
(a kopa inych chyb...)

Vitamin
C / C++ › Quicksort složitost
26. 9. 2010   #133923

Minuly rok som robil tieto triediace algoritmi do skoly. Tusim kazdy cyklus/rekruzia ktora prejde cez cele pole ja nasobok n. Rekruzivne volania v tomto pripade budu mat asi zlozitost log(n).

Nasiel som zadanie co som robil do skoly:



template <class DATA>
DATA *quick_sort(DATA *data, unsigned len)
{
DATA *a = data+1, *b=data+len-1, *med = data;
unsigned a_len=0u, b_len=0u;

if(len==1)return data;
while( a <= b ){
if(*a > *med){
if(a != b)swap(*a, *b);
b--;
b_len++;
}
else {
a++;
a_len++;
}
}
if(!a_len){
a=data;
a_len=1;
b=data+1;
}
else if(!b_len){
swap(data[len-1u], *med);

a=data;
b=data+len-1u;b_len=1u;
}
else{
a = data;
a_len++;

b++;
}
quick_sort(a, a_len);
quick_sort(b, b_len);

return NULL;
}

V mojom programe mas len 1 cyklus a potom uz len rekruzivne volania. Cize to bue asi to O = n*log(n)

Vitamin
C / C++ › Quicksort složitost
25. 9. 2010   #133917

V tom programe mas chybicku.
Pivot by mala byt stredna honota prvkov pola, ale zistit strenu hodnotu je narocne.
Preto ju treba dako tipnut. Lenze ak v tvojom programe tipnes za pivot akurat najmensiu honotu v poli tak sa pole neusporiada spravne.
Je to preto, lebo vzdy pridavas prvky rovne pivotu do pravej casti pola, tym paom ak je pivot najmensi prvok pola tak lava cast ostane prazdna.

skus si to pre napr. toto pole:

int nmb[10]={10,9,8,7,1,1,1,4,3,2};

vystup bude: 10 9 8 7 1 1 1 2 3 4

Dalej by bolo prehlanejsie pouzivat cykly while miesto for ked testujes len podmienku.
A ked je daco vnorene v cykle tak to aj odsait (vecsina editorov to urobi za teba).
A sprav si daky system pri zapisovani '{' '}', je to dost chaoticke :).

 

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý