IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Pascal 7.0 График функции и таблица, Ребят, очень нужна ваша помощь
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 25
Пол: Женский
Реальное имя: Дианка

Репутация: -  0  +


Дали задание, не когда прежде не работала с графикой, почитала... стало страшно sad.gif дали 4 дня на выполнение работы

Нужно построить график функции y=lg(x)
и рядом с графиком выводилась табличка
что то типа
X|Y
1 3
2 3
1 4
Несколько значений функции в точках smile.gif Как когда то, в школе делали таблички к графикам.
rolleyes.gif
И если не трудно, можно с комментариями, посмотрела что можно с помощью графики делать- понравилось smile.gif
Выручайте
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Гость






Графика - это самое интересное, что только может быть, ты просто еще не втянулась в процесс smile.gif Смотри:

uses graph;
{ Ну, назначение этих двух функций я уже объяснял, поэтому вкратце: }

{ 1) вычисление log10(x)
поскольку библиотечной функции нет - пришлось написать свою }
function f(X: real): real;
begin
f := ln(X) / ln(10);
end;

{ 2) Перевод вещественного числа в строку с точностью 3 знака после запятой,
только для более удобного использования, чем непосредственный вызов Str }
function RealToStr(X: real): string;
var st: string;
begin
str(X:6:3, st);
RealToStr := st;
end;

{ Это - для масштабирования
ScaleX определяет, насколько будет "вытянут" график по оси OX, а
ScaleY - насколько он будет вытянут по оси OY.

При увеличении соответствующего значения расстояние между координатами точек
на графике будет больше, и график будет более "разреженным", при уменьшении - наоборот,
график "уплотнится", поскольку расстояние между координатами точек уменьшится }
const
ScaleX = 20;
ScaleY = 60;

{ Ну, тут не будем останавливаться надолго, переменные они и есть переменные, их
назначение я опишу при использовании }
var
TableWidth, CenterX, CenterY: integer;
gDriver, gMode, errCode: integer;
color, n: integer;
X, Y: real;

begin
{ Поехали! Прежде всего инициализируем графику }
gDriver := Detect;
InitGraph(gDriver, gMode, '');
{ Получаем результат инициализации (была ли ошибка?) }
errCode := graphresult;
if errCode <> grOk then begin
{ Если не grOk - значит, была ошибка, выводим ее описание,
и выходим из программы Halt-ом, 100 - это код завершения,
который вернет программа. Можешь вернуть любое число 0 .. 65536,
но обычно 0 - это корректное завершение программы, а тут - ошибка...
Я привык возвращать 100 при ошибках инициализации графики... }
writeln('ERROR: ' + grapherrormsg(errCode));
readln; halt(100)
end;

{ Теперь определяем, какой ширины будет таблица. Чтоб не привязываться
к конкретным значениям (ну вот у тебя ширина экрана = 640, а у меня = 800),
ширину таблищы вычисляем в зависимости от ширины экрана: 1/6 ширины
займет таблица, все остальное - график }
TableWidth := getmaxx div 6;

{ Вот это - точка начала координат для моего графика.
По OX - небольшой отступ от "области таблицы", по OY - середина экрана }
CenterX := TableWidth + 10;
CenterY := getmaxy div 2;

{ Рисуем координатные оси... Пускай они будут зелеными... }
setcolor(lightgreen);
line(CenterX, CenterY, getmaxx - 10, CenterY);
line(CenterX, 10, CenterX, getmaxy - 10);

{ Начальное значение X }
X := 0.1;
n := 0; { Это - количество точек, которые уже были добавлены к графику }

{ Теперь настроим шрифт.
Во-первых, его цвет будет белым,
Во-вторых, сам шрифт будет LITT.CHR (smallfont определяет именно этот шрифт),
чтоб координаты точек помещались в таблицу, и горизонтально-ориентированным
(horizdir). Двойка - это размер самого шрифта. То есть, он как бы не совсем маленький,
при 1 он будет еще меньше...
Третье: настраиваем вывод текста (settextjustify): эта процедура определяет, где именно
будет выводиться текст после вызова OutTextXY, что определяют координаты, в которых
текст выводится... В моем случае координаты определяют ЦЕНТР текста. То есть, текст
выведется так, что его середина (и по OX, и по OY) совпадет с заданными координатами.
Именно середина, не левый, и не правый край, не верх и не низ !!!}
setcolor(white);
settextstyle(smallfont, horizdir, 2);
settextjustify(centertext, centertext);

{ Выводим заголовок таблицы }
outtextxy(TableWidth div 2, textheight('W') + 3,
'X | Y');

{ Теперь для всех X-ов, от начального значения, пока X будет < 20, делаем следующее: }
while X < 20 do begin
Y := f(X); { Вычисляем значение функции }

if n mod 10 = 0 then begin
{ Для каждой десятой точки печатаем ее координаты в таблицу, а саму точку будем
выводить красным цветом на графике }
color := lightred;
outtextxy(TableWidth div 2, ((n div 10) + 2) * (textheight('W') + 3),
RealToStr(X) + ' ' + RealToStr(Y));
end
else color := white; { если эта точка НЕ каждая десятая - то просто выведем ее белой... }

{ Собственно, сам вывод точки на график: задаем смещение от начала координат:
по оси OX это значение X, отмасштабированное с помощью ScaleX
по оси OY - значение Y, опять же отмасштабированное ScaleY, но поскольку система
координат модуля graph такая, что координата Y увеличивается СВЕРХУ ВНИЗ, то приходится
отнимать, а не прибавлять полученное смещение от CenterY, чтобы график выглядел так, как
привыкли мы, а не так, как привык Borland... }

putpixel(CenterX + trunc(X * ScaleX),
CenterY - trunc(Y * ScaleY), color);

{ Ну все, дальше уже мелочи, увеличиваем значение X, увеличиваем число точек,
отображенных на графике }
X := X + 0.2;
inc(n)
end;
{ график начерчен, ждем реакции пользователя }
readln;
{ и выходим... Не забываем закрыть граф. режим }
closegraph;
end.

rolleyes.gif

Сообщение отредактировано: volvo -
 К началу страницы 
+ Ответить 

Сообщений в этой теме
DarkMoonSide   Pascal 7.0 График функции и таблица   12.02.2009 6:45
Ozzя   Построение любого графика   12.02.2009 10:59
DarkMoonSide   Ув. Оззик :) Вы кинули ссылку на постороение …   13.02.2009 1:31
volvo   Имеется в виду логарифм с основанием 10?   13.02.2009 1:53
DarkMoonSide   Да, имеется в виду log 10 с основанием 10. И еще…   13.02.2009 2:00
volvo   Графика - это самое интересное, что только может б…   13.02.2009 2:41
DarkMoonSide   Спасибо огромное, и еще пару вопросов, а то интере…   13.02.2009 2:54
volvo   Это не одна, а две функции... Первая - f - считает…   13.02.2009 3:03
DarkMoonSide   Такс, все заработало, это теперь мне, что бы над …   13.02.2009 3:04
volvo   Отображается... Только для этого забери из папки B…   13.02.2009 3:08
DarkMoonSide   Спасибо, уже додумалась :)) Осталось вывести над …   13.02.2009 3:12
volvo   Вот в том фрагменте, что ты привела, все, что межд…   13.02.2009 3:50
DarkMoonSide   Угу, разобралась с цветовой гаммой, как делать лин…   13.02.2009 3:54
volvo   Через OutText ничего нельзя вводить, можно только …   13.02.2009 4:05
DarkMoonSide   Cпасибо, пашла читать :) п.с. если не трудно и буд…   13.02.2009 4:15
DarkMoonSide   Я знаю, я в край обнаглела, но я поспрашиваю вопро…   13.02.2009 4:59
DarkMoonSide   :rolleyes:   13.02.2009 15:06
volvo   1) комментарии в основную программу добавлены... 2…   13.02.2009 15:14
DarkMoonSide   Cпасибо всем огромное :) :) еще пару вопросиков …   14.02.2009 6:16
DarkMoonSide   все поняла, разобралась :) "Дорисовала" …   14.02.2009 8:40
Ozzя   textheight('W') - просто взяли самую широк…   14.02.2009 11:27
volvo   Высоту, Оззя... Я не написал TextWidth, я написал …   14.02.2009 15:24
Ozzя   volvo Ну да, ашыпко :rolleyes: Пальцы раньше мысл…   14.02.2009 15:53
kpoxa   ребят,простите пожалуйста.зашла вот на ваш форум))…   5.04.2009 23:43
volvo   Если ты о программе из поста №6, то она и отлажива…   6.04.2009 0:26


 Ответить  Открыть новую тему 
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 5.09.2025 15:39
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name