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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.05.2009, 22:22   #41
tanek
Форумчанин
 
Регистрация: 07.03.2009
Сообщений: 209
По умолчанию

еще вопросик
Код:
inc(Z[i].x);
 if Z[i].x>W then Z[i].x := -a;
что проитходит вот здесь?

а почему если в
Код:
procedure setcoord(var Z : massiv; i : integer);
i записаль как локальную переменную
Код:
procedure setcoord(var Z : massiv);
var 
  i : integer;
программа не работает????

Последний раз редактировалось Stilet; 12.05.2009 в 11:04.
tanek вне форума Ответить с цитированием
Старый 04.05.2009, 22:31   #42
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
что проитходит вот здесь?
Ну так а вы как думаете?
Дословно: "Если координата x прямоугольника больше правой границы, то координата x становится равна минус ширине прямоугольника."

Без этого прямоугольники проедут один раз и больше не появятся.

Цитата:
а почему если в i записаль как локальную переменную программа не работает????
А вы можете сказать, зачем это делать? Не работает, потому что процедура написана так, как написана. Ей передается индекс прямоугольника.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

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

Спасибо огромное!!!!!!!!!!!

Уважаемый Sazary!!! Не могли бы вы мне помочь... вот
Код:
Program task4;

uses Crt,Graph;
const
  a = 20;
  b = 35;
  y = 300;
  count = 15;
  step = 70;

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

procedure InitializationGraphicMode;
var
  driver,mode:integer;
begin
  driver:=Detect;
  InitGraph(driver,mode, 'g:\pp\bin\win32 ');
end;

procedure InitialCoordinates(var Z : RectArray; W : integer);

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

procedure ChangeCoordinates(i: integer; var Z : RectArray);

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 PrintRectangles;

var
  i : integer;
  Z: RectArray;
  W: integer;
begin
  InitialCoordinates(Z,W);
    while true do
    begin
      if keypressed then
        if readkey = #27 then break;
      cleardevice;
      for i:=count downto 1 do
      begin
        ChangeCoordinates(i,Z);
        SetColor(15);
        SetFillStyle(8,15);
        FillPoly(4,Z[i].mas);
        Delay(3);
        inc(Z[i].x);
        if Z[i].x>W then Z[i].x := -a;
      end;
    end;
end;

begin
  InitializationGraphicMode;
  PrintRectangles;
  CloseGraph;
end.
не могли бы вы разделить процедуру PrintRectangles на две: одна рисует содержимое экрана (то, что обычно называют процедурой отрисовки), а вторая очищает экран, вызывает процедуру отрисовки, экрана, делает задержку, проверяет состояние клавиатуры (ее обычно называют циклом обработки сообщений).
g:\pp\bin\win32 - будет работать только на моей машине, где установлен паскаль у пользователя мы не знаете, как это исправить????

Последний раз редактировалось Stilet; 12.05.2009 в 11:05.
tanek вне форума Ответить с цитированием
Старый 11.05.2009, 23:08   #44
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
не могли бы вы разделить процедуру PrintRectangles на две: одна рисует содержимое экрана (то, что обычно называют процедурой отрисовки), а вторая очищает экран, вызывает процедуру отрисовки, экрана, делает задержку, проверяет состояние клавиатуры (ее обычно называют циклом обработки сообщений).
Не понял, что нужно разделить.
За очистку отвечает одна-единственная процедура - cleardevice.
Не вижу никакого смысла еще что-то делить.
Цитата:
g:\pp\bin\win32 - будет работать только на моей машине, где установлен паскаль у пользователя мы не знаете, как это исправить????
Нужно знать. По-другому никак.
Или используйте, например, FPC. Там путь прописывается в настройках IDE.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 12.05.2009, 11:07   #45
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
g:\pp\bin\win32 - будет работать только на моей машине, где установлен паскаль у пользователя мы не знаете, как это исправить????
Нет. Паскаль тут не причем. Это путь к BGI файлам (дровам графики от Борланд). Обычно достаточно подкинуть БГИ файл поближе к EXEшнику, и прога будет работать на любом компьютере. В твоем случае не нужно вообще писать путь, раз ты заставляешь программу саму определять режим графики:
Код:
  driver:=Detect;
  InitGraph(driver,mode, '');
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 17.05.2009, 20:54   #46
tanek
Форумчанин
 
Регистрация: 07.03.2009
Сообщений: 209
По умолчанию

Уважаемый Sazary, я разделила еще на пару процедур...но почему то на экране совсем не то....
Код:
Program task4;

uses Crt,Graph;
const
  a = 20;
  b = 35;
  y = 300;
  count = 15;
  step = 70;

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

procedure InitializationGraphicMode;
var
  driver,mode:integer;
begin
  driver:=Detect;
  InitGraph(driver,mode, 'g:\pp\bin\win32 ');
end;

procedure InitialCoordinates(var Z : RectArray);
var
  i : integer;
  W:integer;
begin
  W := GetmaxX;
  for i:=1 to count do
    Z[i].x := -a-step*(i-1);
end;

procedure ChangeCoordinates( i:integer; var Z : RectArray);
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 PrintRectangles;
var
  i:integer;
  Z:RectArray;
  W:integer;
begin
  for i:=count downto 1 do
  begin
    ChangeCoordinates(i,Z);
    SetColor(15);
    SetFillStyle(8,15);
    FillPoly(4,Z[i].mas);
    inc(Z[i].x);
    if Z[i].x>W then Z[i].x := -a;
  end;
end;

procedure ProcessingMessages;
var
  Z: RectArray;
begin
  InitialCoordinates(Z);
  repeat
    {ClearDevice;}
    PrintRectangles;
    Delay(3);
    ClearDevice;
  until keypressed;
end;

begin
  InitializationGraphicMode;
   ProcessingMessages;
  CloseGraph;
end.
tanek вне форума Ответить с цитированием
Старый 17.05.2009, 21:08   #47
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

В процедуре PrintRectangles вы объявляете локальный массив Z, в то время, как вам нужно работать с уже созданным в процедуре ProcessingMessages.
Код:
procedure PrintRectangles(var Z : RectArray);
var
  i:integer;
  W:integer;
begin
  for i:=count downto 1 do
  begin
    ChangeCoordinates(i,Z);
    SetColor(15);
    SetFillStyle(8,15);
    FillPoly(4,Z[i].mas);
    inc(Z[i].x);
    if Z[i].x>W then Z[i].x := -a;
  end;
end;

procedure ProcessingMessages;
var
  Z: RectArray;
begin
  InitialCoordinates(Z);
  repeat
    {ClearDevice;}
    PrintRectangles(Z);
    Delay(3);
    ClearDevice;
  until keypressed;
end;
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

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

они все равно не двигаются.....
Код:
Program task4;

uses Crt,Graph;
const
  a = 20;
  b = 35;
  y = 300;
  count = 15;
  step = 70;

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

procedure InitializationGraphicMode;
var
  driver,mode:integer;
begin
  driver:=Detect;
  InitGraph(driver,mode, 'g:\pp\bin\win32 ');
end;

procedure InitialCoordinates(var Z : RectArray);
var
  i : integer;
  W:integer;
begin
  W := GetmaxX;
  for i:=1 to count do
    Z[i].x := -a-step*(i-1);
end;

procedure ChangeCoordinates( i:integer; var Z : RectArray);
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 PrintRectangles(var Z:RectArray);
var
  i:integer;
  W:integer;
begin
  for i:=count downto 1 do
  begin
    ChangeCoordinates(i,Z);
    SetColor(15);
    SetFillStyle(8,15);
    FillPoly(4,Z[i].mas);
    inc(Z[i].x);
    if Z[i].x>W then Z[i].x := -a;
  end;
end;

procedure ProcessingMessages;
var
  Z: RectArray;
begin
  InitialCoordinates(Z);
  repeat
    ClearDevice;
    PrintRectangles(Z);
    Delay(3);
  until keypressed;
end;

begin
  InitializationGraphicMode;
   ProcessingMessages;
  CloseGraph;
end.
tanek вне форума Ответить с цитированием
Старый 17.05.2009, 21:24   #49
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

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

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 17.05.2009, 21:42   #50
OCTAGRAM
Oldschool geek
Форумчанин
 
Аватар для OCTAGRAM
 
Регистрация: 09.03.2009
Сообщений: 611
По умолчанию

У меня тоже двигаются. Моргают сильно, но двигаются.

Если Delay(3) поменять на Delay(100), то уже нормально.

Блоки, которые прошли сквозь экран, накладываются на те, что сзади.
If you want to get to the top, you have to start at the bottom

http://pascal.net.ru/

Последний раз редактировалось OCTAGRAM; 17.05.2009 в 21:45.
OCTAGRAM вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 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