Как найти координаты точек в паскале

Линейная функция y = kx + b. Решаем в Pascal

Добрый день, товарищи!

В этой публикации мы разберем, как находить координаты точек математической функции y = kx + b. С помощью программы мы найдем две координаты для построения графика. Напомню, что график данной функции – прямая.

Перед тем, как начать, покажу вам, как от значения k и b зависит положение графика, это так, на всякий случай.

Небольшая памятка.
Небольшая памятка.

В конце публикации – ссылка на код на Яндекс.Диске.

Итак, начинаем..

1. Переменные для программы

Набор переменных
Набор переменных

Смотрим: х1 и у1 нам нужны для первого набора точек, х2 и у2 – для второго. Ну и, само собой, k и b. Тип данных выберем вещественный, так как такая функция может легко содержать в себе дроби.

2. Введем k и b

Начинаем задавать значения нашего уравнения
Начинаем задавать значения нашего уравнения

Просто введем пару пригласительных сообщений, для наглядности, и сделаем возможность вводить переменные.

3. Задаем точки (х) функции

Задаем иксы
Задаем иксы

Так же, как и в предыдущем примере предложим пользователю ввести значения точек-иксов.

В конце, перед самим решением функции выведем его полностью, уже с нашими введенными значениями. Для наглядности, опять таки.

4. Решение функции

Решаем два уравнения
Решаем два уравнения

Решим два простеньких уравнения для каждой из заданных точек (х1 и х2). Готово! Функция решена, точки найдены. Остается только красиво это все вывести.

5. Выводим результаты

Покажем пользователю результат
Покажем пользователю результат

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

6. Тестирование

Тестируем программу
Тестируем программу

Так выглядит тест программы, для первого теста были взяты значения х {0} и {1}, потому что функция является линейной, и брать эти значения проще всего.

Программа не строит график самостоятельно (хотя на Delphi это более чем возможно реализовать, ну об этом в будущем), но для этого теста я построил график с найденными точками.

График для найденных координат
График для найденных координат

7. Конец

Чтож, программа доделана, код, как и обещал, кидаю ниже:

Скачать программу для Паскаля с Яндекс.Диска

Линейная функция y = kx + b. Решаем в Pascal

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

По возможности я попросил бы подписаться и оценить публикацию. Сейчас это критически важно для развития канала. Так то!

Доброго вам всем здоровьица в эти трудные времена!

Определение координат рандомной точки в паскале



Знаток

(281),
закрыт



10 лет назад

Дополнен 10 лет назад

Мне нужны координаты этих точек чтобы потом соединить их линиями, вообще задание состоит в том чтобы нарисовать граф, задается количество вершин и количество ребер

Дополнен 10 лет назад

Я занес их в массив, а как мне сделать чтобы они все замыкались?

Fantom

Ученик

(212)


10 лет назад

Координаты действительно в X и Y, как и писали выше, а вот если надо после этого цикла изнайти эти координаты, то нужно их в цикле записывать в массив, например.

Арсен Арутюнян

Гуру

(4674)


10 лет назад

Всмысле определить?
У вас же задаются 2 рандомных числа и тут же перадаются как параметры функции, если вам надо узнать что за числа были перданны, то можете в каждой итерации цикла просто вывести эти числа, например:
после функции putpixel пишете writeln(‘x = ‘,x,’y= ‘,y);

103 / 90 / 75

Регистрация: 04.11.2011

Сообщений: 1,818

1

Определить координаты точки

21.11.2014, 11:34. Показов 6753. Ответов 3


Студворк — интернет-сервис помощи студентам

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



0



Programming

Эксперт

94731 / 64177 / 26122

Регистрация: 12.04.2006

Сообщений: 116,782

21.11.2014, 11:34

Ответы с готовыми решениями:

Вводятся координаты точки. Определить, попадает ли точка в заштрихованную область или нет
Собственно, задание в теме, пока что, я не понимаю, как это реализовать на этом языке, а на другом…

Даны два целых числа – координаты точки в декартовой системе координат. Определить, в какой четверти находится точка
Даны два целых числа – координаты точки в декартовой системе координат. Определить, в какой…

Даны два числа – координаты точки в декартовой системе координат. Определить, к какой оси X млм Y она ближе
Даны два числа – координаты точки в декартовой системе координат. Определить, к какой оси X млм Y…

Даны координаты точки (x,y). Определить принадлежность заданной точки заштрихованной области, включая ее границы
Ребята, помогите, пожалуйста, решить эти задачи. Желательно, ещё и объяснить,что именно найти….

3

Legolas

171 / 57 / 45

Регистрация: 21.06.2012

Сообщений: 263

21.11.2014, 12:49

2

Как оформляются модули я уже не помню, держите так, думаю сумеете переделать
количество точек – константа n
ввод координат точек, добавьте сами, я не знаю откуда они должны вводится – пользователем/рандомом/с файла

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
uses crt;
const
 n = 3;
type
 point= record x,y: real; end; //тип - точка
 tPoint = array [1..n] of point; 
var
 ArrayPoint: tPoint; //массив точек
 ResultPoint: point;
 
function Verify (var mas: tPoint): boolean; //проверка принадлежности первой четверти
var i: integer;
begin
 Verify:= true;
 for i:=low(mas) to high(mas) do
  if (mas[i].x<0) or (mas[i].y<0) then begin Verify:= false; exit; end;
end;
 
procedure FindFar (var mas: tPoint; var ResultPoint: point); // поиск самой дальней точки
var i: integer;
 r_max: point;
begin
 r_max:= mas[1];
 for i:=low(mas) to high(mas) do
  if sqrt(sqr(mas[i].x)+sqr(mas[i].y)) > sqrt(sqr(r_max.x)+sqr(r_max.y)) then r_max:= mas[i];
 ResultPoint:= r_max;
end;
 
procedure NotFirst (var mas: tPoint); //вывод точек не лежащих в первой четверти
var i: integer;
begin
 writeln ('NotFirst');
 writeln;
 for i:=low(mas) to high (mas) do
  if (mas[i].x<0) or (mas[i].y<0)
   then writeln ('x[',i,'] = ',mas[i].x:5:2,' y[',i,'] = ',mas[i].y:5:2);
end;
 
begin
 clrscr;
//ввод координат точек
 ArrayPoint[1].x:=1;
 ArrayPoint[1].y:=1;
 ArrayPoint[2].x:=2;
 ArrayPoint[2].y:=-2;
 ArrayPoint[3].x:=1;
 ArrayPoint[3].y:= 1;
 
 if Verify (ArrayPoint)
   then
  begin FindFar(ArrayPoint, ResultPoint);
    writeln ('Max far');
    writeln;
    writeln ('Max far = x = ',ResultPoint.x:0:2,' y = ',ResultPoint.y:0:2)
  end
   else NotFirst (ArrayPoint);
 readln;
end.



0



Xo6ut

103 / 90 / 75

Регистрация: 04.11.2011

Сообщений: 1,818

21.11.2014, 16:54

 [ТС]

3

Не получается разделить на модуль и основную программу

Добавлено через 1 час 51 минуту
И ввод точек тоже по идее нужно сделать через процедуру.

Добавлено через 2 минуты
Помогите только с разделением.

Добавлено через 21 минуту
Попробовал сделать так

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
unit my;
interface
const
 n = 3;
type
 point= record x,y: real; end; //тип - точка
 tPoint = array [1..n] of point; 
 var
 ArrayPoint: tPoint; //массив точек
 ResultPoint: point;
 procedure print(x:integer);
 function Verify (var mas: tPoint): boolean;
 procedure FindFar (var mas: tPoint; var ResultPoint: point);
 procedure NotFirst (var mas: tPoint);
 implementation
  procedure print(x:integer);
 begin
 writeln('vvedite koordinati ',n,' to4ek');
writeln('1aya to4ka');
readln(ArrayPoint[1].x, ArrayPoint[1].y);
writeln('2aya to4ka');
readln(ArrayPoint[2].x, ArrayPoint[2].y);
writeln('3aya to4ka');
readln(ArrayPoint[3].x, ArrayPoint[3].y);
end;
 
 
function Verify (var mas: tPoint): boolean; //проверка принадлежности первой четверти
var i: integer;
begin
 Verify:= true;
 for i:=low(mas) to high(mas) do
  if (mas[i].x<0) or (mas[i].y<0) then begin Verify:= false; exit; end;
end;
 
procedure FindFar (var mas: tPoint; var ResultPoint: point); // поиск самой дальней точки
var i: integer;
 r_max: point;
begin
 r_max:= mas[1];
 for i:=low(mas) to high(mas) do
  if sqrt(sqr(mas[i].x)+sqr(mas[i].y)) > sqrt(sqr(r_max.x)+sqr(r_max.y)) then r_max:= mas[i];
 ResultPoint:= r_max;
end;
 
procedure NotFirst (var mas: tPoint); //вывод точек не лежащих в первой четверти
var i: integer;
begin
 writeln ('NotFirst');
 writeln;
 for i:=low(mas) to high (mas) do
  if (mas[i].x<0) or (mas[i].y<0)
   then writeln ('x[',i,'] = ',mas[i].x:5:2,' y[',i,'] = ',mas[i].y:5:2);
end;
end.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
uses my, crt;
const
 n = 3;
type
 point= record x,y: real; end; //тип - точка
 tPoint = array [1..n] of point; 
var
 ArrayPoint: tPoint; //массив точек
 ResultPoint: point;
begin
 clrscr;
 
if Verify (ArrayPoint)
   then
  begin FindFar(ArrayPoint, ResultPoint);
    writeln ('Max far');
    writeln;
    writeln ('Max far = x = ',ResultPoint.x:0:2,' y = ',ResultPoint.y:0:2)
  end
   else NotFirst (ArrayPoint);
 readln;
end.

Пишет: неправильный тип подрограммы



0



Puporev

Почетный модератор

64286 / 47585 / 32739

Регистрация: 18.05.2008

Сообщений: 115,182

21.11.2014, 17:02

4

Цитата
Сообщение от Xo6ut
Посмотреть сообщение

Помогите только с разделением.

Текст модуля

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
unit modul;
interface
const n = 3;
type
 point= record x,y: real; end; //тип - точка
 tPoint = array [1..n] of point;
function Verify (var mas: tPoint): boolean;
procedure FindFar (var mas: tPoint; var ResultPoint: point);
procedure NotFirst (var mas: tPoint);
 
implementation
function Verify (var mas: tPoint): boolean; //проверка принадлежности первой четверти
var i: integer;
begin
 Verify:= true;
 for i:=1 to n do
  if (mas[i].x<0) or (mas[i].y<0) then begin Verify:= false; exit; end;
end;
 
procedure FindFar (var mas: tPoint; var ResultPoint: point); // поиск самой дальней точки
var i: integer;
 r_max: point;
begin
 r_max:= mas[1];
 for i:=1 to n do
  if sqrt(sqr(mas[i].x)+sqr(mas[i].y)) > sqrt(sqr(r_max.x)+sqr(r_max.y)) then r_max:= mas[i];
 ResultPoint:= r_max;
end;
 
procedure NotFirst (var mas: tPoint); //вывод точек не лежащих в первой четверти
var i: integer;
begin
 writeln ('NotFirst');
 writeln;
 for i:=1 to n do
  if (mas[i].x<0) or (mas[i].y<0)
   then writeln ('x[',i,'] = ',mas[i].x:5:2,' y[',i,'] = ',mas[i].y:5:2);
end;
end.

текст программы

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
uses modul,crt;
var
 ArrayPoint: tPoint; //массив точек
 ResultPoint: point;
begin
//ввод координат точек
 ArrayPoint[1].x:=1;
 ArrayPoint[1].y:=1;
 ArrayPoint[2].x:=2;
 ArrayPoint[2].y:=-2;
 ArrayPoint[3].x:=1;
 ArrayPoint[3].y:= 1;
 writeln(' ');
 if Verify (ArrayPoint) then
  begin
   FindFar(ArrayPoint, ResultPoint);
   writeln ('Max far');
   writeln;
   writeln ('Max far = x = ',ResultPoint.x:0:2,' y = ',ResultPoint.y:0:2)
  end
else NotFirst (ArrayPoint);
end.



0



IT_Exp

Эксперт

87844 / 49110 / 22898

Регистрация: 17.06.2006

Сообщений: 92,604

21.11.2014, 17:02

Помогаю со студенческими работами здесь

Если все заданные точки плоскости принадлежат первому квадранту, определить координаты точки, наиболее удаленной от начала координат
Если все заданные точки плоскости принадлежат первому квадранту, определить координаты точки,…

Даны координаты вершин треугольника и координаты точки внутри него. Найти расстояние от данной точки до ближайшей сторон
Задание: Даны координаты вершин треугольника и координаты точки внутри него. Найти расстояние от…

Даны координаты вершин треугольника и координаты некоторой точки внутри него. Найти расстояние от данной точки до ближайшей стороны треугольника
Даны координаты вершин треугольника и координаты некоторой точки внутри него. Найти расстояние от…

Определить координаты точки, наиболее удаленной от начала координат
Если все заданные точки плоскости принадлежат первой четверти, определить координаты точки,…

Ввести координаты точки, определить, лежит ли она на окружности радиуса R
На плоскости расположена окружность радиуса R с цен¬тром в начале координат. Ввести заданные…

Даны координаты точки А(х1,у1). Определить, принадлежит ли эта точка отрезку [a,b].
Даны координаты точки А(х1,у1). Определить, принадлежит ли эта точка отрезку .
Заранее благодарен!

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:

4

Процедуру SetViewPort  удобно использовать для построения системы координат на экране. Эту систему координат можно в дальнейшем использовать для построения графика функции.

 Построение системы координат с помощью процедуры SetViewPort.



Program Graphika26;
Uses Graph;
Procedure Graphinterface;
Var  gd, gm, error:Integer;
s:String;
Begin
gd:=detect;
s:='';
Initgraph(gd,gm,s);
error:=GraphResult;
if error<>GrOk then
begin
writeln(GraphErrorMsg(Error));
Halt(error)
end
end;
begin
Graphinterface;
setviewport(getmaxx div 2, getmaxy div 2, getmaxx, getmaxy,clipoff);
setcolor(5);
setlinestyle(0,0,3);
line(-300,0,300,0);
line(0,-300,0,300);
line(300,0,270,-10);
line(300,0,270,10);
line(0,-300,-10,-270);
line(0,-300,10,-270);
readln;
closegraph
end.




В строке №19 записываем процедуру SetViewPort, которая строит на экране невидимое окно. Координаты левого верхнего угла этого окна совпадают с серединой экрана (getmaxx div 2, getmaxy div 2). Координаты правого нижнего угла окна совпадают с правым нижним углом всего экрана. На рис. снизу представлено расположение окна (ABCD), построенного с помощью процедуры SetViewPort. Левый верхний угол окна (точка B) имеет координаты (getmaxx div 2, getmaxy div 2) и совпадает с серединой экрана. Правый нижний угол окна имеет координаты (getmaxx, getmaxy) и совпадает с правым нижним углом экрана.

Procedura SetViewPort sistemma koordinat

5-й параметр процедуры SetViewPort имеет значение ClipOff, т.е. элементы изображений, выходящие за пределы окна, не будут отсекаться.

Строка №20 и №21. Устанавливаем цвет, тип и толщину линий.

Строка №22. Рисуем линию. Так как начало координат теперь находится в левом верхнем углу окна (в точке B), нам необходимо использовать отрицательные координаты при построении изображений, находящихся левее либо выше окна ABCD. На рис. снизу показаны линии, построенные с помощью процедуры Line.

Procedura SetViewPort sistemma koordinat.

Линия EF построена с помощью процедуры Line в строке №22.
Линия GH построена с помощью процедуры Line в строке №23.
Так как точка B имеет координаты (0,0), точка E будет иметь координаты (-300,0), точка F – (300,0), точка G – (0,-300), точка H – (300,0). Таким образом, на данном этапе необходимо запомнить, что изображение, находящееся левее, либо выше окна, построенного с помощью процедуры SetViewPort, должно иметь отрицательные координаты.

Строка №24-№27. Строим стрелочки, указывающие направление осей. На рис. снизу линия FJ построена с помощью процедуры Line в строке №24. Точка F имеет координаты (300,0), точка J – (270,-10).

Procedura SetViewPort sistemma koordinat..

Procedura SetViewPort sistemma koordinat...

Procedura SetViewPort sistemma koordinat....


Предыдущая статья : Процедура SetViewPort.

Оглавление : Уроки Паскаль. Графика.

Следующая статья : Построение системы координат (продолжение).


Предыдущий раздел:

Следующий раздел:

13.3. Экранные координаты. Точка заданного цвета

При запуске программы с подключенным модулем GraphABC создается так называемое графическое окно — обычное для ОС Windows окно, в пределах которого можно рисовать. Площадь окна можно рассматривать как двумерный массив светящихся точек (пикселей). Координаты точек принимают целочисленные значения и отсчитываются от левого верхнего угла окна (рис. 1). Ось ординат направлена вниз. Соответственно, сам левый верхний угол имеет координаты (0,0). Координаты соседних с ним точек, очевидно, будут (0, 1), (1, 0) и (1, 1).

Экранная система координат

Рис. 1. Экранная система координат.

Размеры окна по умолчанию составляют 640 на 480 точек. Однако пользователь может менять их произвольным образом обычным для ОС Windows способом (хватать мышью за угол, распахивать на весь экран и т.д.) Узнать текущий размер окна можно с помощью функций WindowWidth и WindowHeight. Например, инструкция

  W:=WindowWidth;

запишет текущую ширину в переменную W.

Изначально все пиксели окна имеют белый цвет. Однако каждому можно назначить произвольный цвет, заданный в так называемой системе RGB (расшифровывается Red Green Blue). В этой системе цвет задается тремя целыми числами в диапазоне от 0 до 255, задающими интенсивность красной, зеленой и синей составляющей (как известно, любой цвет можно получить их смешением). Цветовые значения имеют специальный тип Color, их можно получить с помощью функции RGB, имеющей заголовок:

  function RGB(r, g, b: byte): Color;

Также цвет можно задать с помощью одной из определенных в модуле GraphABC констант. Например, clRed — красный цвет, clYellow — желтый и т.д. Полный список смотрите в справочной системе среды PascalABC.

Указать любой точке, какого она должна быть цвета можно с помощью процедуры PutPixel. Ее заголовок:

  procedure PutPixel(x, y: integer; c: Color);

Здесь x, y – координаты точки, c – цвет точки.

В принципе, этой процедурой можно было бы и ограничится. Раз для любой точки окна можно указать любой цвет, значит можно нарисовать все, что угодно. Однако, все же полезно иметь в своем распоряжении несколько дополнительных команд для рисования простейших объектов.

Отличие среды Borland Pascal

Ширина и высота экрана в пикселях здесь фиксированна (640 x 480).

По умолчанию все пикселы имеют черный цвет (не светятся), но каждому можно назначить один из 16-ти цветов. Каждому цвету, соответствует целочисленная константа, описанная в модуле Graph. Список констант и их значения приведены в таблице:

Цвет Константа, описанная в модуле Graph Значение константы
Черный Black 0
Синий Blue 1
Зеленый Green 2
Голубой Cyan 3
Красный Red 4
Фиолетовый Magenta 5
Коричневый Brown 6
Светло-серый LightGray 7
Темно-серый DarkGray 8
Ярко-синий LightBlue 9
Ярко-зеленый LightGreen 10
Ярко-голубой LightCyan 11
Ярко-красный LightRed 12
Ярко-фиолетловый LightMagenta 13
Желтый Yellow 14
Белый White 15

Произвольные цвета, не входящие в эту палитру, задать невозможно.

Назначение цвета производится с помощью той же процедуры PutPixel. Ее заголовок:

  procedure PutPixel(X, Y: integer; Color: Word);

Здесь X, Y – координаты точки, Color – цвет точки.

Следующий раздел:

Предыдущий раздел:

Добавить комментарий