Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.05.2009, 00:27   #21
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Так устроит?
Код:
uses crt,graph;
const a = 15;
b = 25;
y = 40;
count = 10;
shag = 70;

type
kvadr = record
x : integer;
mas : array[1..4] of PointType;
end;
{---}

var
d,m : smallint; // для TP 7 изменить тип на integer
W : integer;
Z : array[1..count] of kvadr;

procedure init;
var i : integer;
begin
W := getmaxx;
for i:=1 to count do
 begin
 Z[i].x := -a-shag*(i-1);
 end;
end;

procedure print;
var i : integer;
begin
while true do
 begin
 if keypressed then
  if readkey = #27 then break;
 cleardevice;
for i:=count downto 1 do
 begin
 Z[i].mas[1].x := Z[i].x;
 Z[i].mas[1].y := y;
 Z[i].mas[2].x := Z[i].x+b;
 Z[i].mas[2].y := y;
 Z[i].mas[3].x := Z[i].x+b;
 Z[i].mas[3].y := y+a;
 Z[i].mas[4].x := Z[i].x;
 Z[i].mas[4].y := y+a;

 SetColor(15);
 SetFillStyle(1,15);
 FillPoly(4,Z[i].mas);

 delay(3);
 {SetColor(0);
 SetFillStyle(1,0);
 FillPoly(4,Z[i].mas); }
 inc(Z[i].x);
 if Z[i].x>W then Z[i].x := -a;
 end;
 end;
end;

begin
clrscr;
initgraph(d,m,'');
init;
print;

closegraph;
end.
Цитата:
.Как он сказал должн быть ввод, вывод , обработка....
Какой ввод? Что там вводить? Впрочем, можете сделать a,b,count и shag переменными и вводить их в программе (через процедуру).
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 03.05.2009, 00:33   #22
tanek
Форумчанин
 
Регистрация: 07.03.2009
Сообщений: 209
По умолчанию

Ну можно и так!!!
procedure init-это обработка прямоугольников??? так??
tanek вне форума Ответить с цитированием
Старый 03.05.2009, 00:35   #23
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
Сообщение от tanek
procedure init-это обработка прямоугольников??? так??
Это задание начальных координат. Сначала они все находятся за экраном.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 03.05.2009, 00:48   #24
tanek
Форумчанин
 
Регистрация: 07.03.2009
Сообщений: 209
По умолчанию

а можно ли функции рисования разделить на рисование и стирание прямоугольничков?
или я что то не правильно понимаю....
tanek вне форума Ответить с цитированием
Старый 03.05.2009, 00:54   #25
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
а можно ли функции рисования разделить на рисование и стирание прямоугольничков?
или я что то не правильно понимаю....
Как вы можете заметить, я закомментировал вот эти строчки:
Код:
 {SetColor(0);
 SetFillStyle(1,0);
 FillPoly(4,Z[i].mas); }
которые отвечают за стирание. Т.к. прямоугольников много, то можно просто очищать весь экран, что и делает процедура cleardevice. Поэтому разделять тут, собственно, нечего.

-------------
Но если вам так хочется еще что-нибудь разделить, то можете вынести в отдельную процедуру перерасчет координат.
Тогда появится такая процедура:
Код:
procedure setcoord(i : integer);
begin
Z[i].mas[1].x := Z[i].x;
 Z[i].mas[1].y := y;
 Z[i].mas[2].x := Z[i].x+b;
 Z[i].mas[2].y := y;
 Z[i].mas[3].x := Z[i].x+b;
 Z[i].mas[3].y := y+a;
 Z[i].mas[4].x := Z[i].x;
 Z[i].mas[4].y := y+a;
end;
а процедура print превратится в это:
Код:
procedure print;
var i : integer;
begin
while true do
 begin
 if keypressed then
  if readkey = #27 then break;
 cleardevice;
for i:=count downto 1 do
 begin
 setcoord(i);

 SetColor(15);
 SetFillStyle(1,15);
 FillPoly(4,Z[i].mas);

 delay(3);
 {SetColor(0);
 SetFillStyle(1,0);
 FillPoly(4,Z[i].mas); }
 inc(Z[i].x);
 if Z[i].x>W then Z[i].x := -a;
 end;
 end;
end;
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 03.05.2009, 01:07   #26
tanek
Форумчанин
 
Регистрация: 07.03.2009
Сообщений: 209
По умолчанию

я сделала, но теперь бежит только один прямоугольничек
Код:
program tat;

uses crt,graph;
const a = 15;
b = 25;
y = 40;
count = 10;
shag = 70;

type
kvadr = record
x : integer;
mas : array[1..4] of PointType;
end;

var
d,m :  integer;
W : integer;
Z : array[1..count] of kvadr;

procedure init;
var i : integer;
begin
W := getmaxx;
for i:=1 to count do
 begin
 Z[i].x := -a-shag*(i-1);
 end;
end;

procedure setcoord(i : integer);
begin
Z[i].mas[1].x := Z[i].x;
 Z[i].mas[1].y := y;
 Z[i].mas[2].x := Z[i].x+b;
 Z[i].mas[2].y := y;
 Z[i].mas[3].x := Z[i].x+b;
 Z[i].mas[3].y := y+a;
 Z[i].mas[4].x := Z[i].x;
 Z[i].mas[4].y := y+a;
end;

procedure print;
var i : integer;
begin
while true do
 begin
 if keypressed then
  if readkey = #27 then break;
 cleardevice;
for i:=count downto 1 do
 setcoord(i);
 SetColor(15);
 SetFillStyle(1,15);
 FillPoly(4,Z[i].mas);

 delay(3);
 {SetColor(0);
 SetFillStyle(1,0);
 FillPoly(4,Z[i].mas); }
 inc(Z[i].x);
 if Z[i].x>W then Z[i].x := -a;
 end;
 end;

begin
clrscr;
initgraph(d,m,'');
init;
print;

closegraph;
end.
tanek вне форума Ответить с цитированием
Старый 03.05.2009, 01:11   #27
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Код:
uses crt,graph;
const a = 15;
b = 25;
y = 40;
count = 10;
shag = 70;

type
kvadr = record
x : integer;
mas : array[1..4] of PointType;
end;
{---}

var
d,m : smallint; // для TP 7 изменить тип на integer
W : integer;
Z : array[1..count] of kvadr;

procedure init;
var i : integer;
begin
W := getmaxx;
for i:=1 to count do
 begin
 Z[i].x := -a-shag*(i-1);
 end;
end;

procedure setcoord(i : integer);
begin
Z[i].mas[1].x := Z[i].x;
 Z[i].mas[1].y := y;
 Z[i].mas[2].x := Z[i].x+b;
 Z[i].mas[2].y := y;
 Z[i].mas[3].x := Z[i].x+b;
 Z[i].mas[3].y := y+a;
 Z[i].mas[4].x := Z[i].x;
 Z[i].mas[4].y := y+a;
end;

procedure print;
var i : integer;
begin
while true do
 begin
 if keypressed then
  if readkey = #27 then break;
 cleardevice;
for i:=count downto 1 do
 begin
 setcoord(i);

 SetColor(15);
 SetFillStyle(1,15);
 FillPoly(4,Z[i].mas);

 delay(3);
 {SetColor(0);
 SetFillStyle(1,0);
 FillPoly(4,Z[i].mas); }
 inc(Z[i].x);
 if Z[i].x>W then Z[i].x := -a;
 end;
 end;
end;

begin
clrscr;
initgraph(d,m,'');
init;
print;

closegraph;
end.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 03.05.2009, 01:26   #28
tanek
Форумчанин
 
Регистрация: 07.03.2009
Сообщений: 209
По умолчанию

а еще одно но......переменные не должны быть глобальными....
tanek вне форума Ответить с цитированием
Старый 03.05.2009, 01:28   #29
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
а еще одно но......переменные не должны быть глобальными....
Здесь единственная глобальная переменная - W. Если хотите, можете запихнуть ее объявление в каждую процедуру, где она используется (не забыв ее там вычислять).
Что еще глобальное? Массив Z. Смысла делать его локальным вообще не вижу.
d, m нужны для инициализации графического режима. Ну а константы делать локальными - бред.

Собственно, вот.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 03.05.2009, 01:33   #30
tanek
Форумчанин
 
Регистрация: 07.03.2009
Сообщений: 209
По умолчанию

понимаете, надо сделать массив локальным, та как это будет счтаться ошибкой!
как список квадрат запихнуть в параметл процедуры setcoord???
и для чего вообще нужна W?
tanek вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Графика в С++ K[Lanc]N Помощь студентам 2 29.07.2010 11:25
графика vovan665 Паскаль, Turbo Pascal, PascalABC.NET 11 11.10.2008 15:09
Графика Exact Паскаль, Turbo Pascal, PascalABC.NET 3 14.03.2008 18:37
графика ben95 Общие вопросы Delphi 3 06.02.2008 22:24