Создание программы при помощи языка программирования С

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

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 19.05.2014
Размер файла 1,7 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

1

1

Введение

программирование язык поиск

Язык программирования С является языком программирования среднего уровня. Он объединяет элементы языков высокого уровня с функциональностью ассемблера.

Как язык среднего уровня, С позволяет манипулировать битами, байтами и адресами - основными элементами, с которыми работает компьютер. Код языка С имеет высокую степень переносимости. С имеет 5 основных встроенных типов данных, это: символьный, целочисленный, вещественный с одинарной точностью, вещественный с двойной точностью и void. Также, С поддерживает несколько других типов, включая структуры, объединения, битовые поля, перечисления и типы, определяемые пользователем.

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

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

Другим способом структуризации и разделения кода С является использование блоков кода. Блок кода - это группа логически связанных операторов, которая воспринимается как модуль. В с блок кода создается путем помещения последовательности операторов в фигурные скобки.

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

Откомпилированная С-программа создает и использует 4 логически разделенных области памяти. Первая область - это память, содержащая код программы. Следующая - предназначена для хранения глобальных переменных. Еще две - это стек и куча. Стек используется для самых различных целей, он содержит адреса возвратов функций, аргументы, передаваемые в функции, и локальные переменные. Куча - это область свободной памяти, которую программа может использовать для динамического выделения памяти.

Язык С определяет стандартные библиотеки, предоставляющие функции, выполняющие наиболее типичные задачи. При вызове функции, которая не является частью написанной программы, компилятор запоминает ее имя. Позже компоновщик делает компоновку - объединяет код, написанный программистом, с объектным кодом, уже находящимся в стандартных библиотеках. Функции, хранящиеся в библиотеках, содержатся в переносимом формате. При написании программы использовались следующие стандартные библиотеки С:

stdio.h - стандартная библиотека, содержащая определения макросов, константы и объявления функций и типов, используемых для различных операций стандартного ввода и вывода.

stdlib.h - стандартная библиотека, которая содержит в себе функции, занимающиеся выделением памяти, контроль процесса выполнения программы, преобразования типов и другие.

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

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

Существует не так много различных методов поиска в массивах данных (списках). Рассмотрим и сравним возможности основных методов:

1. Последовательный поиск.

2. Бинарный поиск.

3. Интерполяционный поиск.

Последовательный поиск

Последовательный поиск - алгоритм поиска, при котором каждый элемент массива сравнивается с ключом поиска на случай совпадения.

Средняя сложность t поиска элементов в списке a[0],a[1],a[2]…a[n], при условии, что частота обращения к каждому элементу списка распределена равномерно, будет:

где:

n - количество элементов в массиве;

t - средняя сложность поиска (время поиска).

Линейный поиск прост в реализации и применим, если список содержит мало элементов.

Если же список неупорядочен, то это единственный тип поиска, применимый для нахождения ключа в списке.

Для больших и сортированных массивов данных необходимо применять более эффективные методы поиска, чем последовательный поиск.

1.1 Бинарный поиск

Бинарный поиск - алгоритм поиска элемента в отсортированном массиве, использующий дробление массива на половины.

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

Средняя сложность t поиска элементов в списке a[0],a[1],a[2]…a[n], при условии, что частота обращения к каждому элементу списка распределена равномерно, будет:

где:

n - количество элементов в массиве;

t - средняя сложность поиска (время поиска).

Так, если список содержит 1024 элемента, то количество операций, необходимых для нахождения ключа будет равно:

Используя последовательный поиск, в среднем пришлось бы затратить 512 операций. Что значительно превышает значение, полученное при использовании бинарного поиска.

Недостаток бинарного поиска является в хранении списка в обязательно отсортированном виде, что усложняет задачу добавление и исключения элементов из списка.

1.3 Интерполяционный поиск

Алгоритм интерполяционного поиска производит предсказание местонахождения элемента. Поиск происходит подобно бинарному поиску, но вместо деления области поиска на две части, интерполирующий поиск производит оценку новой области поиска по расстоянию между ключом и текущим значением элемента. Если мы знаем, что K находится между Kl и Ku, следующую проверку мы будем делать примерно на расстоянии от l (в предположении, что ключи представляют собой числовые значения, близкие к арифметической прогрессии), где:

K - ключ поиска;

l - индекс левой границы массива (отрезка массива);

u - индекс правой границы массива (отрезка массива);

Kl - значение элемента массива на позиции l;

Ku - значение элемента массива на позиции u.

Асимптотически интерполяционный поиск превосходит по своим характеристикам бинарный поиск. В то время как один шаг бинарного поиска уменьшает количество проверяемых записей от до (где - количество элементом в массиве), то один шаг интерполяционного поиска уменьшает это количество до (если ключи распределены в таблице случайным образом). В результате интерполяционный поиск требует в среднем шагов для уменьшения диапазона проверки от до 2.

2. Описание программы

Программа состоит из основной функции main() и пяти функций, вызываемых в main(), в которых реализованы:

· алгоритм последовательного поиска f_seq_search(int *, int, int);

· алгоритма бинарного поиска f_bin_search(int *, int, int);

· алгоритм интерполяционного поиска f_inpol_search(int *, int, int);

· меню выбора your_choice();

· сортировка массива данных order_arr(int *, int).

Программа содержит стандартные функции языка С, описанные в бибиотеках: <stdio.h> и <stdlib.h>. Ниже перечислены и описаны стандартные функции использованные в программе из соответствующих библиотек.

Функции из библиотеки <stdlib.h>:

rand() - функция генерирует псевдо случайное число в диапазоне от 0 до RAND_MAX не меньше 32767.

atoi() - функция для приведении (конвертации) строки в числовой вид.

malloc() - функция для выделения динамической памяти из кучи.

free() - функция возвращает в динамически распределяемую область памяти блок памяти, адресуемый указателем.

Функции из библиотеки <stdio.h>:

gets() - gets(s) - функция, которая считывает строку s из стандартного потока до появления символа перевода строки и хранит их в своем аргументе.

printf() - функция записывает в стандартный поток stdout (стандартный выходной поток данных) значения аргументов из заданного списка аргументов в соответствии со строкой форматирования, адресуемой параметром format.

scanf() - функция для ввода данных общего назначения, которая читает поток stdin и сохраняет информацию в переменных, перечисленных в списке аргументов.

puts() - функция, которая записывает строку в стандартный поток, добавляя в конец строки символ '\n', в случае удачного завершения возвращает значение больше или равное 0 и отрицательное значение ( EOF = -1 ) в случае ошибки.

2.1 Описание функции main()

Функция main() является основной функцией программы, алгоритм которой представлен на рисунке 1.

Алгоритм программы в следующем:

1. Задается размер одномерного массива данных с клавиатуры.

2. Выделяется динамическая память для хранения данных массива. Если динамическая память не выделилась, тогда происходит выход из программы.

3. Массив заполняется псевдослучайными значениями с помощью функции rand().

4. Вызывается функция сортировки order_arr(int *, int), в которой передается указатель на массив и его длина.

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

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

7.Значение полученное с помощью функции your_choise() записывается в переменную menu и затем проверяется на совпадение теле цикла switch.

8.При совпадении значения переменной menu с цифрой 1, вызывается функция последовательного поиска ключа в массиве f_seq_search(int *, int, int), в которую передаются: указатель на массив, длина массива, ключ поиска.

9. Результат выполнения функции записывается в переменную res.

10. Если ключ найден в массиве, то на экран выводится значение ключа и его позиция в массиве.

11.Если ключ не найден, то управление программы переходит к шагу номер 6.

12. При совпадении значения переменной menu с цифрой 2, вызывается функция бинарного поиска ключа в массиве f_bin_search(int *, int, int), в которую передаются: указатель на массив, длина массива, ключ поиска.

13.Далее происходит проверка результата совпадения ключа в массиве аналогично действиям с номера 9 по номер 11.

14.При совпадении значения переменной menu с цифрой 3, вызывается функция бинарного поиска ключа в массиве f_inpol_search(int *, int, int), в которую передаются: указатель на массив, длина массива, ключ поиска.

15.Далее происходит проверка результата совпадения ключа в массиве аналогично действиям с номера 9 по номер 11.

16.При совпадении значения переменной menu с цифрой 4 предлагается ввести новое значение для поиска в массиве данных.

17.При совпадении значения переменной menu с цифрой 5 происходит высвобождение блока памяти, адресуемым указателем обратно в кучу, и программа завершает работу.

Рисунок 1 - алгоритм программы.

2.2 Описание функции сортировки

Сортировка массива данных необходимо, т.к. в данной работе рассматриваются бинарный и интерполяционный алгоритмы поиска.

Функция order_arr(int *, int) служит для сортировки значений в массиве по возрастанию. Ее алгоритм работы представлен на рисунке 2.

Рисунок 2 - алгоритм функции сортировки.

Алгоритм функции order_arr(int *, int) заключается в следующем:

1.В функцию передаются указатель на массив и его размер.

2.Далее последовательно все значения массива сравниваются друг с другом.

3.Если значение массива стоящее на более ранней позиции больше чем значение стоящее на более поздней, то они меняются местами.

4.После того как все значения массива были отсортированы по возрастанию, они выводятся на экран консоли.

5.Функция завершает свою работу.

2.3 Описание функции меню выбора

Функция your_choice() служит в качестве меню выбора соответствующего возможного действия. Ее алгоритм работы представлен на рисунке 3.

Рисунок 3 - алгоритм функции меню выбора.

Алгоритм функции your_choice() заключается в следующем:

1. На консоль выводятся доступные пункты меню.

2.С клавиатуры читается введенный символ.

3.Если введенный символ находится вне интервала от 1 до 5 включительно, то управление программы переходит к шагу номер 2.

4. Если был выбран пункт меню, то функция возвращает номер этого пункта.

2.4 Описание функции последовательного поиска

Функция f_seq_search(int *, int, int) служит для поиска ключа в массиве с помощью алгоритма последовательного поиска. Ее алгоритм работы представлен на рисунке 4.

Алгоритм работы функции f_seq_search(int *, int, int) заключается в следующем:

1. В функцию передаются значения: указатель на массив, размер массива, ключ для поиска.

2. Каждый элемент массива последовательно сравнивается с ключом.

3.Счетчик циклов увеличивается на единицу при каждой интерации.

4. При совпадении ключа с элементом массива, возвращается номер позиции элемента массива.

5.Если совпадения не произошло, тогда элемент не найден, возвращается значение -1.

Рисунок 4 - алгоритм функции последовательного поиска.

2.5Описание функции бинарного поиска

Функция f_bin_search(int *, int, int) служит для поиска ключа в массиве с помощью алгоритма бинарного поиска. Ее алгоритм работы представлен на рисунке 5. Алгоритм работы функции f_bin_search(int *, int, int) заключается в следующем:

1. В функцию передаются значения: указатель на массив, размер массива минус 1, что соответствует последнему индексу позиции элемента массива, ключ для поиска.

2.Осуществляется проверка на попадания ключа в массив. Происходит сравнение ключа с первым элементом массива и последним.

3. Если ключ меньше первого элемента, либо больше последнего, то совпадений нет, т.к. массив отсортирован по возрастанию. Функция прекращает работу и возвращает значение -1.

4.Если ключ попал в интервал, тогда управление переходит в цикл, выход из которого возможен, в случае если левая граница интервала, в которой находится ключ, станет не меньше, чем правая граница.

5.Счетчик циклов увеличивается на единицу при каждой интерации.

6.Вычисляется среднее значение (медиана) интервала, в котором лежит ключ по формуле:

где:

mid - медиана заданного интервала;

first - левая граница (индекс крайнего левого элемента) интервала;

last - правая граница (индекс крайнего правого элемента) интервала.

7. Если значение ключа меньше или равно значению элемента в позиции mid, тогда сдвигается правая граница last=mid.

Рисунок 5 - алгоритм функции бинарного поиска.

8.Если значение ключа больше значения элемента в позиции mid, тогда сдвигается левая граница first=mid+1.

9.После выхода из цикла проверяется равен ли ключ значению элемента в позиции last.

10. Если равен, тогда возвращается позиция найденного элемента.

11.Если не равен, тогда элемент не найден, возвращается значение -1.

2.6 Описание функции интерполяционного поиска

Функция f_inpol_search(int *, int, int) служит для поиска ключа в массиве с помощью алгоритма интерполяционного поиска. Ее алгоритм работы представлен на рисунке 6.

Алгоритм работы функции f_ inpol_search(int *, int, int) заключается в следующем:

1.В функцию передаются значения: указатель на массив, размер массива минус 1, что соответствует последнему индексу позиции элемента массива, ключ для поиска

2.Сравнивается значение ключа со значением элемента массива, находящимся в крайней левой позицией интервала, и со значением элемента массива, находящимся в крайней правой позиции интервала.

Рисунок 6 - алгоритм функции интерполяционного поиска.

3.Если ключ меньше больше левого элемента и меньше либо равен правому элементу, тогда счетчик циклов увеличивается на единицу.

4.Вычисляется позиция следующего элемента для сравнения его с ключом по формуле:

где:

mid - позиция элемента, который будет сравниваться с ключом;

key - значение ключа;

first - левая граница интервала;

last - правая граница интервала;

arr[last] - значение элемента в правой границы интервала;

arr[first] - значение элемента в левой границе интервала.

5.Далее проверяется, если значение элемента на позиции mid меньше значения ключа, то левая граница сдвигается : fist = mid+1.

6.Действие цикла переходит на шаг 2.

7.Если значение элемента на позиции mid не меньше значения ключа, то проверяется если оно больше.

8.Если нет, тогда функция прекращает работу и возвращается позиция mid, т.к. key=arr[mid].

9.Если да, тогда сдвигается правая граница на величина last = mid -1.

10.Действие цикла переходит на шаг 2.

11. После выхода из основного цикла, проверяется равность значений ключа и элемента, находящегося в позиции first.

12.Если равенство верно, тогда функция прекращает работу и возвращается позиция элемента.

13. Иначе, функция прекращает работу, элемент не найден, возвращается значение -1.

3. Сравнения возможностей функций поиска

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

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

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

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

Таблица 1 - Результат выполнения программы для первого числа*

Таблица 2 - Результат выполнения программы для среднего числа*

Таблица 3 - Результат выполнения программы для последнего числа*

Заключение

В курсовой работе были реализованы три метода поиска в массивах данных:

1. Алгоритм последовательного поиска.

2. Алгоритм бинарного поиска.

3. Алгоритм интерполяционного поиска.

Каждый из видов поиска обладает своими достоинствами и недостатками.

Так, при использовании последовательного поиска, требуется очень много итераций для поиска необходимого элемента, если ищется элемент в больших списках. Если же искомого элемента нет в списке, то необходимо перебрать всю таблицу, прежде чем получить требуемый результат. Этот тип поиска прост в реализации и не требует предварительной сортировки массива. Следовательно, если список не отсортирован, то последовательный поиск - единственный способ отыскать необходимый элемент.

Бинарный поиск значительно превосходит по скорости последовательный поиск, но требует, чтобы данные в массивах были предварительно отсортированы и упорядочены. Это усложняет операции добавления и исключения элементов.

Интерполяционный поиск схож с бинарным поиском. Ему так же необходимо, чтобы массив данных был структурированным. Это очень эффективный поиск при условии, что значения данных распределены равномерно. Однако имитационные вычислительные эксперименты показали, что интерполяционный поиск не настолько снижает количество выполняемых сравнений, чтобы компенсировать требуемое для дополнительных вычислений время. Интерполяция наиболее успешно применяется на ранних стадиях поиска в большом внешнем файле; после того как диапазон поиска существенно уменьшится, следует перейти к бинарному поиску.

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

Литература

1. Герберт Шилд. Программирование на Borland C++. Мн.: ООО «Попурри», 1999. - 800с.

2. Основы алгоритмизации и программирования. Язык СИ. Е.М. Демидович.Мн.: “Бестпринт” 2003 г.

3. Использование Visual C++ 6. Специальное издание. Грегори К.: Пер. с англ.-М.;СПб.;К.: Издательский дом “Вильямс”, 2001.-864 с.

4. Дональд Эрвин Кнут. Искусство программирования, том 3. Сортировка и поиск, 2-е изд. М.: ООО «И.Д. Вильямс», 2007. - 832с.

Приложения

Приложение 1

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

#include <stdio.h>

#include <stdlib.h>

int your_choice(void);//меню выбора

void order_arr(int *arr, int size);//сортировка одномерного массива

int f_seq_search(int *arr, int size, int key);//функция последовательного поиска

int f_bin_search(int *arr, int last, int key);//функция бинарного поиска

int f_inpol_search(int *arr, int last, int key);//функция интерполяционного поиска

int cnt;//счетчик циклов (для сравнения методов поиска)

int main(void)

{

int *p=NULL, n, input, i;//n-число элементов в массиве

int res, menu;//p-указатель для динам. массива

//input-для элемента, которого мы ищем

//res-для записи результата поиска, menu-выбор действия

puts("Enter the size of your array:");

scanf("%d",&n);//размер одномерного массива

p=(int *)malloc(n*sizeof(int));//выделяем память под одномерный массив

if(!p)

{

puts("the dynamic memory is not allocated"); // проверка, выделилась ли //память под массив

return 1;//если нет, выход из программы

}

for(i=0;i<n;i++)

{

*(p+i)=rand()%20000;//заполняем массив случайныйми элементами от 0 //до 20000

printf("%d ",*(p+i));//выводим массив на экран

}

printf("\n");

order_arr(p,n);//сортировка массива

puts("Enter the value for search:");

scanf("%d", &input); //вводим то, что будем искать )

for(;;)//цикл не прервертся, пока не выполнится условие menu=5

{

menu=your_choice();//выбор действия

switch(menu)

{

case 1:

res=f_seq_search(p,n,input); //фунция последовательного поиска //элемента

if(res==-1)//если искомое число не найдено в массиве

{

puts("There is no match");

printf("The count of your cycle is: %d \n",cnt);

break;//выйти из цикла switch()

}

puts("");

puts("The result of your search is:");

printf("the value %d at position %d \n", input, res+1);

printf("The count of your cycle is: %d \n",cnt);

//если есть совпадение, то вывести на экран искомый элемент //и его позицию в массиве

break;//выйти из цикла switch()

case 2:

res=f_bin_search(p,n-1,input);//функция бинарного поиска

if(res==-1)

{

puts("There is no match");

printf("The count of your cycle is: %d \n",cnt);

break;

}

puts("");

puts("The result of your search is:");

printf("the value %d at position %d \n", input, res+1);

printf("The count of your cycle is: %d \n",cnt);

break;

case 3:

res=f_inpol_search(p, n-1, input);//функция интерполяционного //поиска

if(res==-1)

{

puts("There is no match");

printf("The count of your cycle is: %d \n",cnt);

break;

}

puts("");

puts("The result of your search is:");

printf("the value %d at position %d \n", input, res+1);

printf("The count of your cycle is: %d \n",cnt);

break;

case 4:

puts("");

puts("Enter the new value for search:");

scanf("%d", &input);//ввести новое значение для поиска

break;

case 5:

free(p);

return 0;//выйти из программы

}

}

}

void order_arr(int *arr, int size)

{

int i,j,temp;

for(i=0;i<size;i++) //сортировка массива

for(j=0;j<i;j++)

{

if(arr[j]>arr[i]) //если текущее значение больше того, с //которым сравниваем

{

temp=arr[j];//то поменять их местами

arr[j]=arr[i];

arr[i]=temp;

}

}

puts("The array is order by asc");

for(i=0;i<size;i++)//вывод отсортированного массива на экран

printf("%d ",*(arr+i));

printf("\n");

}

int f_seq_search(int *arr, int size, int key)

{

int i;

cnt=0;

for(i=0;i<size;i++)

{

cnt++;

if(arr[i]==key)//сравниваемаем каждое значение с тем, которое ищем

{

return(i);//если есть совпадение, то вернуть позицию значения //в массиве

}

}

return -1;

}

int f_bin_search(int *arr, int last, int key)

{

int mid, first=0;//mid-средняя позиция в массиве, first - левая граница //массива,

//last - правая граница массива

cnt=0;

if(key<arr[0]||key>arr[last])//т.к. массив отсортирован по возрастанию, то в //случае если искомое значение

{//меньше первого элемента массива или больше последнего, то //совпаданий нет

return -1;

}

while(last>first)//условие нахождения элемента в массиве, т.к. границы //постоянно сдвигаются

{

cnt++;

mid=first+(last-first)/2;//средняя (центральная) позиция массива

if(key<=arr[mid])//если искомое значение (далее - ключ) меньше или //равен значению, находящегося на центральной позиции

last=mid;//то сдвинуть правую границу

else first=mid+1;//иначе сдвинуть левую границу

} //выход по условию last==first

if(arr[last]==key)//если значение в позиции last равно искомому ключу, то //возвращаем позицию

return (last);//last (позицию ключа). Можно было бы и проверять //значение в позиции first,

//т.к. firs==last

else

return -1; //если элемент не найден, вернуть -1

}

//int f_inpol_search(int *arr, int last, int key)

{

int first = 0, mid;//аналогичные параметры, mid - параметр оценки (либо //левой, либо правой границы)

cnt=0;

while(arr[first]<key&&arr[last]>=key)//условие выхода из цикла: ключ //должен быть между левой границей и правой

{

cnt++;

mid=first+((key-arr[first])*(last-first))/(arr[last]-arr[first]);

//формула расчета параметра границы

if(arr[mid]<key)

first=mid+1;//сдвигаем левую границу

else if(arr[mid]>key)

last=mid-1;//сдвигаем правую границу

else return mid;//возвращаем позицию ключа

}

if(arr[first]==key)//если цикл не выполнился, или произошел выход из //цикла, то проверка, может первый элемент (либо крайний левый) равен ключу

return first;//если да, то вернем first

else

return -1; //иначе выход из программы

}

int your_choice(void)//меню выбора

{

char s[80];

int c;

puts("");

puts("1. Function of sequential search");

puts("2. Function of binary search");

puts("3. Function of interpolation search");

puts("4. Enter the new value for search");

puts("5. Quit");

printf("The c is %d\n",c);

gets(s);

puts(s);

c=atoi(s);//преобразуем строку в число

printf("value of c out of the do-while cycle is : %d\n", c);

do

{

puts("Enter your choise (1,2,3,4,5):");

gets(s);//вводим наш выбор (строку)

puts(s);

c=atoi(s);//преобразуем строку в число

printf("value of c into the do-while cycle is : %d\n", c);

}

while(c<1||c>5);//пока не введем 1 или 2 или 3 или 4 или 5 из цикла не //выйдем

puts("");

return c;

}

Приложение 2

Контрольный пример выполнения программы

В качестве примера скомпилируем файл и введем следующие значения:

количество элементов в массиве - 16;

искомое значение - 6500;

Чтобы поменять значение для поиска, надо нажать цифру 4.

Для выхода из программы необходимо нажать цифру 5.

На рисунке 7 показано использование последовательного поиска.

Рисунок 7 - использование последовательной функции поиска

На рисунке 8 показано использование бинарного поиска.

Рисунок 8 - использование бинарной функции поиска

На рисунке 9 показано использование интерполяционной функции.

Рисунок 9 - использование интерполяционной функции поиска.

Размещено на Allbest.ru


Подобные документы

  • Создание программы, работающей с набором данных на внешнем устройстве. Описание программного комплекса. Обзор структуры главной программы. Процедура добавления новых элементов, поиска и создания на экране вертикального меню. Проверка работы программы.

    курсовая работа [265,6 K], добавлен 28.08.2017

  • Методы реализации алгоритмов сортировки и алгоритмов поиска на языках программирования высокого уровня. Программирование алгоритмов сортировки и поиска в рамках создаваемого программного средства на языке Delphi. Создание руководства пользователя.

    курсовая работа [1,7 M], добавлен 16.04.2012

  • Разработка программы для поиска пути в лабиринте с возможностью задания входа и выхода, наглядное представление решений. Использование языка логического программирования Prolog. Данные и методы решения. Пользовательский интерфейс, листинг программы.

    реферат [14,3 K], добавлен 15.10.2012

  • Разработка программы для поиска нужных сведений в телефонном справочнике с использованием языка программирования Borland C++, в качестве базы данных которого используется файл (base.txt). Реализация функции сортировки по фамилии в форматах (А-я) и (Я-а).

    курсовая работа [261,8 K], добавлен 22.08.2013

  • Разработка программы обработки типизированных файлов с кодом на языке Object Pascal, с использованием компонентов Delphi для ввода и вывода данных. Разработка экранных форм и алгоритма программы. Описание программных модулей и инструкция оператору.

    курсовая работа [1,5 M], добавлен 08.02.2011

  • Обоснование выбора языка программирования. Описание разработки структуры программы. Спецификация переменных и процедур. Руководство оператора, словесный алгоритм. Состав информационной системы поиска квартир и характеристика её программных интерфейсов.

    отчет по практике [2,2 M], добавлен 15.09.2014

  • Особенности разработки приложений для операционной системы с помощью императивного, структурированного, объектно-ориентированного языка программирования Delphi. Формальное начало программы. Выделение конца программного блока. Листинг и описание программы.

    курсовая работа [1,2 M], добавлен 04.08.2014

  • Методика разработки программы по поиску информации из базы данных, содержащей информацию о телевизорах. Использование языка программирования "С++" и среды разработки Qt Creator "С++" - статически типизированного языка программирования общего назначения.

    курсовая работа [626,1 K], добавлен 22.12.2011

  • Обоснование выбора системы управления базы данных. Delphi и его основные компоненты. Обоснование среды программирования. Создание базы данных и ее связь со средой программирования. Анализ и описание предметной области. Описание процедур программы.

    курсовая работа [1,3 M], добавлен 25.05.2015

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

    курсовая работа [491,9 K], добавлен 17.03.2015

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.