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

poruka: 7.283
|
čitano: 1.506.613
|
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
DommY kaže...
Imam instaliran code blocks 12.11 program te u njemu pokusavam pokrenuti jedan jednostavan program. Kada ga napisem, pokusam ga pokrenuti tako da kliknem na "build and run", medutim program se ne pokrece a ispod koda se ispise da code blocks nemoze pronaci/pokrenuti compiler i nakon toga nista se dalje ne desava. Sta bi ja trebao taj compiler instalirati ili? Hvala !

Pa, u svakom slucaju da, treba ti kompajler, to je u biti najbitnija komponenta od svih, jer upravo kompajler prevodi taj tvoj kod koji si napisao u instrukcije razumljive procesoru.

 

Da li si skinuo i instalirao s ove stranice onaj Code::Blocks koji ima 96.8 MB i u nazivu rijec "mingw"? Ako nisi, skini taj, nakon instalacije pitat ce te za kompajler, oznaci GCC (MinGW je port GCC-a na Windowse - pretpostavljam da si na Win, jer na Linuxu kompajler je defaultno instaliran i nemas brige) i stisni Set default. To bi trebalo biti to.

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

Sada radi. Bio sam instalirao onaj program sa 30-40mb, pa sam deinstalirao i instalirao ovaj od 90mb šta si rekao pa mi je pronašlo kompajler i sada mi program radi. Hvala puno {#}

Windows Phone FTW
Moj PC  
0 0 hvala 0
10 godina
neaktivan
offline
Programiranje u C++-u - pitanja i odgovori

Pozdrav,

imam jednostavan program (WIN) s nekim checkboxovima, labelama, ...

 

kako napraviti da kad stavim miša iznad child windowa i ne mičem, da se pokaže text s opisom? 

već sam vidio takve stvari, no neznam kako to napraviti niti sam našao nešto korisno na internetu

 
0 0 hvala 0
14 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
C je programski jezik kaže...

Pozdrav,

imam jednostavan program (WIN) s nekim checkboxovima, labelama, ...

 

kako napraviti da kad stavim miša iznad child windowa i ne mičem, da se pokaže text s opisom? 

već sam vidio takve stvari, no neznam kako to napraviti niti sam našao nešto korisno na internetu

Možda ovakvo nešto tražiš? 

http://msdn.microsoft.com/en-us/library/system.windows.forms.tooltip.show.aspx 

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

ummm, to je .NET ... 

 

kako to napravit u čistom C-u? 

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

ummm, to je .NET ... 

 

kako to napravit u čistom C-u? 

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

#define ID_CLOSE    500
#define ID_OK       501

LRESULT CALLBACK WindowProcedure(HWND, UINT, WPARAM, LPARAM);
void AddTooltip(int ID, HWND hParent, char *text);

int WINAPI WinMain(HINSTANCE hThisInstance, HINSTANCE hPrevInstance, LPSTR lpszArgument, int nCmdShow)
{
    HWND hwnd;
    MSG message;
    WNDCLASS wc = {0};

    wc.hInstance      = hThisInstance;
    wc.lpszClassName  = "TestAppClass";
    wc.lpfnWndProc    = WindowProcedure;
    wc.hCursor        = LoadCursor(NULL, IDC_ARROW);
    wc.hbrBackground  = (HBRUSH)COLOR_BACKGROUND;

    if (!RegisterClass(&wc))
        return 0;

    hwnd = CreateWindow("TestAppClass", "Test application",
                        WS_OVERLAPPEDWINDOW | WS_VISIBLE,
                        CW_USEDEFAULT, CW_USEDEFAULT, 200, 100,
                        NULL, NULL, hThisInstance, NULL);

    while (GetMessage(&message, NULL, 0, 0))
        DispatchMessage(&message);

    return message.wParam;
}

LRESULT CALLBACK WindowProcedure(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)
    {
        case WM_DESTROY:
            PostQuitMessage(0);
            break;

        case WM_CREATE:
            CreateWindow(WC_BUTTON, "OK",
                         WS_CHILD | WS_VISIBLE,
                         55, 10, 75, 23,
                         hwnd, (HMENU)ID_OK, GetModuleHandle(NULL), NULL);

            CreateWindow(WC_BUTTON, "Close",
                         WS_CHILD | WS_VISIBLE,
                         55, 40, 75, 23,
                         hwnd, (HMENU)ID_CLOSE, GetModuleHandle(NULL), NULL);

            /* ovaj dio odkomentirati za lijepsi font (potrebno linkanje sa GDI bibliotekom)
            HANDLE DefaultFont = GetStockObject(DEFAULT_GUI_FONT);
            SendMessage(GetDlgItem(hwnd, ID_OK), WM_SETFONT, DefaultFont, TRUE);
            SendMessage(GetDlgItem(hwnd, ID_CLOSE), WM_SETFONT, DefaultFont, TRUE);*/

            AddTooltip(ID_OK, hwnd, "Ova tipka ne radi nista");
            AddTooltip(ID_CLOSE, hwnd, "Ova tipka zatvara prozor");
            break;

        case WM_COMMAND:
            switch (LOWORD(wParam))
            {
                case ID_OK:
                    break;

                case ID_CLOSE:
                    PostQuitMessage(0);
                    break;
            }

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

    return 0;
}

void AddTooltip(int ID, HWND hParent, char *text)
{
    TOOLINFO toolInfo = {sizeof(toolInfo)};
    HWND control = GetDlgItem(hParent, ID),
         tooltip;

    tooltip = CreateWindow(TOOLTIPS_CLASS, NULL,
                           WS_POPUP | TTS_ALWAYSTIP,
                           CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
                           hParent, NULL, GetModuleHandle(NULL), NULL);

    toolInfo.hwnd      = hParent;
    toolInfo.uFlags    = TTF_IDISHWND | TTF_SUBCLASS;
    toolInfo.uId       = control;
    toolInfo.lpszText  = text;

    SendMessage(tooltip, TTM_ADDTOOL, 0, (LPARAM)&toolInfo);
}

 

What Andy giveth, Bill taketh away.
Poruka je uređivana zadnji put pet 11.10.2013 3:48 (rustweaver).
11 godina
offline
Programiranje u C++-u - pitanja i odgovori

Pokušavam namjestiti SDL 2.0 za VS2010

 

Piše mi:

 

9. Right-click on the project named SDL listed in the Solution Explorer list and

choose Build.

 

 

 

10. We now have a build of the SDL 2.0 library to use. It will be located at C:\

SDL2\VisualC\SDL\Win32(or x64)\Release\SDL.lib.

 

11. We also need to build the SDL main library file, so choose it within the

Solution Explorer list and build it. This file will build to C:\SDL2\VisualC\

SDLmain\Win32(or x64)\Release\SDLmain.lib.

 

12. Create a folder named lib in C:\SDL2 and copy SDL.lib and SDLmain.lib

into this newly created folder.

 

 

Problem mi je što kada napravim koram 9. nema mi u koracima 10. ove datoteke Release\SDL.lib imam samo datoteku Debug?

U Debugu imam samo SDL2.lib i SDL2main.lib Je li mi ova SDL2 u nazivu zbog imena foldera C:\SDL2 ili bih trebao baš dobiti SDL.lib nakon build-anja?

 

EDIT: Uspio sam riješiti.

Poruka je uređivana zadnji put pet 11.10.2013 13:05 (Xyloto).
 
0 0 hvala 0
10 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
rustweaver kaže...
C je programski jezik kaže...

ummm, to je .NET ... 

 

kako to napravit u čistom C-u? 

#include <windows.h>
...

 

puno ti hvala ovo radi :D

 

 

malo noobovsko pitanje, no kako strcpy(broj[3].ime, "Stolac");

zamjeniti da nema strcpy?

 

nešto u stilu broj[3].ime="Stolac";   //ali ovo ne radi :P

14 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
C je programski jezik kaže...
malo noobovsko pitanje, no kako strcpy(broj[3].ime, "Stolac");

zamjeniti da nema strcpy?

 

nešto u stilu broj[3].ime="Stolac";   //ali ovo ne radi :P

Nikako. U C-u kompletnom polju odjednom možeš dodijeliti vrijednost samo pri deklaraciji, naknadne dodjele vrijednosti moraš obaviti zasebnim postavljanjem vrijednosti svakog pojedinog elementa u polju.

"An lvalue is an expression with an object type or an incomplete type other than void; if an lvalue does not designate an object when it is evaluated, the behavior is undefined. When an object is said to have a particular type, the type is specified by the lvalue used to designate the object. A modifiable lvalue is an lvalue that does not have array type, does not have an incomplete type, does not have a const-qualified type, and if it is a structure or union, does not have any member (including, recursively, any member or element of all contained aggregates or unions) with a const-qualified type.

Except when it is the operand of the sizeof operator or the unary & operator, or is a string literal used to initialize an array, an expression that has type ‘‘array of type’’ is converted to an expression with type ‘‘pointer to type’’ that points to the initial element of the array object and is not an lvalue." § 6.3.2.1

 

Ili umjesto polja koristi pokazivač, s njime bi mogao izvesti to što želiš. To je moguće zato što pokazivač može pokazivati na što god ti želiš, pa tako i na string literal u memoriji. Ali pazi onda trebaš li mijenjati sadržaj tog stringa na koji pokazivač pokazuje, jer taj string može biti smješten u read only segment.

 

Ukratko:

char polje1[10] = "bla bla"; // ovo može

char polje2[10];
polje2 = "bla bla";          // ovo ne može

char polje3[10];
strcpy(polje3, "bla bla");   // ovo može

char *pointer;
pointer = "bla bla";         // ovo može

 

P.S.

Ako te cijeli ovaj lvalue vs rvalue cirkus zbunjuje (nisi jedini) pojašnjenja možeš naći ovdje i ovdje. Korisno je to znati jer ćeš s vremena na vrijeme vidjeti da kompajler spominje lvalue i rvalue u porukama s greškom, pa ćeš lakše dešifrirati tu poruku.

What Andy giveth, Bill taketh away.
Poruka je uređivana zadnji put pet 11.10.2013 18:19 (rustweaver).
12 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori

Ne zaboraviti dinamičku alokaciju prije upotrebe pointera...

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

što treba modificirati u onom kodu da podržava multiline tooltipove?

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

 Hvala

Poruka je uređivana zadnji put sub 12.10.2013 22:20 (crespo).
 
0 0 hvala 0
14 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
C je programski jezik kaže...

što treba modificirati u onom kodu da podržava multiline tooltipove?

1. Na samom početku, prije includeanja commctrl.h headera trebaš definirati _WIN32_IE makro na vrijednost najmanje 0x0300. To je potrebno kako bi mogao koristiti TTM_SETMAXTIPWIDTH poruku:

#define _WIN32_IE 0x0300

 

2. Tooltip prozoru trebaš poslati TTM_SETMAXTIPWIDTH poruku. Ta poruka čini dvije stvari. Prvo i najbitnije je da ograničava maksimalnu širinu tooltipa i sav tekst koji je dulji od toga jednostavno prebaci u novu liniju (word wrapping). Druga stvar koju ta poruka radi je da omogućava korištenje newline znaka ('\n') u tekstu čime sâm možeš automatski odrediti gdje će početi nova linija. Dakle ako uzmeš onaj moj prethodni kôd, samo na kraj funkcije AddTooltip dodaš ovu liniju:

SendMessage(tooltip, TTM_SETMAXTIPWIDTH, 0, 200);

 

3. Iskoristiš novostečenu mogućnost korištenja newline znaka za određivanje dodatnih linija. Npr:

AddTooltip(ID_OK, hwnd, "Ova tipka ne radi ništa\nali ima tooltip sa više linija teksta");

 

Referenca svih tooltip poruka.

What Andy giveth, Bill taketh away.
16 godina
neaktivan
offline
Programiranje u C++-u - pitanja i odgovori

treba mi pomoć oko jednog djela koda.
program bi trebao uzimati zadnji red iz 2D matrice i pretvoriti ga u 1D matricu međutim pokazuje mi uvjek na pogrešku u djelu gdje bi if naredba trebala razdvajati zadnji red od svih ostalih

(označio sam u kodu)

 

#include<iostream>
#include<conio.h>

using namespace std;

int main()
{
    int rows, columns;
    int k = 0;
    int rowColumn;

    //getting rows and columns number
    cout<<"Enter number of rows";
    cin>>rows;
    cout<<"Enter number of columns";
    cin>>columns;

    //declaring and intitalizing oneD and twoD array
    rowColumn = rows * columns;
    int arr[rows][columns];
    int oneDArr[rowColumn];

    //Fill 2D array by user
    cout<<"Fill 2D array row wise"<<endl;
    for(int i=0; i<rows; i++)
    {
        for(int j=0; j<columns; j++)
        {
            cin>>arr[i][j];
        }
    }

    //Taking 2d array in 1d array
    for(int i=0; i<rows; i++)
    {
        for(int j=0; j<columns; j++)
        for( i > j && i == rows )  //OČIGLEDNO OVO NE RADI!
            {
            oneDArr[k] = arr[i][j];
            k++;
        }
    }
for(i = 0; i < k; i++)
    cout << oneDArr[k];
}
Može li mi netko prepravit taj  dio koda koji bi trebao pretvarat 2D u 1D?

hvala!

Poruka je uređivana zadnji put sub 12.10.2013 21:11 (unknown).
 
0 0 hvala 0
12 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori

Hajde prvo napiši kôd koji se da kompajlirati, ti također brkaš uvjete i grananja.

Pogledaj još jednom ovo:

for( i > j && i == rows )

 


I da, tebi treba dinamička alokacija, ne možeš onako alocirati matricu.

Poruka je uređivana zadnji put sub 12.10.2013 21:55 (royalhero).
16 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
royalhero kaže...

Hajde prvo napiši kôd koji se da kompajlirati, ti također brkaš uvjete i grananja.

Pogledaj još jednom ovo:

for( i > j && i == rows )

 


I da, tebi treba dinamička alokacija, ne možeš onako alocirati matricu.

ma krivo sam napisao, nije trebalo biti for nego if naredba.
jbg. ovaj bug forum malo zeza kada dođe do upisivanja koda.

Poruka je uređivana zadnji put sub 12.10.2013 22:21 (unknown).
14 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
unknown kaže...

jbg. ovaj bug forum malo zeza kada dođe do upisivanja koda.

Ne pisati kod u forumovom editoru, bilo gdje drugdje samo ne u editoru.

 

Napiši ga u IDE-u, Notepadu... čemu god već i onda ga samo zalijepi na forum (stisneš enter, "prebaciš na kôd stil" i stisneš ctrl+v da zalijepiš kopirani kôd).

What Andy giveth, Bill taketh away.
10 godina
neaktivan
offline
Programiranje u C++-u - pitanja i odgovori

Crtam neke elipse, text, itd... po ekranu s funkcijama TextOut(), Ellipse(), ... pomoću HDC-a

 

muđutim naišao sam na problem jer u igricama ti objekti jako flickaju, kako ih napraviti statičnima?

 
0 0 hvala 0
14 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
C je programski jezik kaže...

Crtam neke elipse, text, itd... po ekranu s funkcijama TextOut(), Ellipse(), ... pomoću HDC-a

 

muđutim naišao sam na problem jer u igricama ti objekti jako flickaju, kako ih napraviti statičnima?

Osnovno pravilo - ne iscrtavaj svaki puta sve. Iscrtavaj samo regije koje se mijenjaju. Ili implementiraj neki oblik double bufferinga (ovo je vjerojatno najpametnije rješenje ako imaš površinu koja se mnogo i često mijenja).

 

Double buffering je zapravo jednostavna ideja - umjesto da crtaš direktno na ekran crtaš u neki buffer u memoriji i kada si završio sa crtanjem tog framea samo ga kompletnog kopiraš na ekran u jednom potezu.

 

http://cboard.cprogramming.com/game-programming/34103-double-buffering-gdi-easy.html

What Andy giveth, Bill taketh away.
10 godina
neaktivan
offline
Programiranje u C++-u - pitanja i odgovori

ako je crtam konstanto ponovo, onda skoro ni nema te slike na ekranu. Odnosno pojavi se samo jedan frame.

Zamijetio sam ako stavim Sleep(1000/60); dobivam puno manje flickanja, tj. dijelom je sinkronizirano s frekvencijom ekrana. postaji mogućnost pravog sinkroniziranja?

pogladat ću još za double buffering.

 
0 0 hvala 0
14 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
C je programski jezik kaže...

Zamijetio sam ako stavim Sleep(1000/60); dobivam puno manje flickanja, tj. dijelom je sinkronizirano s frekvencijom ekrana. postaji mogućnost pravog sinkroniziranja?

Mislim da mogućnost sinkronizacije kod GDI-a nije moguća, ne znam, nisam nikada radio GDI animaciju. Za pravu sinkronizaciju (v-sync) ti treba nešto tipa Direct Draw ili Direct3D/OpenGL.

 

Svakako pogledaj double buffering, jer je to veoma jednostavan način za riješiti problem flickeringa.

What Andy giveth, Bill taketh away.
10 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
rustweaver kaže...
C je programski jezik kaže...

Zamijetio sam ako stavim Sleep(1000/60); dobivam puno manje flickanja, tj. dijelom je sinkronizirano s frekvencijom ekrana. postaji mogućnost pravog sinkroniziranja?

Mislim da mogućnost sinkronizacije kod GDI-a nije moguća, ne znam, nisam nikada radio GDI animaciju. Za pravu sinkronizaciju (v-sync) ti treba nešto tipa Direct Draw ili Direct3D/OpenGL.

 

Svakako pogledaj double buffering, jer je to veoma jednostavan način za riješiti problem flickeringa.

Vjerujem da mi i double buffering neće puno pomoći, jer kada iscrtavam i samo jedan objekt flick je velik.

 

može neke potpuno funkcionalne kodove directdrawa, Direct3D, ...

jel za to trebam onaj DirectX SDK?

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

Evo baš sam sada provjerio i ja nemam treperenje. Budem ti zakačio kod ovdje kada ga malo dotjeram, za sada izgleda tako da bi pao u nesvijest (ovo mi je prvi puta da sam išao raditi animiranu GDI grafiku).

 

Inače preporučam SDL za crtanje 2D grafike. Osim što je jako jednostavan za namjestiti i koristiti to ti je i praktički jedini izbor za C budući da je DirectX COM koji najbolje leži uz C++.

What Andy giveth, Bill taketh away.
16 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
unknown kaže...

treba mi pomoć oko jednog djela koda.
program bi trebao uzimati zadnji red iz 2D matrice i pretvoriti ga u 1D matricu međutim pokazuje mi uvjek na pogrešku u djelu gdje bi if naredba trebala razdvajati zadnji red od svih ostalih

 

Ne trebaš pretvarati 2D niz u 1D niz za riješiti ovaj zadatak, to bi bilo overkill. Dovoljno je deklarirati 1D niz veličine broja stupaca 2D niza i u jednostrukoj petlji strpati elemente traženog reda 2D niza u 1D niz.

 

 

#include <iostream>
#define red 3
#define stupac 3
using namespace std;

int main()
{
   
    int A[red][stupac] = {{5, 4, 3}, {2, 8, 1}, {9, 5, 4}};
    int B[stupac];
    for(int i = 0; i < stupac; i++)
       B[i] = A[red-1][i];
    for(int i = 0; i < stupac; i++)
       cout<< B[i] << " ";
    return 0;
}

 

A ako baš hoćeš pretvoriti 2D niz A[i][j]  u 1D niz izraz za izračun indexa 1D niza je ovaj:

 

index = (j + stupac * i)

 

gdje je j index stupca 2D niza, i index retka 2D niza, a stupac broj kolona 2D niza, odnosno njegova širina.

 

 

 

 

 

 

 

 

 

Poruka je uređivana zadnji put pon 14.10.2013 12:58 (Floki).
12 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori

može i ovo

 

int *B = &A[red-2][stupac];

 

i sad ispisati B.

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

 

Da, samo usmjeriti pokazivač na prvi element traženog reda 2D niza, s tim da moramo biti pažljivi pri manipulaciji elementima u 1D nizu, jer se tako mijenjaju i elementi u 2D nizu, što je nebitno ovdje.

Poruka je uređivana zadnji put pon 14.10.2013 13:05 (Floki).
12 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori

Onda samo staviti konstantni pointer.

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

Možemo ga ovako prevariti, pa proslijediti samo red koji se traži, on u biti misli da je dobio dvostruki pokazivač, pa dozvoljava inicijalizaciju jednostrukg pokazivača za red bez naznake stupca. U biti smo zgrabili adresu dvostrukog pokazivača za početak reda.

 

 

 

 

 

 

#include <iostream>
#define red 3
#define stupac 3
using namespace std;

int main()
{
   
    int A[red][stupac] = {{5, 4, 3}, {2, 8, 1}, {9, 5, 4}};
    int* B = &*(A[red - 1]);
    for(int i = 0; i < stupac; i++)
       cout<< B[i] << " ";
    return 0;
}

Poruka je uređivana zadnji put pon 14.10.2013 14:26 (Floki).
 
0 0 hvala 0
11 godina
offline
Programiranje u C++-u - pitanja i odgovori

Za šta se koristi static u programiranju kakv utjecaj ima na varijablu i funkciju?

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