Форум программистов, компьютерный форум, киберфорум
Наши страницы

C++ и WinAPI

Войти
Регистрация
Восстановить пароль
 
Alexxx7
98 / 34 / 5
Регистрация: 24.04.2012
Сообщений: 151
#1

Совместимы ли WIN Api и рекурсивная функция? - C++ WinAPI

18.10.2012, 17:48. Просмотров 378. Ответов 0
Метки нет (Все метки)

Вопрос в следующем стоит задача
"Написать приложение, которое по введенной дате определяет день
недели. При этом день, месяц и год необходимо вводить в отдельные текстовые поля.
Результат также следует выводить в текстовое поле со стилем Read Only."
Решил с помощью рекурсивной функции посчитать дни с 1900 потом через деление по модулю получить индекс массива с названиями дней недели. Но программа работает до вызова этой функции и зависает.
Функция ратобает в С++ в другой задаче. Может проблема из за несовместимости?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
#include <windows.h>
#include "resource.h"
#include <stdio.h>
HWND hDay, hMounth, hYear,hResult;
TCHAR lpDay[3], lpMounth[3], lpYear[5];
LPTSTR WeekDay[]={TEXT("Воскресение"),TEXT("Понедельник"),TEXT("Вторник"),TEXT("Среда"),TEXT("Четверг"),TEXT("Пятница"),TEXT("Суббота")};
int day_sum( int day, int mounth, int year);
BOOL CALLBACK DlgProc(HWND, UINT, WPARAM, LPARAM);
 
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInst,LPSTR lpszCmdLine, int nCmdShow)
{
    return DialogBox(hInstance, MAKEINTRESOURCE(IDD_DIALOG1), NULL,DlgProc);
}
BOOL CALLBACK DlgProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
        int iDay, iMounth, iYear, iRez;
    switch(message)
    {
        case WM_CLOSE:
        EndDialog(hWnd, 0);
                return TRUE;
        
        case WM_INITDIALOG:
            hDay = GetDlgItem(hWnd, IDC_DAY);
            hMounth = GetDlgItem(hWnd, IDC_MOUNTH);
            hYear = GetDlgItem(hWnd, IDC_YEAR);
            hResult = GetDlgItem(hWnd, IDC_RESULT);
                return TRUE;
 
        case WM_COMMAND:
            {
            if(LOWORD(wParam)==IDOK)
            {
                GetWindowText(hDay, lpDay, 3);
                if (!SendMessage(hDay, WM_GETTEXTLENGTH, 0, 0))
                {
                    MessageBox(0,TEXT("Введите день"),TEXT("Error!"),MB_OK);
                    return TRUE;
                }
                GetWindowText(hMounth, lpMounth, 3);
                if (!SendMessage(hMounth, WM_GETTEXTLENGTH, 0, 0))
                {
                    MessageBox(0,TEXT("Введите месяц"),TEXT("Error!"),MB_OK);
                    return TRUE;
                }
                GetWindowText(hYear, lpYear, 5);
                if (!SendMessage(hYear, WM_GETTEXTLENGTH, 0, 0))
                {
                    MessageBox(0,TEXT("Введите год"),TEXT("Error!"),MB_OK);
                    return TRUE;
                }
                swscanf(lpDay,TEXT("%i"),&iDay);
                swscanf(lpMounth,TEXT("%i"),&iMounth);
                swscanf(lpYear,TEXT("%i"),&iYear);
                iRez = day_sum( iDay, iMounth, iYear);
                SetWindowText(hResult, WeekDay[iRez%7]);
            }
        }
        return TRUE;
        }
    return FALSE;
}
int day_sum( int day, int mounth, int year)//рекурсивная функция отвечающя за перевод даты в количество дней 
{
    int vjs = 1, day_count=0;//vjs-управляющая переменная по умолчанию имеет значение 1(год не высокосный), в случае принадлежности высокосному году принимает значение 0
    int month_arry[2][12]={{31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},//массив содержащий количество дней в месяцах года для вычисления количества дней
                    {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}};
 
    if((year%4==0 && year%100!=0) || (year%400==0))//проверка высокосности года
    {
        vjs = 0;
    }
    while(year>=1900)//цикл отвечающий за счёт лет останавливается когда год меньше 1900
    {
        if(vjs)//подсчёт дней невысокосного года
        {   
            int mounth_ful=12, day_null=0;//очистка месяца и количества дней для дней полных лет
            year--;
            day_count = day_sum( day_null, mounth_ful, year);
            for(int i=0; i<mounth; i++)
                day_count += month_arry[vjs][i];
        }
        else //подсчёт дней высокосного года
        {
            int mounth_ful=12, day_null=0;//очистка месяца и количества дней для дней полных лет
            year--;
            day_count = day_sum( day_null, mounth_ful, year);
            for(int i=0; i<mounth; i++)
                day_count += month_arry[vjs][i];
        }
    }
            day_count += day;   //добавление дней последнего года
            //day_count%=7;//проверить на работоспособность
            return day_count;
};
1
Вложения
Тип файла: rar HW_4_2.RAR (2.13 Мб, 9 просмотров)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.10.2012, 17:48
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Совместимы ли WIN Api и рекурсивная функция? (C++ WinAPI):

Не работает рекурсивная функция - C++
У меня есть поле 80 на 80 клеток, с препятствиями. Функция должна в отдельный массив записавыть в соответствующую клеточку число,...

API Win 32 - C++ WinAPI
Вообщем-то нужно определить конфигурацию компьютера посредствам функций api win 32. Какие диски, чтение каталогов... Но я не пойму, что это...

Возведение в стрепень, рекурсивная функция. - C++
Задание: написать рекурсивную функцию, которая возводит число в степень путем многократного умножения числа самого на себя. (Сам знаю,...

Literature on Win API - C++ WinAPI
I need Manual or similar kinds of text information on win API.

Win Api - GetSystemInfo - C++ WinAPI
на сайте msdn.com увидел как выглядит тип SYSTEM_INFO: typedef struct _SYSTEM_INFO { union { DWORD dwOemId; struct { ...

Графика Win API - C++ WinAPI
Нужно нарисовать синий прямоугольник в зеленую штриховку, мож кто знает как, помогите

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.10.2012, 17:48
Привет! Вот еще темы с ответами:

win api начало - C++ WinAPI
начинаю разбираться с win api. Вот самый первый пример. Пишу в microsoft visual studio 2005. И сразу такая ошибка: MessageBoxW:cannot...

Win Api Изображения - C++ WinAPI
Ребята Подскажите Функцю Для перевода изображения в градацию серого... Или есть ещё какие то варианты реализации этого действия

Справочник Win API - C++ WinAPI
Народ. Давно мучает вопрос. Существует ли глобальный справочник по Win API. Надоело мусолить эти мелкие справочники, по 50 API. ...

Программирование на Win API - C++ WinAPI
помогите пожалуйста создать прогу Текстовый редактор с цветной подсветкой с использованием функции RichEdit задали на курсовой проект...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru