ОБЩИЕ ТРЕБОВАНИЯ К ПРОГРАММЕ




КУРСОВАЯ РАБОТА

По информатике

 

Вариант 10

 

 

Руководитель _________ _______________

Подпись, дата Инициалы, фамилия

Студент ФЭ16-00Б _________ Фамилия И. О.

Номер группы Подпись, дата Инициалы, фамилия

 

 

Красноярск 2017

СОДЕРЖАНИЕ

ВВЕДЕНИЕ.. 3

ЗАДАНИЕ 1. 4

ЗАДАНИЕ 2. 5

ЗАДАНИЕ 3. 7

ЗАДАНИЕ 4. 8

ЗАДАНИЕ 5. 10

ЗАДАНИЕ 6. 12

ЗАДАНИЕ 7. 13

ОБЩИЕ ТРЕБОВАНИЯ К ПРОГРАММЕ.. 14

ЗАКЛЮЧЕНИЕ.. 15

СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ.. 16

ПРИЛОЖЕНИЕ 1. 17

ПРИЛОЖЕНИЕ 2. 18

ПРИЛОЖЕНИЕ 3. 23

 


ВВЕДЕНИЕ

 

Курсовая работа представляет собой обобщение знаний, полученных студентом в 1-ом семестре по дисциплине «Информационные технологии» по программированию на языке Pascal.

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

Процедуры программы реализуют формирование и обработку массива или матрицы данных. Функция определяет закон получения чисел, являющихся элементами матрицы данных.

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

Текст программы приведён в приложении 2, а результат выполнения программы, сохранённый в текстовом файле – в приложении 3.


 

ЗАДАНИЕ 1

 

Согласно заданию 1 необходимо задать размерность массива через клавиатуру с контролем вводимых значений (см. приложение 1).

Ввод размерности массива с контролем вводимых значений осуществляется в основной программе. С помощью функции readln происходит считывание с клавиатуры значения размерности массива, вводимого пользователем, и присваивание его переменной n: readln(n).

Контроль значений осуществляется с помощью цикла с постусловием repeat … until. По условию работы размерность массива должна быть в промежутке [5, 15]. Именно этот диапазон вводимых значений и задаёт условие выхода из цикла: until (n>4) and (n<16). То есть, цикл ввода размерности повторяется до тех пор, пока введённое значение не будет больше четырёх и меньше шестнадцати:

repeat

write('N (от 5 до 15): ');

readln(n);

if not((n>4) and (n<16)) then

writeln('Неверное число!');

until (n>4) and (n<16);

 

 

ЗАДАНИЕ 2

Согласно заданию 2 необходимо сформировать матрицу [A], заполнив его по заданному закону (см. формулу 1).

Формула 1. Функция y=f(x)

Функция function f(x:real):real определяет закон получения чисел с помощью условного оператора if … then … else …

Само формирование матрицы [A] осуществляется при помощи вложенных циклов со счётчиком for … to … do … в процедуре procedure generate(xn,xk:real):

xk:=(xk-xn)/(n*n-1);

for i:=1 to n do

for j:=1 to n do

begin

a[i,j]:=f(xn);

xn:=xn+xk;

end;

В этой же процедуре определяется шаг приращения dx аргумена x заданной функции y (см. формулу 2).

Формула 2. Определение шага dx изменения аргумента x, где xн и xк – максимальное и минимальное значения x соответственно, n – размерность массива.

Вывод на экран матрицы [A] осуществляется при помощи вложенных циклов со счётчиком for … to … do … в процедуре procedure print. Для задания различных цветов различным элементам матрицы используется оператор задания цвета вывода текста textcolor, а для определения элементов, принадлежащих областям или траектории, составлены соответствующие условия:

for i:=1 to n do

begin

for j:=1 to n do

begin

if (i<=j) and (i<=n-j+1) or (i>n-j) and (i>=j) then

textcolor(14) else

begin

minmax(i,j);

textcolor(7);

end;

if (j=1) or (j=n) or ((i=j) or (i=n-j+1)) and (i>n div 2) then

textcolor(11);

write(a[i,j]:8:2);

write(t,a[i,j]:8:2);

end;

writeln('');

writeln(t,'');

end;

 

 

 

ЗАДАНИЕ 3

Согласно заданию 3 необходимо поменять указанные области матрицы местами и вывести преобразованную матрицу на экран (см. рис. 1).

Обмен областей матрицы осуществляется при помощи вложенных циклов со счётчиком for … to … do … в процедуре procedure change:

for i:=1 to n div 2 do

for j:=1 to n do

if (i<=j) and (i<=n-j+1) then

swap(a[i,j],a[n-i+1,j]);

Эта процедура использует вспомогательную процедуру обмена значениями двух переменных вещественных типов procedure swap(var a,b:real). В качестве аргументов в процедуру swap передаются две переменные вещественного типа, значения которых нужно поменять между собой. Обмен значениями осуществляется через переменную temp, предназначенную для временного хранения одного из чисел:

procedure swap(var a,b:real);

var temp:real;

begin

temp:=a;

a:=b;

b:=temp; end;

ЗАДАНИЕ 4

 

По условию задания 4 необходимо сформировать матрицу-строку [B] из элементов матрицы [A], которые расположены на траектории (см. рис 1).

Формирование матрицы-строки происходит при помощи циклов с предусловием while … do … в процедуре procedure atob. В каждом таком условном цикле задаётся одно направление:

while i<n do move(1,0);

while i>n div 2+1 do move(-1,-1);

if not odd(n) then move(0,-1);

while j>1 do move(1,-1);

while i>1 do move(-1,0);

А один шаг в указанном направлении осуществляется при помощи вложенной в эту процедуру процедуры procedure move(di,dj:shortint):

procedure move(di,dj:shortint);

begin

i:=i+di;

j:=j+dj;

m:=m+1;

b[m]:=a[i,j];

oldb[m]:=b[m];

end;

В качестве аргументов в процедуру move передаются два числа: di – шаг по строкам (в вертикальном направлении), dj – шаг по столбцам (в горизонтальном направлении). Предварительно перед прохождением траектории задаются координаты начальной точки для траектории.

Полученная матрица-строка выводится на экран при помощи процедуры procedure printb. Вывод на экран осуществляется поэлементно в цикле со счётчиком for … to … do …:

procedure printb;

var i:shortint;

begin

for i:=1 to m do

begin

write(b[i]:8:2);

write(t,b[i]:8:2);

end;

writeln('');

writeln(t,'');

end;

 

 

 

ЗАДАНИЕ 5

В задании 5 нам необходимо отсортировать массив [B] по возрастанию и убыванию и вывести результаты на экран.

Для сортировки массива в программе были написаны две процедуры: процедура procedure sortup сортирует массив [B] по возрастанию значений элементов, а процедура procedure sortdown сортирует массив [B] по убыванию значений элементов.

В этих процедурах используется метод сортировки называемый элементарной пузырьковой сортировкой. Суть метода состоит в следующем. Просматривая попарно соседние элементы массива от начала до конца проверяем «неправильную» расстановку элементов, и, в случае её обнаружения меняем местами соседние элементы. Таким образом, за один проход последний элемент (так как мы просматривали массив от начала до конца) оказывается на своём месте, а все остальные элементы продвигаются на одну позицию к началу. Поэтому для полной сортировки всего массива нужно сделать столько проходов по массиву, сколько пар элементов содержит сортируемый массив. Но для ускорения процесса сортировки при каждом проходе можно проверять на одну пару меньше, чем на предыдущем, так как последний элемент оказывается на своём месте.

Процедуры сортировки массива почти одинаковые. Различия состоят только в условии сортировки, а точнее в знаке сравнения значений соседних элементов:

procedure sortup;

var i,j:shortint;

begin

for j:=1 to m-1 do

for i:=1 to m-j do

if b[i]>b[i+1] then swap(b[i],b[i+1]);

end;

procedure sortdown;

var i,j:shortint;

begin

for j:=1 to m-1 do

for i:=1 to m-j do

if b[i]<b[i+1] then swap(b[i],b[i+1]);

end;

После каждой сортировки массив [B] выводится на экран вызовом процедуры procedure printb.

 


 

ЗАДАНИЕ 6

 

По условию задания 6 необходимо найти элементы матрицы [A] кроме выделенных областей с минимальным и максимальным значением. Эта операция производится в процедуре вывода матрицы [A] на экран procedure print при помощи процедуры procedure minmax(i,j:shortint) следующим образом. В процедуре вывода матрицы [A] на экран производится поэлементный вывод всех элементов матрицы [A] с проверкой принадлежности текущего элемента к области или траектории. И в случае если текущий элемент не принадлежит областям матрицы, то осуществляется вызов процедуры procedure minmax(i,j:shortint):

procedure minmax(i,j:shortint);

begin

if a[i,j]<min then min:=a[i,j];

if a[i,j]>max then max:=a[i,j];

end;

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

min:=a[2,1];

max:=a[2,1];

В качестве аргументов в процедуру minmax передаются координаты элемента матрицы [A]: i – номер строки, j – номер столбца.

После вывода матрицы [A] на экран в основной программе происходит вывод значений минимального и максимального элементов матрицы:

writeln(' Минимальный элемент: ',min:0:2);

writeln('Максимальный элемент: ',max:0:2);

writeln(t,' Минимальный элемент: ',min:0:2);

writeln(t,'Максимальный элемент: ',max:0:2);

 


 

ЗАДАНИЕ 7

Для выполнения задания 7 необходимо заменить в одномерном массиве нулевые элементы на значение минимального элемента. Для выполнения этого задания была написана процедура procedure zeroel:

procedure zeroel;

var i:shortint;

min:real;

begin

for i:=1 to m do

b[i]:=oldb[i];

min:=b[1];

for i:=2 to m do

if b[i]<min then

min:=b[i];

for i:=1 to m do

if b[i]=0 then

b[i]:=min;

end;

Так как после сортировки массив [B] был изменён, то вначале восстанавливается оригинальный массив [B], который был сохранён ранее в переменной oldb.

Для того чтобы заменить нулевые элементы минимальным, нужно сначала найти значение минимального элемента. Для поиска в массиве [B] минимального элемента используется цикл со счётчиком for … to … do … Принимая за минимальный первый элемент массива, и пройдя по всем элементам массива [B] начиная со второго, определяется значение минимального элемента. Для хранения значения минимального элемента используется переменная min

Для замены нулевых элементов используется цикл со счётчиком по всем элементам массива [B]. Если значение текущего элемента массива [B] равно нулю, то ему присваивается минимальное значение из переменной min, найденное ранее.

ОБЩИЕ ТРЕБОВАНИЯ К ПРОГРАММЕ

 

Согласно общим требованиям, предъявляемым к программе (см. приложение 1) в теле программы необходимо обеспечить ввод исходных данных, вызов процедур и функций. Тело данной программы содержит вызов процедур, имеющих вложенные функции и процедуры.

Для выполнения требования о создании текстового файла, в котором будут сохранены результаты работы программы, выводимые на терминал, была зарезервирована переменная t для текстового файла. Для задания имени текстового файла используется переменная filename строкового типа. Для записи информации в текстовый файл в каждой процедуре продублированы функции “write”, только с идентификатором t текстового файла. Теперь функция “write” с идентификатором t осуществляет запись информации в текстовый файл. Например, так выглядит часть программы с функцией записи в текстовый файл:

writeln('Преобразованная матрица:');

writeln(t,'Преобразованная матрица:');

print;

textcolor(15);

writeln(' Минимальный элемент: ',min:0:2);

writeln('Максимальный элемент: ',max:0:2);

writeln(t,' Минимальный элемент: ',min:0:2);

writeln(t,'Максимальный элемент: ',max:0:2);


 

ЗАКЛЮЧЕНИЕ

 

Данная работа показала, что первоначальные навыки, полученные по изучению курса «Информационные технологии» позволяют получить готовый продукт в виде сложной программы, а язык программирования Pascal остаётся востребованным для изучения основ программирования.

 


 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2017-06-30 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: