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

poruka: 7.285
|
čitano: 1.712.097
|
moderatori: Lazarus Long, XXX-Man, vincimus
+/- sve poruke
ravni prikaz
starije poruke gore
16 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
919191 kaže...

Tak sam se napalila na CreateWindowEx();

 

Već sam sve lijepo složio, jedno 10 gumbiča, par progress bara, checkboxovi, textboxovi, ... čak se i disejblaju gumbi kad ih nema smisla stiskat... :D

 

Dakle par pitanja... :D

 

1. Kako najjednostavnije dodat background sliku?

negdje sam iskopao ovaj kod:

 

HBITMAP logoImage;

     logoImage = (HBITMAP)LoadImage(GetModuleHandle(NULL), MAKEINTRESOURCE(IDB_LOGO), IMAGE_BITMAP, 59, 65, LR_DEFAULTCOLOR);

     logo = CreateWindow(WC_STATIC, NULL, SS_BITMAP  | WS_CHILD | WS_VISIBLE, 300, 100, 200, 100, hwnd, NULL, NULL, NULL);

     SendMessage(logo, STM_SETIMAGE, IMAGE_BITMAP, (LPARAM)logoImage);

no baš me i ne sluša.... kompajliranje ide,, ali nema slike

 

 

2. Kako mijenjat ime labele? (mogu sada napravit jedan window preko toga, no to i nije baš kak bi se trebalo... :D )

 

3. Kako mijenjat ime gumba? (pretpostavljam slično kao i za labele, samo što nemogu nigdje na netu to iskopat)

 

Presretan sam :D

 

Nisam siguran da ti imaš razloga za biti sretan ?!?!?

15 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
919191 kaže...
1. Kako najjednostavnije dodat background sliku?

negdje sam iskopao ovaj kod:

Moraš imati handler za WM_PAINT poruku u kojemu ćeš iscrtati neku bitmapu preko prozora. Ta bitmapa može biti vanjska datoteka ili embeddana u izvršnu datoteku (kao resurs)

 

Evo primjer:

main.c

#include <windows.h>
#include "resource.h"

LRESULT CALLBACK WindowProcedure(HWND, UINT, WPARAM, LPARAM);
void WindowPaint(HWND);

char szClassName[]="WindowsApp";
HBITMAP image=NULL;

int WINAPI WinMain(HINSTANCE hThisInstance, HINSTANCE hPrevInstance, LPSTR lpszArgument, int nFunsterStil)
{
    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;

    hwnd=CreateWindowEx(0, szClassName, "Test", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 544, 375, HWND_DESKTOP, NULL, hThisInstance, NULL);
    ShowWindow(hwnd, nFunsterStil);

    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:
             image=LoadBitmap(GetModuleHandle(NULL), MAKEINTRESOURCE(IDB_BACKGROUND));
             break;

        case WM_DESTROY:
             PostQuitMessage(0);
             break;

        case WM_PAINT:
             WindowPaint(hwnd);
             break;

        case WM_SIZE:
             InvalidateRect(hwnd, NULL, 0);
             break;

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

    return 0;
}

void WindowPaint(HWND hwnd)
{
     PAINTSTRUCT ps;
     HDC hdc, img;
     BITMAP b;

     hdc=BeginPaint(hwnd, &ps);

     img=CreateCompatibleDC(hdc);
     GetObject(image, sizeof(BITMAP), &b);
     SelectObject(img, image);
     StretchBlt(hdc, 0, 0, ps.rcPaint.right, ps.rcPaint.bottom,
                img, 0, 0, b.bmWidth, b.bmHeight,
                SRCCOPY);

     EndPaint(hwnd, &ps);

     return;
}

 

resources.h

#define IDB_BACKGROUND  100

 

resources.rc

#include "resource.h"

IDB_BACKGROUND BITMAP "background.bmp"

 

Naravno, to podrazumijeva da imaš background.bmp datoteku u folderu programa.

 

919191 kaže...
2. Kako mijenjat ime labele? (mogu sada napravit jedan window preko toga, no to i nije baš kak bi se trebalo... :D )

 

3. Kako mijenjat ime gumba? (pretpostavljam slično kao i za labele, samo što nemogu nigdje na netu to iskopat)

 

Pomoću WM_SETTEXT poruke koju šalješSendMessage funkcijom, ili izravnije putem SetWindowText funkcije.

 

Neka te ne zbuni ovo "window", naime sve kontrole pod Windowsima su tehnički također "prozori" iako tako ne izgledaju.

 

U slučaju da ti zatreba negdje handle od kontrole a ti imaš samo njen identifier, onda iskoristi GetDlgItem, a ako imaš handle a trebaš identifier onda za to imašGetDlgCtrlID

 

0xBADC0DE
Poruka je uređivana zadnji put ned 13.1.2013 0:59 (rustweaver).
15 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
919191 kaže...
negdje sam iskopao ovaj kod:

 

HBITMAP logoImage;

     logoImage = (HBITMAP)LoadImage(GetModuleHandle(NULL), MAKEINTRESOURCE(IDB_LOGO), IMAGE_BITMAP, 59, 65, LR_DEFAULTCOLOR);

     logo = CreateWindow(WC_STATIC, NULL, SS_BITMAP  | WS_CHILD | WS_VISIBLE, 300, 100, 200, 100, hwnd, NULL, NULL, NULL);

     SendMessage(logo, STM_SETIMAGE, IMAGE_BITMAP, (LPARAM)logoImage);

no baš me i ne sluša.... kompajliranje ide,, ali nema slike

Eh da, umalo zaboravih. LoadImage ti pokušava učitati sliku iz resursa embedanog u izvršnoj datoteci. Jesi li napravio resource skriptu kojom embeddaš sliku u .exe? Nema resursa - nema slike.

 

Evo ti malo materijala da pohvataš neke osnovne koncepte:

http://www.winprog.org/tutorial/

http://www.functionx.com/win32/index.htm

http://zetcode.com/gui/winapi/

http://www.catch22.net/tuts

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

Evo uspio sam napraviti preko ovoga nekako ali početna točka mi je uvijek nula dok drugu točku ja odredim i onda mi nacrta liniju ali meni treba da obje točke ja postavlja a ne da bude prva točka na koordinati (0,0), evo kod pa ako zna itko gdje mi je greska

 

 

void CFesbView::OnLButtonDown(UINT nFlags, CPoint point)

{

// TODO: Add your message handler code here and/or call default

CPoint m_StartPoint = point;

CView::OnLButtonDown(nFlags, point);

}

 

void CFesbView::OnLButtonUp(UINT nFlags, CPoint point)

{

// TODO: Add your message handler code here and/or call default

CPoint m_EndPoint = point;

CPoint m_StartPoint;

CClientDC dc(this);

dc.MoveTo(m_StartPoint); //Move to coordinate.

dc.LineTo(m_EndPoint ); //Draw line from current coordinates to end point.

CView::OnLButtonUp(nFlags, point);

}

 

Poruka je uređivana zadnji put ned 13.1.2013 2:11 (Broken).
 
0 0 hvala 0
16 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
Broken kaže...
void CFesbView::OnLButtonUp(UINT nFlags, CPoint point)

{

// TODO: Add your message handler code here and/or call default

CPoint m_EndPoint = point;

CPoint m_StartPoint;

CClientDC dc(this);

dc.MoveTo(m_StartPoint); //Move to coordinate.

dc.LineTo(m_EndPoint ); //Draw line from current coordinates to end point.

CView::OnLButtonUp(nFlags, point);

}

 

Ako dobro čitam, kada otpustiš klik postavljaš endpoint na point, tj kursor, onda definiraš startpoint koji očito onda poprima vrijednost 0,0 jer ga nisi nigdje postavio.

 

Onaj koji si postavio u buttondownu ti je lokalna varijabla koja je umrla kada se funkcija izvršila. Treba ti neka "trajnija" varijabla :)

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

Krivo sam bio napravio ja sam s onim prije dobio crtanje linije misem a ne crtanje linije klikom miša unutar prozora znači zadatak mi je lijevim klikom kliknuti na dva mjesta unutar pozora i da mi se na osnovu te dvije linije iscrta točka. Problem je sto ja ne znam kako se spremaju koordinate drugog klika, napravio sam da mi se lijevim klikom misa spremi početna koordinata a desnim krajnja i program mi radi samo je problem što i krajnja koordinata mora biti unijeta lijevim klikom misa a ne desnim kako sam ja napravio. Kako da spremim koordinate drugim klikom?

 

Evo kod kako sam napravio da mi radi preko lijevo i desnog klika:

 

void CFesbView::OnRButtonDown(UINT nFlags, CPoint point)

{

m_EndPoint=point;

CClientDC dc(this);

dc.MoveTo(m_StartPoint); //Move to coordinate.

dc.LineTo(m_EndPoint); //Draw line from current coordinates to end point.

CView::OnRButtonDown(nFlags, point);

}

 

void CFesbView::OnLButtonDown(UINT nFlags, CPoint point)

{

// TODO: Add your message handler code here and/or call default

m_StartPoint = point;

CView::OnLButtonDown(nFlags, point);

}

Poruka je uređivana zadnji put ned 13.1.2013 11:48 (Broken).
12 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori

Handler za klik miša mora znati da li obrađuje početak ili kraj linije pomoću nekakve bool member varijable, npr. m_DrawingLine. Pseudokod za to:

 

if not m_DrawingLine then
    m_StartPoint = point
    m_DrawingLine = True
else
    dc.MoveTo(m_StartPoint)
    dc.LineTo(point)
    m_DrawingLine = False

 

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

Hvala uspio sam rjesiti :)

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

Imam još napraviti da kod unosa teksta tj. prije unosa teksta odaberem kako ce mi tekst ispisati bold, italic ili underline, ali ove mogućnosti mi moraju biti omogućene na alatnoj traci kao u Wordu. Napravio sam ovo na alatnoj traci i znam ih omogućiti ali šta trebam dodati u program da bi mi boldalo text.

 

- dodajte tri nove ikone u traku s alatima, po jednu za svaki od tri načina ispisa teksta: podebljano, ukošeno i podcrtano (napravio)

 

 

- dodajte tri nove varijable koje pamte trenutno stanje tri načina ispisa

 

 

http://i50.tinypic.com/30sc22v.png

Poruka je uređivana zadnji put ned 13.1.2013 14:44 (Broken).
 
0 0 hvala 0
12 godina
neaktivan
offline
Programiranje u C++-u - pitanja i odgovori

Već sam sigurno postao dosadan :D

Hvala na svoj pomoći :D

 

no imam još jedno pitanje :P

 

dakle podijelio sam program u par fileova, recimo main.cpp test.cpp file.h

i sad deklariram globalnu varijablu u test.cpp i pokušavam joj pristupit iz main.cpp , no to nažalost ne šljaka, štoviše neće se ni skompajlirat. Kako mi program sam po sebi ima oko 4700 linija koda, nakon što sam dodao ovaj prekrasan UI, narastao je daleko preko 5000... znam da je i do sada to bilo glupo držat sve u jednom fileu, ali sad mi je UI dodatno zakomplicirao stvar... možda samo nisam još naviknut to čitat u programu. 

Zamijetio sam i neke greške u vezi poziva funkcije iz file.h pomoću _beginthread(); , no da prvo sredimo ovo s pristupom varijablama pa ćemo dalje... :D

 

Dakle želio bi kad deklariram neku globalnu varijablu, strukturu, ... u file.h da ona bude svuda dostupna

 

Pokušavao sam s :

static int varijabla;

extern int varijabla;

i nije šljakalo :S

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

Već sam sigurno postao dosadan :D

Hvala na svoj pomoći :D

 

no imam još jedno pitanje :P

 

dakle podijelio sam program u par fileova, recimo main.cpp test.cpp file.h

i sad deklariram globalnu varijablu u test.cpp i pokušavam joj pristupit iz main.cpp , no to nažalost ne šljaka, štoviše neće se ni skompajlirat. Kako mi program sam po sebi ima oko 4700 linija koda, nakon što sam dodao ovaj prekrasan UI, narastao je daleko preko 5000... znam da je i do sada to bilo glupo držat sve u jednom fileu, ali sad mi je UI dodatno zakomplicirao stvar... možda samo nisam još naviknut to čitat u programu. 

Zamijetio sam i neke greške u vezi poziva funkcije iz file.h pomoću _beginthread(); , no da prvo sredimo ovo s pristupom varijablama pa ćemo dalje... :D

 

Dakle želio bi kad deklariram neku globalnu varijablu, strukturu, ... u file.h da ona bude svuda dostupna

 

Pokušavao sam s :

static int varijabla;

extern int varijabla;

i nije šljakalo :S

Ili koristi forward deklaraciju (deklaraciju unaprijed) ili includeaj header gdje zelis koristiti. Globalne varijable imaju "program scope" dakle dostupne su cijelom programu.

 

Globalne varijable su zle i izbjegavaj ih.

The programmer is fighting against the two most destructive forces in the universe: entropy and human stupidity. --Damian Conway
12 godina
neaktivan
offline
Programiranje u C++-u - pitanja i odgovori

uspio sam složit nešto da radi pomoću statičkih globalnih varijabli ;) u vanjskom fileu, i u main.cpp sam ga inkludao

 

sad imam ovakav problem imam sasvim običnu funkciju u vanjskom fileu, i pozivam je iz maina s _beginthread

no kaže:

 

 

multiple definition of .... funkcije

 

to se događa i za sasvim običan poziv funkcije

Poruka je uređivana zadnji put ned 13.1.2013 23:02 (919191).
 
0 0 hvala 0
17 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
919191 kaže...

uspio sam složit nešto da radi pomoću statičkih globalnih varijabli ;) u vanjskom fileu, i u main.cpp sam ga inkludao

 

sad imam ovakav problem imam sasvim običnu funkciju u vanjskom fileu, i pozivam je iz maina s _beginthread

no kaže:

 

 

multiple definition of .... funkcije

 

to se događa i za sasvim običan poziv funkcije

Pa no, sto znaci "multiple definition of ..."? Pa gledaj sto ti govori, negdje si ocito vise puta definirao istu funkciju. Pretpostavljam da je to zbog headera, jer vjerojatno nisi u headere stavio header guardove. I budi precizan kad govoris o "vanjskom fileu" jer to moze znaciti ili header ili .cpp file, otkud da znamo na sto tocno mislis.

The programmer is fighting against the two most destructive forces in the universe: entropy and human stupidity. --Damian Conway
12 godina
neaktivan
offline
Programiranje u C++-u - pitanja i odgovori

može molim vas netko pogledat

 

 

main.c

 

#include "test.c"

 

int main()

{

   HWND   handles = FindWindow(0 ,TEXT("aaaa"));

 

   if(!handles)

   {

   MessageBox(0,TEXT("Can't open!"),TEXT("p"),MB_OK|MB_ICONERROR);

   return 0;

   }

 

DWORD ID;

   GetWindowThreadProcessId(handles,&ID);

   ccc = OpenProcess(PROCESS_VM_OPERATION|PROCESS_VM_READ, FALSE,ID);

 

   //_beginthread( read_values,0,0);

 

   for(;;)

 Sleep(1);

 

 

return 0;

}

i ovo je test.c
#include <windows.h>
#include <stdio.h>
#include <process.h>    
#include <conio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
static HANDLE ccc;
void read_values(void *param)
{
   for(;;)
   { printf("readvvvv");
 Sleep(1);
   }
}
gdje je tu multiple definiton of read_values?
i onaj beginthread bi trebalo odkomentirat nakon što se ovo sredi :)

 

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

Ne znam kako izgleda ostatak koda, jer ako velis da imas 5000 linija koda, bilo gdje moze biti "multiple declaration". Jel jos negdje includeas test.c? Ako da, rekao bih da je to to.

 

I zasto includeas jedan .c file u drugi?! Ako se koristi pravilno, ta tehnika moze biti korisna. Ali prakticki samo u embedded sustavima. Ovako niposto. Zasto nemas header file u kojem imas deklarirane funkcije i onda to includeas? Naravno, niposto ne zaboraviti header guardove da izbjegnes "multiple declaration" upozorenja.

The programmer is fighting against the two most destructive forces in the universe: entropy and human stupidity. --Damian Conway
 
1 0 hvala 1
12 godina
neaktivan
offline
Programiranje u C++-u - pitanja i odgovori

Sve sam ostalo maknuo (od tih 5000 linija) za testiranje, ovo je sve što sad imam i neće skompajlat

 

Maknuo sam sve iz onog dodatnog filea u header i sad radi :DDDD veliko hvala

Poruka je uređivana zadnji put ned 13.1.2013 23:49 (919191).
 
0 0 hvala 0
15 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
919191 kaže...
Dakle želio bi kad deklariram neku globalnu varijablu, strukturu, ... u file.h da ona bude svuda dostupna

 

Pokušavao sam s :

static int varijabla;

extern int varijabla;

i nije šljakalo :S

http://en.wikipedia.org/wiki/External_variable

 

919191 kaže...

može molim vas netko pogledat

 

gdje je tu multiple definiton of read_values?
i onaj beginthread bi trebalo odkomentirat nakon što se ovo sredi :)

 

Za ovo je potrebno malo znanja o postupku kompajliranja C programa.

 

Prvo si u main.c dodao test.c datoteku. Kompajler tada spoji main.c i test.c datoteke kao da je riječ o jednoj datoteci te ih kompajlira. Tu je prva definicija read_values. E sada što se dalje događa, kompajler nastavlja kompajlirati ostale datoteke u projektu, a kako ti je u projektu i test.c datoteka sada ide i nju kompajlirati, nailazi na definiciju funkcije read_values (a već je definirana kompajliranjem main.c datoteke) i eto ti greške.

 

Nemoj includeat .c datoteke, jer se ovakve stvari događaju, dovoljno je da se sve .c ili .cpp datoteke nalaze u istom projektu da bi bile spojene. Za forward deklaracije funkcija i ostalih tipova podataka koristi header (.h) datoteke u kombinaciji sa include guardovima....

 

Evo ti i ispravak (koristeći extern keyword za globalnu varijablu da vidiš kako se to radi):

 

main.c

#include <windows.h>
#include <stdio.h>
#include <process.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>

extern HANDLE ccc;

int main()
{
    HWND   handles = FindWindow(0 ,TEXT("aaaa"));

    if (!handles)
    {
        MessageBox(0,TEXT("Can't open!"),TEXT("p"),MB_OK|MB_ICONERROR);
        return 0;
    }

    DWORD ID;
    GetWindowThreadProcessId(handles,&ID);
    ccc = OpenProcess(PROCESS_VM_OPERATION|PROCESS_VM_READ, FALSE,ID);
    //_beginthread( read_values,0,0);

    for (;;)
        Sleep(1);
    return 0;
}

 

 

test.c

#include <windows.h>
#include <stdio.h>
#include <process.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>

HANDLE ccc;

void read_values(void *param)
{
    for (;;)
    {
        printf("readvvvv");
        Sleep(1);
    }
}

 

0xBADC0DE
Poruka je uređivana zadnji put pon 14.1.2013 0:00 (rustweaver).
17 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
rustweaver kaže...
...

Za ovo je potrebno malo znanja o postupku kompajliranja C programa.

 

Prvo si u main.c dodao test.c datoteku. Kompajler tada spoji main.c i test.c datoteke kao da je riječ o jednoj datoteci te ih kompajlira. Tu je prva definicija read_values. E sada što se dalje događa, kompajler nastavlja kompajlirati ostale datoteke u projektu, a kako ti je u projektu i test.c datoteka sada ide i nju kompajlirati, nailazi na definiciju funkcije read_values (a već je definirana kompajliranjem main.c datoteke) i eto ti greške.

 

Nemoj includeat .c datoteke, jer se ovakve stvari događaju, dovoljno je da se sve .c ili .cpp datoteke nalaze u istom projektu da bi bile spojene. Za forward deklaracije funkcija i ostalih tipova podataka koristi header (.h) datoteke u kombinaciji sa include guardovima....

...

Ajde dobro da si mu objasnio to sto mu govorim vec dva posta, za headere. Taman sam mislio pisati o tome da kompajler prvo napravi .obj fileove koje linker onda spaja u jedan executable, al ajde ne moram :D

The programmer is fighting against the two most destructive forces in the universe: entropy and human stupidity. --Damian Conway
Poruka je uređivana zadnji put pon 14.1.2013 0:13 (1domagoj1).
12 godina
neaktivan
offline
Programiranje u C++-u - pitanja i odgovori

ljudi treba mi pomoc oko jednog zadatka u C-u: ovako potrebno je napisati program u C-u koji bi brojeve ispisao u sestnajsticom i dvojnickom(binarnom) obliku. treba napraviti funkcije za postavljanje, brisanje i provjeravanje bita. za izvedbu treba upotrijebiti funkciju koja bi trebala biti u drugoj dadoteki kao funkcija _main_ .

 

neki primjer:

biti 8-bitnog nepotpisanoga broja:

unsigned char broj;

Primjer za vrjednost 89 ( = 0x 59):(SLIKA 1)

 

a (SLIKA 2 ) je kako uraditi malo pojednostavljeno upute:

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

ljudi treba mi pomoc oko jednog zadatka u C-u: ovako potrebno je napisati program...

Trebaš li ti pomoć ili gotov kod?

 

Evo ti malo funkcija koje rade ovo što ti treba, ali sa 32 bitnim unsigned integerima, sam si prepravi za 8 bitne...

 

void ispis_hex(unsigned int broj)
{
    int n;
    char znakovi[]="0123456789ABCDEF";

    printf("0x");

    for (n=0; n<8; n++)
    {
        printf("%c", znakovi[(broj&0xF0000000)>>28]);
        broj<<=4;
    }

    printf("\n");
}

void ispis_bin(unsigned int broj)
{
    int n;

    for (n=0; n<32; n++)
    {
        if (broj&0x80000000)
            printf("1");
        else
            printf("0");
        broj<<=1;
    }

    printf("\n");
}

void postavi_bit(unsigned int *broj, unsigned int bit)
{
    *(broj)|=1u<<(bit-1);
}

void brisi_bit(unsigned int *broj, unsigned int bit)
{
    *(broj)^=1u<<(bit-1);
}

int testiraj_bit(unsigned int *broj, unsigned int bit)
{
    if (*(broj)&(1u<<(bit-1)))
        return 1;
    return 0;
}

 

EDIT: sad sam se sjetio da ova verzija sa XOR-om ne samo da uklanja bit, nego ga i postavlja ako je već uklonjen (odnosno obrne mu stanje, jel) što samo po sebi nije loše ali funkcija koja se zove "brisi_bit" ne bi trebala imati takav skriveni "feature". Evo ti verzija koja samo ukloni bit:

void brisi_bit2(unsigned int *broj, unsigned int bit)
{
    *(broj)&=~(1u<<(bit-1));
}

 

0xBADC0DE
Poruka je uređivana zadnji put sub 19.1.2013 5:23 (rustweaver).
12 godina
neaktivan
offline
Programiranje u C++-u - pitanja i odgovori

Evo moje pitanje: imam zadatak sa datotekama u cpp i neznam kako ga rijesiti pa bih zamolila ako itko zna to da mi pomogne. Ovako glasi zadatak:
U datoteci namirnice.txt pohranjeni su podaci o hranjivim vrijednostima pojedinih namirnica (za 100g namirnice). Podaci su redom: naziv namirnice, kalcij (mg), bjelančevine (g), magnezij (g), željezo (g), vlakna (g), ukupno masti (g), zasićene masti (g), kolesterol (mg), eneretska vrijednost (kcal). Podaci su odvojeni znakom novog retka (enterom).

treba napraviti ovo:
a) Prebrojati koliko u datoteci namirnice.txt ima različitih namirnica
b) ispisati namirnicu s najviše magnezija na 100 g.
c) Ispisati koliko u prosjeku ima zasićenih masti u orašastim plodovima (namirnice koje počinju s Nuts)

a ovo je sadrzaj te datoteke namirnice.txt:
<SLURP>
I unaprijed vam hvala! Pozdrav.

Poruka je uređivana zadnji put ned 20.1.2013 11:58 (naxeem).
 
0 3 hvala 0
14 godina
neaktivan
offline
Programiranje u C++-u - pitanja i odgovori

Kao i za sve ostale tako vrijedi i za tebe - izvoli i potrudi se sama rješiti zadatak. Nismo mi ovdje služba za rješavanje tuđih domaćih zadaća.

 

S druge strane, ako si nešto sama radila pa si negdje zapela uvijek možeš ovdje staviti ono što si do sada napravila pa reći u čemu je problem tj. što ti nije jasno pa da sama možeš dovršiti zadatak..

Kada lajavci laju onda završe ovako: http://i471.photobucket.com/albums/rr77/toropreto/2012-07-0813_30_07.gif
Poruka je uređivana zadnji put sub 19.1.2013 14:29 (TracerCPP).
Moj PC  
3 0 hvala 0
12 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
Ok. Nema problema rijesen je zadatak ali bas ne funkcionira najbolje i ne shvacam zbog cega ne radi onako kako bi trebao pa ako nije problem da mi kazete makar gdje je greska jer ja ju ne vidim? hvala.
17 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
Informaticarka kaže...
...
a ovo je sadrzaj te datoteke namirnice.txt:
...

{#}

 

Informaticarka kaže...
Ok. Nema problema rijesen je zadatak ali bas ne funkcionira najbolje i ne shvacam zbog cega ne radi onako kako bi trebao pa ako nije problem da mi kazete makar gdje je greska jer ja ju ne vidim? hvala.

A da slucajno stavis i kod? Jer telepatski sigurno nitko nece vidjeti gresku {#}

The programmer is fighting against the two most destructive forces in the universe: entropy and human stupidity. --Damian Conway
Poruka je uređivana zadnji put sub 19.1.2013 14:55 (1domagoj1).
12 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori

ne zeli uopce poslati kod...ne razumijem..stranica mi nesto blokira :/

Poruka je uređivana zadnji put sub 19.1.2013 18:06 (Informaticarka).
12 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
kad god pokusam staviti kod javi mi da su stranice kao trenutno nedostupne... :/
12 godina
neaktivan
offline
Programiranje u C++-u - pitanja i odgovori

#include <iostream>

#include <fstream>

using namespace std;

 

 

struct namirnica{

                char naziv[30];

                float kalcij;

                float bjelancevine;

                float magnezij;

                float zeljezo;

                float vlakna;

                float ukupno_masti;

                float zasicene_masti;

                float koleterol;

                float energetska_vrijednost;

};

 

 

int main()

{             

                ifstream file;

                file.open("namirnice.txt");

 

                namirnica ucitana_namirnica;

 

 

                int broj_namirnica = 0;

 

                float najvise_magnezija = 0;

                char nam_s_najvise_magnezija[30];

 

                int broj_orasastih = 0;

                float zasicenih_u_orasastim = 0.0;

 

 

                while (! file.eof()){

                               file >> ucitana_namirnica.naziv;

                               file >> ucitana_namirnica.kalcij;

                               file >> ucitana_namirnica.bjelancevine;

                               file >> ucitana_namirnica.magnezij;

                               file >> ucitana_namirnica.zeljezo;

                               file >> ucitana_namirnica.vlakna;

                               file >> ucitana_namirnica.ukupno_masti;

                               file >> ucitana_namirnica.zasicene_masti;

                               file >> ucitana_namirnica.koleterol;

                               file >> ucitana_namirnica.energetska_vrijednost;

 

                               //racunaj ukupni broj namirnica

                               broj_namirnica++;

 

                               //zapamti namirnicu s najvise magnezija

                               if (ucitana_namirnica.magnezij > najvise_magnezija){

                                               najvise_magnezija = ucitana_namirnica.magnezij;

                                               strcpy(nam_s_najvise_magnezija, ucitana_namirnica.naziv);

                               }

 

                               //namirnica pocinje sa 'Nuts'

                               if (ucitana_namirnica.naziv[0] == 'N' && ucitana_namirnica.naziv[1] == 'u' && ucitana_namirnica.naziv[2] == 't' && ucitana_namirnica.naziv[3] == 's'){

                                               broj_orasastih++;

                                               zasicenih_u_orasastim += ucitana_namirnica.zasicene_masti;

                               }

                }

 

                cout << "a) U datoteci namirnice.txt ima " << broj_namirnica << " namirnice." << endl;

                cout << "b) Namirnica s najvise magnezija na 100 grama je: " << nam_s_najvise_magnezija << "." << endl;

 

                if (broj_orasastih > 0)

                               cout << "c) U orasastim plodovima u prosjeku ima " << zasicenih_u_orasastim / broj_orasastih << " grama zasicenih masti." << endl;

                else

                               cout << "c) U zadanoj datoteci nema orasastih plodova! (prosjek zasicenih masti je: 0 grama)" << endl;

 

                getchar();

 

                return 0;

}

 

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

@Informaticarka, daj obriši sadržaj daotteke iz posta i postavi na pastebin, pa daj ovde link.

Uz srednje-sporo skrolanje, skrolao sam 19 sekundi i 89 stotinki (1024x768). :D

12 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
Poruka je uređivana zadnji put sub 19.1.2013 18:03 (Informaticarka).
16 godina
neaktivan
offline
Programiranje u C++-u - pitanja i odgovori

Evo radim jedan zadatak:

 

Pomoću scanf funkcije potrebno je učitati jedan cijeli broj z. Pomoću switch funkcije, u ovisnosti o  ostatku pri djeljenu broja z sa 5, treba izračunati izraz S na sljedeći način:

·      ako je ostatak nula: S=++z +20;.

·      ako je ostatak 3: S se dobije tako da se prvo sadržaj varijable  z inkrementira, a onda se ta vrijednost pomnoži sa 5;

·      inače treba ispisati: KRAJ.

 

Napisao sam ovaj kod:

 

#include <stdio.h>
int main()
{
    int z,S;
    scanf("%d",&z);
    switch(z%5)
    {
    case 0:
S=++z+20;
break;
    case 3:
    S=++z*5;
    break;
default:
    printf("KRAJ");
   
    }
    return 0;
}
Ništa se ne događa, pojavi mi se cmd prozor, ukucam broj i nakon toga izađe... Može pomoć molim vas?

 

 

When all else fails - crowbar the fucker
 
0 0 hvala 0
E-mail:
Lozinka:
 
vrh stranice