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

poruka: 7.285
|
čitano: 1.714.031
|
moderatori: Lazarus Long, XXX-Man, vincimus
+/- sve poruke
ravni prikaz
starije poruke gore
13 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
rustweaver kaže...
Kada pokrećeš program u Visual Studiu probaj sa Ctrl + F5, tada ti neće trebati system("pause");

A kako bi drugačije, jedino Debugging.

 

@Yours

Inače Ctrl + F5 je Start Without Debugging.
Visual studio sâm dodaje Press any key to continue...

YoursTruly kaže...

Radim u Visual Studio 11 Beti. Ako stavim "return 0;", prozor komande linije mi se samo otvori i nakon 1 sekundu zatvori, a ako stavim system ("pause"), sve radi normalno.

return 0, vraća nulu, to sugnalizira operativnom sistemu da tokom izvođenja programa nije došlo do run-time grešaka, bilo koji drugi broj signalizira neku grešku.
system("pause"), system() je funkcija koja predaje određene narebe sistemu, u tom slučaju konzoli, inače ako probaš u cmd-u napisati pause, dobit ćešPress any key to continue...

Možeš sve što i kroz cmd, pozivati druge programe, kreirati foldere...
Par korisnih, CLS - briše sve sa ekrana, EXIT - prekida izvršavanje programa, COLOR , evo ti tabela boja na dnu posta...

Poruka je uređivana zadnji put sri 13.6.2012 14:56 (royalhero).
15 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
royalhero kaže...

A kako bi drugačije, jedino Debugging.

Ne koristim Visual Studio pa ne znam...

Oscar-Mike-Golf Whiskey-Tango-Foxtrot
Poruka je uređivana zadnji put sri 13.6.2012 15:38 (rustweaver).
16 godina
odjavljen
offline
Re: Programiranje u C++-u - pitanja i odgovori
rustweaver kaže...

Misliš zbog sigurnosti? Ma daj, znam gro igara koje svoje data fajlove kriptiraju xor enkripcijom i jednim jedinim ključem. Jest da "velikim hakerima" to ne predstavlja veliku prepreku, ali dovoljna je da one znatiželjnije drži podalje.

 

A sada ako bi imao ključ koji je dulji od podatka koji se kriptira i koji se koristi samo jednom, onda stvari postaju zanimljive.

Imam pitanje vezano za tu XOR enkripciju. Namjeravam .lic file od svog programa zaštiti sa time (i neke stringove koji idu u registry). Zanima me koliko je to sigurna procedura i jesu li 64 inta (potpuno random - sa random.org) u rasponu 0-256, razdvojeni sa ; dovoljna zaštita tj. hoće li to otjerati barem one malo manje uporne.

 

Kriptirani string koji izbaci se čak neda ni kopirati ovamo na forum... Editor izbaci neke znakove.

http://nighthawk-software.blogspot.com/
17 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
Sum_of_all_fears kaže...

Imam pitanje vezano za tu XOR enkripciju. Namjeravam .lic file od svog programa zaštiti sa time (i neke stringove koji idu u registry). Zanima me koliko je to sigurna procedura i jesu li 64 inta (potpuno random - sa random.org) u rasponu 0-256, razdvojeni sa ; dovoljna zaštita tj. hoće li to otjerati barem one malo manje uporne.

 

Kriptirani string koji izbaci se čak neda ni kopirati ovamo na forum... Editor izbaci neke znakove.

Evo ovdje dosta toga pise.

C provides a programmer with more than enough rope to hang himself. C++ provides a firing squad, blindfold and last cigarette.
14 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
Sum_of_all_fears kaže...
rustweaver kaže...

Misliš zbog sigurnosti? Ma daj, znam gro igara koje svoje data fajlove kriptiraju xor enkripcijom i jednim jedinim ključem. Jest da "velikim hakerima" to ne predstavlja veliku prepreku, ali dovoljna je da one znatiželjnije drži podalje.

 

A sada ako bi imao ključ koji je dulji od podatka koji se kriptira i koji se koristi samo jednom, onda stvari postaju zanimljive.

Imam pitanje vezano za tu XOR enkripciju. Namjeravam .lic file od svog programa zaštiti sa time (i neke stringove koji idu u registry). Zanima me koliko je to sigurna procedura i jesu li 64 inta (potpuno random - sa random.org) u rasponu 0-256, razdvojeni sa ; dovoljna zaštita tj. hoće li to otjerati barem one malo manje uporne.

 

Kriptirani string koji izbaci se čak neda ni kopirati ovamo na forum... Editor izbaci neke znakove.

XOR je kranje minimalna transformacija (namjerno ne zovem enkripcijom) koja ima tek 256 mogućih kombinacija. Znači, za nešto ozbiljno - ni slučajno. U ovisnosti o jeziku i IDE-u kojeg koristiš razmisli o implementaciji pravih enkripcijskih algoritama poput blowfish, Rijndeal i sl. Ako je riječ o C++u probaj si instalirati Crypto++ (link).

16 godina
odjavljen
offline
Re: Programiranje u C++-u - pitanja i odgovori
1domagoj1 kaže...

Evo ovdje dosta toga pise.

Čitao sam i čini mi se da je 256 znakova dovoljno (ako sam dobro skužio tekst jer nisam vičan u enkripciji).

TracerCPP kaže...

XOR je kranje minimalna transformacija (namjerno ne zovem enkripcijom) koja ima tek 256 mogućih kombinacija. Znači, za nešto ozbiljno - ni slučajno. U ovisnosti o jeziku i IDE-u kojeg koristiš razmisli o implementaciji pravih enkripcijskih algoritama poput blowfish, Rijndeal i sl. Ako je riječ o C++u probaj si instalirati Crypto++ (link).

Nije c++, .net je. Znam, tamo ima i Rijndeal ali treba mi nešto brzo za implementaciju i bez previše kompliciranja. Posebno mi je zanimljiv ovaj dio u članku kojeg je dao 1domagoj1:

 

"If the key is random and is at least as long as the message, the XOR cipher is much more secure than when there is key repetition within a message. When the keystream is generated by a pseudo-random number generator, the result is a stream cipher. With a key that is truly random, the result is a one-time pad, which is unbreakable even in theory."

 

Ključ i je random, dužine je ukupno 234 znaka i nije pseudorandom, riječ je o nizu brojeva sa random.org

http://nighthawk-software.blogspot.com/
16 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
Sum_of_all_fears kaže...
rustweaver kaže...

Misliš zbog sigurnosti? Ma daj, znam gro igara koje svoje data fajlove kriptiraju xor enkripcijom i jednim jedinim ključem. Jest da "velikim hakerima" to ne predstavlja veliku prepreku, ali dovoljna je da one znatiželjnije drži podalje.

 

A sada ako bi imao ključ koji je dulji od podatka koji se kriptira i koji se koristi samo jednom, onda stvari postaju zanimljive.

Imam pitanje vezano za tu XOR enkripciju. Namjeravam .lic file od svog programa zaštiti sa time (i neke stringove koji idu u registry). Zanima me koliko je to sigurna procedura i jesu li 64 inta (potpuno random - sa random.org) u rasponu 0-256, razdvojeni sa ; dovoljna zaštita tj. hoće li to otjerati barem one malo manje uporne.

 

Kriptirani string koji izbaci se čak neda ni kopirati ovamo na forum... Editor izbaci neke znakove.

Vjerovatno ce biti i vise nego dovoljno, itako nemas neki pravi nacin da zastitis kljuc. Nece nitko ici brute force-ati enkripciju kad ga moze samo

iscitati iz binary-a ako je plaintext ili memorije u krajnjem slucaju.

All problems in computer science can be solved by another level of indirection
Poruka je uređivana zadnji put sri 13.6.2012 17:18 (drnde).
16 godina
odjavljen
offline
Re: Programiranje u C++-u - pitanja i odgovori
drnde kaže...

Vjerovatno ce biti i vise nego dovoljno, itako nemas neki pravi nacin da zastitis kljuc. Nece nitko ici brute force-ati enkripciju kad ga moze samo

iscitati iz binary-a ako je plaintext ili memorije u krajnjem slucaju.

Sad već lagano ulazimo u sivu zonu obfuscatora... {#}

 

Mislim, sumnjam da će itko ići crackirati ovo što ja radim (skidrow sigurno ne) ali jel ima neki način kako zaštiti taj ključ (koji mora biti u aplikaciji)? Barem da ga neki priučeni VB vikend-koder ne može izvući van.

http://nighthawk-software.blogspot.com/
15 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
Sum_of_all_fears kaže...

tj. hoće li to otjerati barem one malo manje uporne.

Ovisi koliku točno razinu upornosti želiš spriječiti :D

Postavi si pitanje, može li napadač lako doči do ključeva potrebnih za dekripciju (čitanjem iz memorije?)? Koliko su dugi ključevi? Kaniš li koristiti jedan ključ za više stvari?

 

Sum_of_all_fears kaže...

Kriptirani string koji izbaci se čak neda ni kopirati ovamo na forum... Editor izbaci neke znakove.

Naravno da ga ne možeš ovdje staviti jer su se normalni tekstualni znakovi transformirali u sve i svašta, tako da tu onda ima i kontrolnih kodova i znakova iznad 127-og znaka ASCII tabele. Ukratko dobio si nečitku skupinu znakova, što ti je i bio prvotan cilj, zar ne?

 

Što se sigurnosti tiče, kao što je Tracer rekao, to je prilično slab algoritam čija snaga leži u potpunosti u ključu. Ako imaš potpuno nasumičan ključ, čija je duljina jednaka duljini podataka koje pokušavaš kriptirati, ako taj ključ iskoristiš samo jednom (dakle ne isti ključ za više različitih stvari), te u konačnici ako ga možeš držati na sigurnom, tada u teoriji imaš savršenu enkripciju. Kao što vidiš to je jako puno "ako", stoga nije ni čudo da su izmišljeni praktičniji algoritmi.

Oscar-Mike-Golf Whiskey-Tango-Foxtrot
16 godina
odjavljen
offline
Re: Programiranje u C++-u - pitanja i odgovori
rustweaver kaže...

Ovisi koliku točno razinu upornosti želiš spriječiti :D

Postavi si pitanje, može li napadač lako doči do ključeva potrebnih za dekripciju (čitanjem iz memorije?)? Koliko su dugi ključevi? Kaniš li koristiti jedan ključ za više stvari?

1. Vjerojatno može, pošto je to .net. Naravno, nadam se da će neki obfuscator uspjeti prikriti ključ (jer se pomalo ističe od ostalih varijabli po dužini).

2. Ključ ima 234 znaka. Varijable koje planiram kriptirati sa njime su do 20ak znakova.

3. Jedan ključ za cijeli .lic file (file sa licencom). Drugi ključ (iste dužine) za neke varijable koje idu u registry (informacije o trialu i instalaciji).

rustweaver kaže...
Naravno da ga ne možeš ovdje staviti jer su se normalni tekstualni znakovi transformirali u sve i svašta, tako da tu onda ima i kontrolnih kodova i znakova iznad 127-og znaka ASCII tabele. Ukratko dobio si nečitku skupinu znakova, što ti je i bio prvotan cilj, zar ne?

 

Što se sigurnosti tiče, kao što je Tracer rekao, to je prilično slab algoritam čija snaga leži u potpunosti u ključu. Ako imaš potpuno nasumičan ključ, čija je duljina jednaka duljini podataka koje pokušavaš kriptirati, ako taj ključ iskoristiš samo jednom (dakle ne isti ključ za više različitih stvari), te u konačnici ako ga možeš držati na sigurnom, tada u teoriji imaš savršenu enkripciju. Kao što vidiš to je jako puno "ako", stoga nije ni čudo da su izmišljeni praktičniji algoritmi.

Da, znakovi su iznad 127og znaka.

 

Pitanje vezano za dužinu ključa - ako je ključ duži od varijable, jel to utječe na njegovu sigurnost? Jel bolje da ključ bude duži ili jednak varijabli? Nije problem sakupiti toliko ključeva niti ih staviti u program, riječ je o 4-5 varijabli koje treba zaštiti.

 

Sve ovisi o tome koliko će netko biti voljan kopati po programu u potrazi za ključem...

http://nighthawk-software.blogspot.com/
15 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
Sum_of_all_fears kaže...
Pitanje vezano za dužinu ključa - ako je ključ duži od varijable, jel to utječe na njegovu sigurnost? Jel bolje da ključ bude duži ili jednak varijabli? Nije problem sakupiti toliko ključeva niti ih staviti u program, riječ je o 4-5 varijabli koje treba zaštiti.

Dovoljno je da je jednako dugačak, ne treba biti dulji budući da one ostale znakove ključa nećeš koristiti.

 

Što se tiče onog ključa od 234 znaka, nadam se da ćeš koristiti nekakav nekakav offset, a ne kriptirati svih 5 varijabli sa prvih 20 znakova ključa.

 

Nekako me zabrinjava ta tvoja krajnja izvedba toga. Možda da ipak iskoristiš ono što ti .net nudi?

Oscar-Mike-Golf Whiskey-Tango-Foxtrot
Poruka je uređivana zadnji put sri 13.6.2012 17:40 (rustweaver).
16 godina
odjavljen
offline
Re: Programiranje u C++-u - pitanja i odgovori

Prvi put radim sa nekom enkripcijom, ovo je više vježbanje.

 

Pošto je riječ o malo varijabli, mislim da ću napraviti ključ za svaku i to bi bilo to (da se ne igram sa ovim velikim ključem - strši među ostalim varijablama po dužini). Osim toga, potencijalni cracker će imati 5-6 ključeva za skupiti.

 

Kad završim taj program, budem vam poslao ga poslao na testiranje. Ako ovo brzo padne, idem na verziju sa Rijndaelom koji je implementiran u .net. Doduše, već sad znate sa čime je kriptirano pa će biti još lakše...

 

[edit] - nije ovo neka AAA aplikacije koja će ići u distribuciju naveliko nit je za nekog izdavača... Bit ću sretan ako prodam 5 kopija :D

http://nighthawk-software.blogspot.com/
Poruka je uređivana zadnji put sri 13.6.2012 17:54 (Sum_of_all_fears).
13 godina
neaktivan
offline
Programiranje u C++-u - pitanja i odgovori

Ovako, uhvatio sam se malo onoga što sam propustio u dosadašnjem učenju programiranja, ima dosta rupa u znanju, pretežno pokazivača.
Trebam rješiti ovaj zadatak:

 

Napisati program koji implementira ugrađenu funkciju strncat za povezivanje dva stringa u jedan.
Prototip funkcije:char * strncat (char * s1, char * s2, int n)
String s2 se nadovezuje na string s1 koji se pri tome povećava dok se s2 ne mijenja. Null terminirajući karakter stringa s1 se prepisuje prvim karakterom stringa s2.
Parametar n označava maksimalan broj znakova koji se dodaju stringu s1. Ako u prvih n znakova na koje pokazuje s2  nema null terminirajućeg znaka, tada strncat dodaje n znakova  iz s2 na kraj niza s1, te dodaje null terminirajući znak, što znači da se ukupno dodaje n+1 znakova.
Povratna vrijednost je string s1.
Ja sam to mislio riješiti tako da u jedan pomoćni niz unesem n članova drugog niza, zatim od \0 znaka prvog niza (uključujući i njega) upisujem članove drugog niza.
Sad ne znam da li sam stvarno glup, ali ne znam kako krenuti dodavati na prvi niz od člana \0.

To sam nešto kodirao, http://pastebin.com/abvCbe24, znam da je ovo suvišno i netačno:

    for(int i=0; s1!='\0'; i++)
    {
       if(s1[i] == '\0')
       {
          temp_index=i;
       }
    }
 
Jer će ić dok niz nije \0, a ja pokušavam doprjieti do tog indexa.

Da sumiram, najveći problem bi mi bio nadopisati na prvi niz od njegovog nultog terminatora, tj. \0.

Uanprijed hvala!
 
0 0 hvala 0
15 godina
offline
Re: Programiranje u C++-u - pitanja i odgovori

Prva greska ti je ovo:

temp = new char [n];
    for(int i=0; i<n; i++)
    {
       if(s2[i]!='\0')
       {
          temp[i]=s2[i];
       }
    }

To jednostavno nema smisla. Ti ides po drugome nizu, i prepisujes dok ne dodes do null charactera, a onda nista ne uradis. Ne znam sto si ovime htio postici. Taj drugi niz temp ti uopce nije potreban, i cijeli ovaj dio koda ti je nepotreban.

for(int i=0; s1!='\0'; i++)
    {
       if(s1[i] == '\0')
       {
          temp_index=i;
       }
    }

Kao sto si sam primjetio ovo ti nije dobro. Puno bi bolje to bilo izvesti ovako:

for(temp_index = 0; s1[temp_index] != '\0';temp_index++);

 

Na ovaj nacin for petlja ce se vrtiti i uvijek povecavati varijablu temp_index dok ne dode do null charactera. Na kraju ce u varijabli temp_index ostati pohranjena pozicina null charactera.

Sada krenes sa prepisivanjem prvih n charactera drugoga niza i to napravis:

for(int i = 0; i<n;i++)
    s1[temp_index+i] = s2[i];

 

Dakle ovime dopisujes na niz s1 prvih n clanova niza s2, sa pocetnom pozicijom na null characteru prvoga niza(varijabal temp_index)>

 

I sada ti samo ostaje da provjeris je li zadnji clan nadopisanog dijela null character:

if(s2[n-1] != '\0')
    s1[temp_index+n] = '\0';

Twitter- @capttawish Linux/GNU live forever.
Poruka je uređivana zadnji put sri 13.6.2012 20:53 (captain_soap_McTawish).
13 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori

Super, hvala!

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

Pozdrav svima, trebam pomoć oko code::blocks-a, kako u code::blocks-u promjeniti ikonu .exe datoteke.

Moj PC  
0 0 hvala 0
13 godina
neaktivan
offline
13 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori

Hvala ovo mi je puno pomoglo.

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

Ljudi trebam par savjeta kako da izbjegnem da mi na takmicenju zadatak ne probije vrijeme ili memoriju??

 

Hvala

http://www.bug.hr/forum/topic/softver-literatura-usluge/prodaja-knjige-hardware/103166.aspx
 
0 0 hvala 0
17 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
Intelovac123 kaže...

Ljudi trebam par savjeta kako da izbjegnem da mi na takmicenju zadatak ne probije vrijeme ili memoriju??

 

Hvala

Brzim algoritmima i dobrim memory managementom.

C provides a programmer with more than enough rope to hang himself. C++ provides a firing squad, blindfold and last cigarette.
14 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
Intelovac123 kaže...

Ljudi trebam par savjeta kako da izbjegnem da mi na takmicenju zadatak ne probije vrijeme ili memoriju??

 

Hvala

Kao što je Domagoj napomenuo, poboljšanjem (optimizacijom) algoritama. Generalno, treba što više smanjiti njihovu složenost, a to najčešće znači izbjegavati ugnježđene petlje.

 

for(...

    for(...

        for(...

 

A za memoriju se ne trebaš toliko brinuti. Pogotovo ako koristiš preciznu dinamičku alokaciju.

14 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
TracerCPP kaže...
Intelovac123 kaže...

Ljudi trebam par savjeta kako da izbjegnem da mi na takmicenju zadatak ne probije vrijeme ili memoriju??

 

Hvala

Kao što je Domagoj napomenuo, poboljšanjem (optimizacijom) algoritama. Generalno, treba što više smanjiti njihovu složenost, a to najčešće znači izbjegavati ugnježđene petlje.

 

for(...

    for(...

        for(...

 

A za memoriju se ne trebaš toliko brinuti. Pogotovo ako koristiš preciznu dinamičku alokaciju.

Znaci sto manje kod-a to bolje...

http://www.bug.hr/forum/topic/softver-literatura-usluge/prodaja-knjige-hardware/103166.aspx
15 godina
offline
Re: Programiranje u C++-u - pitanja i odgovori
Intelovac123 kaže...

Znaci sto manje kod-a to bolje...

To uopce nije tocno. On je rekao da tezis sto brzemu algoritmu. Brzi algoritam ne znaci nuzno manji kod, vec upravo suprotno, kod brzih i slozenih algoritama kod je velik

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

#include <iostream>
using namespace std;

class Monster
{
    private:
            string m_Name;
            int m_Health;
            int m_Strenght;
           
    public:
           Monster () { cout << "Building a Monster." << endl; }
           ~Monster () { cout << "Destroying a Monster." << endl; }
          
           string GetName () { return m_Name; }
           void SetName (string x) { m_Name = x; }
          
           int GetHealth () { return m_Health; }
           void SetHealth (int x) { m_Health = x; }
          
           int GetStrenght () { return m_Strenght; }
           void SetStrenght (int x) { m_Strenght = x;}
};

class Dragon : public Monster
{
    public:
           Dragon () { cout << "Building a Dragon." << endl; }
           ~Dragon () { cout << "Destroying a Dragon." << endl; }
          
           void Fire()
           {
               cout << "Dragon breathing fire!" << endl;
           }
};

//---------------------------------------------------------------------------//

void Sort(Dragon *array, int *size, bool (*pComparison)(int, int))
{
    bool swap = true;
    while(swap)
    {
        swap = false;
        int yTMP;
        int zTMP;
        string strTMP;
        for (int iii=0; iii<*size-1; iii++)
        {
           if(pComparison(array[iii].GetHealth, array[iii+1].GetHealth))
            {
                strTMP = array[iii].GetName();
                array[iii].GetName() = array[iii+1].GetName();
                array[iii+1].GetName() = strTMP;

                yTMP = array[iii].GetHealth();
               array[iii].GetHealth() = array[iii+1].GetHealth();
               array[iii+1].GetHealth() = yTMP;

                zTMP = array[iii].GetStrenght();
               array[iii].GetStrenght() = array[iii+1].GetStrenght();
               array[iii+1].GetStrenght() = zTMP;

                swap = true;

            }
        }
                  
    }    
}

bool Ascending(int nX, int nY)
{
    return nY < nX;
}

bool Descending(int nX, int nY)
{
    return nY > nX;
}

//---------------------------------------------------------------------------//

int main()
{
    cout << "Enter the number of dragons you want to create:" << endl;
    int *size = new int;
    cin >> *size;
    Dragon *array[*size];
   
    for(int iii=0; iii<*size; iii++)
    {
        array[iii] = new Dragon();       
    }
   

    for (int iii=0; iii<*size; iii++)
    {
        cout << "Enter the name of the " << iii+1 << ". dragon:" << endl;
        string x;
        cin.ignore();
        getline(cin, x);
        cout << "Enter " << x << "'s health:" << endl;
        int y;
        cin >> y;
        cout << "Enter " << x << "'s strenght:" << endl;
        int z;
        cin >> z;
       
        array[iii] -> SetName(x);
        array[iii] -> SetHealth(y);
        array[iii] -> SetStrenght(z);
    }

    cout << endl;
    for (int iii = 0; iii<*size; iii++)
    {
       cout << "Name: " << array[iii] -> GetName() << endl;
       cout << "Health: " << array[iii] -> GetHealth() << endl;
       cout << "Strenght: " << array[iii] -> GetStrenght() << endl;
       cout << endl;
    }
   
    char * YN = new char;
    cout << "Would you like to sort the array? <Y/N>" << endl;
    do
    {
        cin >> *YN;
        if (*YN != 'y' && *YN != 'Y' && *YN != 'n' && *YN != 'N')
        {
            cout << "Invalid input." << endl;
        }
    } while ( *YN != 'y' && *YN != 'Y' && *YN != 'n' && *YN != 'N');
   
    /*int aaa;
    cout << "Sort by: " << endl;
    cout << "1. Health" << endl;
    cout << "2. Strenght" << endl;*/
   
    int bbb;
    cout << "Sort in:" << endl;
    cout << "1. Ascending order" << endl;
    cout << "2. Descending order" << endl;
    do
    {
        cin >> bbb;
        if (bbb != 1 && bbb != 2)
        {
            cout << "Invalid input." << endl;
        }
    } while ( bbb != 1 && bbb != 2);

    if(bbb == 1)
    {
        Sort(*array, size, Ascending);       
    }
    else if (bbb == 2)
    {
       Sort(*array, size, Descending);    
    }

   for(int iii=0; iii<*size; iii++)
   {
       delete array[iii];       
   }
    delete size;
    delete YN;
   
    system("pause");
    return 0;           
}

 

Posto kod nema komentara, da objasnim sta bi program trebao raditi:
Program je s //-----// podijeljen na tri dijela: u prvom su proglasene dvije klase.

U drugom je bubble sort kod kojega se i javlja problem. U trecemu je glavna funkcija u kojoj je smjestena mreza tih "zmajeva" i za svakoga se trazi da se unese ime, i dvije vrijednosti koje predstavljaju zivot i snagu (kao u igrama). Zatim se nudi opcija da se ti "zmajevi" sortiraju ili po zdravlju ili po snazi (makar je u gornjem kodu to iskomentirano) i redosljed sortiranja, uzlazni ili silazni. Zato se u drugom dijelu u void Sort() funkciji nalazi jedna bool funkcija kao parametar i onda usporeduje dva argumenta. Problem je sto ne znam sta da postavim kao parametar, (int, int) ocito ne funkcionira. Funkciji se treba proslijediti dvije vrijednosti koje su u biti integeri ali i elementi mreze te Dragon klase.

 

Ovo su greske koje mi javlja:

In function `void Sort(Dragon*, int*, bool (*)(int, int))':

argument of type `int (Monster::)()' does not match `int'

i u zadnja cetiri reda oznacena zutim non-lvalue in assigment

 

Ovo oznaceno zelenim markerom; zar ne bi delete [] array; imalo isti efekt?

I kod unosa stringa, onaj cin.ignore() je tamo zato sto inace program prestane raditi kada se unese razmak.

Poruka je uređivana zadnji put čet 14.6.2012 15:14 (Rattner).
 
0 0 hvala 0
16 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
Daj vidi ovo. Na online kompajleru sam tako da nemam neku dobru kontrolu nad ulazom(cin) ali bi trebalo raditi.Bilo je dosta grešaka ali najbolje je da sam kompariraš svoj kod s ovim. 
#include <iostream>
using namespace std;
 
class Monster
{
   private:
       string m_Name;
       int m_Health;
       int m_Strenght;
     
   public:
      Monster () { cout << "Building a Monster." << endl; }
      ~Monster () { cout << "Destroying a Monster." << endl; }
     
      string GetName () { return m_Name; }
      void SetName (string x) { m_Name = x; }
     
      int GetHealth () { return m_Health; }
      void SetHealth (int x) { m_Health = x; }
     
      int GetStrenght () { return m_Strenght; }
      void SetStrenght (int x) { m_Strenght = x;}
};
 
class Dragon : public Monster
{
   public:
      Dragon () { cout << "Building a Dragon." << endl; }
      ~Dragon () { cout << "Destroying a Dragon." << endl; }
     
      void Fire()
      {
        cout << "Dragon breathing fire!" << endl;
      }
};
 
//---------------------------------------------------------------------------//
 
void Sort(Dragon *array, int size, bool (*pComparison)(int, int))
{
   bool swap = true;
   while(swap)
   {
     swap = false;
     int yTMP;
     int zTMP;
     string strTMP;
     for (int iii=0; iii<size-1; iii++)
     {
      if(pComparison(array[iii].GetHealth(), array[iii+1].GetHealth() ))
       {
         strTMP = array[iii].GetName();
         array[iii].SetName(array[iii+1].GetName());
         array[iii+1].SetName (strTMP);
 
         yTMP = array[iii].GetHealth();
        array[iii].SetHealth (array[iii+1].GetHealth());
        array[iii+1].SetHealth (yTMP);
 
         zTMP = array[iii].GetStrenght();
        array[iii].SetStrenght (array[iii+1].GetStrenght());
        array[iii+1].SetStrenght (zTMP);
 
         swap = true;
 
       }
     }
         
   }  
}
 
bool Ascending(int nX, int nY)
{
   return nY < nX;
}
 
bool Descending(int nX, int nY)
{
   return nY > nX;
}
 
//---------------------------------------------------------------------------//
 
int main()
{
   cout << "Enter the number of dragons you want to create:" << endl;
   int size;
   cin >> size;
   Dragon* array = new Dragon[size];
 
 
 
   for (int iii=0; iii<size; iii++)
   {
     cout << "Enter the name of the " << iii << ". dragon:" << endl;
     string name;
  
     cin>> name;
     int x;
     cout << "Enter " << iii  << "'s health:" << endl;
     cin >> x;
    
     int y;
     cout << "Enter " << iii  << "'s strenght:" << endl;
     cin>> y;
 
   
     array[iii].SetName(name);
     array[iii].SetHealth(x);
     array[iii].SetStrenght(y);
   }
 
   cout << endl;
   for (int iii = 0; iii<size; iii++)
   {
    cout << "Name: " << array[iii].GetName() << endl;
    cout << "Health: " << array[iii].GetHealth() << endl;
    cout << "Strenght: " << array[iii].GetStrenght() << endl;
    cout << endl;
   }
 
   char  YN;
   cout << "Would you like to sort the array? <Y/N>" << endl;
   do
   {
     cin >> YN;
  
 
   } while ( YN != 'y' && YN != 'Y' && YN != 'n' && YN != 'N' );
 
   /*int aaa;
   cout << "Sort by: " << endl;
   cout << "1. Health" << endl;
   cout << "2. Strenght" << endl;*/
 
   int bbb;
   cout << "Sort in:" << endl;
   cout << "1. Ascending order" << endl;
   cout << "2. Descending order" << endl;
   do
   {
     cin >> bbb;
     if (bbb != 1 && bbb != 2)
     {
       cout << "Invalid input." << endl;
     }
   } while ( bbb != 1 && bbb != 2);
 
   if(bbb == 1)
   {
     Sort(array, size, Ascending);    
   }
   else if (bbb == 2)
   {
    Sort(array, size, Descending);  
   }
 
 
  
   for(int i=0 ; i<size ; i++)  
   {
  
    cout<< "array[" << i << "].GetName() : " << array[i].GetName() << endl;
    cout<< "array[" << i << "].GetHealth() : " << array[i].GetHealth() << endl;
    cout<< "array[" << i << "].GetStrenght() : " << array[i].GetStrenght() << endl;
 
   }
    
   delete []array;
  
  
   return 0;      
}

 

@Rattner

Koristi što više STL C++-a.Ovdje imaš svoju verziju sorta , kontejner kroz matricu ... , program radi i daje neki rezultat. ali može to  sigurnije , brže , preglednije ... kroz STL C++-a. On je sastavni dio jezika i lupaj po njemu što više i u sve svrhe. Nećeš biti zakinut za "ispod haube znanje" jer učenjem STL-a naučit ćeš sve homemade verzije čega se god sjetiš ali izvedene na najbži i najoptimizarniji način a u pozadini svakog  #include // stdTempLib C++   leži low-level.

Poruka je uređivana zadnji put pet 15.6.2012 8:35 (nik_02).
14 godina
neaktivan
offline
Programiranje u C++-u - pitanja i odgovori

Pozz svima

Moze li mi neko uraditi ovaj zadatak sa for petljama? Ja imam uradjen na ovaj nacin ali ako moze bez ovog bool da se uradi bio bih vam zahvalan.

 

#include <iostream> 

using namespace std; 

int main() 

   int niz[10]; 

   bool jeste = true; 

   cout<<"Unesi brojeve: "<<endl; 

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

       cin>>niz[i]; 

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

       if(niz[i]>=niz[i+1])

 

   if(jeste == true) 

       cout<<"jeste rastuci"<<endl; 

   else 

       cout<<"nije rastuci"<<endl; 

 

   system("pause"); 

   return 0; 

}

Moj PC  
0 0 hvala 0
15 godina
offline
Re: Programiranje u C++-u - pitanja i odgovori
eagle05 kaže...

Samo zamijeni bool sa int.

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

neradi tj radi ali nedaje tacne rezultate 

ako si ti mislio da ovo uradim

 

int main (){

 int niz[10]; 

  int jeste = true; 

  cout<<"Unesi brojeve: "<<endl; 

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

    cin>>niz[i]; 

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

    if(niz[i]>=niz[i+1])

 

  if(jeste == true) 

    cout<<"jeste rastuci"<<endl; 

  else 

    cout<<"nije rastuci"<<endl; 

 

ako vam nije problem da mi napisete novi program 

Moj PC  
0 0 hvala 0
13 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori

Ma naravno, uvjek ti izbacuje "Niz jeste rastući".
Ja bih to uradio ovako:
#include <iostream>
using namespace std;

int main()
{
    int jeste=0;
    int niz[10];
    for(int i=0; i<10; i++)
    {
       cin>>niz[i];
    }

    for(int i=0; i<10; i++)
    {
       if(niz[i]<=niz[i+1])
       {
          jeste=1;
          break;
       }
    }

    if(jeste)
    {
       cout<<"Niz je rastuci!"<<endl;
    }
    else
    {
       cout<<"Niz je opadajuci"<<endl;
    }
    system("PAUSE");
    return 0;
}

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

hvala sto si se potrudio ali i ovdje uvijek mi ispise niz je rastuci

Moj PC  
0 0 hvala 0
E-mail:
Lozinka:
 
vrh stranice