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

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

Evo, da ne bi ispalo da sam bez veze teoretizirao, ovo je kod koji radi za to šifriranje.

Temelji se na matematičkoj formuli koja definira operator modulo a = a%b + (a/b) * b

U ovom programu, kvocijenti su stavljeni u globalnu varijablu, dakle, može se izvršiti samo dešifriranje šifriranog broja, a što je izgleda i zahtjev tog profe.

Za učiniti nešto više postoje dvije opcije:

- u ključ za šifriranje izdvojiti kvocijente

- na lijevu stranu broja nadodati kvocijente

 


#include <iostream>
using namespace std;
 
int kvocijenti;

int BrojZnamenki(int broj)
{
    int brojZnamenki = 0;
    while (broj>0)
 {
    broj /= 10;
    brojZnamenki++;
 }
    return brojZnamenki;
}
int Sifriranje(int broj)
{
    int brojZnamenki, sifra = 0, potencija = 1, potencija1 = 1;
    brojZnamenki = BrojZnamenki(broj);
    while (broj>0)
    {
       if(brojZnamenki % 2 == 0)
       {
          kvocijenti += (((broj % 10) + 4) / 3) * potencija1;
          sifra += ((broj % 10) + 4)%3 * potencija;
          potencija1 *= 10;
       }
      else
      {
         sifra += (broj % 10) * potencija;
      }
    potencija *= 10;
    broj /= 10;
    brojZnamenki--;
 }
     return sifra;
}
int Desifriranje(int sifriraniBroj)
{
    int brojZnamenki, desifriraniBroj = 0, potencija = 1;
    brojZnamenki = BrojZnamenki(sifriraniBroj);
    while (sifriraniBroj>0)
    {
       if(brojZnamenki % 2 == 0)
       {
          desifriraniBroj += (((kvocijenti % 10) * 3 + (sifriraniBroj % 10)) - 4) * potencija;
          kvocijenti /= 10;
       }
       else
       {
          desifriraniBroj += (sifriraniBroj % 10) * potencija;
       }
       potencija *= 10;
       sifriraniBroj /= 10;
       brojZnamenki--;
    }
    return desifriraniBroj;
}

int main()

{
    int sifriraniBroj = Sifriranje(89125381);
    cout<< sifriraniBroj << endl;
    int desifriraniBroj = Desifriranje(sifriraniBroj);
    cout<< desifriraniBroj << endl;
    return 0;
}

 



Poruka je uređivana zadnji put sri 13.2.2013 21:58 (Floki).
16 godina
offline
Programiranje u C++-u - pitanja i odgovori

Treba mi pomoc za ovaj zadatak.

 

 

Zadano je polje A od 10 elementa  i cjelobrojne varijable  F i G. Polje A  popuni slučajnim brojevima između 1-10.  Varijablama F i G dodijeli slučajni broj između 1-10. Zamjeni vrijednosti polja A na mjestima F i G.

 

a)    Ispiši polje A na ekran (npr: 1   7   9    8    4   8  5  4  2  9  )

b)    Ispiši F i G  (npr: F je 4. G je 7  )

Ispiši polje A nakon zamjene (npr: 1   7   9   5    4    8  8  4  2  9  )

Gamers dont die, they respawn! :)
Poruka je uređivana zadnji put čet 14.2.2013 9:19 (MilkMan).
Moj PC  
0 0 hvala 0
12 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
Floki kaže...


Pa da profa je rekao da mogu koristiti key u funkciji šifriranje...u svakom slučaju hvala ;).

17 godina
offline
Re: Programiranje u C++-u - pitanja i odgovori
TAPTAP12 kaže...
Floki kaže...


Pa da profa je rekao da mogu koristiti key u funkciji šifriranje...u svakom slučaju hvala ;).

Jednostavno ovo prilagodi, umjesto globalne varijable varijablu kvocijenti stavi u key varijablu, za dešifriranje onda treba uz šifrirani broj i jedinstveni key za taj broj. Ja drukčije rješenje ne vidim, negdje moram memorirati kvocijente da bi rekostruirao operator nad kojim je vršen modulo.

Poruka je uređivana zadnji put sri 13.2.2013 22:25 (Floki).
16 godina
offline
Programiranje u C++-u - pitanja i odgovori

evo ga kolege, napravio sam crtez u c++, lubenica i pored nje kriska izrezane lubenice, ako kome treba kod il samo zeli vidjet kako zgleda evo kod {#}

 

i da napomenem morate ovo dodati!

 

Otići u Project-Project Options-Parameters tab i u polje Linker  upisati slijedeće parametre (skupa sa -) :

-lbgi

-lgdi32

-lcomdlg32

-luuid

-loleaut32

-lole32

 

#include <math.h>
#include<graphics.h>
#include <time.h>


int maxx;
int maxy ;
int maxcolor;
int faktorKasnjenja;

using namespace std;

// naša funkcija kojom biramo slucajni  broj izmedu donjaGranica i  gornjaGranica
int generirajSlucajniBroj(int donjaGranica, int gornjaGranica){
  return rand() % gornjaGranica + donjaGranica;
    }

int okreni(int y){   return maxy-y;}


    

 

  void crtajLubenicu(int x0, int y0)
  {
     //1.elipsa zelena obrubljena bijelo
    
     setcolor(GREEN);setfillstyle(SOLID_FILL, GREEN);
     sector(x0,okreni(y0),0,0, 50,60);
     setcolor(WHITE);
     ellipse(x0,okreni(y0),0,360, 50,60);
   
    
     //2. elipsa plava obrubljena bijelo
     setcolor(GREEN);setfillstyle(SOLID_FILL, GREEN);
     sector(x0+50,okreni(y0+0),180,360, 60,60);
     setcolor(WHITE);
    ellipse(x0+50,okreni(y0+0),180,360, 60,60);;
   
    //3. elipsa bijela obrubljena bijelo
     setcolor(WHITE);setfillstyle(SOLID_FILL, WHITE);
     sector(x0+50,okreni(y0+1),180,360, 54,55);
   
   
    //4. elipsa crvena
     setcolor(RED);setfillstyle(SOLID_FILL, RED);
     sector(x0+50,okreni(y0+1),180,360, 48,48);
    
     //5. elipsa CRNA obrubljena bijelo
     setcolor(BLACK);setfillstyle(SOLID_FILL, BLACK);
     sector(x0+20,okreni(y0-13),0,360, 4,7);
     setcolor(WHITE);
    ellipse(x0+20,okreni(y0-13),0,360, 4,7);;
   
    //6. elipsa CRNA obrubljena bijelo
     setcolor(BLACK);setfillstyle(SOLID_FILL, BLACK);
     sector(x0+40,okreni(y0-13),0,360, 4,7);
     setcolor(WHITE);
    ellipse(x0+40,okreni(y0-13),0,360, 4,7);;
   
    //7. elipsa CRNA obrubljena bijelo
     setcolor(BLACK);setfillstyle(SOLID_FILL, BLACK);
     sector(x0+60,okreni(y0-13),0,360, 4,7);
     setcolor(WHITE);
    ellipse(x0+60,okreni(y0-13),0,360, 4,7);;
   
    //7. elipsa CRNA obrubljena bijelo
     setcolor(BLACK);setfillstyle(SOLID_FILL, BLACK);
     sector(x0+80,okreni(y0-13),0,360, 4,7);
     setcolor(WHITE);
    ellipse(x0+80,okreni(y0-13),0,360, 4,7);;
    
}

   
   
int main()
{

//Ova naredba kreira novi graficki prozor zadane širine i visine u pikselima    
  initwindow(1200, 800);
 
  maxx = getmaxx( );  //max x kordinata
  maxy = getmaxy( );  //max y koordinata
  maxcolor= getmaxcolor();// max broj boja

  faktorKasnjenja=150;

  //inicijaliziramo  generator slucajnih brojeva
  srand ( time(NULL) );
 


 

 
int x;
int y;
for(x=80;x<maxx-80 ;x=x+160)
{
     crtajLubenicu(x, 299);
      crtajLubenicu(x, 99);
  
}


 
getch();     closegraph();  
return (0);}

Gamers dont die, they respawn! :)
Poruka je uređivana zadnji put čet 14.2.2013 9:18 (MilkMan).
Moj PC  
2 0 hvala 0
12 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori

hvala puno na informaciji a jel znaš kako treba napravit bor u C++  ?!

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

Jel zna bilo tko kako treba napraviti bor u c++ , muči me malo grafika,treba mi odgovor što hitnije jer imam rok u školi za to!

Hvala unaprijed!  {#}

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

Ima tko kakvih zadataka iz sortiranja polja, BubbleSort? Neki početnički.

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

#include <windows.h>
#include <commctrl.h>
#include <stdio.h>

LRESULT CALLBACK WindowProcedure(HWND, UINT, WPARAM, LPARAM);
char szClassName[]="Test window";
HINSTANCE instance;

#define CHECKBOX_1  5000
#define CHECKBOX_2  5001

int WINAPI WinMain(HINSTANCE hThisInstance, HINSTANCE hPrevInstance, LPSTR lpszArgument, int nCmdShow)
{
    HWND hwnd;
    MSG messages;
    WNDCLASSEX wincl;

    wincl.hInstance      = hThisInstance;
    wincl.lpszClassName  = szClassName;
    wincl.lpfnWndProc    = WindowProcedure;
    wincl.style          = CS_DBLCLKS;
    wincl.cbSize         = sizeof(WNDCLASSEX);
    wincl.hIcon          = LoadIcon(NULL, IDI_APPLICATION);
    wincl.hIconSm        = LoadIcon(NULL, IDI_APPLICATION);
    wincl.hCursor        = LoadCursor(NULL, IDC_ARROW);
    wincl.lpszMenuName   = NULL;
    wincl.cbClsExtra     = 0;
    wincl.cbWndExtra     = 0;
    wincl.hbrBackground  = (HBRUSH)COLOR_BACKGROUND;

    if (!RegisterClassEx(&wincl))
        return 0;

    instance=hThisInstance;
    hwnd=CreateWindowEx(0, szClassName, "Test", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 300, 150, HWND_DESKTOP, NULL, hThisInstance, NULL);
    ShowWindow(hwnd, SW_SHOW);

    while (GetMessage(&messages, NULL, 0, 0))
    {
        TranslateMessage(&messages);
        DispatchMessage(&messages);
    }

    return messages.wParam;
}

LRESULT CALLBACK WindowProcedure(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)
    {
        case WM_CREATE:
            //napravimo dva checkboxa prvi nije automatski, drugi jest
            CreateWindow(WC_BUTTON, "Test 1", WS_VISIBLE|WS_CHILD|BS_CHECKBOX, 10, 10, 80, 13, hwnd, (HMENU)CHECKBOX_1, instance, NULL);
            CreateWindow(WC_BUTTON, "Test 2", WS_VISIBLE|WS_CHILD|BS_AUTOCHECKBOX, 10, 40, 80, 13, hwnd, (HMENU)CHECKBOX_2, instance, NULL);
            break;

        case WM_COMMAND:
            switch (LOWORD(wParam))
            {
                case CHECKBOX_1:
                    //korisnik je kliknuo na prvi checkbox.

                    //ovo nije automatski checkbox što znači da sami moramo
                    //uklanjati i postavljati kvačicu
                    if (IsDlgButtonChecked(hwnd, CHECKBOX_1)==BST_CHECKED)
                        CheckDlgButton(hwnd, CHECKBOX_1, BST_UNCHECKED);
                    else
                        CheckDlgButton(hwnd, CHECKBOX_1, BST_CHECKED);
                    break;

                case CHECKBOX_2:
                    //korisnik je kliknuo na drugi checkbox

                    //ovaj checkbox je automatiziran pa tu ne moramo nišra raditi
                    break;
            }
            break;

        case WM_DESTROY:
            PostQuitMessage(0);
            break;

        default:
            return DefWindowProc(hwnd, message, wParam, lParam);
    }

    return 0;
}

 

Našao sam ovaj kod prije u temi!

 

u sedmici radi, no u XPu dobijem samo prazan prozor. probao sam kompajlirati i u XPu. zašto?

 

 

 
0 0 hvala 0
15 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
bugforum123 kaže...

Našao sam ovaj kod prije u temi!

 

u sedmici radi, no u XPu dobijem samo prazan prozor. probao sam kompajlirati i u XPu. zašto?

Radi i na XP-u, štoviše radi i na Win9x. Nešto si pogrešno napravio pri kompajliranju na win XP.

Koji kompajler i IDE koristiš?

 

Ako dobivaš samo prazan prozor, to upućuje na problem u WM_CREATE handleru, a možda i u samim pozivima na CreateWindow. Probaj prepraviti oba CreateWindow poziva da tako da im prvi argument bude "Button" umjesto WC_BUTTON

 

CreateWindow("Button", "Test 1", WS_VISIBLE|WS_CHILD|BS_CHECKBOX, 10, 10, 80, 13, hwnd, (HMENU)CHECKBOX_1, instance, NULL);
CreateWindow("Button", "Test 2", WS_VISIBLE|WS_CHILD|BS_AUTOCHECKBOX, 10, 40, 80, 13, hwnd, (HMENU)CHECKBOX_2, instance, NULL);

 

Možeš dodati i nekakav printf poziv unutar WM_CREATE handlera kako bi bio siguran da se uopće dolazi do tog koda...

0xBADC0DE
Poruka je uređivana zadnji put uto 19.2.2013 1:43 (rustweaver).
14 godina
neaktivan
offline
Programiranje u C++-u - pitanja i odgovori

može mi neko objasnit kako da iz niza u kojem se nalaze cijeli (pozitivni i negativni) brojevi izvadim dio niza u kojem je zbroj tih brojeva što veći, te bi trebao ispisati index početka i kraja tog podniza u što kraćoj vremenskoj složenosti. npr:

zadani niz : 11 -12 -13 100 -34 30 40 -26 10

rješenje :   100 -34 30 40

          početni index = 3 

          završni index = 6

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

može mi neko objasnit kako da iz niza u kojem se nalaze cijeli (pozitivni i negativni) brojevi izvadim dio niza u kojem je zbroj tih brojeva što veći, te bi trebao ispisati index početka i kraja tog podniza u što kraćoj vremenskoj složenosti. npr:

zadani niz : 11 -12 -13 100 -34 30 40 -26 10

rješenje :   100 -34 30 40

          početni index = 3 

          završni index = 6

Valjda će biti zadovoljni sa linearnom složenošću O(n), Kadaneov algoritam i praćenje indeksa niza. A to pogledaj ovdje:

http://codesam.blogspot.com/2011/03/find-maximum-subarray-of-integer-array.html

Poruka je uređivana zadnji put sri 20.2.2013 20:21 (Floki).
14 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
Floki kaže...
etnes kaže...

može mi neko objasnit kako da iz niza u kojem se nalaze cijeli (pozitivni i negativni) brojevi izvadim dio niza u kojem je zbroj tih brojeva što veći, te bi trebao ispisati index početka i kraja tog podniza u što kraćoj vremenskoj složenosti. npr:

zadani niz : 11 -12 -13 100 -34 30 40 -26 10

rješenje :   100 -34 30 40

          početni index = 3 

          završni index = 6

Valjda će biti zadovoljni sa linearnom složenošću O(n), Kadaneov algoritam i praćenje indeksa niza. A to pogledaj ovdje:

http://codesam.blogspot.com/2011/03/find-maximum-subarray-of-integer-array.html

ee, super je. hvala {#}

17 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
Floki kaže...

Valjda će biti zadovoljni sa linearnom složenošću O(n), Kadaneov algoritam i praćenje indeksa niza. A to pogledaj ovdje:

http://codesam.blogspot.com/2011/03/find-maximum-subarray-of-integer-array.html

Manja slozenost se niti ne moze postici, jer jednostavno moras proci cijeli niz.

Perhaps today IS a good day to die. PREPARE FOR RAMMING SPEED!
12 godina
offline
Programiranje u C++-u - pitanja i odgovori

Pozdrav,

 

tražio sam po forumu i na googlu zadatke za vježbu iz c++, ali nisam baš naišao na ono što tražim. Dakle trebao bi zadatke vezane uz petlje, nizove, dvodimenzionalne nizove, pokazivače, funkcije. Ali ne baš jednostavne zadatke tipa: odredi prosjek, ispiši najveći, najmanji broj, zbroji brojeve u nizu itd., nego da su kompliciraniji zadaci i da to malo vježbam pa da mogu dalje krenut na klase, objekte itd. Pa ako netko ima link sa zadacima ili ako imate za preporučiti koju knjigu ili zbirku zadataka bio bih zahvalan.

Moj PC  
0 0 hvala 0
14 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
Kada lajavci laju onda završe ovako: http://i471.photobucket.com/albums/rr77/toropreto/2012-07-0813_30_07.gif
12 godina
offline
Programiranje u C++-u - pitanja i odgovori

Hvala!

Moj PC  
0 0 hvala 0
12 godina
neaktivan
offline
Programiranje u C++-u - pitanja i odgovori

ovako stvari stoje,ja sam početnik u c++ i trenutno imam zadatak izrađivanja polja,neznam što znači iomanip  (#include<iomanip>)

 

 
0 0 hvala 0
17 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
Bobintego kaže...

ovako stvari stoje,ja sam početnik u c++ i trenutno imam zadatak izrađivanja polja,neznam što znači iomanip  (#include<iomanip>)

 

Ok, ne znas ti, ali zato zna Google. Odmah prvi rezultat ti je link na C++ referencu.

Perhaps today IS a good day to die. PREPARE FOR RAMMING SPEED!
12 godina
neaktivan
offline
Programiranje u C++-u - pitanja i odgovori

Pozz, zanima me za netko od vas koji radi kao programer u nekoj firmi u čemu programirate, šta programirate (ne treba opis koda) neku aplikaciju ili , koliko otprilike radi ljudi na projektu, jel uspijete u roku zavrsiti ako imate rok ili ? 

 
1 0 hvala 0
12 godina
offline
Programiranje u C++-u - pitanja i odgovori

Pozz,

 

u knjizi sam naišao na ovakav znak =!  i moram priznati da još nisam vidio takav znak. Isprve sam mislio da je to znak nejednakosti != napisan obrnuto, ali nije. Pa ak neko ima volje nek mi objasni {#}

Hvala.

Poruka je uređivana zadnji put čet 28.2.2013 1:12 (neznam123456).
Moj PC  
0 0 hvala 0
15 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
neznam123456 kaže...

Pozz,

 

u knjizi sam naišao na ovakav znak =!  i moram priznati da još nisam vidio takav znak. Isprve sam mislio da je to znak nejednakosti != napisan obrnuto, ali nije. Pa ak neko ima volje nek mi objasni {#}

Hvala.

Prvo jedna važna informacija:

U C-u broj nula uvijek ima značenje "false", a bilo koji drugi broj ima značenje "true". C++ dodaje bool tip specijalno za tu svrhu koji može imati samo vrijednost 0 i 1 odnosno "false" i "true". Sad kad smo to probavili, možemo se pozabaviti ovim problemom.

 

'!' je znak za operator logičke negacije "logical not". Znači "true" pretvori u "false" i obratno.

 

1.

Kada ga staviš ispred znaka jednakosti, to si onda možeš čitati kao "X not equal Y". Tada je to dio operatora usporedbe kojim uspoređuješ odnos između dviju vrijednosti.

 

npr:

3 != 2 vraća "true" odnosno 1, zato što je "3 not equal 2" istinito

4 != 4 vraća "false", odnosno 0, zato što je "4 not equal 4" neistinito

 

2.

Kada ga staviš nakon znaka jednakosti onda ga možeš protumačiti kao: "X equals not Y". Odnosno tada je riječ o dva zasebna operatora: operatoru dodjeljivanja (znak '='), nakon kojeg dolazi operator logičke negacije (znak '!'). Varijabla sa lijeve strane operatora dodjeljivanja poprima vrijednost desne strane na koju je primijenjen operator "not".

 

npr.

int n =! 3;

3 je "true", jer je svaki broj različit od nule "true". Prije broja 3 imamo operator "not". Dakle ovaj izraz u biti kaže: n = "not true". Znači 'n' dobiva vrijednost "false".

 

int n =! 0;

0 je "false". Prije broja 0 imamo operator "not". Dakle ovaj izraz kaže: n = "not false". "Not false" je "true", dakle 'n' dobiva vrijednost "true" (odnosno 1, jer C neće bubnuti neki nasumični broj različit od nule, nego će jednostavno staviti 1)

 

"x =! y" je samo zbunjeniji način za napisati "x = !y". Kada ih napišeš zajedno u obliku: "=!" dobije se dojam da je riječ o jednoj cjelini, a zapravo se radi o dva odvojena operatora, pa bi "x = !y" bio puno bolji izbor.

 

 

 

Što mislim kada kažem da se brojevi tumače kao "true" ili "false"? To znači da, kada ih se koristi kao uvjet, imaju vrijednosti "true" ili "false".

 

primjer sa uvjetom u while petlji:

while petlja će se ponavljati tako dugo dok je uvjet unutar zagrada istinit, odnosno "true".while (uvjet)
{
    //ponavljaj nešto
}

 

kao uvjet može poslužiti BILO KOJI izraz koji vraća "true ili false":

while (4 > 3) //uvjet je "true" zato što 4 jest veći od 3

 

while (n == y) //koristi se operator provjere jednakosti, uvjet
               //će biti "true" samo ako je 'n' jednak 'y'

 

while (534) //uvjet je "true" zato što se bilo koji broj
            //različit od nule tumači kao "true"


while (x) //uvjet će biti "true" samo ako vrijednost varijable
          //'x' nije nula

 

while (0) //uvjet je "false" jer se nula tumači kao "false",
          //pa se ova petlja neće izvršiti

 

while (!0) //nula se tumači kao "false", pa je
           //"not false" = "true", znači uvjet daje "true"

 

while (!-337) //bilo koji broj različit od nule je "true", pa se
              //ovo tumači kao "not true", odnosno uvjet je
              //"false"

 

while (x + 3) //ako x + 3 bude 0, uvjet će biti "false", ako
              //bude bilo koji drugi broj uvjet će biti "true"

 

while (n = 5) //ovo nije klasični operator usporedbe, nego
              //operator dodjeljivanja vrijednosti. Neće se
              //vršiti provjera je li 'n' jednak broju 5,
              //nego će se dogoditi slijedeće: prvo će se
              //varijabli 'n' dodijeliti vrijednost 5, a zatim
              //će se vrijednost te varijable protumačiti kao
              //"true" ili "false". A budući da sada 'n' ima
              //vrijednost 5, a 5 je "true", uvjet je "true"

 

while (n =! 80) //opet dodjeljivanje vrijednosti, ali u
                //kombinaciji sa "not" operatorom. 80 je
                //"true", "not true" je "false" odnosno 0,
                //stoga 'n' dobiva vrijednost 0, što je "false"
                //pa je cijeli uvjet "false"

 

while (n != 80) //izgleda jako slično ovome gore, ali se događa
                //posve druga stvar. Ovaj puta nije riječ o
                //dodjeljivanju vrijednosti varijabli 'n', nego
                //o provjeri nejednakosti. Uvjet će biti "true"
                //ako je "n not equal 80", odnosno ako
                //vrijednost varijable 'n' nije jednaka 80 uvjet
                //je "true", a ako su jednaki uvjet je "false"

 

while ('Q') //kao poseban brainfuck, možemo koristiti i znakove
            //kao uvjet, budući da znakovi imaju dodjeljene 8
            //bitne brojčane vrijednosti, tako npr veliko slovo
            //'Q' ima ASCII vrijednost 81, što je broj koji nije
            //nula znači da je uvjet "true"

 

Možemo reći da su uvjeti u biti izrazi koji kao rezultat vraćaju "true" ili "false" (1 ili 0). Možeš ih koristiti i izvan uobičajenih mjesta. Recimo ovo:

int n = 3;

int a = 2 > 4;
int b = 3 != 2;
int c = n==3;

 

'a' je 0 (false) zato što nije istina da je 2 > 4

'b' je 1 (true) zato što je istina da 3 nije jednak 2

'c' je 1 (true) zato što je istina da je vrijednost varijable 'n' jednaka 3

 

Kasno je i teže artikuliram misli, valjda ti je ovo što sam napisao barem malo jasno :)

Budem kasnije editirao i pročistio ako primjetim da sam napisao neka sranja...

 

EDIT: dijelovi teksta, koji izgledaju kao da ih je napisao neispavani luđak koji pokušava zbuniti ljude, su prepravljeni. Uz malo sreće sada su neke informacije puno jasnije.

0xBADC0DE
Poruka je uređivana zadnji put pet 1.3.2013 21:40 (rustweaver).
14 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
rustweaver kaže...
neznam123456 kaže...

Pozz,

 

u knjizi sam naišao na ovakav znak =!  i moram priznati da još nisam vidio takav znak. Isprve sam mislio da je to znak nejednakosti != napisan obrnuto, ali nije. Pa ak neko ima volje nek mi objasni {#}

Hvala.

Prvo jedna važna informacija:

U C-u broj nula uvijek ima značenje "false", a bilo koji drugi broj ima značenje "true". C++ dodaje bool tip specijalno za tu svrhu koji može imati samo vrijednost 0 i 1 odnosno "false" i "true". Sad kad smo to probavili, možemo se pozabaviti ovim problemom.

Oprez: "true" nije samo 1 već sve različito od 0.

Kada lajavci laju onda završe ovako: http://i471.photobucket.com/albums/rr77/toropreto/2012-07-0813_30_07.gif
17 godina
offline
Programiranje u C++-u - pitanja i odgovori

=! ukratko rečeno nije operator, nego dva operatora koji se po prioritetu izvođenja ovako izvode:

1. ! - (unarni boolean operator za boolean vrijednosti)

2. = - (operator dodjeljivanja)

 

 

bool rezultat, operand = false;

 

rezultat =! operand;

 

Ovdje se boolean varijabli rezultat dodjeljuje vrijednost true, tj. logički not od vrijednosti varijable operand.

 

Zato je ispravno pisati:

rezultat = !operand;

Odnosno unarni logical not operator pisati do varijable na koju se primjenjuje.

 

Dakle, to moraš promatrati u konteksu prioriteta izvođenja operatora, slično ovom:

int a=5, b=3;

a +=- b;

Compilera nije briga što je ovako napisano, on tu vidi dva operatora, binarni operator dodjeljivanja += i unarni operator - koji daje suprotnu vrijednost, pa po njegovim pravilima a varijabli dodjeljuje vrijednost 2.

A učiteljica bi sigurno malom Ivici iz matematike dala asa za ovo, ne kužeći da pred sobom ima malog Stroustrupa (jer ona traži kobasicu tipa a = a + (-b)){#}

Poruka je uređivana zadnji put čet 28.2.2013 14:13 (Floki).
 
1 0 hvala 1
12 godina
offline
Programiranje u C++-u - pitanja i odgovori

Hvala puno. Čak se može i ovako zapisati pomoću alternativne oznake:   x = (not y)   ali ružno izgleda (barem meni)

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

Oprez: "true" nije samo 1 već sve različito od 0.

Zanimljivo, nisam znao da se bool varijablama mogu dodjeljivati i neki drugi brojevi.

 

bool a=315;

 

Nisam mislio da je takvo nešto dopušteno, budući da bool može imati samo vrijednost 0 ili 1 mislio sam da će se kompajler žaliti. Ali s druge strane ima smisla budući da C++ u sebi sadrži i C, pa tako vrijede i ista pravila za interpretaciju brojeva. Znaći da sa desne strane izraz koji je "true", pa i bool dobiva vrijednost 1, odnosno "true", to je jedino što je kompajleru bitno.

0xBADC0DE
Poruka je uređivana zadnji put čet 28.2.2013 16:04 (rustweaver).
17 godina
offline
Programiranje u C++-u - pitanja i odgovori

Bool varijable su ubačene u C++ da se smanji zauzeće memorije, jer one zauzimaju samo jedan bit.

 

Njima ima smisla pridruživati samo bool vrijednosti do kojih se dolazi operatorima usporedbe ili bool operatorima za bool vrijednosti.

 

U stvari, dobro si rekao, ta nekonzistentnost je naslijeđe iz C-a.

 

U C# ovo ne možeš napraviti:

bool rezultat = 5;

 

Ne dozvoljava se implicitna konverzija.

Poruka je uređivana zadnji put čet 28.2.2013 16:29 (Floki).
 
0 0 hvala 1
14 godina
neaktivan
offline
Programiranje u C++-u - pitanja i odgovori

Nisam konkretno govorio za bool već za vrijednost "true". Bool je već dobro objasnio Flok.

Kada lajavci laju onda završe ovako: http://i471.photobucket.com/albums/rr77/toropreto/2012-07-0813_30_07.gif
Moj PC  
1 0 hvala 1
15 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
TracerCPP kaže...

Nisam konkretno govorio za bool već za vrijednost "true".

Pa onda si me krivo razumio, ja jesam rekao da je "true" sve što je različito od nule...

0xBADC0DE
17 godina
offline
Re: Programiranje u C++-u - pitanja i odgovori
rustweaver kaže...
TracerCPP kaže...

Nisam konkretno govorio za bool već za vrijednost "true".

Pa onda si me krivo razumio, ja jesam rekao da je "true" sve što je različito od nule...

Nije true, nego se vrši implicitna pretvorba u true, to ti je rekao.

 

 

while(256)

{

}

 

Ovdje se vrši implicitna pretvorba int u bool, i to je nekonzistentno u C++ jer se implicitno pretvara vrijednost većeg raspona u manji.

Kompromis naslijeđa iz C.

 

Za nas koji smo počeli sa C ništa čudno ni neobično, ali strogo gledano vršiti implicitnu pretvorbu vrijednosti većeg raspona u manji nije konzistentno, a kad compiler dozvoljava onda kao što @Tracer reče "valja biti oprezan".

To je teoretski ravno tomu da se može ovo napraviti:

long broj = 5;

int broj1 = broj;

 

U ovom slučaju pretvorbe long u int compiler ti traži pristanak u vidu castanja, odnosno bez tvoje dozvole neće pretvoriti vrijednost većeg raspona u manji.

Poruka je uređivana zadnji put čet 28.2.2013 16:57 (Floki).
E-mail:
Lozinka:
 
vrh stranice