Помощь - Поиск - Пользователи - Календарь
Полная версия: Работа с графикой.
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Atreides
Пропустил лекцию по графики в Паскале, не знаю, как решить задачу, помогите!!!
Разработать программу, перемещающую четырехугольник в круге размером Z в правой половине экрана. Спасибо за внимание.
Altair
Уточните пожалуйста, как просиходит перемещение в правой части экрана?
Это четырехугольник перемещается по окружности радиусом Z или фигура
четырехугольник вписанный в окружность радиусом Z двиедется по экрану?
Atreides
Четырехугольник в круге радиусом Z и вся эта конструкция должна находиться в правой части экрана, но не двигаться.
Altair
Цитата
перемещающую четырехугольник

то есть перемещать по нажатию клавиш что-ли?
Atreides
Нет, нужно вводить круг диаметром Z, который вводится с клавиатуры пользователем.
Altair
Так, а как-же двигать эту конструкцию? Вы не можете сразу дать полное, однозначное условие?
Сначала Вы сказали:
Цитата
Разработать программу, перемещающую четырехугольник в круге размером Z в правой половине экрана

Потом Вы сказали:
Цитата
Четырехугольник в круге радиусом Z и вся эта конструкция должна находиться в правой части экрана, но не двигаться.



Так должна двигаться контсрукция или не должна?

Как я сечас понял:
с клавиатуры вводится диаметр. Туда вписывается произвольный четырехугольник (верно?) и вся эта конструкция что должна делать?
Atreides
Вот именно, круг не двигается. Его диаметр вводится в коде программы. А четырехугольник произвольный, только главное что бы размер был меньше круга, это само собой понятно.
GoodWind
а четырехугольник двигается внутри круга ?
Altair
ану все ясно... только последнее - многоугольник движется линейно в случайном направлениеи, пока не втсретит окружность, а поомрикошетит, так?
Atreides
Круг, не в центре, а в правой верхней части экрана, в нем произвольно движется четырехугольник. Размеры произвольны, меняются пользователем в коде программы.
Цитата
ану все ясно... только последнее - многоугольник движется линейно в случайном направлениеи, пока не втсретит окружность, а поомрикошетит, так?

Да, что-то вроде отталкивания от стенок круга.
Altair
ясно.... попробую сегодня что-то намудрить ...
Atreides
Можно сделать не случайное отталкивание, а цикличное повторение перемещения в одно направление.

Если с этой нет, то подскажите, как с этой разобраться? Составить программу определения присутствия символов «Д» после символа «Л» в каждом из 4 введенных слов.

создай новую тему с этим вопросом. GoodWind
А ты не приставай к человеку... пусть тут написал, что такого? это не преступление, тем более в праивлах нет этого! smile.gif Олег_Z
Altair
Так... первая задача.
С графикой. Очень интересная кстати!
Вот код (колировка кирилицы -ДОС)
Код

{§ ¤ ­ЁҐ Є®®а¤Ё­ в Їа®Ё§ў®«м­®Ј® ¬­®Ј®гЈ®«м­ЁЄ 
Џ®бв ўЁ¬ ¬лб«Ґ­­® ­ з «® Є®®а¤Ё­ в, Ё гЄ ¦Ґ¬ ўбҐ Є®®а¤Ё­ вл
­ Їа¬ЁҐа:
(0,0)    (6,0);
  ------\
  |      \
  |       \
  |________\
(0,3)       (9,3)

}

uses crt,graph;

Type
KoordinatsPoligon = record
                     P1X,     {ЇҐаў п в®зЄ }
                     p1Y,
                     p2X,     {ўв®а п в®зЄ }
                     p2Y,
                     p3X,     {ваҐвЁп в®зЄ }
                     p3Y,
                     p4X,     {зҐвўҐав п в®зЄ }
                     p4Y:word;
                    end;

Var grDriver : Integer;
     grMode : Integer;
          Z : WORD; {RADIUS}
          A : KoordinatsPoligon;
          D : word;
TX,TY,PX,PY : word;
procedure Show4(x,y:word;A:KoordinatsPoligon);
begin
setcolor(15);
with a do
begin
 line(P1X+X,p1y+Y,p2x+X,p2y+Y);
 line(P2X+X,p2y+Y,p3x+X,p3y+Y);
 line(P3X+X,p3y+Y,p4x+X,p4y+Y);
 line(P4X+X,p4y+Y,p1x+X,p1y+Y)
end
End;

procedure Hide4(x,y:word;A:KoordinatsPoligon);
begin
setcolor(0);
with a do
begin
 line(X+P1X,Y+p1y,X+p2x,Y+p2y);
 line(X+P2X,Y+p2y,X+p3x,Y+p3y);
 line(X+P3X,Y+p3y,X+p4x,Y+p4y);
 line(X+P4X,Y+p4y,X+p1x,p1y+y)
end
End;





Begin
randomize;
write('Enter raduus Z='); readln(Z);
With a do {Є ў¤а в}
begin
 P1X:=0; p1Y:=0;
 p2X:=0; p2Y:=2;
 p3X:=2; p3Y:=2;
 p4X:=2; p4Y:=0
end;
{­ зб «м­®Ґ ¤ўЁ¦Ґ­Ёп}
PX:=2;
PY:=3;
clrscr;
grDriver:=Detect;
InitGraph(grDriver, grMode, '');
circle(GetMaxX-z,Z,Z); {аЁб㥬 ®Єаг¦­®бвм ў Їа ў®¬ ўҐае§­Ґ¬ гз бtЄҐ нЄа ­ }
TX:=GetMaxX-z;
TY:=Z;
repeat
 show4(TX,TY,a);
 delay(2000);
 hide4(TX,TY,a);
 If TRUNC(SQRT(ABS(((640-z)-TX)*((640-z)-tx)+(z-ty)*(z-ty))))>=Z then
 begin
  PX:=-PX-2+random(4);
  PY:=-PY-2+random(4)
 end;
 If TRUNC(SQRT(ABS(((640-z)-TX)*((640-z)-tx)+(z-ty)*(z-ty))))>=Z+10 then
 begin
  {ЄаЁвЁзҐбвЄ®Ґ гЎҐЈ ­ЁҐ}
  TX:=GetMaxX-z; TY:=Z; {бЎа®б}
 end;

 TX:=TX+PX;
 TY:=TY+PY;

until keypressed;

closegraph;
end.

Конечно ее можно модернизировать и модернизировать ... smile.gif
вот втрорая программа(строки):
Код

var
AA:array[1..4] of string;
A,B,i:byte;
pr:boolean;
begin
For i:=1 to 4 do
begin
 writeln('ўўҐ¤ЁвҐ ',i,' б«®ў®:');
 readln(AA[i]);
 A:=POS('‹',AA[i]);
 B:=POS('„',AA[i]);
 if B=A+1 then pr:=true;
 if pr then begin writeln('Ґбвм ўе®¦¤Ґ­ЁҐ „ Ї®б«Ґ ‹!'); pr:=false; end;
end;
end.


думаю принцип ясен... если есть вопросы, обращайтесь.
GoodWind, да пусть пишет здесь!
Просто хотелось порядка, а то из топика винегрет получится. GoodWind
Atreides, заходите еще! здесь всегда рады помочь!
Atreides
А во второй, команда POS, что делает, ищет текст или заданный символ? И как во второй задаче вписать в код, поиск определенного отрывка, например, МИРЕ, во вводимых словах?
Altair
Цитата
команда POS, что делает, ищет текст или заданный символ?

Команда POS
объявление:
function POS(substr,s):byte;
Она ищет в строке s, вхождение строки substr.
И возвращает номер того элемента строки с которого обнаруженно вхождение, или ноль если нет вхожднения.
Пример:
pos('abc','abcd')
вернет значение 1, т.к. вхождение обнаруженно с 1 символа.
pos('a','vfdgab')
вернет 5...
вместо строки substr
эта функция может искать и вхождение символа.

Цитата
И как во второй задаче вписать в код, поиск определенного отрывка, например, МИРЕ, во вводимых словах?


Очень просто, все конечно реализуется с помощью функции POS.
Смотрите:
в этой строчке кода:
readln(AA[i]);
вводится очередное слово (ну там массив из строк, длинной 4... это ввод очередного элемента массива).
значит после ввода слова надо проверить вхождение:
If POS('МИРЕ',aa[i])<>0 then writeln('Вхождение обнаруженно');
Т.е. мы проверяем условие и если есть вхождение какого-то слова, то что-то делаем (в примере выводим строку: "вхождение обнаруженно")
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.