Форум программистов, компьютерный форум CyberForum.ru

Движение шарика по законам геометрической оптики - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Определить, можно ли заполнить бочку используя ведра только один раз http://www.cyberforum.ru/cpp-beginners/thread1113714.html
Дана бочка, ёмкостью b и N штук разного объёма V вёдер. МОжно ли заполнить бочку используя ведра только один раз
C++ Создать два новых массива, в один из которых поместить положительные элементы массива, а в другой отрицательные и нулевые элементы Написать программу , которая вводит с клавиатуры массив из N вещественных чисел , создает два новых массива , в один из которых помещает положительные элементы массива , а в другой отрицательные и нулевые элементы,и выводит результат пользователю ; затем вводит с клавиатуры строку длиной не более 200 символов , ищет в ней самое короткое слово и выводит его пользователю http://www.cyberforum.ru/cpp-beginners/thread1113683.html
C++ Посчитать всевозможные суммы
Дан массив из n элементов, надо посчитать всевозможные суммы и сравнить их с числом B; Под всвозможными суммами я имею в виду выделить сначала первый элемент и сложить его со всеми , потом первыйй плюс второй, потом первый плюс 3, и так далее, нужно проделать с каждым номером, найти всевозможные суммы.
Поиск одинаковых слов в тексте C++
Решить на С++ с комментариями, если не сложно! :) Дан файл, содержащий текст на русском языке. Найти слова, встречающиеся в каждом предложении, или сообщить, что таких слов нет.
C++ Отдельное вычисление суммы каждой последовательности (Рекурсивный метод) http://www.cyberforum.ru/cpp-beginners/thread1113650.html
Помогите, написал код по примеру учителя, но не совсем понимаю как происходит вычисление и как работает рекурсия, в с++ небольшой опыт есть, но пытаясь идти по ходу программы и вычислять параллельно на листике запутываюсь. Вот допустим последовательность из 5 элементов: 1) далее как я понимаю последовательность делится на Z1...center и Zcenter+1...n Получили (=> и =>, и ) и (=> и ) 2)...
C++ Задача 1)фамилии студентов, которые имеют две и больше двоек в сессию на заданном пользователем факультете и удалить их Задача Создать массив структур, каждая из которых состоит из следующих элементов: факультет, курс, группа, фамилии студентов, экзаменационные оценки. Реализовать запросы, определив: 1)фамилии студентов, которые имеют две и больше двоек в сессию на заданном пользователем факультете и удалить их 2)факультет на котором на первом курсе наибольшее количество отличников. НЕ МОГУ СДЕЛАТЬ первое... подробнее

Показать сообщение отдельно
Александрик
 Аватар для Александрик
3 / 3 / 1
Регистрация: 15.03.2012
Сообщений: 77
02.04.2014, 14:36  [ТС]     Движение шарика по законам геометрической оптики
Выкладываю готовый код мб кому пригодится :

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
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
#include <Windows.h>
#include <tchar.h>
#include <xstring>
#include <iostream>
 
typedef std::basic_string<TCHAR, std::char_traits<TCHAR>, std::allocator<TCHAR> > String;
LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;
TCHAR WinName[] = _T("MainFrame") ;
int APIENTRY _tWinMain(HINSTANCE This, // Дескриптор текущего приложения
    HINSTANCE Prev,                   // В современных системах всегда 0
    LPTSTR cmd,                       // Командная строка
    int mode)                         // Режим отображения окна
{
    HWND hWnd;              // Дескриптор главного окна программы
    MSG msg;                // Структура для хранения сообщения
    WNDCLASS wc;  // Класс окна
// Определение класса окна
    wc.hInstance = This;
    wc.lpszClassName = WinName;                // Имя класса окна
    wc.lpfnWndProc = WndProc;                  // Функция окна
    wc.style = CS_HREDRAW | CS_VREDRAW;       // Стиль окна
    wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);    // Стандартная иконка
    wc.hCursor = LoadCursor(NULL, IDC_ARROW); // Стандартный курсор
    wc.lpszMenuName = NULL;       // Нет меню
    wc.cbClsExtra = 0;            // Нет дополнительных данных класса
    wc.cbWndExtra = 0;            // Нет дополнительных данных окна
    // Заполнение окна белым цветом
    wc.hbrBackground = (HBRUSH) (COLOR_WINDOW+1);
    if (!RegisterClass(&wc)) return 0;   // Регистрация класса окна
// Создание окна
    hWnd = CreateWindow(WinName, // Имя класса окна
    _T("Программа эхо-печати"),  // Заголовок окна
    WS_OVERLAPPEDWINDOW,         // Стиль окна
    300, // x
    400, // y   Размеры окна
    600, // width
    500, // Height
    HWND_DESKTOP, // Дескриптор родительского окна
    NULL,         // Нет меню
    This,         // Дескриптор приложения
    NULL);        // Дополнительной информации нет
    ShowWindow(hWnd, mode); // Показать окно
// Цикл обработки сообщений
    while(GetMessage(&msg, NULL, 0, 0))
    {
    TranslateMessage(&msg); // Функция трансляции кодов нажатой клавиши
    DispatchMessage(&msg);  // Посылает сообщение функции WndProc()
    }
    return 0;
}
 
RECT rc;
int x,y; // Координаты места создания шарика т.с там где он появится в нашем окне
int vx,vy; // скорость нашего шара
int R; // Размер шара
 
LRESULT CALLBACK WndProc(HWND hWnd,UINT message, WPARAM wParam,LPARAM lParam)
{
    PAINTSTRUCT ps;
    HDC hdc;
    switch(message)
    {
case WM_LBUTTONDOWN: // По нажатию левой кнопки мыши устанавливаем параметры и запускаем таймер который при значений NULL выполняет WM_TIMER 
    {
      x  = LOWORD(lParam);// Сохраняем координаты курсора мыши (Ширина-высота)
      y  = HIWORD(lParam);
      {
    R=30;x;y;vx=3;vy=-3;//Создаем значения на выполнение (Начальные условия)
                        // R - Радиус (Размер)
                        // x;y - место появления шара т.е место куда мы щелкнули мышью это определяется параметрами LOWORD / HIWORD
                        // vx ; vy - скорось шарика
                        
            SetTimer(hWnd,1,25,NULL);
            return 1;
        break;
      }
case WM_RBUTTONDOWN: // По нажатию правой кнопки мыши мы удаляем таймер - останавливаем наш шарик
            KillTimer(hWnd, 1);// Удаляем наш таймер (останавливаем шарик)
            break;
case WM_TIMER://Начинаем выполнять идем ниже
    {  
 
      switch(wParam)
        {
          case 1:  // выполнение для первого таймера
            {
            InvalidateRect(hWnd,&rc,true);// Стираем старое положение шарика
            x+=vx;y+=vy; // новые координаты по задумке должно быть так x+=*vx;y+=*vy но компилятор ругается на умножение
            RECT rt;
            GetClientRect(hWnd, &rt);
            int w=rt.right;int h=rt.bottom;// длина и высота рабочей области
            if(x>=w-R)vx=-abs(vx); // проверка отражения от правой стенки
            if(y>h-R)vy=-abs(vy);// проверка низа
            if(x<R)vx=abs(vx); // проверка левой стенки
            if(y<R)vy=abs(vy); // проверка верха
            
            rc.left=x-R-1;
            rc.top=y-R-1;
            rc.right=x+R+1;
            rc.bottom=y+R+1;
            InvalidateRect(hWnd,&rc,false); // нарисовать новое положение
            return 1;
        }
//::InvalidateRect(hWnd, NULL, TRUE );
            break;
}
    case WM_PAINT :
        hdc = BeginPaint(hWnd, &ps);
        //============= (Окраска нашего круга) ===========
        HBRUSH br, obr;
            br = ::CreateSolidBrush(RGB(0,2,255)); 
            obr = (HBRUSH):: SelectObject(hdc, br);
        //============== (Рисуем наш круг) ============
             ::Ellipse(hdc,x-R,y-R,x+R,y+R);
        // ===============================================
        EndPaint(hWnd, &ps);
        break;
    case WM_DESTROY :
        KillTimer(hWnd, 1);// Удаляем наш таймер при закрытий окна
                PostQuitMessage(0);
        break;
    default: return DefWindowProc(hWnd, message, wParam, lParam);
    }
    return 0;
    }}}
 
// ОПИСАНИЕ ФУНКЦИЙ:
//-------------************-------------------------
//SetTimer(hWnd, 1, 200,NULL);
//SetTimer - создание таймера
//hWnd - Имя окна на которое ссылается наш таймер (где он будет выполнятся)
//1 - Имя таймера по которому мы к нему обращаемся
//200 - Время через которое таймер срабатывает
//NULL - Параметр функций,если указанно NULL тогда таймер обрабатывает все что находится в блоке case WM_TIMER: так сказать по умолчанию.
//t++ - Шаг +1 
//KillTimer - удаление таймера
 
//-------------************------------------------
Миниатюры
Движение шарика по законам геометрической оптики  
 
Текущее время: 20:52. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru