Programiranje u C++-u - pitanja i odgovori izdvojena tema

poruka: 7.283
|
čitano: 1.511.707
|
moderatori: Lazarus Long, XXX-Man, vincimus
+/- sve poruke
ravni prikaz
starije poruke gore
12 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori

for(int i=0;*_trenutno;i++){
    temp.AddElement(_elementi1[i],_elementi2[i]);
}
for(int i=0;i<*obj._trenutno;i++){
    temp.AddElement(obj._elementi1[i],obj._elementi2[i]);
}

 

Da nisi fulao uvjet u prvoj petlji kod operatora +?

12 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori

Izgleda da jesam, ali evo opet istu gresku javlja kod AddElement funkcije. 

 

Ovo sam sve sinoc radio, razne kombinacije, pa zato ima malo i gresaka ovih suvisnih :)

 

 

12 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori

Očito ti trebaš taj cijeli svoj program pregledati. Debugiraj korak po korak pa ispravljaj {#}.

12 godina
neaktivan
offline
Programiranje u C++-u - pitanja i odgovori

Evo presao sam kod ponovo i sada imam opet neku gresku.

 

http://pastebin.com/T6YuRmhw

 

Sada zadatak moze da se kompajlira i ne prikazuje runtime greske (jer sam stavio kod pod komentar).

 

U operator+ funkciji stavio sam pod komentar kopiranje elemenata iz drugog objekta "obj" kojeg sam prosljedio preko reference. 

 

Znaci prva i druga for petlja rade isto. 

 

Ovo je greska koju prikaze:

http://i44.tinypic.com/505qas.jpg

 

Poruka je uređivana zadnji put čet 29.3.2012 16:10 (dexter2).
 
0 0 hvala 0
12 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori

"heap corruption". Znači, provjeri izjave gdje koristiš operatore new i delete..

12 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori

Hvala jos jednom evo ispravljeno, stavio sam pod komentar prve dvije linije koda nakon temp-a (katastrofa greska) kod operator+ funkcije i sada sve radi kako treba - odnosno skoro sve :P

 

 

 

Sada opet imam jednu gresku, izgleda neku istu kao proslu.

 

Standardni zadatak mi je da u konstruktoru "*_max" bude "3" a ne "10".

 

Znaci broj 3 bi stavio zato da se prosiruje niz kada mu nestane prostora. 

 

E sada, kada vratim "*_max=3" u konstruktoru, opet mi sve normalno radi kod k1 i k2 (prosiruje niz i dodaje nove elemente), ali kod operatora k1+k2 opet mi javi slicnu poruku, kao slika ispod:

http://imageupload.org/en/file/208978/error1.jpg.html

 

Iako radi kako treba sa k1 i k2, ne radi sa "temp" u "operator++" funkciji. 

http://pastebin.com/hqaLTYcV

 

Sada mozda nesto nije uredu sa konstruktorom kopije, kao da ne podrzavao ovaj temp sto sam kreirao ili je mozda do AddElement funkcije, uglavnom i jeste opet do neke adrese, kao da se destruktor pozvao a konstruktor kopije nije dobro kopirao elemente (pokazivaj na istu adresu kao taj sto je dealociran). 

 

Sta sad? {#}

 

Poruka je uređivana zadnji put čet 29.3.2012 19:31 (dexter2).
15 godina
neaktivan
offline
Programiranje u C++-u - pitanja i odgovori

Trebao bih kod koji izračunava complementary error function u c++.. Da li netko zna kako se to radi.. Pronašao sam online calculator koji izračunava to na sljedećoj stranici: 

http://graphpad.com/quickcalcs/PValue1.cfm

 

Znači u ovom se prvom obrascu unese z vrijednost i on izbaci P-value.. E sada tako bi mi nešto trebalo u c++.. 

Trebalo bi biti da se radi ovako ali mi javlja" 'erfc': identifier not found": 

 

#include <iostream>

#include <cmath>

using namespace std;    

int main()

{

   double theErfc = erfc(4.6);

   cout << "theErfc = " << theErfc << endl;

   return 0;

}

Poruka je uređivana zadnji put čet 29.3.2012 23:34 (Legolas).
 
0 0 hvala 0
16 godina
offline
Programiranje u C++-u - pitanja i odgovori

Može li se putem C++-a dodjeljivati koja nit da se na kojem procesoru (jezgri) izvodi (ako se koriste Windowsi kao OS)?

Dakle ako imam (isprogramiram) višenitnu aplikaciju da odvijanje niti raspoređujem ja a ne sam OS. Može li se to?

Recimo 7 niti, procesor s 3 jezgre, da ja kažem nit 1 pa 3 na prvoj jezgri, niti 2, 4, 7 na drugoj i npr niti 6 pa 5 na trećoj.

Prodajem RAGE za PS3: http://www.bug.hr/forum/topic/igre-accounti-igrama/prodaja-igra-rage-playstation-3/129629.aspx?page=0&amp;amp;jumpto=2529211&amp;amp;sort=asc&amp;amp;view=flat
Moj PC  
0 0 hvala 0
14 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
191x7 kaže...

Može li se putem C++-a dodjeljivati koja nit da se na kojem procesoru (jezgri) izvodi (ako se koriste Windowsi kao OS)?

Moze se, putem API funkcije SetThreadAffinityMask

My computer once beat me at chess, but we got even after a round of boxing.
16 godina
offline
Re: Programiranje u C++-u - pitanja i odgovori
rustweaver kaže...
191x7 kaže...

Može li se putem C++-a dodjeljivati koja nit da se na kojem procesoru (jezgri) izvodi (ako se koriste Windowsi kao OS)?

Moze se, putem API funkcije SetThreadAffinityMask

Hvala.

 

Zna li možda netko još koji način (ili nešto slično)?

Prodajem RAGE za PS3: http://www.bug.hr/forum/topic/igre-accounti-igrama/prodaja-igra-rage-playstation-3/129629.aspx?page=0&amp;amp;jumpto=2529211&amp;amp;sort=asc&amp;amp;view=flat
14 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori

Zasto, zar ti ovo ne odgovara? Imas jos i SetThreadIdealProcessor koja je u biti blaza verzija gornje funkcije.

My computer once beat me at chess, but we got even after a round of boxing.
16 godina
offline
Re: Programiranje u C++-u - pitanja i odgovori
rustweaver kaže...

Zasto, zar ti ovo ne odgovara? Imas jos i SetThreadIdealProcessor koja je u biti blaza verzija gornje funkcije.

SetThreadAffinityMask koliko sam razumio ovisi o OS-u, ako postavim da se neka nit odvije na npr jezgri 2 ona se može odviti i na nekoj drugoj.

Pronašao sam i SetThreadIdealProcessor (tu koju si naveo) maloprije, također djeluje obečavajuće.

Meni je "problem" vezan uz raspodjelu niti po procesorima (jezgrama) po različitim kriterijima (multicriteria scheduling na multicore CPU).

Prodajem RAGE za PS3: http://www.bug.hr/forum/topic/igre-accounti-igrama/prodaja-igra-rage-playstation-3/129629.aspx?page=0&amp;amp;jumpto=2529211&amp;amp;sort=asc&amp;amp;view=flat
14 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
191x7 kaže...

SetThreadAffinityMask koliko sam razumio ovisi o OS-u, ako postavim da se neka nit odvije na npr jezgri 2 ona se može odviti i na nekoj drugoj.

Ne, SetThreadAffinityMask tocno odreduje nekoj niti na kojim se sve jezgrama smije izvoditi a na kojima ne:

"Setting an affinity mask for a process or thread can result in threads receiving less processor time, as the system is restricted from running the threads on certain processors. In most cases, it is better to let the system select an available processor."

 

SetThreadIdealProcessor radi ono sto si ti mislio za gornju funkciju. On pokusava izvrsiti neku nit na odredenoj jezgri, a ako ne uspije zadovoljit ce se sa bilo kojom drugom jezgrom.

 

To bi ti onda, ako se ne varam, ovako nekako izgledalo:

#define JEZGRA_TRI    1L<<2
#define JEZGRA_CETIRI 1L<<3

HANDLE thread=(HANDLE)_beginthreadex(NULL, 0, NekaFunkcija, NULL, CREATE_SUSPENDED, NULL);
SetThreadAffinityMask(thread, JEZGRA_TRI|JEZGRA_CETIRI);
ResumeThread(thread);

 

Gornji primjer bi trebao stvoriti novu nit od funkcije "NekaFunkcija" u pauziranom stanju, potom joj dozvoliti izvrsavanje samo na trecoj i cetvrtoj jezgri, te pokrenuti izvrsavanje niti pozivom na ResumeThread. Valjda nisam nesto fulao...

My computer once beat me at chess, but we got even after a round of boxing.
Poruka je uređivana zadnji put pet 30.3.2012 0:48 (rustweaver).
13 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori

Imam mali problem.

 

Evo code:

 

#include <iostream>
#include <stdio.h>
using namespace std;

int main()
{
    char name[11];
    printf ("Enter your name, sir: " );
    gets(name);
    (name=="B F") ? (cout<< ":D \n") : (cout<< ":O \n");
   
    system("PAUSE");
    return 0;
}

 

I kad napisem B F output mi je  :O umjesto :D....

 

Zasto ???

Buzzzzzzzzzzzzzzzzzzzzzzzzzz
16 godina
neaktivan
offline
Programiranje u C++-u - pitanja i odgovori

Zato što koristiš char niz i ne možeš provesti testiranje logičkog uvjeta.

Pošto se radi o C++ uzmi string klasu i stvar će raditi.

 

 

#include <iostream>
#include <string>
using namespace std;

int main()
{
    string name;
    printf ("Enter your name, sir: " );
    getline(cin, name);
    (name=="B F") ? (cout<< ":D \n") : (cout<< ":O \n");
  
    system("PAUSE");
    return 0;
}

Poruka je uređivana zadnji put sub 31.3.2012 17:37 (Floki).
 
2 0 hvala 1
14 godina
offline
Re: Programiranje u C++-u - pitanja i odgovori
Games 4 life kaže...

Imam mali problem.

 

Evo code:

 

#include <iostream>
#include <stdio.h>
using namespace std;

int main()
{
    char name[11];
    printf ("Enter your name, sir: " );
    gets(name);
    (name=="B F") ? (cout<< ":D \n") : (cout<< ":O \n");
   
    system("PAUSE");
    return 0;
}

 

I kad napisem B F output mi je  :O umjesto :D....

 

Zasto ???

To je zato sto ne mozes tako jednostavno usporedivati dva cstringa. Znakovni niz je obicno polje, kojemu zadnji clan ima /0 vrijednost cime se oznacava kraj niza. A niz je ustvari samo simbolicki pokazivac na prvi clan polja. Tako da u tvome slucaju uspredujes pokazivac char* sa const char* tj. usporedujes njihove adrese tako da je to uvijek logicka laz.

 

Ovdje trebas koristiti funkci strcmp koja se nalazi u biblioteci cstring. Ili koristiti klasu string koja vec ima preopterecen operator "==" pa ce tvoj program tocno raditi.

Twitter- @capttawish Linux/GNU live forever.
13 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori

Hvala

 

EDIT: Pitanje: kako povecati velicinu output slova u console app ?

EDIT2: Pitanje2: zastorad s naredbom goto nije preporučljiv ?

Buzzzzzzzzzzzzzzzzzzzzzzzzzz
Poruka je uređivana zadnji put sub 31.3.2012 21:49 (Games 4 life).
16 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
Games 4 life kaže...

Hvala

 

EDIT: Pitanje: kako povecati velicinu output slova u console app ?

EDIT2: Pitanje2: zastorad s naredbom goto nije preporučljiv ?

@ EDIT: pokreni program, desni klik na gornji bar konzole -> properties -> font

@ EDIT2: http://stackoverflow.com/questions/379172/to-use-goto-or-not

 

Da se još nadovežem na cpt. McTavisha i Flokija, niz u if naredbi možeš uspoređivati i tako da uspoređuješ pojedini član polja, u tvom slučaju:

 

if(name[0] == 'B' && name[1] == ' ' && name[2] == 'F' && name[3] == '\0')

~~~ You know, half these gook whores are serving officers in the Vietcong. The other half have got TB. Be sure you only fuck the ones that cough. ~~~
Poruka je uređivana zadnji put ned 1.4.2012 12:36 (i_rambo_plache).
13 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
i_rambo_plache kaže...

@ EDIT: pokreni program, desni klik na gornji bar konzole -> properties -> font

 

Da, ali to ce si korisnik morati sam napraviti..

 

Kak to napraviti u C++ ?

Buzzzzzzzzzzzzzzzzzzzzzzzzzz
14 godina
offline
Re: Programiranje u C++-u - pitanja i odgovori
Games 4 life kaže...

Da, ali to ce si korisnik morati sam napraviti..

 

Kak to napraviti u C++ ?

Mislim da bi trebao pomocu win api-a kreirati svoju konzolu i onda to namjestiti:

http://msdn.microsoft.com/en-us/library/ms682055

Twitter- @capttawish Linux/GNU live forever.
12 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori

Mogao si to preko system funkcije. "mode" argument, mode colone, linije. Ali ovo je za resize konzole.

Moraš rješiti to pomoću nekog API-a, jer "nativni" C++ ne podržava takve stvari. C# već jeste, ali to je druga priča.
A šta ćeš ako taj program pokreneš preko Linuxa?, ima tu problema...

13 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori

Ovo mi baš i nije jasno:

 

#include <iostream>

#define RED 2
#define STUP 2
using namespace std;

int main()

    int polja[RED][STUP] = {{5, 2},{3, 4}};
   
    for (int i = 0; i < RED; i++)
    {
        for (int j = 0; j < STUP; j++)
        {
            cout << polja[i][j] << "\t";
        }
        cout << endl;
    }
                 
    system("PAUSE");
    return 0;
}

 

Nije mi jasno jer sintaksa za petlju for je:

 

for(pocetno stanje; uvjetni nastavak; inkrement).

 

E sad tu ide ovako:

 

for (int i = 0; i < RED; i++)
    {
        for (int j = 0; j < STUP; j++)
        {
            cout << polja[i][j] << "\t";
        }
        cout << endl;
    }
   

 

I kod uvjetnog nastavka u prvoj for petlji pise:

 

i < RED ...

 

To znaci da to treba biti TRUE da bi se nastavilo dalje.

E pa ako je i= 0, a RED = {5, 2}, koji ce se broj gledati da se napravi i++, 5 ili 2 ?

 

Buzzzzzzzzzzzzzzzzzzzzzzzzzz
15 godina
online
Re: Programiranje u C++-u - pitanja i odgovori

Nisi dobro skužio matrice :D

 

Imaš na vrhu programa definirane konstante RED i STUP i obje su = 2. Dakle tvoja matrica (ili dvodimenzionalno polje) imena polje imati će 2 retka i jedan stupac. Elemente te matrice zadao si sa

 

    int polja[RED][STUP] = {{5, 2},{3, 4}};

 

dakle ta matrica će izgledat:

 

| 5 2 |

| 3 4 |

 

Način na koji se vade elementi iz matrice je tako da se specificiraju redak i stupac, pa će za i=0 i j=0 polje[0][0] biti gornji lijevi kut matrice, pa čitamo da je 

polje[0][0] = 5

 

Kada se žele pročitati svi elementi matrice koristi se dupla for petlja jer želimo pregledati sve retke i sve stupce. Ono što želimopregledati su polje[0][0], polje[0][1], polje[1][0] i polje[1][1] i to se radi u ovom tvom dijelu koda koji ti je nejasan. i će prolaziti vrijednostima od 0 do RED (=2), j će prolaziti vrijednostima od 0 do STUP (=2), a ispisuješ vrijednosti polje[i][j]. Time dobivaš ispis cijele matrice.

http://manutd-croatia.com/forum/index.php ... forum i udruga navijača Manchester Uniteda...
13 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori

Hmmm... A kako se izvrsava petlja ako je odmah vrijednost true i zasto se pregledava sve do polja[1][1] ako sam zadao RED 2 i STUP 2 ???

Ne bi li trebalo do polja[2][2] ?

Buzzzzzzzzzzzzzzzzzzzzzzzzzz
14 godina
offline
Re: Programiranje u C++-u - pitanja i odgovori
Games 4 life kaže...

Hmmm... A kako se izvrsava petlja ako je odmah vrijednost true i zasto se pregledava sve do polja[1][1] ako sam zadao RED 2 i STUP 2 ???

Ne bi li trebalo do polja[2][2] ?

To je zato sto su polja u c/c++ 0-indeksirana tj. prvi clan se oznacava sa 0, a ne sa 1. Dakle imas polje od 3 clana onda su njegovi clanovi:

polje[0],polje[1],polje[2].

 

Clanovi polja su u memoriji poredani jedan iza drugoga, a polje je ustvari samo sinonim za pokazivac na prvi clan. I onda kada ti hoces pristupiti nekome clanu, polja onda se pokazivac samo pomakne odreden broj mjesta unaprijed.

Twitter- @capttawish Linux/GNU live forever.
13 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori

A da, znaci polja[RED][STUP] = polja [1][1] (RED 2 STUP 2). Dobro, ali jos ne kuzim u vezi same petlje:

 

for(int i = 0; i < RED; i++)

 

Eh, a sad kako se i++ inkremetira tu?

jer bi onda drugi put trebalo i biti 1 (i = 1), a to nema smisla za polje jer RED ima dva broja u sebi.

A tako i tako nakon 1. izvrsavanje petlje bi se trebala petlja prekinuti zato jer kod uvjetnog nastavka

 

i < RED

 

vec je istina {#}

Buzzzzzzzzzzzzzzzzzzzzzzzzzz
14 godina
offline
Re: Programiranje u C++-u - pitanja i odgovori

Nisam bas shvatio sto pitas no. No ono i<RED je uvjet i petlja se izvrsava dok je i<RED. Mi imamo dva reda pa je RED=2, dok je posljednji clan polja 1. Krecemo sa i=0, pristupamo prvome clanu, onda se i poveca na 1 i pristupamo drugom clanu. I na kraju se i poveca na 2 i petlja se prekine jer vise nije zadovoljen uvjet i<2.

Twitter- @capttawish Linux/GNU live forever.
13 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
captain_soap_McTawish kaže...

Nisam bas shvatio sto pitas no. No ono i<RED je uvjet i petlja se izvrsava dok je i<RED. Mi imamo dva reda pa je RED=2, dok je posljednji clan polja 1. Krecemo sa i=0, pristupamo prvome clanu, onda se i poveca na 1 i pristupamo drugom clanu. I na kraju se i poveca na 2 i petlja se prekine jer vise nije zadovoljen uvjet i<2.

Aha, znaci u ovom slucaju u petlji for uvjetni nastavak treba biti false ???

Buzzzzzzzzzzzzzzzzzzzzzzzzzz
14 godina
offline
Re: Programiranje u C++-u - pitanja i odgovori
Games 4 life kaže...
captain_soap_McTawish kaže...

Nisam bas shvatio sto pitas no. No ono i<RED je uvjet i petlja se izvrsava dok je i<RED. Mi imamo dva reda pa je RED=2, dok je posljednji clan polja 1. Krecemo sa i=0, pristupamo prvome clanu, onda se i poveca na 1 i pristupamo drugom clanu. I na kraju se i poveca na 2 i petlja se prekine jer vise nije zadovoljen uvjet i<2.

Aha, znaci u ovom slucaju u petlji for uvjetni nastavak treba biti false ???

Dok je god uvjet logicki istinit, petlja se vrti, kad uvjet postane logicki neistinit petlja se prestaje vrtiti.

Twitter- @capttawish Linux/GNU live forever.
12 godina
neaktivan
offline
Programiranje u C++-u - pitanja i odgovori

Vidiš G4L, ti bi radio asambly, a nisi znao matrice, je li ti sada jasno zašto smo te odgovarali od asambly-a?

 
3 0 hvala 0
E-mail:
Lozinka:
 
vrh stranice