Помогите пожалуйста новичку. Есть вопросы
| |
Saitei | Дата: Пятница, 08 Июня 2012, 14:29 | Сообщение # 21 |
старожил
Сейчас нет на сайте
| Quote (jiumx60rus) Saitei, молодца Ой... Да ладно...) Я же ещё новичок. Кроме того программа иногда работает некорректно, думаю как исправить Думаю, что дело в типе переменных. Но мне пока что известны лишь такие типы: int, char, double, float Добавлено (07.06.2012, 23:10) --------------------------------------------- P.S. Вообще корректно (так, как я запланировал) она должна работать вот так: Хотелось бы узнать как исправить. Работать с большими числами мне рано или поздно придется, я думаюДобавлено (08.06.2012, 14:29) ---------------------------------------------
Quote (Saitei) #include <iostream> using namespace std; int main() { setlocale( LC_ALL, "Russian" ); cout << "Это моя первая программа на С++." << endl; cout << "Не знаю - велик ли успех за два дня, но теперь я хотя бы что-то умею писать." << endl; cout << "Первой моей программой будет калькулятор, умеющий складывать цифры (переменные a и b)." << endl; int a,b; start: cout << endl << "Введите первое числоî:"; cin >> a; cout << "Введите второе число:"; cin >> b; cout << "Результат:" << a+b; goto start; return 0; }
Quote (Saitei) Я правда вот не пойму... У переменных типа int ограничен диапазон? При вводе больших значений программа работает некорректно Мне помогут? Хочу узнать в чём проблема
|
|
| |
Нохчи | Дата: Пятница, 08 Июня 2012, 14:33 | Сообщение # 22 |
заслуженный участник
Сейчас нет на сайте
| Quote (Saitei) Я правда вот не пойму... У переменных типа int ограничен диапазон? При вводе больших значений программа работает некорректно Есть. Обычно unsigned int может принимать значение, чуть большее четырех миллиардов, а signed int от -2 до 2 миллиардов.
Многие вопросы по Windows отпадут, если посмотреть тут
|
|
| |
Saitei | Дата: Пятница, 08 Июня 2012, 14:45 | Сообщение # 23 |
старожил
Сейчас нет на сайте
| Нохчи, я ещё не знаю что такое "unsigned" и "signed". Объясните пожалуйста
|
|
| |
Нохчи | Дата: Пятница, 08 Июня 2012, 14:48 | Сообщение # 24 |
заслуженный участник
Сейчас нет на сайте
| unsigned - беззнаковое, signed соответсвтенно со знаком. То есть если переменную объявить как unsigned int, то она не сможет принимать отрицательное значение. Все это легко можно найти в гугле.
Многие вопросы по Windows отпадут, если посмотреть тут
|
|
| |
Saitei | Дата: Пятница, 08 Июня 2012, 15:01 | Сообщение # 25 |
старожил
Сейчас нет на сайте
| Quote (Нохчи) unsigned - беззнаковое, signed соответсвтенно со знаком. То есть если переменную объявить как unsigned int, то она не сможет принимать отрицательное значение. Все это легко можно найти в гугле. Спасибо. А как мне дописать калькулятор, чтобы ограничений не было в количестве цифр? Ну... Калькулятор от Виндоус же умеет считать большие числа, а мой - нетДобавлено (08.06.2012, 15:01) --------------------------------------------- P.S. я написал программу так: Code #include <iostream> using namespace std; int main() { setlocale( LC_ALL, "Russian" ); cout << "Ýòî - ìîÿ ïåðâàÿ ïðîãðàììà íà Ñ++." << endl; cout << "Íå çíàþ - âåëèê ëè óñïåõ çà äâà äíÿ, íî ÿ òåïåðü ÷òî-òî óìåþ." << endl; cout << "Ïåðâîé ìîåé ïðîãðàììîé áóäåò êàëüêóëÿòîð, óìåþùèé ñêëàäûâàòü ÷èñëà." << endl; long a,b; start: cout << endl << "Ââåäèòå ïåðâîå ÷èñëî:"; cin >> a; cout << "Ââåäèòå âòîðîå ÷èñëî:"; cin >> b; cout << "Ðåçóëüòàò:" << a+b; goto start; return 0; } Заюзал long
|
|
| |
Нохчи | Дата: Пятница, 08 Июня 2012, 15:33 | Сообщение # 26 |
заслуженный участник
Сейчас нет на сайте
| long по-моему тот же int. Попробуй long long. Почитай еще это.
Многие вопросы по Windows отпадут, если посмотреть тут
|
|
| |
Saitei | Дата: Пятница, 08 Июня 2012, 15:52 | Сообщение # 27 |
старожил
Сейчас нет на сайте
| Quote (Нохчи) Почитай еще это. Я хотел найти русскую документацию - не нашёл. У меня с английским нормально, но с переводом этого текста возникают проблемы... Выбрал Karatsuba multiplication. Всё что я хочу - это дописать калькулятор. Ну и найти для себя много новых и интересных вещей
Сообщение отредактировал Saitei - Пятница, 08 Июня 2012, 15:54 |
|
| |
Rumata | Дата: Пятница, 08 Июня 2012, 16:44 | Сообщение # 28 |
почетный гость
Сейчас нет на сайте
| Saitei, максимальный размер unsigned long - это 4294967296, думаешь, тебе придётся работать с числами больше? Кроме того, есть русскоязычная статья по алгоритму Карацубы
|
|
| |
Saitei | Дата: Пятница, 08 Июня 2012, 17:02 | Сообщение # 29 |
старожил
Сейчас нет на сайте
| Quote (Rumata) Saitei, максимальный размер unsigned long - это 4294967296, думаешь, тебе придётся работать с числами больше? Кроме того, есть русскоязычная статья по алгоритму Карацубы Я пишу калькулятор. Хотелось бы... О, спасибо. ПочитаюДобавлено (08.06.2012, 17:02) --------------------------------------------- Rumata, бегло глянул. Сложновато для меня, мало что понял... Можете помочь? Здесь или же в ICQ\Skype\ЛС
|
|
| |
Rumata | Дата: Пятница, 08 Июня 2012, 17:03 | Сообщение # 30 |
почетный гость
Сейчас нет на сайте
| Saitei, постараюсь, лучше ЛС, наверное)
|
|
| |
Saitei | Дата: Пятница, 08 Июня 2012, 17:06 | Сообщение # 31 |
старожил
Сейчас нет на сайте
| Rumata, хорошо, спасибо большое. Мне пока что нужно это для калькулятора (сложение чисел)
|
|
| |
goldsphere | Дата: Пятница, 08 Июня 2012, 18:05 | Сообщение # 32 |
заслуженный участник
Сейчас нет на сайте
| Можно пользоваться double - самый большой тип.К тому же можно дробные числа вбивать
FinderX - Android Аркада
|
|
| |
Saitei | Дата: Суббота, 09 Июня 2012, 17:42 | Сообщение # 33 |
старожил
Сейчас нет на сайте
| Quote (goldsphere) Можно пользоваться double - самый большой тип.К тому же можно дробные числа вбивать double и float для десятичных чиселДобавлено (09.06.2012, 16:21) --------------------------------------------- Вот она! Вот она рыба моей мечты! Йаааааааазь! Так... О чём это я?))) Оказывается парень моей сестры раньше защищал диплом, он труотец в движке HGE. Попросил помочь его подключить. Немного поспрашивал теорию, он мне даже по С++ помог немножко. Понаписал коментарии, чтобы не забыть. Подключил много библиотек и заголовочных файлов, сделал окошко с размерами 800x600, сделал заголовок "My Game", программно нарисовал в окошке квадратик на таких координатах: 100, 100 с размерами 100, 100; сделал для него управление стрелочками Вот мой код (часть - код движка (мне помогли его немного изменить + я игнорирую кое-какую либу)): Code #include "hge.h" #include "hgesprite.h"
#pragma comment(lib, "hge.lib") #pragma comment(lib, "hgehelp.lib")
HGE *hge = 0; //Главная переменная движка hgeSprite *spr = 0; //Указатель на спрайт //Возвращает 1, если нужно завершить программу //Функция обработчика клавиш
float x = 100; float y = 100;
bool FrameFunc() { // Если нажимаем ESC, то программа завершает работу if (hge->Input_GetKeyState(HGEK_ESCAPE)) return true;
if (hge->Input_GetKeyState(HGEK_LEFT)) { x-= 1; } if (hge->Input_GetKeyState(HGEK_RIGHT)) { x+= 1; } if (hge->Input_GetKeyState(HGEK_UP)) { y-= 1; } if (hge->Input_GetKeyState(HGEK_DOWN)) { y+= 1; }
// Если 0 - то продолжаем работу return false; }
bool RenderFunc() //Функция отображения (рисования) { hge->Gfx_BeginScene(); //Начало сцены hge->Gfx_Clear(0);
spr->Render(x, y); //Рисование спрайта
hge->Gfx_EndScene(); //Конец сцены
return false; }
int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) {
hge = hgeCreate(HGE_VERSION); spr = new hgeSprite(NULL, x, y, 100, 100);//Создание спрайта //Назначение функции обработчика клавишь hge->System_SetState(HGE_FRAMEFUNC, FrameFunc); hge->System_SetState(HGE_RENDERFUNC, RenderFunc);
//Заголовок окна hge->System_SetState(HGE_TITLE, "My Game"); // Запуск в окнном режиме // Default window size is 800x600 hge->System_SetState(HGE_WINDOWED, true);
// Использование звука hge->System_SetState(HGE_USESOUND, false);
// Tries to initiate HGE with the states set. // If something goes wrong, "false" is returned // and more specific description of what have // happened can be read with System_GetErrorMessage(). if(hge->System_Initiate()) { // Starts running FrameFunc(). // Note that the execution "stops" here // until "true" is returned from FrameFunc(). hge->System_Start(); } else { // If HGE initialization failed show error message }
// Now ESC has been pressed or the user // has closed the window by other means.
// Restore video mode and free // all allocated resources hge->System_Shutdown();
// Release the HGE interface. // If there are no more references, // the HGE object will be deleted. hge->Release();
delete spr;
return 0; } С #pragma commen долго думал. Пришел к выводу, что с помощью этой команды подключаются lib файлы. Как видите - верно ))Добавлено (09.06.2012, 16:23) ---------------------------------------------
Quote (Saitei) Подключил много библиотек и заголовочных файлов, сделал окошко с размерами 800x600, сделал заголовок "My Game", программно нарисовал в окошке квадратик на таких координатах: 100, 100 с размерами 100, 100; сделал для него управление стрелочками P.S.S. Это делал я один, не он. Он только объяснил))) Подключать двиг тоже научилсяДобавлено (09.06.2012, 17:42) --------------------------------------------- Так, ребят. Вопрос теперь обстоит с HGE! Нужно стартануть музычку в окошке Нашел я, значит, вот что: Quote Функции работы с ресурсами Resource_Load Загружает ресурс с диска в память. Resource_Free Удаляет загруженный ресурс из памяти. Resource_AttachPack Присоединяет архив ресурсов. Resource_RemovePack Отсоединяет архив ресурсов. Resource_RemoveAllPacks Отсоединяет все ранее присоединенные архивы ресурсов. Resource_MakePath Строит абсолютный путь к файлу. Resource_EnumFiles Перечисляет все файлы по заданному шаблону. Resource_EnumFolders Перечисляет все директории по заданному шаблону. Quote Функции работы с музыкой Music_Load Загружает с диска музыку в память. Music_Free Удаляет загруженную музыку и ассоциированный с ней ресурс. Music_Play Начинает воспроизведение музыки. Как работать - ещё не врублюсь. Сейчас конечно постараюсь разобраться... Но вряд ли получится
|
|
| |
Нохчи | Дата: Суббота, 09 Июня 2012, 17:54 | Сообщение # 34 |
заслуженный участник
Сейчас нет на сайте
| То есть тебе с двигом помогал лично Haafs?
Многие вопросы по Windows отпадут, если посмотреть тут
|
|
| |
Saitei | Дата: Суббота, 09 Июня 2012, 17:57 | Сообщение # 35 |
старожил
Сейчас нет на сайте
| Написал я, значит, вот что:
Quote HMUSIC Music_Load( const char *mmusic, DWORD size = 0 ); //Загружаем музыку (файл)
HCHANNEL Music_Play( HMUSIC mmusic, bool loop ); //Проигрываем музыку и Quote hge->System_SetState(HGE_USESOUND, true); не пашет...Добавлено (09.06.2012, 17:57) ---------------------------------------------
Quote (Нохчи) То есть тебе с двигом помогал лично Haafs? хд Нет конечно. Просто человек, который написал игру на этом движке и защитил диплом))
|
|
| |
Нохчи | Дата: Суббота, 09 Июня 2012, 18:01 | Сообщение # 36 |
заслуженный участник
Сейчас нет на сайте
| Положи bass.dll рядом с hge.dll
Многие вопросы по Windows отпадут, если посмотреть тут
|
|
| |
Saitei | Дата: Суббота, 09 Июня 2012, 18:06 | Сообщение # 37 |
старожил
Сейчас нет на сайте
| Quote (Нохчи) Положи bass.dll рядом с hge.dll лежит)) Всё подключеноДобавлено (09.06.2012, 18:06) --------------------------------------------- Вот так выглядит моя папка с проектом: А вот мой код (немного изменен): Code #include "hge.h" #include "hgesprite.h"
#pragma comment(lib, "hge.lib") #pragma comment(lib, "hgehelp.lib")
HGE *hge = 0; //Главная переменная движка hgeSprite *spr = 0; //Указатель на спрайт hgeSprite *spr2 = 0; //Возвращает 1, если нужно завершить программу //Функция обработчика клавиш
float x = 100; float y = 100; float x2= 250; float y2= 100;
bool FrameFunc() { // Если нажимаем ESC, то программа завершает работу if (hge->Input_GetKeyState(HGEK_ESCAPE)) return true;
if (hge->Input_GetKeyState(HGEK_LEFT)) { x-= 1; } if (hge->Input_GetKeyState(HGEK_RIGHT)) { x+= 1; } if (hge->Input_GetKeyState(HGEK_UP)) { y-= 1; } if (hge->Input_GetKeyState(HGEK_DOWN)) { y+= 1; }
if (hge->Input_GetKeyState(HGEK_A)) { x2-= 1; } if (hge->Input_GetKeyState(HGEK_D)) { x2+= 1; } if (hge->Input_GetKeyState(HGEK_W)) { y2-= 1; } if (hge->Input_GetKeyState(HGEK_S)) { y2+= 1; }
// Если 0 - то продолжаем работу return false; }
bool RenderFunc() //Функция отображения (рисования) { hge->Gfx_BeginScene(); //Начало сцены hge->Gfx_Clear(0);
spr->Render(x, y); //Рисование спрайта spr2->Render(x2, y2); //Рисование спрайта
hge->Gfx_EndScene(); //Конец сцены
return false; }
int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) {
hge = hgeCreate(HGE_VERSION); spr = new hgeSprite(NULL, x, y, 100, 100);//Создание спрайта spr2 = new hgeSprite(NULL, x2, y2, 50, 50);//Создание спрайта //Назначение функции обработчика клавишь hge->System_SetState(HGE_FRAMEFUNC, FrameFunc); hge->System_SetState(HGE_RENDERFUNC, RenderFunc);
//Заголовок окна hge->System_SetState(HGE_TITLE, "My Game"); // Запуск в окнном режиме // Default window size is 800x600 hge->System_SetState(HGE_WINDOWED, true);
// Использование звука hge->System_SetState(HGE_USESOUND, true);
HMUSIC Music_Load( const char mmusic, DWORD size = 0 ); //Загружаем музыку (файл)
HCHANNEL Music_Play( HMUSIC mmusic, bool loop ); //Проигрываем музыку
// Tries to initiate HGE with the states set. // If something goes wrong, "false" is returned // and more specific description of what have // happened can be read with System_GetErrorMessage(). if(hge->System_Initiate()) { // Starts running FrameFunc(). // Note that the execution "stops" here // until "true" is returned from FrameFunc(). hge->System_Start(); } else { // If HGE initialization failed show error message }
// Now ESC has been pressed or the user // has closed the window by other means.
// Restore video mode and free // all allocated resources hge->System_Shutdown();
// Release the HGE interface. // If there are no more references, // the HGE object will be deleted. hge->Release();
delete spr;
return 0; }
|
|
| |
Нохчи | Дата: Суббота, 09 Июня 2012, 18:10 | Сообщение # 38 |
заслуженный участник
Сейчас нет на сайте
| Я вот что не пойму, оно реально компилируется? Выложи всю папку с проектом, я хочу поглядеть на это чудо.
Многие вопросы по Windows отпадут, если посмотреть тут
|
|
| |
Saitei | Дата: Суббота, 09 Июня 2012, 23:09 | Сообщение # 39 |
старожил
Сейчас нет на сайте
| Quote (Нохчи) Я вот что не пойму, оно реально компилируется? Выложи всю папку с проектом, я хочу поглядеть на это чудо. Okay... Вот оно: Ссылка на файлДобавлено (09.06.2012, 19:07) --------------------------------------------- Ещё фиг его знает что за фигня с форматами: Quote HGE::Music_Load
Загружает музыку из памяти, архива ресурсов или диска.
HMUSIC Music_Load( const char *filename, DWORD size = 0 ); Параметры filename Имя файла с музыкой. size Если этот параметр не равен 0, то он означает количество блоков памяти, содержащих музыку в одном из известных форматов и параметр filename рассматривается как указатель на блок памяти. Возвращаемое значение В случае успеха, возвращается идентификатор музыки, который можно использовать в функции Music_Play. Otherwise returns 0.
Примечания Поддерживаются форматы MO3, IT, XM, S3M, MTM, MOD and UMX.
Если filename определяет относительный путь, музыкальный файл сначала ищется во всех присоедененных с помощью функции Resource_AttachPack архивах ресурсов, затем в директории приложения. Если filename определяет абсолютный путь, музыкальный файл загружается напрямую с диска.
Если функция завершается аварийно, вы можете получить сообщение об ошибке при помощи функции System_GetErrorMessage. Если установлена переменная системы HGE_LOGFILE, сообщение об ошибке будет записано в файл протокола.
Если музыка больше не нужна, ее необходимо удали с помощью вызова функуии Music_Free.
Требования Заголовок: hge.h Библиотека импорта: hge.lib
Смотрите также Music_Free, Music_Play Добавлено (09.06.2012, 23:07) --------------------------------------------- С проигрыванием музыки вопрос актуален. И кстати... Что такое getchar()? Добавлено (09.06.2012, 23:09) ---------------------------------------------
Неактуально. Quote (Saitei) С проигрыванием музыки вопрос актуален. Вопрос актуален
|
|
| |
|