#12 yaqwsx
No páni, já něco tušil že ten kód není v pořádku.
Samozřejmě velké díky za rady. Doufám že ty hlavičkové soubory nějak zkutim, a jestli to někdy celé překopu, tak možná pošlu i odkat. DÍKY MOC KLUCI
#9 meqi
Takže pokud jsem to správně pochopil, tak mapu nevykreslit přez cykly ale zobrazit jako pozadí a pak ošetřovat, zda-li uživatel nepřekročil pevně dané souřadnice a nebo ošetřit barvou což ještě neumim. Navíc jsem se s funkcí update() zatím nesetkal. Něco podobného je SDL_Flip(), která převrací buffery.
Dobrý den,
Nechce se mi to věřit, ale moje čerstvě vydaná hra má takovou drobnou, ale ve skutečnosti gigantickou nepříjemnost. Na mojem procáku Intel Core i5, což je 4 jádro, mi tato hra zatíží chvilkama až na 100%. Hru jsem poslal kámošce až vyzkouší a jelikož má hodně slabého koma, tak se jí objekt se kterým má uživatel pohybovat nerozjel vůbec. Hra ale pořád jede, takže když se zavírá escapem tak funguje bez problému.
zde je soubor:
Jo tak to funguje,
Díky myslel jsem že to bude složitější
Jo facha ta prvni věc. Akorát při obsáhlejších projektech třeba v VS bude program vyžadovat net freemwork (nevím jak se to správně píše), a to si myslim že by už chtělo instalačku.
Dobrý den,
Vytvořil jsem v SDL jednoduchou 2D hru, ale jak exe soubor zkopčim na flashku a spustim na jinem kompu, tak mi to napíše že chybí SDL knihovna. Takže jakmile bude chtít uživatel spustit můj výtvor, bude muset zkopírovat SDL knihovnu někde do systémových souborů, což je pro někoho naprosto nepřípustné. Takže chci vytvořit instalační program, který potřebnou knihovnu nakopíruje tam kde má. Aby to třeba byla klasika jak je pro win typické - next, next, install, finish. A pokud to bude složité, což předpokládám že bude, tak jetli je nějaká jednoduší varianta napsat takovýto program.
#2 zlz
1) Z nehe článků to je, to máte pravdu
2)Už je to nějaký ten pátek co se programování zabývám, takže moc dobře vím co je to programování a co to obnáší.
3)Vrhl jsem se na 3D grafiku teď neboť kvůli toho jsem taky začal programovat a tak jsem se tedy rozhodnul po nějakých doporučeních jak od kamarádů tak z rad na internetu, že vyzkouším OpenGL.
4)Ten kód, který jsem zde uvedl je hned první jaký na nehe článcích byl, takže je to pro začátečníka programování počítačové grafiky kapku složitější.
5)Mimochodem s programováním a vykreslováním mám malé zkušenosti z GDI
Ne pardon, to je jiný příspěvek
jinak jsem se ale té chyby s polem vůbec nevšiml, díky za upozornění
Zdravím,
Nevím co už dělat, ale stále jsem ještě nespustil ani jednu aplikaci opengl. Prošel jsem snad stovky zdrojových kódu, návodu a už nevím čeho všeho. Avšak poslední kód který teď mám rozjetý v dev cpp není vyjímkou. Píše mi to tyhle chyby:
D:\Knihovny\Plocha\main.cpp In function `GLvoid KillGLWindow()':
77 D:\Knihovny\Plocha\main.cpp a function-definition is not allowed here before '{' token
77 D:\Knihovny\Plocha\main.cpp expected `,' or `;' before '{' token
252 D:\Knihovny\Plocha\main.cpp a function-definition is not allowed here before '{' token
252 D:\Knihovny\Plocha\main.cpp expected `,' or `;' before '{' token
309 D:\Knihovny\Plocha\main.cpp a function-definition is not allowed here before '{' token
309 D:\Knihovny\Plocha\main.cpp expected `,' or `;' before '{' token
369 D:\Knihovny\Plocha\main.cpp `msg' undeclared (first use this function)
(Each undeclared identifier is reported only once for each function it appears in.)
369 D:\Knihovny\Plocha\main.cpp return-statement with a value, in function returning 'void'
D:\Knihovny\Plocha\Makefile.win [Build Error] [main.o] Error 1
Už toho mám plné zuby. Začíná mi to připadat jak v linuxu. Věčně tomu něco chybí k tomu aby to běželo. Nemám nejmenší tušení co s tím je. Tady je kód:
Zdravím,
Nevím co už dělat, ale stále jsem ještě nespustil ani jednu aplikaci opengl. Prošel jsem snad stovky zdrojových kódu, návodu a už nevím čeho všeho. Avšak poslední kód který teď mám rozjetý v dev cpp není vyjímkou. Píše mi to tyhle chyby:
D:\Knihovny\Plocha\main.cpp In function `GLvoid KillGLWindow()':
77 D:\Knihovny\Plocha\main.cpp a function-definition is not allowed here before '{' token
77 D:\Knihovny\Plocha\main.cpp expected `,' or `;' before '{' token
252 D:\Knihovny\Plocha\main.cpp a function-definition is not allowed here before '{' token
252 D:\Knihovny\Plocha\main.cpp expected `,' or `;' before '{' token
309 D:\Knihovny\Plocha\main.cpp a function-definition is not allowed here before '{' token
309 D:\Knihovny\Plocha\main.cpp expected `,' or `;' before '{' token
369 D:\Knihovny\Plocha\main.cpp `msg' undeclared (first use this function)
(Each undeclared identifier is reported only once for each function it appears in.)
369 D:\Knihovny\Plocha\main.cpp return-statement with a value, in function returning 'void'
D:\Knihovny\Plocha\Makefile.win [Build Error] [main.o] Error 1
Už toho mám plné zuby. Začíná mi to připadat jak v linuxu. Věčně tomu něco chybí k tomu aby to běželo. Nemám nejmenší tušení co s tím je. Tady je kód:
#pragma comment (lib,"opengl32.lib")
#pragma comment (lib,"glu32.lib")
#pragma comment (lib,"glaux.lib")
#include <windows.h>// Hlavi?kový soubor pro Windows
#include <gl\gl.h>// Hlavi?kový soubor pro OpenGL32 knihovnu
#include <gl\glu.h>// Hlavi?kový soubor pro Glu32 knihovnu
#include <gl\glaux.h>// Hlavi?kový soubor pro Glaux knihovnu
HDC hDC = NULL;// Privátní GDI Device Context
HGLRC hRC = NULL;// Trvalý Rendering Context
HWND hWnd = NULL;// Obsahuje Handle našeho okna
HINSTANCE hInstance;// Obsahuje instanci aplikace
bool keys[256];// Pole pro ukládání vstupu z klávesnice
bool active = TRUE;// Ponese informaci o tom, zda je okno aktivní
bool fullscreen = TRUE;// Ponese informaci o tom, zda je program ve fullscreenu
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);// Deklarace procedury okna (funk?ní prototyp)
GLvoid ReSizeGLScene(GLsizei width, GLsizei height)// Zm?na velikosti a inicializace OpenGL okna
{
if (height==0)// Zabezpe?ení proti d?lení nulou
{
height=1;// Nastaví výšku na jedna
}
glViewport(0,0,width,height);// Resetuje aktuální nastavení
glMatrixMode(GL_PROJECTION);// Zvolí projek?ní matici
glLoadIdentity();// Reset matice
gluPerspective(45.0f,(GLfloat)width/(GLfloat)height,0.1f,100.0f);// Výpo?et perspektivy
glMatrixMode(GL_MODELVIEW);// Zvolí matici Modelview
glLoadIdentity();// Reset matice
}
int InitGL(GLvoid)// Všechno nastavení OpenGL
{
glShadeModel(GL_SMOOTH);// Povolí jemné stínování
glClearColor(0.0f, 0.0f, 0.0f, 0.5f);// ?erné pozadí
glClearDepth(1.0f);// Nastavení hloubkového bufferu
glEnable(GL_DEPTH_TEST);// Povolí hloubkové testování
glDepthFunc(GL_LEQUAL);// Typ hloubkového testování
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);// Nejlepší perspektivní korekce
return TRUE;// Inicializace prob?hla v po?ádku
}
int DrawGLScene(GLvoid)// Vykreslování
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);// Smaže obrazovku a hloubkový buffer
glLoadIdentity();// Reset matice
// Sem m?žete kreslit
return TRUE;// Vykreslení prob?hlo v po?ádku
}
GLvoid KillGLWindow(GLvoid)// Zavírání okna
{
if (fullscreen)// Jsme ve fullscreenu?
{
ChangeDisplaySettings(NULL,0);// P?epnutí do systému
ShowCursor(TRUE);// Zobrazí kurzor myši
}
if (hRC)// Máme rendering kontext?
{
if (!wglMakeCurrent(NULL,NULL))// Jsme schopni odd?lit kontexty?
{
MessageBox(NULL,"Release Of DC And RC Failed.","SHUTDOWN ERROR",MB_OK | MB_ICONINFORMATION);
}
if (!wglDeleteContext(hRC))// Jsme schopni smazat RC?
{
MessageBox(NULL,"Release Rendering Context Failed.","SHUTDOWN ERROR",MB_OK | MB_ICONINFORMATION);
}
hRC=NULL;// Nastaví hRC na NULL
}
BOOL CreateGLWindow(char* title, int width, int height, int bits, bool fullscreenflag)
{
GLuint PixelFormat;// Ukládá formát pixel?
WNDCLASS wc;// Struktura Windows Class
DWORD dwExStyle;// Rozší?ený styl okna
DWORD dwStyle;// Styl okna
RECT WindowRect;// Obdélník okna
WindowRect.left = (long)0;// Nastaví levý okraj na nulu
WindowRect.right = (long)width;// Nastaví pravý okraj na zadanou hodnotu
WindowRect.top = (long)0;// Nastaví horní okraj na nulu
WindowRect.bottom = (long)height;// Nastaví spodní okraj na zadanou hodnotu
fullscreen = fullscreenflag;// Nastaví prom?nnou fullscreen na správnou hodnotu
hInstance = GetModuleHandle(NULL);// Získá instanci okna
wc.style = CS_HREDRAW | CS_VREDRAW | CS_OWNDC;// P?ekreslení p?i zm?n? velikosti a vlastní DC
wc.lpfnWndProc = (WNDPROC) WndProc;// Definuje proceduru okna
wc.cbClsExtra = 0;// Žádná extra data
wc.cbWndExtra = 0;// Žádná extra data
wc.hInstance = hInstance;// Instance
wc.hIcon = LoadIcon(NULL, IDI_WINLOGO);// Standardní ikona
wc.hCursor = LoadCursor(NULL, IDC_ARROW);// Standardní kurzor myši
wc.hbrBackground = NULL;// Pozadí není nutné
wc.lpszMenuName = NULL;// Nechceme menu
wc.lpszClassName = "OpenGL";// Jméno t?ídy okna
if (!RegisterClass(&wc))// Registruje t?ídu okna
{
MessageBox(NULL,"Failed To Register The Window Class.","ERROR",MB_OK|MB_ICONEXCLAMATION);
return FALSE;// P?i chyb? vrátí false
}
if (fullscreen)// Budeme ve fullscreenu?
{
DEVMODE dmScreenSettings;// Mód za?ízení
memset(&dmScreenSettings,0,sizeof(dmScreenSettings));// Vynulování pam?ti
dmScreenSettings.dmSize=sizeof(dmScreenSettings);// Velikost struktury Devmode
dmScreenSettings.dmPelsWidth= width;// Ší?ka okna
dmScreenSettings.dmPelsHeight= height;// Výška okna
dmScreenSettings.dmBitsPerPel= bits;// Barevná hloubka
dmScreenSettings.dmFields=DM_BITSPERPEL|DM_PELSWIDTH|DM_PELSHEIGHT;
// Pokusí se použít práv? definované nastavení
if (ChangeDisplaySettings(&dmScreenSettings,CDS_FULLSCREEN)!=DISP_CHANGE_SUCCESSFUL)
{
// Nejde-li fullscreen, m?že uživatel spustit program v okn? nebo ho opustit
if (MessageBox(NULL,"The Requested Fullscreen Mode Is Not Supported By\nYour Video Card. Use Windowed Mode Instead?","NeHe GL",MB_YESNO|
MB_ICONEXCLAMATION)==IDYES)
{
fullscreen=FALSE;// B?h v okn?
}
else
{
// Zobrazí uživateli zprávu, že program bude ukon?en
MessageBox(NULL,"Program Will Now Close.","ERROR",MB_OK|MB_ICONSTOP);
return FALSE;// Vrátí FALSE
}
}
}
if (fullscreen)// Jsme stále ve fullscreenu?
{
dwExStyle=WS_EX_APPWINDOW;// Rozší?ený styl okna
dwStyle=WS_POPUP;// Styl okna
ShowCursor(FALSE);// Skryje kurzor
}
else
{
dwExStyle=WS_EX_APPWINDOW | WS_EX_WINDOWEDGE;// Rozší?ený styl okna
dwStyle=WS_OVERLAPPEDWINDOW;// Styl okna
}
AdjustWindowRectEx(&WindowRect, dwStyle, FALSE, dwExStyle);// P?izp?sobení velikosti okna
// Vytvo?ení okna
if (!(hWnd=CreateWindowEx(dwExStyle,// Rozší?ený styl
"OpenGL",// Jméno t?ídy
title,// Titulek
dwStyle |// Definovaný styl
WS_CLIPSIBLINGS |// Požadovaný styl
WS_CLIPCHILDREN,// Požadovaný styl
0, 0,// Pozice
WindowRect.right-WindowRect.left,// Výpo?et ší?ky
WindowRect.bottom-WindowRect.top,// Výpo?et výšky
NULL,// Žádné rodi?ovské okno
NULL,// Bez menu
hInstance,// Instance
NULL)))// Nep?edat nic do WM_CREATE
{
KillGLWindow();// Zruší okno
MessageBox(NULL,"Window Creation Error.","ERROR",MB_OK|MB_ICONEXCLAMATION);
return FALSE;// Vrátí chybu
}
static PIXELFORMATDESCRIPTOR pfd=// Oznámíme Windows jak chceme vše nastavit
{
sizeof(PIXELF ORMATDESCRIPTOR),// Velikost struktury
1,// ?íslo verze
PFD_DRAW_TO_WINDOW |// Podpora okna
PFD_SUPPORT_OPENGL |// Podpora OpenGL
PFD_DOUBLEBUFFER,// Podpora Double Bufferingu
PFD_TYPE_RGBA,// RGBA Format
bits,// Zvolí barevnou hloubku
0, 0, 0, 0, 0, 0,// Bity barev ignorovány
0,// Žádný alpha buffer
0,// Ignorován Shift bit
0,// Žádný akumula?ní buffer
0, 0, 0, 0,// Akumula?ní bity ignorovány
16,// 16-bitový hloubkový buffer (Z-Buffer)
0,// Žádný Stencil Buffer
0,// Žádný Auxiliary Buffer
PFD_MAIN_PLANE,// Hlavní vykreslovací vrstva
0,// Rezervováno
0, 0, 0// Maska vrstvy ignorována
};
if (!(hDC=GetDC(hWnd)))// Poda?ilo se p?ipojit kontext za?ízení?
{
KillGLWindow();// Zav?e okno
MessageBox(NULL,"Can't Create A GL Device Context.","ERROR",MB_OK|MB_ICONEXCLAMATION);
return FALSE;// Ukon?í program
}
if (!(PixelFormat=ChoosePixelFormat(hDC,&pfd)))// Poda?ilo se najít Pixel Format?
{
KillGLWindow();// Zav?e okno
MessageBox(NULL,"Can't Find A Suitable PixelFormat.","ERROR",MB_OK|MB_ICONEXCLAMATION);
return FALSE;// Ukon?í program
}
if(!SetPixelFormat(hDC,PixelFormat,&pfd))// Poda?ilo se nastavit Pixel Format?
{
KillGLWindow();// Zav?e okno
MessageBox(NULL,"Can't Set The PixelFormat.","ERROR",MB_OK|MB_ICONEXCLAMATION);
return FALSE;// Ukon?í program
}
if (!(hRC=wglCreateContext(hDC)))// Poda?ilo se vytvo?it Rendering Context?
{
KillGLWindow();// Zav?e okno
MessageBox(NULL,"Can't Create A GL Rendering Context.","ERROR",MB_OK|MB_ICONEXCLAMATION);
return FALSE;// Ukon?í program
}
if(!wglMakeCurrent(hDC,hRC))// Poda?ilo se aktivovat Rendering Context?
{
KillGLWindow();// Zav?e okno
MessageBox(NULL,"Can't Activate The GL Rendering Context.","ERROR",MB_OK|MB_ICONEXCLAMATION);
return FALSE;// Ukon?í program
}
ShowWindow(hWnd,SW_SHOW);// Zobrazení okna
SetForegroundWindow(hWnd);// Do pop?edí
SetFocus(hWnd);// Zam??í fokus
ReSizeGLScene(width, height);// Nastavení perspektivy OpenGL scény
if (!InitGL())// Inicializace okna
{
KillGLWindow();// Zav?e okno
MessageBox(NULL,"Initialization Failed.","ERROR",MB_OK|MB_ICONEXCLAMATION);
return FALSE;// Ukon?í program
}
return TRUE;// Vše prob?hlo v po?ádku
}
LRESULT CALLBACK WndProc(HWND hWnd,// Handle okna
UINT uMsg,// Zpráva pro okno
WPARAM wParam,// Dopl?kové informace
LPARAM lParam)// Dopl?kové informace
{
switch (uMsg);// V?tvení podle p?íchozí zprávy
{
case WM_ACTIVATE:// Zm?na aktivity okna
{
if (!HIWORD(wParam))// Zkontroluje zda není minimalizované
{
active=TRUE;// Program je aktivní
}
else{
active=FALSE;// Program není aktivní
}
return 0;// Návrat do hlavního cyklu programu
}
case WM_SYSCOMMAND:// Systémový p?íkaz
{
switch (wParam)// Typ systémového p?íkazu
{
case SC_SCREENSAVE:// Pokus o zapnutí šet?i?e obrazovky
case SC_MONITORPOWER:// Pokus o p?echod do úsporného režimu?
return 0;// Zabrání obojímu
}
break;// Návrat do hlavního cyklu programu
}
case WM_CLOSE:// Povel k ukon?ení programu
{
PostQuitMessage(0);// Pošle zprávu o ukon?ení
return 0;// Návrat do hlavního cyklu programu
}
case WM_KEYDOWN:// Stisk klávesy
{
keys[wParam] = TRUE;// Oznámí to programu
return 0;// Návrat do hlavního cyklu programu
}
case WM_KEYUP:// Uvoln?ní klávesy
{
keys[wParam] = FALSE;// Oznámí to programu
return 0;// Návrat do hlavního cyklu programu
}
case WM_SIZE:// Zm?na velikosti okna
{
ReSizeGLScene(LOWORD(lParam),HIWORD(lParam)); // LoWord=Ší?ka, HiWord=Výška
return 0;// Návrat do hlavního cyklu programu
}
}
return DefWindowProc(hWnd, uMsg, wParam, lParam);// P?edání ostatních zpráv systému
}
int WINAPI WinMain(HINSTANCE hInstance,// Instance
HINSTANCE hPrevInstance,// P?edchozí instance
LPSTR lpCmdLine,// Parametry p?íkazové ?ádky
int nCmdShow)// Stav zobrazení okna
{
MSG msg;// Struktura zpráv systému
BOOL done=FALSE;// Prom?nná pro ukon?ení programu
// Dotaz na uživatele pro fullscreen/okno
if (MessageBox(NULL,"Would You Like To Run In Fullscreen Mode?", "Start FullScreen?", MB_YESNO | MB_ICONQUESTION) == IDNO)
{
fullscreen=FALSE;// B?h v okn?
}
if (!CreateGLWindow("NeHe's OpenGL Framework",640,480,16,fullscreen))// Vytvo?ení OpenGL okna
{
return 0;// Konec programu p?i chyb?
}
while(!done)// Hlavní cyklus programu
{
if (PeekMessage(&msg,NULL,0,0,PM_REMOVE))// P?išla zpráva?
{
if (msg.message==WM_QUIT)// Obdrželi jsme zprávu pro ukon?ení?
{
done=TRUE;// Konec programu
}
else// P?edáme zprávu procedu?e okna
{
TranslateMessage(&msg);// P?eloží zprávu
DispatchMessage(&msg);// Odešle zprávu
}
}
else
{
if (active)// Je program aktivní?
{
if (keys[VK_ESCAPE])// Byl stisknut ESC?
{
done=TRUE;// Ukon?íme program
}
}
else// P?ekreslení scény
{
DrawGLScene();// Vykreslení scény
SwapBuffers(hDC);// Prohození buffer? (Double Buffering)
}
if (keys[VK_F1])// Byla stisknuta klávesa F1?
{
keys[VK_F1]=FALSE;// Ozna? ji jako nestisknutou
KillGLWindow();// Zruší okno
fullscreen=!fullscreen;// Negace fullscreen
// Znovuvytvo?ení okna
if (!CreateGLWindow("NeHe's OpenGL Framework",640,480,16,fullscreen))
{
return 0;// Konec programu pokud nebylo vytvo?eno
}
}
}
}
}
KillGLWindow();// Zav?e okno
return (msg.wParam);// Ukon?ení programu
}
Dobrý den,
V ediroru devcpp jsem vytvořil tenhle svůj modul nazvaný "lasak.c":
extern int secti(int cislo1, int cislo2);
int main()
{
}
extern int secti(int cislo1, int cislo2)
{
return cislo1 + cislo2;
}
Dále jsem jej předělal na "lasak.h":
#ifndef _LASAK_
#define _LASAK_
extern int secti(int cislo1, int cislo2);
#endif
Pak jsem soubor "lasak.h", nakopíroval do složky kde je nainstalovaný devcpp konkrétně do složky "include". Jak jsem chtěl zkompilovat tenhle zdrojový kód: (omlouvám se za nepromyšlenost, ale to je mi teď naprosto jedno)
#include <stdio.h>
#include <lasak.h>
int main()
{
int cisla[1];
for (int i = 0; i <= 2; ++i){
printf("Zadejte %d cislo: ", i);
scanf("%d", cisla[i]);
}
printf("\n%d\n", secti(cisla[0], cisla[1]));
getchar();
return 0;
}
ale tohle mi nefuguje. Pak jsem našel někde na vašich stránkách: "Vytvořte nový C++ projekt (nejlépe asi Windows Application), jděte do Projekt->Vlastnosti projektu->Parametry a do linkeru připište:" je to ze seriálu o SDL a myslím se že jak se includují knihovny o sdl tak by to mohlo fungovat i na moje. Jenže celý tenhle postup taky nefungoval. Pořád mi to háže chybu linkeru. Proto se Vás všech chci zeptat, jak se tvoří moduly, tak aby mi fungovali.
Dobrý den,
Zde je program který má vypočítat délku řetězce zadaného uživatelem. Ale pokaždé mi to vypíše 0 znaků. Nevím proč.
#include <stdio.h>
#define A 100 //velikost pole pro retezce
#define B 0 //pro cyklus
int vratDelku(char r[]);
int main()
{
do{
char retezec[A];
printf("Zadejte retezec do %d znaku: ", A);
gets(retezec);
printf("Velikost retezce je %d znaku.\n", vratDelku(retezec));
}while (B == 0);
//vyprazdneni bufferu
while(getchar() != '\n');
getchar();
return 0;
}
//vratDelku: vraci delku retezce predaneho argumentem
int vratDelku(char r[])
{
int delka;
for (int i = 0; i <= A; ++i){
if (r[i] == '\0'){
delka = 0;
return 0;
}
else
delka = i;
}
return delka;
}
Dobrý den,
Učím se programovat podle knihy Karninghana a Ritchieho. Podle knihy jsem napsal kód (viz. níže). Program je vlastně jednoduchá kalkulačka podle obrácené polské notace (př.: 1 - 2 se musí zapisovat jako 1 2 -). K tomuto programu mám za úkol doplnit operátor zbytku dělení (%) a postarat se ještě o záporná čísla.
#include <stdio.h>
#include <stdlib.h> //pro atof()
#include <ctype.h> //pro isdigit()
#define MAXOP 100 //maximalni velikost operatoru nebo operandu
#define CISLO '0' //signal oznamujici nalezeni cisla
#define MAXHODNOTA 100 //maximalni hloubka zasobniku
#define VELVPAMETI 100 //velikost vyrovnavaci pameti ve funkci vratz
int rp = 0; //dalsi volna pozice na zasobniku
double zasobnik[MAXHODNOTA]; //zasobnik hodnot
char vpamet[VELVPAMETI]; //vyrovnavaci pamet pro vratz
int vpametp = 0;
int nactioperator(char []);
void vloz(double);
double vyjmi(void);
int nactiz(void);
void vratz(int);
/*Kazdy operand se umisti do zasobniku, jakmile se objevi operator
ze zasobniku vyjmeme spravny pocet operandu (dva), na ne aplikujeme
operator a vysledek se vrati zpet do zasobniku*/
main()
{
int typ;
double op2;
char s[MAXOP], r[] = "";
printf("\t****************************************\n");
printf("\t* Tento program je jednoducha kalkulac-*\n");
printf("\t* ka, podle obracene polske notace. *\n");
printf("\t* (1-2)*(4+5) zapisujte 1 2 - 4 5 + * *\n");
printf("\t* Program vytvoril Adam Lasak podle *\n");
printf("\t* algoritmu Kernighana a Ritchieho. *\n");
printf("\t* ver [1.0] *\n");
printf("\t****************************************\n");
scanf("%s", &r);
while ((typ = nactioperator(r)) != EOF){
switch(typ){
case CISLO:
vloz(atof(r));
break;
case '+':
vloz(vyjmi() + vyjmi());
break;
case '*':
vloz(vyjmi() * vyjmi());
break;
case '-':
/*zadani napr.: 1 2 - znamena, ze hodnota 2 se ulozi
pozdeji nez hodnota 1. => op2 = vyjmi() znamena
ze se od promenne rp odecte 1, a pri dalsim volani
vyjmi() bude jako prvni hodnota 1 (pri vypoctu)*/
op2 = vyjmi();
vloz(vyjmi() - op2);
break;
case '/':
//uplne to stejne, akorat je zde podminka kvuli deleni 0
op2 = vyjmi();
if (op2 != 0.0)
vloz(vyjmi() / op2);
else
printf("Chyba: deleno nulou\n");
break;
case '\n':
printf("\t%.8g\n", vyjmi());
break;
case '%':
//ZDE JE CELOCISELNE DELENI
vloz(vyjmi() % vyjmi());
break;
default:
printf("Chyba: neznamy prikaz %s\n", s);
break;
}
}
return 0;
}
//vloz: vlozi hodnoty do zasobniku
void vloz(double f)
{
if (rp < MAXHODNOTA)
zasobnik[rp++] = f;
else
printf("Chyba: plny zasobnik, nelze vlozit %g\n", f);
}
//vyjmi: vyjme hodnotu z vrcholu zasobniku
double vyjmi(void)
{
if (rp > 0)
return zasobnik[--rp];
else {
printf("Chyba: prazdny zasobnik\n");
return 0.0;
}
}
//nactioperator: ziska nasledujici operator nebo ciselny operand
int nactioperator(char r[])
{
int i, z;
while ((r[0] = z = nactiz()) == ' ' || z == '\t')
;
r[1] = '\0';
if (!isdigit(z) && z != '.')
return z; //neni cislem
i = 0;
if (isdigit(z)) //ziskej celociselnou cast
while (isdigit(r[++i] = z = nactiz()))
;
if (z == '.') //ziskej zlomkovou cast
while (isdigit(r[++i] = z = nactiz()))
;
r[i] = '\0';
if (z != EOF)
vratz(z);
return CISLO;
}
/*vratz vlozi vracene znaky do sdilene vyrovnavaci pameti - pole znaku. nactiz
vyjme znak z vyrovnavaci pameti, neni-li prazdna, jestli je, zavolame getchar()*/
//nactiz: vrati nasledujici znak na vstupu
int nactiz(void)
{
return (vpametp > 0) ? vpamet[--vpametp] : getchar();
}
//vratz: vrati znak zpet na vstup
void vratz(int z)
{
if (vpametp >= VELVPAMETI)
printf("Chyba: prilis mnoho znaku\n");
else
vpamet[vpametp++] = z;
}
HÁZÍ MI TO TUHLE CHYBU: 71 D:\Knihovny\Dokumenty\IT\C_C++\09_Externi_promenne\expromenne.cpp invalid operands of types `double' and `double' to binary `operator%'
takže jsem se pokoušel vracené hodnoty z funkce vyjmi() převést na celá čísla pomocí funkce atoi() z knihovny stdlib.h. Ale tohle bylo taky neúspěšné. Vubec nevim co s tim.
#5 volftomas
Díky všem za radu. Ale raději bych zůstal u DX, i když vím, že se jenom pouhé základy budu učit půl roku. Taky mi to pomůže ve škole, hlavně jak jste říkali v matematice. 3D a 2D grafiku totiž budeme brát na 110 % a DX taky. Takže ještě jednou díky.
Dobrý den,
U jazyka C nejsem zrovna dlouho a nějak takhle bych to udělal já. Čísla zadané uživatelem se raději ukládají jako čísla s pohyblivou čárkou (kdyby náhodou zadal desetinné číslo). Snad to mám dobře. Je to sice nepromyšlené, ale za to přehledné, protože každý výpočet má svoji funkci. Výpočet ve funkcích si musíte už udělat sama. Jelikož se u takovýchto výpočtů používají goniometrické funkce je na začátku nadeklarovaná knihovna math.h. Zde je kód:
#include <stdio.h>
#include <math.h>
float strany(float uhel, float strana1, float strana2);
float uhel1(float uhel, float strana1, float strana2);
float uhel2(float uhel, float strana1, float strana2);
int main()
{
float uhel, strana1, strana2;
//ziskani hodnot od uzivatele
printf("Zadejte uhel: ");
scanf("%f", &uhel);
printf("Zadejte stranu prilehlou uhlu: ");
scanf("%f", &strana1);
printf("Zadejte druhou stranu: ");
scanf("%f", &strana2);
//zobrazeni vysledku na obrazovku
printf("\nStrany trojuhelniku jsou: %.2f, %.2f, %.2f.\n", strana1, strana2, strany(uhel, strana1, strana2));
printf("Uhly trojuhelniku jsou: %.2f, %.2f, %.2f.\n",uhel, uhel1(uhel, strana1, strana2), uhel2(uhel, strana1, strana2));
while (getchar() != '\n');
getchar();
return 0;
}
//funkce pro vypocet treti strany trojuhelniku
float strany(float uhel, float strana1, float strana2){
}
//funkce pro vypocet druheho uhlu trojuhelniku
float uhel1(float uhel, float strana1, float strana2){
}
//funkce pro vypocet tretiho uhlu trujuhelniku
float uhel2(float uhel, float strana1, float strana2){
}
Ještě jeden takový drobný dotaz. Zde jsem vytvořil program pro převod z dekadické do ostatních soustav:
#include <stdio.h>
int main()
{
do{
int cislo;
printf("\nZadejte cislo v dekadicke soustave: ");
scanf("%d", &cislo);
printf("\nDecimalni soustava: %d\n", cislo);
printf("Oktalova soustava: %o\n", cislo);
printf("Hexadecimalni soustava: %x\n", cislo);
} while (getchar() != '\t');
//vyprazdneni bufferu
while (getchar() != '\n');
getchar();
return 0;
}
Jak můžete vidět tak %o = oktalová, %x = hexadecimální.... A právě mě zajímá jestli něco takového právě existuje i na binární soustavu.
Dobrý den,
Sice jsem chtěl začít programovat OpenGL ale kámoši vysokoškoláci mi doporučili DirectX. Čtu návody na těchto stránkách: http://programovani.net-mag.cz/?action=art&num=69 a po dlouhém proklikávání se odkazy mi to nabídlo, že když chci programovat DirectX tak mám mít Visual C++, což má za následek stažení Visual Studia (třeba 2010). Jenže VS je placený a proto se chci zeptat jestli jde programovat DirectX i v obyčejném Dev C++, a jestli jo, tak kde můžu sehnat knihovny?
ale jich tam je víc
Dobrý den,
Postupoval jsem podle vašeho tutoriálu na OGL, zde je ten kód:
#include <gl/glut.h>
void onResize(int w, int h) {
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glViewport(0, 0, w, h);
gluPerspective(45,(double)w/(double)h,1,100);
glMatrixMode(GL_MODELVIEW);
}
void init() {
glEnable(GL_DEPTH_TEST);
glClearColor(1.0,1.0,1.0,1.0);
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
}
void onDisplay(void){
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
glLoadIdentity();
glTranslatef(0.0, 0.0, -2.0);
glRotatef(20,1.0,1.0,1.0);
glBegin(GL_QUADS);
glNormal3f(0.0,0.0,1.0); //normála mí?í sm?rem k nám po ose z
glVertex3f(-0.1,0.1,0.0);
glVertex3f(0.1,0.1,0.0);
glVertex3f(0.1,-0.1,0.0);
glVertex3f(-0.1,-0.1,0.0);
glEnd();
glutSwapBuffers();
}
int main (int argc, char **argv) {
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA);
glutInitWindowSize(640,480);
glutInitWindowPosition(10,10);
glutCreateWindow("okno");
glutDisplayFunc(init);
glutIdleFunc(onDisplay);
glutReshapeFunc(onResize);
glutMainLoop();
return 0;
}
Dobrý den,
Postupoval jsem podle vašeho tutoriálu na OGL, zde je ten kód:
#include <gl/glut.h>
void onResize(int w, int h) {
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glViewport(0, 0, w, h);
gluPerspective(45,(double)w/(double)h,1,100);
glMatrixMode(GL_MODELVIEW);
}
void init() {
glEnable(GL_DEPTH_TEST);
glClearColor(1.0,1.0,1.0,1.0);
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
}
void onDisplay(void){
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
glLoadIdentity();
glTranslatef(0.0, 0.0, -2.0);
glRotatef(20,1.0,1.0,1.0);
glBegin(GL_QUADS);
glNormal3f(0.0,0.0,1.0); //normála mí?í sm?rem k nám po ose z
glVertex3f(-0.1,0.1,0.0);
glVertex3f(0.1,0.1,0.0);
glVertex3f(0.1,-0.1,0.0);
glVertex3f(-0.1,-0.1,0.0);
glEnd();
glutSwapBuffers();
}
int main (int argc, char **argv) {
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA);
glutInitWindowSize(640,480);
glutInitWindowPosition(10,10);
glutCreateWindow("okno");
glutDisplayFunc(init);
glutIdleFunc(onDisplay);
glutReshapeFunc(onResize);
glutMainLoop();
return 0;
}
jakmile chci zkompilovat hodí mi to tyhle chyby:
[Linker error] undefined reference to `_imp____glutInitWithExit@12'
a další podobné se opakují ještě tak 15x a na konci je tohle
D:\Programy\Dev_C\Dev_Cpp\Makefile.win [Build Error] [Projekt4.exe] Error 1
postupoval jsem přesně při stahování updatu OGL, takže nevím v čem jsem udělal chybu