Помогите, пожалуйста, решить 3 задачки в Паскале.. на выходных сдавать, а я в этом ни гу-гу...
есть 3 задачки:
1. сгибающаяся под тяжестью растущего плода ветка;
2. Перемещать три звезды разного цвета в пределах экрана;
3. Построить прямоугольник со сторонами разного цвета и основанием, движущимся согласно процедуре OTREZOK
Archon
26.06.2009 16:47
Что, совсем ни гу-гу? Просто не ясно, с чего начинать помощь: с анимации, с графики или вообще с основ Паскаля.
Попробуй для начала первую сделать. Вот заготовка, а описание конкретных процедур для рисования можно найти например здесь.
uses Graph, Crt;
procedure DrawBranch; begin { Тут следует разместить команды для рисования ветки. } end;
var gd, gm: Integer; begin gd := Detect; InitGraph(gd, gm, '');
DrawBranch;
ReadKey; CloseGraph; end.
volvo
26.06.2009 17:05
Archon, похоже, что не все так просто, и нарисовать надо не статическую ветку с плодом на ней, а анимацию, отображающую рост этого самого "фрукта" (ну, или что там еще на деревьях растет) и изгибание под его весом ветки. Заметь, все остальные задачи - тоже на анимацию...
А вообще, автору очень не мешало бы сначала ознакомиться с правилами (как форума в целом, так и этого раздела в частности), и только потом задавать вопросы...
phoenix85
26.06.2009 17:24
я конечно много извиняюсь, но просто время уже поджимает..
да, задачи на анимацию.. я уже не знаю, что и сделать... помогите..
сори что может не туда пишу, но просто выхода уже нету...
а я в паскале - ноль...
так что помогите с кодами.. уж не ругайте сильно...
phoenix85
26.06.2009 18:17
3ю задачу на треуголник решил..
а вот первые две - никак.
Archon
26.06.2009 18:42
Покажи, как решил, поможем переделать.
phoenix85
26.06.2009 18:45
да третью я уже сделал,
мне надо с первыми двумя разобраться, или хотя бы со звездами... напишите плиз код,
я не знаю как делать...
Archon
26.06.2009 18:57
Даже если кто-нибудь захочет делать тебе программы с нуля и бесплатно, ему придется гадать как именно их надо сделать. Например, можно ли использовать объекты, записи. Если ты приведешь свой код решения третьей задачи, это поможет правильно написать решение первых двух, а кроме того, покажет, что ты не халяву ловишь, а пытаешься и сам что-то сделать.
phoenix85
26.06.2009 19:17
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
26.06.2009 20:01
Ладно, вот код ко второй задаче. Разбирайся, задавай вопросы.
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
26.06.2009 21:36
Archon - огромное тебе спасибо, немного поэксперементировал со звездами...
блин, ты меня выручил...
а что делать с 1ой ? есть парочка идей.. можно сделать статическую линию и тупо круг под ней, линия опускается, и круг немного увеличивается, (ну скажем до 10 раз так может происходить).. а дальше надо сделать, что бы предыдущий рисунок стирался..
идея правильная? можно ведь так? и легче будет, и особо заморачиваться не надо...
Archon
26.06.2009 22:02
Цитата
идея правильная? можно ведь так? и легче будет, и особо заморачиваться не надо...
Конечно . За основу можешь мою программу взять. В основном цикле есть 3 основные стадии: стирание (рисование черным цветом), изменение параметров (координаты, размер объектов, возможно форма), рисование (уже основными цветами). Введи процедуру, которая рисует картинку в зависимости от степени наклона. Получится что-то вроде этого:
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
27.06.2009 0:03
конечно огромное спасибо за основу, но все же, у меня нету никаких идей, как сделать, будь добр, выручи то... а то не сдам эти лабы, чтоб их...
лёшик
27.06.2009 11:39
Чото у меня в задачке со звездами пишет, что файл Graph.dcu не находит. Дельфи7, чо бы это значило?
V877
27.06.2009 12:20
Цитата
чо бы это значило?
Это значило бы, что надо пользоваться Паскалем, а не Дельфи для работы с модулем Graph (которого в Дельфи просто нет)
лёшик
27.06.2009 12:37
хи-хи, скачал Паскаль с "Паскалера.ру", а он 97 года и ругается, не может в нормальную ХР-ку прописаться
Добавлено через 3 мин. Мож, Паскаль уже устарел, лучше язык Дельфи учить?
Добавлено через 3 мин. Доброе утро, Владимир, рад Вас видеть! )))
volvo
27.06.2009 12:44
Я не знаю, чего и откуда ты качал, но Турбо Паскаль 1992 года в XP работает прекрасно, причем никуда не прописывается... Или (если не можешь установить Турбо), скачай FPC: http://www.freepascal.org/download.var , он тоже прекрасно работает с Graph.
Цитата
Мож, Паскаль уже устарел, лучше язык Дельфи учить?
Ну вот учишь ты Дельфи, тебе это помогло? Простейшую программу запустить и то не можешь... А то что Паскаль устарел - это ищи в Гугле место для холиваров и иди туда, здесь - не надо... Паскали они разные, я тебе сказал уже...
Lapp
27.06.2009 12:46
Цитата(лёшик @ 27.06.2009 9:37)
скачал Паскаль с "Паскалера.ру", а он 97 года и ругается, не может в нормальную ХР-ку прописаться
Незачем ему прописываться. Если это не 64-версия, то просто нужно создать каталог ТР и скопировать его туда.
Цитата(лёшик @ 27.06.2009 9:37)
Мож, Паскаль уже устарел, лучше язык Дельфи учить?
Нету такого языка: Дельфи. Есть система разработчика Дельфи, которая использует язык Object Pascal.
лёшик
27.06.2009 12:47
Не, совершенно очевидно, что сам Паскаль не устареет, стареют только его турбо-воплощения))) И одно другому не мешает))) А кто такие холивары??
volvo
27.06.2009 12:49
Цитата
Есть система разработчика Дельфи, которая использует язык Object Pascal.
Неправда, начиная с D7 и язык тоже называется Дельфи...
лёшик
27.06.2009 12:50
По поводу существования или несуществования языка Дельфи тупо открываем Википедию и читаем: Delphi (Де́льфи, произносится /ˈdɛlˌfi/[1]) — язык программирования, который используется в одноимённой среде разработки. Название используется начиная с 7 версии среды разработки[2], ранее это был Object Pascal...
Добавлено через 7 мин. Нет, создание каталога ТР не помогло. Может, этот каталог нужно где-то конкретно поставить? В корне диска С: например? Правда, пробую, не хочет он зараза работать. Придется пробовать FPC, что это такое, кстати?
Добавлено через 3 мин. Так и пишет зараза что неправильный каталог запуска, и предлагает проверить PIF-файл
Archon
27.06.2009 13:06
Цитата
Так и пишет зараза что неправильный каталог запуска, и предлагает проверить PIF-файл
Измени пути у ярлыка, или удали его вообще. И еще, оффтоп в другую тему пожалуйста, здесь задачи на графику.
Lapp
27.06.2009 13:40
Сорри за дезу. Хотя я на месте Вирта накатил бы на них бочку..))
лёшик
27.06.2009 20:08
Ну раз графика, значит графика. Ща нарисуем увеличивающийся мячик и наклоняющуюся ветку в Канвасе D7 методами "эллипс", "прямая линия" и "ОнТаймер" и будем наблюдать как зреющее яблоко ветку ломает, чтобы меньше было повода в оффтопе обвинять А Вирт думаю возражать бы не стал, он бы понял, что от прогресса не спрячешься, тем более, что он вполне качественный и закономерный))) И кстати, о каком ярлыке идет речь? Запускать я пытаюсь прямо пусковой экзешник в папке \BIN, ни какие ярлыки в этом процессе вроде как не участвуют
volvo
27.06.2009 20:24
Цитата
Ща нарисуем увеличивающийся мячик и наклоняющуюся ветку в Канвасе D7 методами "эллипс", "прямая линия" и "ОнТаймер" и будем наблюдать как зреющее яблоко ветку ломает, чтобы меньше было повода в оффтопе обвинять
В данной ветке форума это будет не меньшим оффтопом, чем все предыдущее сообщение. Еще раз: не получается запустить Паскаль - при чем тут "Задачи"? Есть раздел "ОС и ПО", где твоя проблема будет к месту... А для рисование на Канвасе есть раздел Дельфи...
Гость
27.06.2009 22:42
да вы че оффтоп действительно развели - раздел надо читать, а раздел - PASCAL. а тут началось, у кого не получается делфи запустить.
и по-моему просилось помочь именно с задачами на ПАСКАЛе...
читать надо топик...
phoenix85
29.06.2009 13:36
все, все сделал задачки, кроме ветки с растущим плодом... все таки никак не приходит на ум...
phoenix85
29.06.2009 17:51
ну помогите с программой то...
ветка гнется под тяжестью растущего плода...
Archon
30.06.2009 14:06
Цитата
ну помогите с программой то...
ветка гнется под тяжестью растущего плода...
phoenix85, в этом разделе не помогают сдать зачет. В нем помогают научиться решать задачи. Если ты не попытаешься выполнить задание сам, то вряд-ли кто-нибудь захочет сделать это за тебя. И создавать дублирующие темы бесполезно.
Выше, я привел тебе основу программы. Ты понял как она работает? А что и куда нужно добавить, ясно? Если да, то что мешает попробовать нарисовать самому? Когда у тебя возникнут конкретные вопросы, тогда мы поможем.
Если самому решать ну совсем лень, могу посоветовать раздел "Задачи на заказ".
phoenix85
30.06.2009 16:39
вас по нормальному просят,
а вам так тяжело помочь человеку..
все с вами понятно.. чтобы так к вам относились... как вы к другим... отдыхайте...
Krjuger
1.07.2009 1:29
Ты знаеш,а если я тебя попрошу мне миллион долларов дать,ты мне их даш????Или тебе что сложно чтоли????Я по нормальному прошу же.К тебе отнеслись вполне соответственно тому,что ты представляеш.
Цитата
отдыхайте...
Спасибо о великий,что разрешил.... ты пришел на форум с вопросом и заметь тут никого ничто не обязывает тебе хотябы на что то отвечать.А так вот обьясни глупым причину по которой тебе должны помогать,если ты сам не собираешся работать.Все что нужно тебе уже дали,стряхни пыль со своих шариков в голове и заставь свой перпетум мобиль работать.
phoenix85
1.07.2009 23:55
сори перед всеми, если обидел...
есть часть кода? но не доделаю никак:
program krug; uses crt,graph; var i, j, gd, gm, r:integer; Stage: Integer;
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.
это все, что я смог сделать...
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.