Автор работы: Пользователь скрыл имя, 11 Апреля 2013 в 13:14, курсовая работа
Производим формирование одномерного массива, используя генератор случайных чисел. Для этого используются циклы столбцов, а также операторы ввода/вывода (сначала вводим требуемое количество значений в массиве) и генератор случайных чисел. Randomize – генератор случайных чисел. Заполняет массив числами, находящимися в диапазоне от нуля до max-1.
постановка задачи: 3
УКРУПНЕННАЯ БЛОК-СХЕМА АЛГОРИТМА 4
ДЕТАЛИЗАЦИЯ ГРАФИЧЕСКОЙ ЧАСТИ ПРОГРАММЫ 5
РАЗРАБОТКА ПРОГРАММЫ НА ЯЗЫКЕ PASCAL 8
Листинг программы: 14
ТЕСТИРОВАНИЕ ПРОГРАММЫ 16
Список литературы: 17
Содержание
Постановка задачи
Укрупненная блок-схема
Детализация
Блок-схема
Разработка программы
Листинг программы
Тестирование программы
Список литературы
Альметьевский государственныЙ
нефтяной институт
кафедра информатики
курсовая работа
по дисциплине: «информатика»
раздел: алгоритмический язык паскаль
на тему: «Разработка в среде Turbo PasCal программы поиска двух ближайших элементов в массиве»
Выполнил:
Проверил:
Альметьевск, 2013 год
Содержание:
постановка задачи: 3
УКРУПНЕННАЯ БЛОК-СХЕМА АЛГОРИТМА 4
ДЕТАЛИЗАЦИЯ ГРАФИЧЕСКОЙ ЧАСТИ ПРОГРАММЫ 5
РАЗРАБОТКА ПРОГРАММЫ НА ЯЗЫКЕ PASCAL 8
Листинг программы: 14
ТЕСТИРОВАНИЕ ПРОГРАММЫ 16
Список литературы: 17
Дан массив размера N.
Найти номера двух ближайших элементов из этого массива (то есть элементов с наименьшим модулем разности) и вывести эти номера в порядке возрастания.
Для отладки программы исходный массив сформировать с помощью генератора случайных чисел.
Формирование массива
Производим формирование одномерного массива, используя генератор случайных чисел. Для этого используются циклы столбцов, а также операторы ввода/вывода (сначала вводим требуемое количество значений в массиве) и генератор случайных чисел. Randomize – генератор случайных чисел. Заполняет массив числами, находящимися в диапазоне от нуля до max-1.
Поиск элементов с наименьшим модулем разности
Найти номера двух ближайших элементов из этого массива (то есть элементов с наименьшим модулем разности). Используется условный оператор: if <условие> then <действие> else <действие>- условный оператор.
Вывод номеров элементов
Далее производим вывод номеров элементов с наименьшей разностью в порядке возрастания. Для этого используются стандартные операторы вводы/вывода.
Блок – схема:
Структура программы на языке Pascal.
Вся программа может состоять из восьми основных блоков:
Блоки со второго по седьмой могут в программе меняться местами, могут неоднократно повторяться.
Program <имя> - program zadah – заголовок программы. Заголовок программы может отсутствовать.
После каждого оператора, процедуры, функции, переменной или константы ставится пустой оператор ;.
Переменная – величина, которая в процессе выполнения программы может изменяться. Должен быть указан ее тип, то есть переменная должна быть описана. В отличие от переменных, тип констант машина определяет самостоятельно.
Блок описания переменных;
Var
<имя>,<имя1>,<имя2>:тип;
Тип – структура и описание множества значений, которые могут быть присвоены переменной. Стандартные (порядковые) типы:
Вводим следующие переменные:
i - переменная, характеризующая номер столбца массива;
j – переменная, необходимая для запуска дополнительного массива;
i1 – переменная, характеризующая номер первого элемента;
i2 – переменная, характеризующая номер второго элемента;
n – переменная, характеризующая количество элементов.
В программе на языке Паскаль раздел операторов является основным, так как именно в нем с предварительно описанными переменными, константами, значениями функций выполняются действия, позволяющие получить результат, ради которого и создавалась программа.
Раздел операторов начинается зарезервированным словом begin (начало), далее следуют операторы языка, отделенные друг от друга точкой с запятой. Завершает раздел зарезервированное слово end (конец) с точкой.
Слова begin и end являются аналогом открывающей и закрывающей скобок в обычных арифметических выражениях, и поэтому их принято называть операторными скобками.
Формирование массива
Оператор repeat называют оператором цикла с постусловием за то, что условие проверяется после выполнения тела цикла.
Формат:
repeat < тело цикла > until < условие окончания цикла >;
где repeat, until – зарезервированные слова (обозначают "повторяй", "пока" соответственно);
<условие> – булевское
<тело цикла> – оператор
или последовательность
Вначале выполняется тело цикла, затем проверяется условие завершения цикла. Именно поэтому цикл, организованный с помощью оператора repeat, в любом случае выполнится хотя бы один раз. Если результат булевского выражения равен false (ложь), то тело цикла выполняется еще раз, если же результат – true (истина), происходит выход из цикла. Операторы будут выполняться, пока условие будет оставаться ложным (false).
Оператор repeat может использоваться для проверки правильности ввода исходных данных. Например, по условию задачи исходное данное должно быть двузначным числом. Программа будет повторять запрос на его ввод до тех пор, пока не получит то, что ей требуется.
С помощью данного оператора вводим требуемое количество элементов массива.
Randomize – генератор случайных чисел. Заполняет массив числами, находящимися в диапазоне от нуля до max-1.
Массив
– структурированный тип
Формат записи массива:
<имя типа>:array[тип индекса] of <тип компонента>;
Если в такой форме описания массива задан один индекс, массив называется одномерным, если два индекса – двумерным, если n индексов - n-мерным. Одномерный массив соответствует понятию линейной таблицы, двумерный – понятию прямоугольной таблицы. В нашем случае массив является одномерным. В данном массиве мы описываем количество элементов.
a:array[1..nmax] of integer;
Начинаем с цикла for. Цикл for применяется для организации циклической обработки информации. Его можно использовать в тех случаях, когда число повторений заранее известно. Часто этот оператор повтора называют оператором цикла с параметром, так как число повторений задается переменной, называемой параметром цикла, или управляющей переменной. Оператор повтора for состоит из заголовка и тела цикла.
for …do – заголовок цикла;
<оператор> - тело цикла.
Если не указывается шаг цикла, то автоматически шаг считается равным 1.
Тело цикла может быть простым или составным оператором. оператор for обеспечивает выполнение цикла до тех пор, пока не будут перебраны все значения параметра цикла от начального до конечного.
Заголовок оператора повтора for определяет:
В записи цикла присутствует оператор присваивания (:=), который предписывает выполнить выражение, заданное в его правой части, и присвоить результат переменной, идентификатор которой расположен в левой части. Переменные и выражение должны быть совместимы по типу.
Далее идут операторные скобки. Их необходимо поставить, так как в теле цикла идут несколько операторов подряд.
a[i]:=random(10)-1 –
Далее идет оператор вывода write. В скобках указывается то, что нужно вывести на экран. В данном случае мы выводим на экран массив. И поэтому в скобках мы пишем a[i]. Через двоеточие указываем формат, то есть количество отводимых под значение позиций.
repeat
write('Vvedite kolichestvo elementov massiva ',nmax,' n=');
readln(n);
until n in [1..nmax];
writeln('Massiv:');
for i:=1 to n do
begin
a[i]:=random(100);
write(a[i]:3);
end;
Вывод требуемых элементов массива
Производим
вывод требуемых элементов
mn:=abs(a[1]-a[2]); - характеризует минимальный модуль разности
i1:=1; - номер первого элемента
i2:=2; - номер второго элемента
for i:=1 to n-1 do
for j:=i+1 to n do
if abs(a[i]-a[j])<mn then – находим элементы с минимальным модулем разности
begin
mn:=abs(a[i]-a[j]); - разность между двумя элементами
i1:=i; - номер первого найденного элемента
i2:=j; - номер второго найденного элемента
end;
Находим номера двух ближайших элементов из этого массива (то есть элементов с наименьшим модулем разности) и вывести эти номера в порядке возрастания.
Вывод номеров элементов
В последний момент выводим номера элементов с наименьшим модулем разности. Также используются стандартные операторы ввода/вывода.
writeln('Minimalnaya raznost =',mn,' ih nomera ',i1,',',i2);
Процедура writeln
без параметров переводит курсор на следующую
строку. Через двоеточие указывается количество
позиций, отводимых под число. И заканчиваем
программу зарезервированным словом end.
Program zadah;
uses crt;
const nmax=100;
var a:array[1..nmax] of integer;
n,i,j,i1,i2:byte;
mn:integer;
begin
clrscr;
randomize;
repeat
write('Vvedite kolichestvo elementov massiva ',nmax,' n=');
readln(n);
until n in [1..nmax];
writeln('Massiv:');
for i:=1 to n do
begin
a[i]:=random(100);
write(a[i]:3);
end;
writeln;
writeln;
mn:=abs(a[1]-a[2]);
i1:=1;
i2:=2;
for i:=1 to n-1 do
for j:=i+1 to n do
if abs(a[i]-a[j])<mn then
begin
mn:=abs(a[i]-a[j]);
i1:=i;
i2:=j;
end;
writeln('Minimalnaya raznost =',mn,' ih nomera ',i1,',',i2);
readln
end.