Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Прграммирование и основы алгоритмизации. Прграм...doc
Скачиваний:
1
Добавлен:
23.09.2019
Размер:
839.68 Кб
Скачать

Var d,I,m,rx,ry:integer;

begin

initgraph(d,m,''); {переход в графику}

ry:=getmaxy; rx:=getmaxx; {размер экрана}

line(0,0,rx,ry); {первая диагональ}

line(0,ry,rx,0); {вторая диагональ}

f or i:=1 to 4 do begin{окружности}

circle(rx div 2,ry div 2,50*i);

end;

readln; {пауза для просмотра результата}

closegraph; {закрытие графического режима}

end.

Пример 11-2. Вывести на кран функцию f(x)=sin(x)*x вместе с координа­тными осями. Аргумент Х изменяется от начального значения Xn=0 до конеч­ного Xk=20 с шагом dx=0.01. Главная проблема зак­лючается в масштабиро­вании исходной “натуральной” функции F в ее экранный вид Fэ: F(X)Fэ(Xэ). Здесь следует учесть, что экранные координаты расположены (рис. 11.2) не так как мы привыкли. Точка 0э,0э находится в его верхнем левом углу (а не в центре), ось Yэ идет вниз (а не вверх), ось Xэ – идет вправо. Т.о. для адекватного отображения графика на экране нам понадобится реализовать три действия:

1. Масштабировать диапазоны D изменения натуральных Х и Y к желаемым экранным, т.е. привести DХ и DY к DХэ и DYэ соответственно с помощью масштабных коэффициентов Mx=DХэ/Dx и My=DYэ/DY.

2. Перенести координаты так, чтобы максимум Yэ приходился на верхнюю границу экранной области, а начальное значение X – на левую ее границу.

3. Перевернуть направление графика. Поскольку направление экранной оси ординат противоположно натуральному, знак изменения Yэ должен быть противоположен знаку Y.

Программа имеет следующую структуру. 1). Описывается функция вычис­ления f(x). 2). Выясняются размеры экрана, параметры аргумента, проводится вертикальная координата. 3).Находятся максимальные значения Y. 4). Выпол­няется масштабирование переменных (msy и msx). Эти значения указывают, сколько пикселей приходится на единицу изме­нения Y и Х соответственно. 5). Выполняется собственно рисование кривой. Здесь оно выполнено двумя способами – точками и отрезками линий. Проверьте результат в обоих случаях, поочередно убрав одну из них. 6). Проводится ось Х.

program P11_2;

uses graph;

Var d,m,rx,ry:integer;

X,y,xn,xk,ymin,ymax,dx:real; msy,msx:real;

function f(x:real):real; {вычисление функции}

begin f:=sin(x)*x end;

begin

initgraph(d,m,''); {переход в графический режим}

ry:=getmaxy+1; rx:=getmaxx+1; {размер экрана}

line(0,0,0,ry); {ось Y}

xn:=0; xk:=60; dx:=0.01;{параметры аргумента}

x:=xn; {начальное Х}

ymin:=f(x); ymax:=f(x);

while x<=xk do begin {поиск максимума и минимума Y}

y:=f(x);

if y>ymax then ymax:=y;

if y<ymin then ymin:=y;

x:=x+dx; {изменяем Х}

end;

msy:=ry/abs(ymax-ymin); {масштаб по Y}

msx:=rx/abs(xk-xn); {масштаб по X}

x:=xn; {начальное Х}

while x<=xk do begin {рисование}

y:=f(x);

putpixel(round((x-xn)*msx),-round((y-ymax)*msy),2); {точки}

lineto(round((x-xn)*msx),-round((y-ymax)*msy)); {отрезки}

x:=x+dx; {изменяем Х}

end;

line(0,-round(-ymax*msy),rx,-round(-ymax*msy)); {ось Х}

readln; {пауза для просмотра картинки}

closegraph;

end.

Здания для самостоятельного решения

а). Решить аналогичную задачу, но ось Y направить горизонтально, а Х – вертикально.

б). Известна зарплата (массив z[1..5]) работников (N=5) бригады. Построить диаграмму из вертикальных линий.

в). Условие то же, но диаграмма столбиковая. Замечание. Ширина столбца определяется делением ширины экрана на число рабочих. Однако, если ширина столбца не кратна размеру экрана, крайний столбец будет отображен не полностью. При программировании следует учесть этот фактор, уменьшив ширину столбца.

г). Известна зарплата (массив z[1..5]) и премия (массив p[1..5]) каждого из N=5 работников бригады. Построить совмещенную столбиковую диаграмму (на столбике зарплаты стоит столбик премии). Премия должна быть заштрихована командой SetFillStyle.

д). Для той же задачи построить секторную диаграмму зарплат. Указание. Сна­чала следует найти сумму всех зарплат s. Затем перевести зарплату каждого работника в градусы его сектора на диаграмме z[i]/s*360 и запомнить ее в массиве z[1..5]. Далее вычислить начальный и конечный угол каждого радиуса каждого сектора, нарисовать диаграмму командой PieSlice и раскрасить ее.

Литература. При изучении предмета можно использовать любую доступ­ную книгу, содержащую сведения по языку Паскаль. В библиотеке МГУТУ имеется учебное пособие: Попов А.А. Программирование и основы алгоритмизации, Программирование на языках высокого уровня. – М., МГУТУ, 2004.

Задание на курсовую работу

Оформление работы. Работа должна содержать формулировку задания, краткие объяснения по ее решению, математические выкладки (если необходимы) и подробно прокомментированный текст программы. Работа должна быть написана (или напечатана) на листах формата А4 (на гладких или в клетку) и помещена в пластиковый скоросшиватель. Каждый оператор программы должен быть размещен на отдельной строке. На титульном листе студенту следует указать свои обычные реквизиты.

Задание. Вариант определяется числом, образованным двумя последни­ми цифрами шифра студента, следующим образом. Если это число меньше 33, из перечня вариантов берется вариант с идентичным номером, если более, то из числа, взятого из шифра вычитается 33 до тех пор, пока не останется число 32. Например, для шифра 26 необходимо выполнить 26-ой вариант, для шифра 50 вариант вычисляется как 50-33=17 (т.е. 17-тыи вариант), для 94 это 94-66=28.

В курсовой работе требуется составить программу, выполняющую указан­ные в варианте преобразования с квадратной А(N,N) матрицей. При этом сле­дует нарисовать исходную матрицу с индексами ее элементов и преобразо­ванную с новым содержимым (аналогично рисункам к примеру 6.4). Если в условии задачи речь идет о перемещении элементов матрицы, то в качестве исходных данных лучше брать не произвольные числа, а индексы этих элемен­тов (например содержимым клетки А(2,5) лучше взять число 25). Тогда легче разработать алгоритм программы, написать ее и отладить. Программа должна строиться таким образом, чтобы существовала возможность ее использования с массивами любой размерности, содержащими произвольные элементы. В программе должна быть предусмотрена выдача на печать исходных и преоб­разованных матриц и других, указанных в задании, результатов вычислений. Если решение задачи критично к факту четности/не­четности числа столбцов или строк, студент сам выбирает этот параметр. Ниже для пояснения сути задания ниже некоторые варианты сопровождаются рисунками.

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

0. В матрице А(N,N) найти элементы, встречающиеся более одного раза. Из этих элементов составить и напечатать матрицу Х из двух столбцов. В первом столбце разместить сами значения таких элементов, во втором – количество раз, которое они встретились. Составить и напечатать новую матрицу B(N,N), элементами которой являются числа, указывающие сколько раз встретился элемент, находящийся в этой же позиции в А(N,N).

1. В матрице А(N,N) найти элементы, встречающиеся не более одного раза. Напечатать их значения, индексы и сумму S, а также исходную матрицу, где отображены только эти элементы (остальные элементы при печати замещаются значком ­“–“).

2. В матрице А(N,N) найти элемент, который является одновременно макси­мальным в строке и минимальным в столбце. Если такого элемента нет, должно быть выдано сообщение “элемент не найден”. Если такой элемент имеется, вычислить суммы S1, S2, S3, S4 чисел, находящихся в четвертях, отсекаемых найденными столбцом и строкой.

3. В матрице А(N,N) найти максимальный МХ и минимальный MN элемен­ты, а также произведение P всех элементов, находящемся в прямоуголь­нике ми­нимальных размеров, включающий оба этих элемента и сумму S элементов, находящихся вне этого прямоугольника. Замечание: в случае, если оба элемента находятся в одной строке/столбце, прямоугольник превращается в фрагмент этой строки/столбца.

4. В матрице А(N,N) все ее элементы повернуть на четверть по часовой стрелке и разместить их в матрице X(N,N). На рисунке к варианту слева показан исходный, а справа – преобразованный виды матрицы.

5. В матрице А(N,N) все ее элементы повернуть на четверть против часовой стрелки и разместить их в матрице X(N,N). На рисунке к варианту слева показан исходный, а справа – преобразованный вид матрицы.

6÷12. В матрице А(N,N) уплотнить все четные элементы в направлении указанном на рисунке. Остальные элементы сделать равными нулю.

13÷20. Заполнить матрицу А(N,N) числами натурального ряда в последова­тельности, указанной на рисунке и найти их сумму.

21÷28. В матрице А(N,N) уплотнить все нечетные элементы в направлении указанном на рисунке. Остальные элементы сделать равными нулю.

29÷32. Расположить в матрице А(N,N) элементы в порядке их убывания в последовательности, указанной на рисунке.

На кафедре Информационных технологий в течение всего учебного года осуществляются бесплатные консультации и прием академических задолженностей по

  понедельникам и пятницам с 17 до 18.30  

В это или в другое согласованное время, по просьбе студентов проводятся дополнительные оплачиваемые занятия, в том числе и по контрольным/курсо­вым работам.

МГУТУ. 2005г. Тираж 150. Изд. № . Заказ       

45