Помощь - Поиск - Пользователи - Календарь
Полная версия: Смена страниц
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Shults99
Дана задача, что-то не допирает, как решить.
Используя две страницы памяти, запишите программу моделирующую движение секундной стрелки. Изображая стрелку примените процедуру PieSlice.

Вот до чего мне только удалось дойти. Нужно изменить PieSlice так, чтобы стрелка перемещалась на 6 градусов, но ничего не выходит.
program prog32;
Uses CRT,GRAPH;
Var
d, r, k, m: Integer;
A, B: Real;
Procedure Kadr (A:Real; cvet:Word);
Var x, y, z, w: Integer;
begin
z:=300;
w:=150;
x:= Round (240 + 200*w*Sin(A));
y:= Round (320 + 200*w*Cos(A));
SetColor (cvet);
SetFillStyle (1,cvet);
PieSlice(z, w, 0, 360, 5);
PieSlice(z, w, x, y, 200);
End;

BEGIN
d:= EGA;
r:= 1;
InitGraph(d,r,'\tp7\bgi');
A:=0; B:=0; k:=1; m:=1;
SetBkColor(blue);
SetActivePage(1);
Repeat
Kadr(B,GetBkColor);
B:= A; A:=A+6;
{If Abs(A)>0.5 Then m:=-m;}
Kadr(A,yellow);
SetVisualPage(k);
SetActivePage(1-k);
Delay(60000);
k:= 1-k;
A:=A+1;
Until KeyPressed
END.

Help, if you can!
klem4
Shults, используем поиск :yes: http://forum.pascal.net.ru/index.php?showtopic=6562


+ загляни еще сюда (тема про часы) и там внутри еще ссылки есть
Shults99
klem4
Э-э-э, чет я не понял, а где там про смену страниц памяти - SetVisualPage, SetActivePage?
volvo
Shults99, я не понял, "тебе шашечки, или ехать?" (С) Задача, которая стоит перед тобой, какова? Именно использовать просто так GetActivePage/SetActivePage? Зачем они нужны здесь? Искусство ради искусства?

Понимаешь, дело в том, что у каждого метода есть своя область использования. Никто, например, для того, чтобы найти наименьшее из 2-х чисел, не применяет алгоритм быстрой сортировки, чтобы потом с гордостью сказать, что ПЕРВОЕ из чисел минимально. Это просто глупо.

Точно так же и твой случай.
Цитата
Используя две страницы памяти, запишите программу моделирующую движение секундной стрелки.
Ну, напиши детально, в какой именно момент ты будешь переключать страницы, и что именно делается тогда, когда страница НЕактивна, и когда страница активна; алгоритм составь... И тогда ты поймешь, что это - из пушки по воробьям. Движение секундной стрелки без всяких проблем реализуется на одной видеостранице...
Shults99
volvo
Дана задача, в ней условие. Я прекрасно вижу, что в постинге от Shura на ссылка есть работающий алгоритм, но сказано в задаче использовать, значит они хотят видеть SetVisualPage и т.д. Лана я ссылки посмотрю, если что не понятно будет, буду спрашивать.
volvo
Хотят видеть SetVisualPage? Ну, держи... Заодно посмотри, как сделана сама процедура Kadr, у тебя было что-то непонятное...
Uses Crt, Graph;
const
step = 6;

Var
gr_driver, gr_mode: Integer;
act_page : Integer;
Angle, B: Integer;


Procedure Kadr(Angle:integer; cvet:Word);
Begin
SetColor(cvet);
SetFillStyle(SolidFill, cvet);
PieSlice(GetMaxX div 2, GetMaxY div 2,
angle, angle + step, 150)
End;

BEGIN
gr_driver := EGA;
gr_mode := EGAHi;
InitGraph(gr_driver, gr_mode, ''); { <-- }
SetBkColor(Blue);

angle := 360; act_page := 1;
SetActivePage(act_page);

kadr(angle, Yellow);
Dec(angle, step);

Repeat
SetVisualPage(act_page);
SetActivePage(1 - act_page);

B := angle + 2 * step;
If b > 360 Then Dec(b, 360);

kadr(b, GetBkColor);
kadr(angle, Yellow);
Dec(angle, step);

act_page := 1 - act_page;
delay(60000);

Until KeyPressed;
CloseGraph; { Закрывать графику кто будет ? }

{ Чистим буфер клавиатуры }
While KeyPressed Do ReadKey;
END.
Shults99
Не, ну, лафа... :molitva:
Ты, наверное, столько уже бабок заработал, что их тебе девать некуда...

"Закрывать графику кто будет ?" - а я знаю ,что графику закрывать надо!.., просто не обратил внимание..
Все-таки ненавижу делать что-то из-под палки. Такая хорошая вещь программинг, но когда сам что-то делаешь идет творчество, а когда по заданию... Плюс дистанционное обучение - информация только "через глаза поступает", а жизненных примеров нету...
Такого не получается :yessss:
Спасибо!
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.