Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.10.2013, 14:55   #1
mixon-21
Я только Учусь
Форумчанин
 
Аватар для mixon-21
 
Регистрация: 06.03.2013
Сообщений: 193
По умолчанию угадывает задуманое число

Написть приложение , которое "угадывает"задуманное пользователем число
от 1 до 100. Для запроса к пользователю использовать окна сообщений . после того ,как число отгадано необходимо вывести количество попыток
потребовавшихся для этого и предоставить пользователю сыграть еще раз
не завершая програмы.

помогите плиз какие-то наброски.
mixon-21 вне форума Ответить с цитированием
Старый 25.10.2013, 16:12   #2
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,493
По умолчанию

Псевдокод:
Код:
int counter = 0;
for (int i=1; i<= 100; i++)
{
    if (VasheChislo(i))
    {
        DisplayAttemptCount(counter);
        break;
    }
    else
    {
        counter = counter + 1;
    }
}
waleri вне форума Ответить с цитированием
Старый 28.10.2013, 22:19   #3
mixon-21
Я только Учусь
Форумчанин
 
Аватар для mixon-21
 
Регистрация: 06.03.2013
Сообщений: 193
По умолчанию

А куда его вписать

Код:
#include <Windows.h>
#include <tchar.h>
#include <time.h>
#include <iostream>
using namespace std;
//прототип оконной процедуры
LRESULT CALLBACK WindowProc(HWND,UINT,WPARAM,LPARAM);

TCHAR szClassWindow[]=TEXT("Каркасное приложение");

INT WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst,LPSTR lpszCmdLine, 
	int nCmdShow)
{
	
	HWND hWnd;
	MSG lpMsg;
	WNDCLASSEX wcl;
	//1.Определение класса окна
	wcl.cbSize=sizeof(wcl);//размер структуры WNDCLASSEX
	//перерисовать все окно, если изменен размер по горизонтали или по вертикали
	wcl.style=CS_HREDRAW|CS_VREDRAW|CS_DBLCLKS;//стиль класса окна
	wcl.lpfnWndProc=WindowProc;
	wcl.cbClsExtra=0;
	wcl.cbWndExtra=0;
	wcl.hInstance=hInst;//дескриптор данного приложения
	//загрузка стандартной иконки
	wcl.hIcon=LoadIcon(NULL, IDI_APPLICATION);
	//загрузка стандартного курсора
	wcl.hCursor=LoadCursor(NULL,IDC_HAND);
	//заполнение окна белым цветом
	wcl.hbrBackground=(HBRUSH) GetStockObject(WHITE_BRUSH);
	wcl.lpszMenuName=NULL;// приложение не содержит меню
	wcl.lpszClassName=szClassWindow;//имя класса окна
	wcl.hIconSm=NULL;//отсутствие маленькой иконки
	//Регистрация имя окна
    if(!RegisterClassEx(&wcl))
		return 0;//при неудачной регистрации выход
	//Оздание окна
    //создается окно и переменной hWnd присваивается дескриптор окна
    hWnd=CreateWindowEx(
		0,
		szClassWindow,//имя класса
		TEXT("Каркас приложение Windows"),//
		WS_OVERLAPPEDWINDOW,//
		200,
		200,
		500,
		500,
		NULL,
		NULL,
		hInst,
		NULL);
	//
	ShowWindow(hWnd,nCmdShow);
	UpdateWindow(hWnd);
	while(GetMessage(&lpMsg, NULL, 0, 0))
	{
	TranslateMessage(&lpMsg);
	DispatchMessage(&lpMsg);
	}

	//MessageBox(hWnd,TEXT("реализация програмы"),TEXT("ПОПА"),MB_OKCANCEL|MB_DEFBUTTON1|MB_DEFBUTTON2);
	//MessageBox(0,TEXT("LOVE"),TEXT("IS"),MB_YESNO|MB_ICONINFORMATION);
	//MessageBox(0,TEXT("Gopa"),TEXT("OPA"),MB_OKCANCEL|MB_DEFBUTTON1);
	return 0;
}

LRESULT CALLBACK WindowProc(HWND hWnd,UINT uMessage, WPARAM wParam,LPARAM lParam)
{	
	switch(uMessage)

	case WM_DESTROY:
		PostQuitMessage(0);
		break;
	default:
		return DefWindowProc(hWnd,uMessage,wParam,lParam);
	}
	return 0;
}

Последний раз редактировалось mixon-21; 28.10.2013 в 22:35.
mixon-21 вне форума Ответить с цитированием
Старый 29.10.2013, 12:18   #4
Nuklon
Форумчанин
 
Аватар для Nuklon
 
Регистрация: 05.04.2012
Сообщений: 134
По умолчанию

Вот примерно накидал такой код.
Код:
#include <windows.h>
#include <tchar.h>
#define  APPNAME    _T("угaдай число")
#define  APPCLS     _T("Nuklon")
#define  IDC_SMALL  100
#define  IDC_BIG    101
#define  IDC_ANSWER 102
#define  _creatButton(name, id, x, y) \
CreateWindow(_T("BUTTON"), name, WS_CHILD | BS_USERBUTTON | WS_VISIBLE,\
x, y, 90, 35, hwnd, (HMENU)id, (HINSTANCE)lParam, NULL)

LRESULT CALLBACK  _wndProc(HWND, UINT, WPARAM, LPARAM);
int   _creatWindow(HINSTANCE, const TCHAR*);
void  _helloDlg(HWND, int, int);
void  _answerCPU(HWND, int, int, char);


int  first_n = 1;
int  last_n  = 100;



/////////////////////////////////////////////////////////////////////
int WINAPI  _tWinMain(HINSTANCE hInstance, HINSTANCE, LPTSTR, int) {
       return _creatWindow(hInstance, _T("Угадай число!"));
}
/////////////////////////////////////////////////////////////////////



// окно
int  _creatWindow(HINSTANCE hInst, const TCHAR* caption) {
    HWND hwnd = NULL;
    MSG  msg  = {0};

    WNDCLASS ofs = {
          0, _wndProc, 0, 0,  hInst, 0, LoadCursor(NULL, IDC_ARROW),
         (HBRUSH)(COLOR_WINDOW + 1), 0, APPCLS
    };
    if(! RegisterClass(&ofs))
           return 1;

    hwnd=CreateWindow(APPCLS, caption, WS_OVERLAPPEDWINDOW & ~WS_SIZEBOX, 
                                  CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, HWND_DESKTOP,
                                  NULL, hInst, hInst);
    if(hwnd == NULL) {
           UnregisterClass(APPCLS, hInst);
           return 1;
    }
    ShowWindow(hwnd, SW_SHOW);
    UpdateWindow(hwnd);

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




LRESULT CALLBACK _wndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) {
     static HWND bbig   = NULL;
     static HWND bsmall = NULL;
     RECT  rc;

     switch(msg){
         case WM_CREATE:
              GetClientRect(hwnd, &rc);
              bsmall = _creatButton(_T("Меньше"), IDC_SMALL, rc.right/2-90, rc.bottom/2-20);
              bbig = _creatButton(_T("Больше"), IDC_BIG,   rc.right/2+50, rc.bottom/2-20);
              SendMessage(hwnd, WM_COMMAND, MAKEWPARAM(IDC_ANSWER, 0), 0);
              break;
         case WM_COMMAND:

              switch(LOWORD(wParam)) {
                case IDC_SMALL:
                        _answerCPU(hwnd, first_n, last_n, '<');
                        break;
                case IDC_BIG:
                        _answerCPU(hwnd, first_n, last_n, '>');
                        break;
                case IDC_ANSWER:  // ответ компьютера
                        _helloDlg(hwnd, first_n, last_n);
                        _answerCPU(hwnd, first_n, last_n, 0);
                        break;
              }

               break;
        case WM_DESTROY:
              DestroyWindow(bsmall);
              DestroyWindow(bbig);
              PostQuitMessage(0);
              break;
        default:
              return DefWindowProc(hwnd, msg, wParam, lParam);
     }
     return 0;
}



// начало
void  _helloDlg(HWND hwnd, int first, int last) {
      TCHAR buf[64];
      wsprintf(buf, _T("Загадайте число в диапазоне от %d до %d"), first, last);
      MessageBox(hwnd, buf, APPNAME, MB_OK | MB_ICONINFORMATION);
}



// сам процесс угадывание числа за O(log(n)) - если сам процесс будет без халтуры
void  _answerCPU(HWND hwnd, int _first, int _last, char ch) {
      static int first = _first;
      static int last  = _last;
      static int cnt   = 0;
      static int num   = 0;
      TCHAR buf[64];
      int   id;

      switch(ch) {
           case '<':  // меньше
                last  = num;
                break;
           case '>':  // больше
                first = num + 1;
                break;
      }                           

      cnt++;
      num = (first + last) / 2; 
       //num = first + rand()*(last - first)/RAND_MAX;// можно рандомно искать

      wsprintf(buf, _T("Вы задумали это число - %d. Да или Нет ?"), num);
      id  = MessageBox(hwnd, buf, APPNAME, MB_YESNO | MB_ICONQUESTION);
      if(id != IDYES)
             return;

      wsprintf(buf, _T("Я угадал Ваше число за %d попытки(ок).\nПродолжить."), cnt);
      id  = MessageBox(hwnd, buf, APPNAME, MB_OKCANCEL | MB_ICONINFORMATION);
      if(id == IDCANCEL) // выйти
              SendMessage(hwnd, WM_DESTROY, 0, 0);
      else {  // начать заново
              first = _first;
              last  = _last;
              cnt   = num = 0;
              SendMessage(hwnd, WM_COMMAND, MAKEWPARAM(IDC_ANSWER, 0), 0);
      }
}
Nuklon вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как из ячейки содержащей текст и число извлечь только число? АННА-ЕАО Microsoft Office Excel 35 02.12.2016 23:16
Дано трехзначное число. Если в сумме его цифр присутствует число 7,то число записать в зеркальном виде ( Паскаль ) Эля777 Помощь студентам 5 22.04.2013 23:23
Написать программу, которая за меньшее число ходов отгадывает загаданное число gomz007 Помощь студентам 16 08.11.2009 12:57
Вывести число, предшествующее первому отрицательному и число, следующее за последним отрицательным Rid Паскаль, Turbo Pascal, PascalABC.NET 4 22.12.2008 16:50
Ввести число N и определить делится ли оно без остатка на число M (VBA) Ivanich Microsoft Office Excel 7 24.04.2008 19:43