Разработка в среде Turbo PasCal программы поиска двух ближайших элементов в массиве

Автор работы: Пользователь скрыл имя, 11 Апреля 2013 в 13:14, курсовая работа

Краткое описание

Производим формирование одномерного массива, используя генератор случайных чисел. Для этого используются циклы столбцов, а также операторы ввода/вывода (сначала вводим требуемое количество значений в массиве) и генератор случайных чисел. Randomize – генератор случайных чисел. Заполняет массив числами, находящимися в диапазоне от нуля до max-1.

Содержание

постановка задачи: 3
УКРУПНЕННАЯ БЛОК-СХЕМА АЛГОРИТМА 4
ДЕТАЛИЗАЦИЯ ГРАФИЧЕСКОЙ ЧАСТИ ПРОГРАММЫ 5
РАЗРАБОТКА ПРОГРАММЫ НА ЯЗЫКЕ PASCAL 8
Листинг программы: 14
ТЕСТИРОВАНИЕ ПРОГРАММЫ 16
Список литературы: 17

Прикрепленные файлы: 1 файл

Иныорматик.docx

— 62.96 Кб (Скачать документ)

Содержание  

Постановка  задачи  

Укрупненная блок-схема  

Детализация  

Блок-схема  

Разработка  программы  

Листинг программы  

Тестирование  программы  

Список литературы  

Альметьевский государственныЙ 

нефтяной  институт

 

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

 

 

 

 

курсовая  работа

по  дисциплине: «информатика»

раздел: алгоритмический язык паскаль

на тему: «Разработка в среде Turbo PasCal программы поиска двух ближайших элементов в массиве»

 

 

 

 

 

Выполнил:

                                                 Проверил:                                                                             

 

 

 

 

 

 

 

 

 

 

Альметьевск, 2013 год

 

Содержание:

постановка  задачи: 3

УКРУПНЕННАЯ БЛОК-СХЕМА  АЛГОРИТМА 4

ДЕТАЛИЗАЦИЯ ГРАФИЧЕСКОЙ  ЧАСТИ ПРОГРАММЫ 5

РАЗРАБОТКА ПРОГРАММЫ  НА ЯЗЫКЕ PASCAL 8

Листинг программы: 14

ТЕСТИРОВАНИЕ  ПРОГРАММЫ 16

Список  литературы: 17

 

 

постановка  задачи:

Дан массив размера N.

Найти номера двух ближайших элементов из этого  массива (то есть элементов с наименьшим модулем разности) и вывести эти  номера в порядке возрастания.

Для отладки  программы исходный массив сформировать с помощью генератора случайных  чисел.

 

УКРУПНЕННАЯ БЛОК-СХЕМА АЛГОРИТМА


 

 

 

 

 

 


 

 



 

 


 

 

 

 

 

 
 

ДЕТАЛИЗАЦИЯ ГРАФИЧЕСКОЙ ЧАСТИ  ПРОГРАММЫ

 

Формирование массива

Производим формирование одномерного массива, используя генератор случайных чисел. Для этого используются циклы столбцов, а также операторы ввода/вывода (сначала вводим требуемое количество значений в массиве) и генератор случайных чисел. Randomize – генератор случайных чисел. Заполняет массив числами, находящимися в диапазоне от нуля до max-1.


 

 

 

 

 

 

 

 

 

 

 

Поиск элементов с  наименьшим модулем разности

Найти номера двух ближайших элементов из этого массива (то есть элементов с наименьшим модулем разности). Используется условный оператор: if  <условие> then  <действие> else <действие>- условный оператор.

 


 

 

 


 

 

 

 

 

 

 

 

 

Вывод номеров элементов

Далее производим вывод номеров элементов с наименьшей разностью в порядке возрастания. Для этого используются стандартные операторы вводы/вывода.


 

Блок –  схема:




 



 


 




 


 

 

 

 

 

 

 

 

 


 

 

 

 


 

 

 



 




 

 


 

 

 

 

 

 

 

 

 


 

 

РАЗРАБОТКА ПРОГРАММЫ НА ЯЗЫКЕ  PASCAL

Структура программы на языке Pascal.

Вся программа  может состоять из восьми основных блоков:

  1. заголовок программы;
  2. блок описания меток;
  3. блок описания констант;
  4. блок описания переменных;
  5. блок описания процедур;
  6. блок описания функций;
  7. блок описания типов пользователя;
  8. блок операторов.

Блоки со второго  по седьмой могут в программе  меняться местами, могут неоднократно повторяться.

Program <имя> - program zadah – заголовок программы. Заголовок программы может отсутствовать.

После каждого  оператора, процедуры, функции, переменной или константы ставится пустой оператор ;.

Переменная  – величина, которая в процессе выполнения программы может изменяться. Должен быть указан ее тип, то есть переменная должна быть описана. В отличие от переменных, тип констант машина определяет самостоятельно.

Блок описания переменных;

Var

<имя>,<имя1>,<имя2>:тип;

Тип –  структура и описание множества  значений, которые могут быть присвоены  переменной. Стандартные (порядковые) типы:

  1. целые – integer, byte, longint, word, shortint;
  2. вещественные – real, single, double, extended, comp;
  3. логический (булевский) – boolean;
  4. символьный – char;
  5. строковый – string.

Вводим  следующие переменные:

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 определяет:

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

В записи цикла присутствует оператор присваивания (:=), который предписывает выполнить выражение, заданное в его правой части, и присвоить результат переменной, идентификатор которой расположен в левой части. Переменные и выражение должны быть совместимы по типу.

Далее идут операторные скобки. Их необходимо поставить, так как в теле цикла  идут несколько операторов подряд.

a[i]:=random(10)-1 –

  1. a[i] – элемент массива с номером строки, равным i, и номером столбца, равным j.
  2. далее идет оператор присваивания (:=) – каждому элементу массива присваивается значение, являющееся результатом случайной функции random(i).
  3. random(i) – возвращает случайное число от 0 до (х-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;

Вывод требуемых элементов массива

Производим  вывод требуемых элементов массива  на экран. Используется условный оператор: if  <условие> then  <действие> else <действие>- условный оператор. Может выполняться только один оператор. Если же необходимо выполнить несколько действий – используются операторные скобки. Часть else может отсутствовать. Чтобы можно было выполнить несколько операций, ставим операторные скобки. Также используются стандартные операторы ввода/вывода.

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.

 

ТЕСТИРОВАНИЕ ПРОГРАММЫ

 

Список литературы:

  1. Павловская Т. А., «Паскаль. Программирование на языке высокого уровня.», СПб.: Питер, 2004 г.
  2. Попов В. Б., «Turbo Pascal для школьников.», М.: Финансы и статистика, 2001 г.
  3. «Учебный справочник школьника», М.: Дрофа, 2000 г.
  4. Иванов А.Ф., Потапова О.Н., Салихова Г. Л., «Информатика. Раздел: Word для начинающих. Лабораторный практикум для студентов вузов.», Альметьевск,2003.

Информация о работе Разработка в среде Turbo PasCal программы поиска двух ближайших элементов в массиве