Языки и технологии программирования


Тип работы: Реферат
Бесплатно: Антиплагиат
Объем: 13 страниц
В избранное:
МИНИСТЕРСТВО НАУКИ И ОБРАЗОВАНИЯ РЕСПУБЛИКИ КАЗАХСТАН
Казахский национальный технический университет им. К. И. Сатпаева
Институт информатики и информационных технологий
Кафедра технической кибернетики
Курсовая работа по дисциплине
“Языки и технологии программирования”
Проверил: преподаватель
“___” 20__ г.
Выполнил: ст. гр.
“___” 20__ г.
Алматы, 20__ г.
Содержание
Введение
1. Постановка задание
2. Описание использованного метода
3. Разработка алгоритма
4. Описание программы (Турбо Паскаль)
4. 1 Общие сведения
4. 2 Функциональное назначение
4. 3 Описание логической структуры
4. 4 Используемые технические средства
4. 5 Вызов и загрузка
4. 6 Инструкция пользователя
5. Описание программы (Турбо Си)
5. 1 Общие сведения
5. 2 Функциональное назначение
5. 3 Описание логической структуры
5. 4 Используемые технические средства
5. 5 Вызов и загрузка
5. 6 Инструкция пользователя
Заключение
Список литературы
Приложение 1 (Листинг программы на языке Паскаль)
Приложение 2 (Листинг программы на языке Си)
Введение
Расстановка четырех букв это очень интересное задание. Оно интересно тем, что необходимо продумать такой правильный алгоритм, чтобы число встречалось только один раз. Если разобраться, то это кажется не так уж и трудно, хотя с другой стороны трудности тоже возникают.
Из этого рисунка видно, что числа своеобразно повторяются по диагонали, с помощью такой расстановки и была решена данная задача.
1. Постановка задачи
Вариант 18.
“Расстановка 16 букв”. В квадрате размером 4x4 клетки расставить 16 букв (четыре A, четыре B, четыре C, четыре D) так, чтобы в каждом горизонтальном и в каждом вертикальном ряду любая буква встречалась только один раз.
2. Описание использованного метода
Последовательный поиск
Имеется таблица записей R 1 , R 2 , . . . , R N снабженных соответственно ключами К 1 , К 2 , . . . , К N . Алгоритм предназначен для поиска записи с данным ключом К. Предполагается, что N >= 1.
S1. [Начальная установка. ] Установить i 🡨 1
S2. [Сравнение. ] Если К = К i , алгоритм оканчивается удачно.
S3. [Продолжение. ] Увеличить i на 1.
S4. [Конец файла?] Если i <= N, то вернуться к шагу S2.
В противном случае алгоритм оканчивается неудачно.
Заметим, что у этого алгоритма может быть два разных исхода: удачный (когда найдено положение нужного ключа) и неудачный (когда установлено, что искомого аргумента нет в таблице) . Это справедливо для большинства алгоритмов данного описания.
Метод перебора
Метод перебора или равномерного поиска является простейшим из прямых методов минимизации и состоит в следующем.
Разобьем отрезок [a, b] на n равных частей точками деления:
xi=a+i(b-a) /n, i=0, . . . n
Вычислив значения F(x) в точках xi, путем сравнения найдем точку xm, где m - это число от 0 до n, такую, что
F(xm) = min F(xi) для всех i от 0 до n.
Погрешность определения точки минимума xm функции F(x) методом перебора не превосходит величены Eps=(b-a) /n.
Алгоритмы сортировки
Проблема упорядочивания данных с практической точки зрения:
Достоинства и недостатки четырех различных методов сортировки.
Сортировка применяется во всех без исключения областях программирования, будь то базы данных или математические программы.
Практически каждый алгоритм сортировки можно разбить на три части:
- сравнение, определяющее упорядоченность пары
элементов;
- перестановку, меняющую местами пару элементов;
- собственно сортирующий алгоритм, который осуществляет сравнение и перестановку элементов до тех пор, сока все элементы множества не будут упорядочены.
Подобными свойствами обладают и те пять алгоритмов сортировки, которые рассмотрены ниже. Они отобраны из множества алгоритмов, потому что, во-первых, наиболее часто используются, а во-вторых, потому что большинство остальных алгоритмов является различными модификациями описанных здесь.
Метод пузырька.
( метод назван также обменной сортировкой с выбором) .
Идея этого метода отражена в его названии. Самые легкие элементы массива "всплывают" наверх, самые "тяжелые" - тонут. Алгоритмически это можно реализовать следующим образом. Мы будем просматривать весь массив
"снизу вверх" и менять стоящие рядом элементы в там случае, если "нижний" элемент меньше, чем "верхний".
Таким образом, мы вытолкнем наверх самый "легкий” элемент всего массива. Теперь повторим всю оперно для оставшихся неотсортироваными N-1 элементов (т. е. для тех, которые лежат "ниже" первого. Как видно, алгоритм
достаточно прост, но, как иногда замечают, он является непревзойденным в своей неэффективности. Немного более эффективным, но таким наглядным является второй метод.
Сортировка выбором
На этот раз при просмотре мaccива мы будем искать наименьший элемент, Сравнивая его с первым. Если такой элемент найден, поменяем его местами с первым. Затем повторим эту операцию, но начнем не с первого элемента, а со второго. И будем продолжать подобным образом, пока
не рассортируем весь массив.
Метод Шелла
Этот метод был предложен автором Donald Lewis Shеll в 1959 г. Основная идея этого алгоритма заключается в том, чтобы в начале ycтpанить массовый беспорядок в массиве, сравнивая далеко стоящие друг от друга элементы. Как
видно, интервал между сравниваемыми элементами (gap) постепенно уменьшается до единицы. Это означает, что на поздних стадиях сортировка сводится просто к перестановкам соседних элементов (если, конечно, такие
перестановки являются необходимыми) .
Метод Хoopа
Этот метод, называемый также быстрой сортировкой(QuickSort), был Разработан в 1962 г. (его разработал Charles Antony Richard Hoare) .
Суть метода заключается в том, чтобы найти такой элемент множества, подлежащего сортировке, который разобьет его на два подмножества: те элементы, что меньше делящего элемента, и те, что не меньше его. Эту
идею можно реализовать многими способами.
Алгоритм Кнута - Морриса - Пратта
Алгоритм Кнута-Морриса-Пратта (КМП) получает на вход слово
X=x[1] x[2] . . . x[n]
и просматривает его слева направо буква за буквой, заполняя при этом массив натуральных чисел l[1] . . . l[n], где l[i] =длина слова l(x[1] . . . х[i] )
(функция l определена в предыдущем пункте) . Словами: l[i] есть длина наибольшего начала слова x[1] . . . x[i], одновременно являющегося его концом.
Какое отношение все это имеет к поиску подслова?
Другими словами, как использовать алгоритм КМП для определения того, является ли слово A подсловом слова B?
Решение. Применим алгоритм КМП к слову A#B, где # - специальная буква, не встречающаяся ни в A, ни в B. Слово A является подсловом слова B тогда и только тогда, когда среди чисел в массиве l будет число, равное длине слова A.
Описать алгоритм заполнения таблицы l[1] . . . l[n] .
Решение. Предположим, что первые i значений l[1] . . . l[i] уже найдены. Мы читаем очередную букву слова (т. е. x[i+1] ) и должны вычислить l[i+1] .
Другими словами, нас интересуют начала Z слова x[1] . . . x[i+1, одновременно являющиеся его концами -из них нам надо брать самое длинное. Откуда берутся эти начала? Каждое из них (не считая пустого) получается из некоторого слова Z' приписыванием буквы x[i+1] . Слово Z' является началом и
концом слова x[1] . . . x[i] . Однако не любое слово, являющееся началом и концом слова x[1] . . . x[i], годится - надо, чтобы за ним следовала буква x[i+1] .
Получаем такой рецепт отыскания слова Z. Рассмотрим все начала слова x[1] . . . x[i], являющиеся одновременно его концами. Из них выберем подходящие - те, за которыми идет буква x[i+1] . Из подходящих выберем самое длинное.
Приписав в его конец х[i+1], получим искомое слово Z. Теперь пора воспользоваться сделанными нами приготовлениями и вспомнить, что все слова, являющиеся одновременно началами и концами данного слова, можно
получить повторными применениями к нему функции l из предыдущего раздела.
Вот что получается: i:=1; 1[1] :=0; {таблица l[1] . . l[i] заполнена правильно}
while i <> n do begin
len:= l[i] {len - длина начала слова x[1] . . x[i], которое является его концом; все более длинные начала оказались неподходящими}
while (x[len+1] <>х[i+1] ) and (len>0) do begin {начало не подходит, применяем к нему функцию l}
len:=l[len] ;
end;
{нашли подходящее или убедились в отсутствии}
if x[len+1] =x[i+1] do begin {х[1] . . x[len] - самое длинное подходящее начало}
l[i+1] :=len+1;
end else begin
{подходящих нет}
l[i+1] := 0;
end;
i:=i+1;
end;
Доказать, что число действий в приведенном только что алгоритме не превосходит Cn для некоторой константы C.
Решение. Это не вполне очевидно: обработка каждой очередной буквы может потребовать многих итераций во внутреннем цикле. Однако каждая такая итерация уменьшает len по крайней мере на 1, и в этом случае l[i+1] окажется заметно меньше l[i] . С другой стороны, при увеличении i на единицу величина l[i] может возрасти не более чем на 1, так что часто и сильно убывать она не может - иначе убывание не будет скомпенсировано
возрастанием.
Более точно, можно записать неравенство l[i+1] <l [i] - (число итераций на i-м шаге) +1 или (число итераций на i-м шаге) <= l[i] -l[i+1] +1
Остается сложить эти неравенства по всем i и получить оценку сверху для общего числа итераций. Будем использовать этот алгоритм, чтобы выяснить,
является ли слово X длины n подсловом слова Y длины m. (Как это делать с помощью специального разделителя #, описано выше. ) При этом число действий будет не более C(n+m}, и используемая память тоже. Придумать, как
обойтись памятью не более Cn (что может быть существенно меньше, если искомый образец короткий, а слово, в котором его ищут - длинное) .
Решение. Применяем алгоритм КМП к слову А#В. При этом: вычисление значений l[1], . . . , l [n] проводим для слова X длины n и запоминаем эти значения. Дальше мы помним только значение l[i] для текущего i - кроме него и кроме таблицы l[1] . . . l[n], нам для вычислений ничего не нужно.
На практике слова X и Y могут не находиться подряд, поэтому просмотр слова X и затем слова Y удобно оформить в виде разных циклов. Это избавляет также от хлопот с разделителем.
Написать соответствующий алгоритм (проверяющий, является ли слово X=x[1] . . . x[n] подсловом слова Y=y[1] . . . y[m]
Решение. Сначала вычисляем таблицу l[1] . . . l[n] как раньше. Затем пишем такую программу:
j:=0; len:=0;
{len - длина максимального качала слова X, одновременно являющегося концом слова y[1] . . j[j] }
while (len<>n) and (j<>m) do begin
while (x[len+1] <>у[j+1] ) and (len>0) do begin
{начало не подходит, применяем к нему функцию l}
len: = l[len] ;
end;
{нашли подходящее или убедились в отсутствии}
if x[len+1] =y[j+1] do begin
{x[1] . . x[len] - самое длинное подходящее начало}
len:=len+1;
end else begin
{подходящих нет}
len:=0;
end;
j:=j+1;
end;
{если len=n, слово X встретилось; иначе мы дошли до конца слова Y, так и не встретив X}
3. Разработка алгоритма
Основной алгоритм решения задачи состоит в следующем:
- Выбор, какая буква будет стоять в ячейке [1] [1]
- Расстановка остальных букв
- Выход из программы
4. Описание программы (Турбо Паскаль)
4. 1 Общие сведения
программа написана на языке Pascal.
имеет название Kurswork. pas
Программное обеспечение, необходимое для функционирования данной программы следующее: операционная система Windows 9х/NT/2000/XP/, пакет программ Turbo Pascal.
4. 2 Функциональное назначение
Данная программа расставляет буквы ABCD, так чтобы они не повторялись не по столбцам, не по строчкам.
4. 3 Описание логической структуры
Далее описание приложения 1.
1) Заголовок
2) Используемые модули
3-6) Описание переменных
7-16) Процедура back
9-14) Выбор цвета и вывод текста
15) Присваивание значений
17-35) Процедура rasst
19-20) Генерируем число r=g
21-22) Выбираем цвет и шрифт
23-34) Расстановка и вывод букв на экран
37) Инициализация графики
38-41) Запуск процедур и задержка
42) Закрытие графики
4. 4 Используемые технические средства
При написании данной работы использовался компьютер следующей конфигурации:
Pentium III-700/128Mb/20Gb/16Mb/FDD/CD/K/M/P
4. 5 Вызов и загрузка
Данная программа вызывается следующим образом:
запустить пакет программ Turbo Pascal 7. 0 с помощью файла “turbo. exe”, выбрать меню File, в нём опция Open и в предложенном списке файлов выбрать нужный (“kurswork. pas”) . На выполнение программа запускается с помощью комбинации клавиш Ctrl+F9.
4. 6 Инструкция пользователя
Пользователю данного программного продукта необходимо лишь нажать два раза любую из клавиш клавиатуры.
Выходные данные: на экран выводится массив [4] [4] типа Char.
5. Описание программы (Турбо Си)
... продолжение5. 1 Общие сведения
программа написана на языке С
имеет название Kurswork. c
Программное обеспечение, необходимое для функционирования данной программы следующее: операционная система Windows 9х/NT/2000/XP/, пакет программ Turbo C.
5. 2 Функциональное назначение
- Информатика
- Банковское дело
- Оценка бизнеса
- Бухгалтерское дело
- Валеология
- География
- Геология, Геофизика, Геодезия
- Религия
- Общая история
- Журналистика
- Таможенное дело
- История Казахстана
- Финансы
- Законодательство и Право, Криминалистика
- Маркетинг
- Культурология
- Медицина
- Менеджмент
- Нефть, Газ
- Искуство, музыка
- Педагогика
- Психология
- Страхование
- Налоги
- Политология
- Сертификация, стандартизация
- Социология, Демография
- Статистика
- Туризм
- Физика
- Философия
- Химия
- Делопроизводсто
- Экология, Охрана природы, Природопользование
- Экономика
- Литература
- Биология
- Мясо, молочно, вино-водочные продукты
- Земельный кадастр, Недвижимость
- Математика, Геометрия
- Государственное управление
- Архивное дело
- Полиграфия
- Горное дело
- Языковедение, Филология
- Исторические личности
- Автоматизация, Техника
- Экономическая география
- Международные отношения
- ОБЖ (Основы безопасности жизнедеятельности), Защита труда