Помощь - Поиск - Пользователи - Календарь
Полная версия: 3 задачки на графику
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
phoenix85
Помогите, пожалуйста, решить 3 задачки в Паскале..
на выходных сдавать, а я в этом ни гу-гу...

есть 3 задачки:

1. сгибающаяся под тяжестью растущего плода ветка;

2. Перемещать три звезды разного цвета в пределах экрана;

3. Построить прямоугольник со сторонами разного цвета и основанием, движущимся согласно процедуре OTREZOK
Archon
Что, совсем ни гу-гу? Просто не ясно, с чего начинать помощь: с анимации, с графики или вообще с основ Паскаля.

Попробуй для начала первую сделать. Вот заготовка, а описание конкретных процедур для рисования можно найти например здесь.
uses
Graph, Crt;

procedure DrawBranch;
begin
{ Тут следует разместить команды для рисования ветки. }
end;

var
gd, gm: Integer;
begin
gd := Detect;
InitGraph(gd, gm, '');

DrawBranch;

ReadKey;
CloseGraph;
end.
volvo
Archon, похоже, что не все так просто, и нарисовать надо не статическую ветку с плодом на ней, а анимацию, отображающую рост этого самого "фрукта" (ну, или что там еще на деревьях растет) и изгибание под его весом ветки. Заметь, все остальные задачи - тоже на анимацию...

А вообще, автору очень не мешало бы сначала ознакомиться с правилами (как форума в целом, так и этого раздела в частности), и только потом задавать вопросы...
phoenix85
я конечно много извиняюсь,
но просто время уже поджимает..

да, задачи на анимацию.. я уже не знаю, что и сделать...
помогите..

сори что может не туда пишу, но просто выхода уже нету...

а я в паскале - ноль...

так что помогите с кодами.. уж не ругайте сильно...
phoenix85
3ю задачу на треуголник решил..

а вот первые две - никак.
Archon
Покажи, как решил, поможем переделать.
phoenix85
да третью я уже сделал,

мне надо с первыми двумя разобраться, или хотя бы со звездами...
напишите плиз код,

я не знаю как делать...
Archon
Даже если кто-нибудь захочет делать тебе программы с нуля и бесплатно, ему придется гадать как именно их надо сделать. Например, можно ли использовать объекты, записи. Если ты приведешь свой код решения третьей задачи, это поможет правильно написать решение первых двух, а кроме того, покажет, что ты не халяву ловишь, а пытаешься и сам что-то сделать.
phoenix85
PROGRAM  treug;
uses Graph;
var Gd,Gm: Integer;
BEGIN
Gd:=VGA; Gm:=VGAHi; InitGraph (Gd,Gm,'c:\tp\bgi');
If GraphResult=grOk
then
begin
SetColor (LightMagenta); {cvet gorizont linii}
Line (120,210,520,210); {gorizont otrezok }
SetColor (LightCyan); {cvet levogo}
Line (120,210,320,10); {levii katet}
SetColor (Green); { cvet pravogo}
Line (320,10,520,210); {pravii katet}
ReadLn
end
END.


вот код треугольника... а вращающаяся линия отпадает, не могу доделать
Archon
Ладно, вот код ко второй задаче. Разбирайся, задавай вопросы.
uses
Graph, Crt;

const
NumStars = 5; { Число звезд. }
StarRadius = 25; { Размер звезд. }
Step = 1; { Шаг, с которым перемещаются звезды. }
FrameDelay = 1; { Задержка кадра. Попробуй увеличить это значение, }
{ если звезды движутся слишком быстро. }

var
Star: array [0..5] of PointType;
gd, gm: Integer;
i: Integer;
Pos, Offset: array[1..NumStars] of PointType;
Color: array[1..NumStars] of Word;
begin
gd := Detect;
InitGraph(gd, gm, '');

{ Начальные координаты звезд, направления их движения и цвет задаются случайно. }
Randomize;
for i := 1 to NumStars do begin
Pos[i].x := StarRadius + Random(GetMaxX - 2 * StarRadius);
Pos[i].y := StarRadius + Random(GetMaxY - 2 * StarRadius);
Offset[i].x := Step * (1 - 2 * Random(2));
Offset[i].y := Step * (1 - 2 * Random(2));
Color[i] := Random(GetMaxColor - 1) + 1;
end;

{ Вычисление вершин звезды. }
for i := 0 to 5 do begin
Star[i].x := Round(Sin(i * Pi * 0.8) * StarRadius);
Star[i].y := Round(-Cos(i * Pi * 0.8) * StarRadius);
end;

{ Основной цикл. }
repeat
for i := 1 to NumStars do begin
{ Стираем звезду. }
SetColor(Black);
SetViewPort(Pos[i].x, Pos[i].y, Pos[i].x, Pos[i].y, false);
DrawPoly(6, Star);

{ Меняем положение звезды. }
Inc(Pos[i].x, Offset[i].x);
Inc(Pos[i].y, Offset[i].y);

{ Если звезда достигла края экрана, меняем направление ее движения. }
if (Pos[i].x < StarRadius) or (Pos[i].x > GetMaxX - StarRadius) then
Offset[i].x := -1 * Offset[i].x;
if (Pos[i].y < StarRadius) or (Pos[i].y > GetMaxY - StarRadius) then
Offset[i].y := -1 * Offset[i].y;

{ Рисуем звезду в новом месте. }
SetColor(Color[i]);
SetViewPort(Pos[i].x, Pos[i].y, Pos[i].x, Pos[i].y, false);
DrawPoly(6, Star);
end;
{ Задержка, чтобы кадры не сменяли друг друга слишком быстро. }
Delay(FrameDelay);
until KeyPressed;

CloseGraph;
end.
phoenix85
Archon - огромное тебе спасибо, немного поэксперементировал со звездами...


блин, ты меня выручил...




а что делать с 1ой ? есть парочка идей..
можно сделать статическую линию и тупо круг под ней,
линия опускается, и круг немного увеличивается, (ну скажем до 10 раз так может происходить)..
а дальше надо сделать, что бы предыдущий рисунок стирался..

идея правильная? можно ведь так? и легче будет, и особо заморачиваться не надо...
Archon
Цитата
идея правильная? можно ведь так? и легче будет, и особо заморачиваться не надо...
Конечно smile.gif. За основу можешь мою программу взять. В основном цикле есть 3 основные стадии: стирание (рисование черным цветом), изменение параметров (координаты, размер объектов, возможно форма), рисование (уже основными цветами). Введи процедуру, которая рисует картинку в зависимости от степени наклона. Получится что-то вроде этого:
uses
Graph, Crt;

const
FrameDelay = 50; { Задержка кадра. }
NumStages = 100; { Число степеней "зрелости" фрукта. }

procedure DrawBranch(Stage: Integer; Draw: Boolean);
begin
{ ... }
{ Здесь надо поместить код рисования ветки с фруктом в зависимости от степени }
{ зрелости фрукта (Stage). В примере это число меняется от 0 до 99, но ты }
{ можешь сделать так, как будет удобнее. Если Draw = false, то рисовать надо }
{ черным цветом, если Draw = true, то рисовать надо обычными цветами. }

{ Это просто пример, чтобы убедиться, что все работает: }
if Draw then SetColor(Red) else SetColor(Black);
Line(10, 50, 200, 50 + Stage);
end;

var
gd, gm: Integer;
Stage: Integer;
begin
gd := Detect;
InitGraph(gd, gm, '');

{ Основной цикл. }
Stage := 0;
repeat
{ Стираем ветку. }
DrawBranch(Stage, false);
{ Переходим на новую стадию наклона. }
Inc(Stage);
{ Рисуем ветку в новой стадии. }
DrawBranch(Stage, true);
{ Задержка, чтобы кадры не сменяли друг друга слишком быстро. }
Delay(FrameDelay);
until Stage > NumStages;

ReadKey;
CloseGraph;
end.
phoenix85
конечно огромное спасибо за основу, но все же, у меня нету никаких идей, как сделать,
будь добр, выручи то...
а то не сдам эти лабы, чтоб их...
лёшик
Чото у меня в задачке со звездами пишет, что файл Graph.dcu не находит. Дельфи7, чо бы это значило?
V877
Цитата
чо бы это значило?
Это значило бы, что надо пользоваться Паскалем, а не Дельфи для работы с модулем Graph (которого в Дельфи просто нет)
лёшик
хи-хи, скачал Паскаль с "Паскалера.ру", а он 97 года и ругается, не может в нормальную ХР-ку прописаться lol.gif

Добавлено через 3 мин.
Мож, Паскаль уже устарел, лучше язык Дельфи учить? mega_chok.gif

Добавлено через 3 мин.
Доброе утро, Владимир, рад Вас видеть! ))) smile.gif
volvo
Я не знаю, чего и откуда ты качал, но Турбо Паскаль 1992 года в XP работает прекрасно, причем никуда не прописывается... Или (если не можешь установить Турбо), скачай FPC: http://www.freepascal.org/download.var , он тоже прекрасно работает с Graph.

Цитата
Мож, Паскаль уже устарел, лучше язык Дельфи учить?
Ну вот учишь ты Дельфи, тебе это помогло? Простейшую программу запустить и то не можешь... А то что Паскаль устарел - это ищи в Гугле место для холиваров и иди туда, здесь - не надо... Паскали они разные, я тебе сказал уже...
Lapp
Цитата(лёшик @ 27.06.2009 9:37) *
скачал Паскаль с "Паскалера.ру", а он 97 года и ругается, не может в нормальную ХР-ку прописаться
Незачем ему прописываться. Если это не 64-версия, то просто нужно создать каталог ТР и скопировать его туда.

Цитата(лёшик @ 27.06.2009 9:37) *
Мож, Паскаль уже устарел, лучше язык Дельфи учить?
Нету такого языка: Дельфи. Есть система разработчика Дельфи, которая использует язык Object Pascal.
лёшик
Не, совершенно очевидно, что сам Паскаль не устареет, стареют только его турбо-воплощения))) И одно другому не мешает))) А кто такие холивары?? blink.gif
volvo
Цитата
Есть система разработчика Дельфи, которая использует язык Object Pascal.
Неправда, начиная с D7 и язык тоже называется Дельфи...
лёшик
По поводу существования или несуществования языка Дельфи тупо открываем Википедию и читаем:
Delphi (Де́льфи, произносится /ˈdɛlˌfi/[1]) — язык программирования, который используется в одноимённой среде разработки. Название используется начиная с 7 версии среды разработки[2], ранее это был Object Pascal...

Добавлено через 7 мин.
Нет, создание каталога ТР не помогло. Может, этот каталог нужно где-то конкретно поставить? В корне диска С: например? Правда, пробую, не хочет он зараза работать. Придется пробовать FPC, что это такое, кстати?

Добавлено через 3 мин.
Так и пишет зараза что неправильный каталог запуска, и предлагает проверить PIF-файл
Archon
Цитата
Так и пишет зараза что неправильный каталог запуска, и предлагает проверить PIF-файл

Измени пути у ярлыка, или удали его вообще. И еще, оффтоп в другую тему пожалуйста, здесь задачи на графику.
Lapp
Сорри за дезу.
Хотя я на месте Вирта накатил бы на них бочку..))
лёшик
Ну раз графика, значит графика. Ща нарисуем увеличивающийся мячик и наклоняющуюся ветку в Канвасе D7 методами "эллипс", "прямая линия" и "ОнТаймер" и будем наблюдать как зреющее яблоко ветку ломает, чтобы меньше было повода в оффтопе обвинять smile.gif
А Вирт думаю возражать бы не стал, он бы понял, что от прогресса не спрячешься, тем более, что он вполне качественный и закономерный)))
И кстати, о каком ярлыке идет речь? Запускать я пытаюсь прямо пусковой экзешник в папке \BIN, ни какие ярлыки в этом процессе вроде как не участвуют blink.gif
volvo
Цитата
Ща нарисуем увеличивающийся мячик и наклоняющуюся ветку в Канвасе D7 методами "эллипс", "прямая линия" и "ОнТаймер" и будем наблюдать как зреющее яблоко ветку ломает, чтобы меньше было повода в оффтопе обвинять
В данной ветке форума это будет не меньшим оффтопом, чем все предыдущее сообщение. Еще раз: не получается запустить Паскаль - при чем тут "Задачи"? Есть раздел "ОС и ПО", где твоя проблема будет к месту... А для рисование на Канвасе есть раздел Дельфи...
Гость
да вы че оффтоп действительно развели - раздел надо читать, а раздел - PASCAL.
а тут началось, у кого не получается делфи запустить.

и по-моему просилось помочь именно с задачами на ПАСКАЛе...

читать надо топик...
phoenix85
все, все сделал задачки, кроме ветки с растущим плодом...
все таки никак не приходит на ум...
phoenix85
ну помогите с программой то...

ветка гнется под тяжестью растущего плода...
Archon
Цитата
ну помогите с программой то...

ветка гнется под тяжестью растущего плода...

phoenix85, в этом разделе не помогают сдать зачет. В нем помогают научиться решать задачи. Если ты не попытаешься выполнить задание сам, то вряд-ли кто-нибудь захочет сделать это за тебя. И создавать дублирующие темы бесполезно.

Выше, я привел тебе основу программы. Ты понял как она работает? А что и куда нужно добавить, ясно? Если да, то что мешает попробовать нарисовать самому? Когда у тебя возникнут конкретные вопросы, тогда мы поможем.

Если самому решать ну совсем лень, могу посоветовать раздел "Задачи на заказ".
phoenix85
вас по нормальному просят,

а вам так тяжело помочь человеку..

все с вами понятно..
чтобы так к вам относились... как вы к другим...
отдыхайте...
Krjuger
Ты знаеш,а если я тебя попрошу мне миллион долларов дать,ты мне их даш????Или тебе что сложно чтоли????Я по нормальному прошу же.К тебе отнеслись вполне соответственно тому,что ты представляеш.
Цитата

отдыхайте...

Спасибо о великий,что разрешил....
ты пришел на форум с вопросом и заметь тут никого ничто не обязывает тебе хотябы на что то отвечать.А так вот обьясни глупым причину по которой тебе должны помогать,если ты сам не собираешся работать.Все что нужно тебе уже дали,стряхни пыль со своих шариков в голове и заставь свой перпетум мобиль работать.
phoenix85
сори перед всеми, если обидел...

есть часть кода? но не доделаю никак:

program krug;
uses crt,graph;
var i, j, gd, gm, r:integer; Stage: Integer;


const
FrameDelay = 50; { Задержка кадра. }
NumStages = 100; { Число степеней "зрелости" фрукта. }

procedure DrawBranch(Stage: Integer; Draw: Boolean);
begin
{ ... }
{ Здесь надо поместить код рисования ветки с фруктом в зависимости от степени }
{ зрелости фрукта (Stage). В примере это число меняется от 0 до 99, но ты }
{ можешь сделать так, как будет удобнее. Если Draw = false, то рисовать надо }
{ черным цветом, если Draw = true, то рисовать надо обычными цветами. }

{ Это просто пример, чтобы убедиться, что все работает: }
if Draw then SetColor(Red) else SetColor(Black);
Line(10, 50, 200, 250 + Stage);
end;


begin
gd := Detect;
InitGraph(i,j, 'c:\tp\bgi');

{ Основной цикл. }
Stage := 0;
repeat
{ Стираем ветку. }
DrawBranch(Stage, false);
{ Переходим на новую стадию наклона. }
Inc(Stage);
{ Рисуем ветку в новой стадии. }
DrawBranch(Stage, true);
{ Задержка, чтобы кадры не сменяли друг друга слишком быстро. }
Delay(FrameDelay);
until Stage > NumStages;



begin
i:=detect;

if graphresult<>grok then
begin

writeln(grapherrormsg(graphresult));
halt;
end;
SetColor(0);i:=5;j:=5;r:=3;
while (j+r<GetMaxY)and(not(keypressed)) do
begin
SetFillStyle(1,12);
fillEllipse(i,j,r,r);
delay(1000);
SetFillStyle(1,0);
fillEllipse(i,j,r,r);
inc(i);
inc(j);
if i mod 5=0 then inc®;
end;
readkey;
end;
end.



это все, что я смог сделать...
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.