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

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

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

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


Новичок
*

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

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


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

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

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


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

 



- Текстовая версия 28.07.2025 13:30
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"