1. Заголовок темы должен быть информативным. В противном случае тема удаляется ... 2. Все тексты программ должны помещаться в теги [code=pas] ... [/code]. 3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали! 4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора). 5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM! 6. Одна тема - один вопрос (задача) 7.Проверяйте программы перед тем, как разместить их на форуме!!! 8.Спрашивайте и отвечайте четко и по существу!!!
Pascal 7.0 График функции и таблица, Ребят, очень нужна ваша помощь
Дали задание, не когда прежде не работала с графикой, почитала... стало страшно дали 4 дня на выполнение работы
Нужно построить график функции y=lg(x) и рядом с графиком выводилась табличка что то типа X|Y 1 3 2 3 1 4 Несколько значений функции в точках Как когда то, в школе делали таблички к графикам. И если не трудно, можно с комментариями, посмотрела что можно с помощью графики делать- понравилось Выручайте
Графика - это самое интересное, что только может быть, ты просто еще не втянулась в процесс Смотри:
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;
{ Начальное значение X } X := 0.1; n := 0; { Это - количество точек, которые уже были добавлены к графику }
{ Теперь настроим шрифт. Во-первых, его цвет будет белым, Во-вторых, сам шрифт будет LITT.CHR (smallfont определяет именно этот шрифт), чтоб координаты точек помещались в таблицу, и горизонтально-ориентированным (horizdir). Двойка - это размер самого шрифта. То есть, он как бы не совсем маленький, при 1 он будет еще меньше... Третье: настраиваем вывод текста (settextjustify): эта процедура определяет, где именно будет выводиться текст после вызова OutTextXY, что определяют координаты, в которых текст выводится... В моем случае координаты определяют ЦЕНТР текста. То есть, текст выведется так, что его середина (и по OX, и по OY) совпадет с заданными координатами. Именно середина, не левый, и не правый край, не верх и не низ !!!} setcolor(white); settextstyle(smallfont, horizdir, 2); settextjustify(centertext, centertext);
{ Теперь для всех 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... }
{ Ну все, дальше уже мелочи, увеличиваем значение X, увеличиваем число точек, отображенных на графике } X := X + 0.2; inc(n) end; { график начерчен, ждем реакции пользователя } readln; { и выходим... Не забываем закрыть граф. режим } closegraph; end.
Сообщение отредактировано: volvo - 13.02.2009 11:15