Все выпуски  

RFpro.ru: Программирование на Delphi и Lazarus


РАССЫЛКИ ПОРТАЛА RFPRO.RU

Лучшие эксперты в разделе

zdwork
Статус: 2-й класс
Рейтинг: 207
∙ повысить рейтинг »
puporev
Статус: Профессионал
Рейтинг: 128
∙ повысить рейтинг »
Асмик Гаряка
Статус: Советник
Рейтинг: 0
∙ повысить рейтинг »

∙ Pascal / Delphi / Lazarus

Номер выпуска:1768
Дата выхода:26.05.2019, 23:45
Администратор рассылки:Зенченко Константин Николаевич (Старший модератор)
Подписчиков / экспертов:31 / 36
Вопросов / ответов:2 / 2

Консультация # 195689: Здравствуйте! У меня возникли сложности с таким вопросом: Задание Построить график функции y(x) и таблицу значений y(x) с шагом измерения аргумента h. Таблицу значений функции и аргумента необходимо вывести на экран в графическом режиме. h=0.03 Код
Код (Pas
...
Консультация # 195690: скачать файл Listing_sharik.doc [47.5 кб]Здравствуйте! Прошу помощи в следующем вопросе: задание Построить движение шарика по следующей траектории код почему не получается где ошибки? Листинг:
Код (Pascal) ::
...

Консультация # 195689:

Здравствуйте! У меня возникли сложности с таким вопросом:

Задание
Построить график функции y(x) и таблицу значений y(x) с шагом измерения аргумента h.
Таблицу значений функции и аргумента необходимо вывести на экран в графическом режиме.
h=0.03
Код

Код (Pascal) :: выделить код
program Grafik;
uses crt,graph;  // используем экранный и графический модули 
const 
  h=0.03;  // шаг 
  stx= 2.03; //  начальное значение по оси х 
type
  zn_t=record
  x:real;
  y:real;
  end;
 var
   tabl:array[1..35] of zn_t; // таблица значений функции 
   i:integer;
{ инициализация графического режима
  VGA, режим VGAHI  640 x 480       }
procedure Graph_init;
var
 d,r,err : integer;

begin
 d := VGA; r := VGAHI;
 InitGraph(d,r,'');
 err := GraphResult; //Проверяем результат последней операции с графикой 
 if (err <> 0) then  //Не ноль означает ошибку!
  begin              // Сообщение об ошибке и досрочный выход из программы 
   writeln('Ошибка в инициализации графики!!!');
   delay(1000);
   halt;
  end;
 ClearDevice;
end;

{ Процедура рисования оси х и у }
procedure Ris_osey;
var                // Объявляем переменные             
 j,j1  : integer;
 s     : string;
 j2    : integer;
begin
 setcolor(1);      // Выбираем цвет
 line(0,0,0,getmaxy - 1);  // Рисуем ось Y
 line(0,getmaxy - 400,getmaxx,getmaxy - 400); // Рисуем ось X
 line(0,0,2,2);     // Стрелка оси Y
 line(getmaxx,getmaxy - 400,getmaxx - 2,getmaxy - 398); //Стрелка оси X вверх
 line(getmaxx,getmaxy - 400,getmaxx - 2,getmaxy - 402); //Стрелка оси X низ
 setcolor(2);
 outtextxy(3,0,'y'); // Обозначение оси У
 outtextxy(getmaxx - 7,getmaxy - 398,'x'); // Обозначение оси X


 { разметка оси Y }
 j1 := 48; // Максимальная шкала оси Y

 j2 := -4; // Минимальное обозначение цифры шкалы оси Y
 for j := 48 downto 1 do // Цикл разметки оси Y
  begin
   line(0,j*10,2,j*10); // Шкала оси Y
   if (j = j1) then
    begin
     Str(j2, s);// Преобразуем переменную j2 в строковый формат
     if (j2 <> 0) then outtextxy(3,j*10 - 2,s); // Координаты цифр шкалы Y
     j2 := j2 + 1; // Значение цифр шкалы увеличиваем на 1
     j1 := j1 - 10; // Значение штриха шкалы уменьшаем на 10
    end;
  end;
{ разметка оси X}
 j1 := 60; // Максимальная шкала оси X

 j2 := 6; // Минимальное обозначение цифры шкалы оси X
 for j := 64 downto 0 do // Цикл разметки оси X

  begin
   line(j*10,getmaxy - 398,j*10,getmaxy - 402); // Шкала оси X
   if (j = j1) then
    begin
     Str(j2, s); );// Преобразуем переменную j2 в строковый формат
     outtextxy(j*10,getmaxy - 415,s); // Координаты цифр шкалы X
     j2 := j2 - 1; // Значение цифр шкалы уменьшаем на 1
     j1 := j1 - 10; // Значение штриха шкалы уменьшаем на 1
    end;
  end;
end;

{ Процедура рисования графика функции }
procedure Ris_graph;
var              // Объявляем переменные                         
 j   : integer;
 x,y : integer;
begin
 setcolor(3); // Выбираем цвет
 x := trunc(tabl[1].x * 100); //Получаем координату X точки
 y := trunc(tabl[1].y * 100); //Получаем координату Y точки
 if (y < 0) then y := y * -1;
 y := y + 80;
 moveto(x,y); // Перемещаем курсор в точку(x;y)
 for j := 2 to 35 do //Цикл по всем значениям аргумента
  begin
   x := trunc(tabl[j].x * 100); //Получаем координату X точки
   y := trunc(tabl[j].y * 100) * -1 + 80; //Получаем координату Y точки
   lineto(x,y); // Чертим линию в точку(x;y)
   moveto(x,y); // Перемещаем курсор в точку(x;y)
  end;
end;

{ Процедура вывода таблицы значений на экран }
procedure List_table;
var               // Объявляем переменные                            
 j  : integer;
 s  : string;
 j2 : integer;
begin
 setcolor(4); // Выбираем цвет
 j2 := 110; // Сдвиг по оси Y
 outtextxy(490,j2 - 20,'---------------'); // Рисуем горизонтальную линию
 outtextxy(490,j2 - 10,'|  x'); // Рисуем ячейку «Х»

 outtextxy(540,j2 - 10,'|   y   |'); // Рисуем ячейку «У»
 outtextxy(490,j2,'---------------'); // Рисуем горизонтальную линию
 for j := 1 to 35 do // Цикл по всем значениям аргумента
  begin
   Str(tabl[j].x:3:2,s); // Преобразуем значение аргумента в строковый тип 
   s := '| ' + s; // Добавим вертикальную границу ячейки к значению аргумента
   outtextxy(490,j2 + 10,s); // Рисуем ячейку аргумента
   Str(tabl[j].y:3:2, s); // Преобразуем значение функции в строковый тип
   if (tabl[j].y < 0) then s := '| ' + s + ' |' // Если значение функции    //отрицательное, вертикальные границы прочертить по краям значения, если
    else s := '|  ' + s + ' |'; // положительное – добавить пробел слева
   outtextxy(540,j2 + 10,s); // Рисуем ячейку функции
   j2 := j2 + 10; // Сдвиг по оси Y
  end;
 outtextxy(490,j2 + 10,'---------------'); // Рисуем горизонтальную линию,
// завершающую таблицу
end;
begin
 { заполняем таблицу значениями функции }
 tabl[1].x := st_x; // Начальное значение аргумента
 for i := 1 to 35 do //Цикл по всем значениям аргумента
  begin
   tabl[i].y := ln(tabl[i].x - 2); // Значение функции
   tabl[i].y := round(tabl[i].y * 100 + 0.5) / 100; // Округляем значение 
   if(i = 35)then break; // Если счётчик равен последнему значению - прервать
   tabl[i + 1].x := tabl[i].x + h;// Добавляем шаг к значению аргумента
  end;

 Graph_init; // Запуск графического режима 
 Ris_osey;   // Запуск рисования осей
 Ris_graph;   // Запуск рисования графика
 List_table;  // Запуск вывода таблицы значений

 repeat
 until keypressed; // Ожидание нажатия любой клавиши

 CloseGraph; // Выход из графического режима
end. // Завершение программы

что не так? у меня не хочет открывать , для начала выдает : модуль 'graph' не найдет , ставлю graphabc выдает ошибку не известное имя vga ... итд d := VGA; r := VGAHI;

Дата отправки: 21.05.2019, 23:24
Вопрос задал: mustang289 (Посетитель)
Всего ответов: 1
Страница онлайн-консультации »


Консультирует puporev (Профессионал):

Здравствуйте, mustang289!
Зайдите в каталог TP 7.0, в папку Units, скопируйте файл Graph.tpu и положите его в папку Bin.
Вот я исправил ошибки в коде, подредактировал чуть, во вложении pas, exe файлы и необходимые модули

Консультировал: puporev (Профессионал)
Дата отправки: 26.05.2019, 07:44
Прикреплённый файл: посмотреть » [44.6 кб]
Рейтинг ответа:

НЕ одобряю 0 одобряю!

Консультация # 195690:

скачать файл Listing_sharik.doc [47.5 кб]Здравствуйте! Прошу помощи в следующем вопросе:
задание Построить движение шарика по следующей траектории
код почему не получается где ошибки?
Листинг:

Код (Pascal) :: выделить код
program
Sharik;
uses crt,graph; 

var
 x_h,y_h : integer; //Объявляем переменные координат шара

{ инициализация графического режима
  VGA, режим VGAHI  640 x 480       }
procedure Graph_init;
var
   d,r,err : integer; //Объявляем переменные графического драйвера, 
 // графического режима, ошибки
begin
 d := VGA; r := VGAHI;
 InitGraph(d,r,'');
 err := GraphResult; //Проверяем результат последней операции с графикой 
 if (err <> 0) then  //Не ноль означает ошибку!
  begin              // Сообщение об ошибке и досрочный выход из программы 
   writeln('Ошибка в инициализации графики!!!');
   delay(1000);
   halt;
  end;
 ClearDevice;
end; 
{ рисование шара синим цветом }
procedure Shar_blue;
begin
 setcolor(1);  //Выбираем текущий цвет 
 circle(x_h,y_h,10); //Рисуем окружность радиусом 10
 SetFillStyle(1,1); // Устанавливаем стиль (тип и цвет) заполнения шара         
 FloodFill(x_h,y_h,1);// Заполняем шар цветом, используя текущий стиль
end;

{ рисование следа шара  }
procedure Shar_fon;
begin
 setcolor(0); //Выбираем цвет следа шара
 circle(x_h,y_h,10); //Рисуем окружность радиусом 10
 SetFillStyle(1,0); // Устанавливаем стиль (тип и цвет) заполнения следа шара
 FloodFill(x_h,y_h,0);// Заполняем след шара цветом, используя текущий стиль
end;

{ перемещение шарика }
procedure Move;
var
 i,k : integer; // Объявляем переменные

begin
 for k := 1 to 3 do // Цикл кол-ва «ступеней»
  begin
   for i := 1 to 50 do // Цикл перемещения по оси Х
    begin
   Shar_blue; // Вызов процедуры
     delay(10);// Задержка
     Shar_fon; // Вызов процедуры
     delay(10); // Задержка
     x_h := x_h - 1; // Смещаем шар на 1 влево
    end; //выход из цикла

   for i := 1 to 50 do // Цикл перемещения по оси Y
    begin
     Shar_blue; // Вызов процедуры
     delay(5);  // Задержка
     Shar_fon; // Вызов процедуры
     delay(5); // Задержка
     y_h := y_h + 1; // Смещаем шар на 1 вниз
    end; //выход из цикла
  end; 
end;

begin
 x_h := 600; // Устанавливаем координаты оси Х
 y_h := 50;  // Устанавливаем координаты оси Y
 Graph_init; // Запускаем графический режим
 setcolor(3); // Выбираем цвет фона
 SetFillStyle(1,3); // Устанавливаем стиль (тип и цвет) заполнения фона
 FloodFill(0,0,3); //Заполняем фон
 Move; // Запускаем процедуру перемещения шарика
 repeat
 until keypressed; // Ожидание нажатия любой клавиши
 CloseGraph; // Выход из графического режима
end. // Завершение программы

Дата отправки: 21.05.2019, 23:27
Вопрос задал: mustang289 (Посетитель)
Всего ответов: 1
Страница онлайн-консультации »


Консультирует puporev (Профессионал):

Здравствуйте, mustang289!
Думаю у Вас здесь те же проблемы что и в предыдущей консультации (№ 195689). Там приложены недостающие у Вас файлы модулей. Приведенный код рабочий.

Консультировал: puporev (Профессионал)
Дата отправки: 26.05.2019, 07:49
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Оценить выпуск | Задать вопрос экспертам

главная страница  |  стать участником  |  получить консультацию
техническая поддержка

Дорогой читатель!
Команда портала RFPRO.RU благодарит Вас за то, что Вы пользуетесь нашими услугами. Вы только что прочли очередной выпуск рассылки. Мы старались. Пожалуйста, оцените его. Если совет помог Вам, если Вам понравился ответ, Вы можете поблагодарить автора - для этого в каждом ответе есть специальные ссылки. Вы можете оставить отзыв о работе портале. Нам очень важно знать Ваше мнение. Вы можете поближе познакомиться с жизнью портала, посетив наш форум, почитав журнал, который издают наши эксперты. Если у Вас есть желание помочь людям, поделиться своими знаниями, Вы можете зарегистрироваться экспертом. Заходите - у нас интересно!
МЫ РАБОТАЕМ ДЛЯ ВАС!


В избранное