Вучебниках информатики в общем виде информационный процесс
Вид материала | Учебник |
- 3. Процесс восприятия и управление впечатлением, 191.28kb.
- Понятие о программах и программировании, 592.28kb.
- Поволжская Государственная Академия Телекоммуникаций и Информатики задания и методические, 262.31kb.
- Общеобразовательный стандарт по информатике является нормативным документом, определяющим, 237.91kb.
- Финансы предприятий, 2102.05kb.
- Исходные технические данные, 34.3kb.
- Тема: Личность в системе современного, 42.1kb.
- После того как я написал «Счастлив по собственному желанию», как-то, 1995.16kb.
- Компьютерная технология обучения и опережающая подготовка преподавателей, 49.99kb.
- Активизация познавательной деятельности школьников на уроках информатики, 32.08kb.
Билет № 5
Язык программирования. Типы данных. Реализация основных алгоритмических структур на языке программирования. Основные этапы разработки программ.
Языки программирования
Первые компьютеры (ЭВМ) разрабатывались прежде всего как вычислительные машины, т. е. устройства, выполня ющие операции над числами. Сегодня компьютеры позволяют обрабатывать информацию всех видов — текстовую, графическую, числовую, мультимедийную. Для решения задачи на компьютере необходимо создать программу, т. е. последовательность команд, входящих в систему команд компьютера.
Для первых компьютеров программисты писали программы в двоичных кодах, т. е. на машинном языке. Каждая команда машинного языка задает некоторое элементарное действие центрального процессора.
Важным этапом в развитии программирования явилась разработка языков программирования высокого уровня (ЯПВУ) — специальных искусственных языков, приближенных к обычному разговорному языку (английскому). Примеры таких языков: FORTRAN, Basic, Pascal, С. Большинство языков высокого уровня универсальны, т. е. предназначены для решения широкого круга задач.
Первая цель создания ЯПВУ — облегчить создание программ. Вторая цель — сделать программы переносимыми, т. е. уменьшить количество труда по адаптации программ для новых типов компьютеров.
Поскольку компьютер (а точнее, его процессор) оперирует не конструкциями ЯПВУ, а двоичными командами, то перед выполнением программа должна быть превращена в машинный код. Выполняют эту операцию программы-трансляторы. В зависимости от порядка подготовки программы на языке высокого уровня к исполнению, трансляторы делятся на компиляторы и интерпретаторы.
Компилятор — это программа, автоматически преобразующая (компилирующая) исходный код ЯПВУ в машинный код и создающая таким образом исполняемый файл. Он может быть запущен на исполнение операционной системой. В ОС Microsoft такие файлы могут иметь расширения ехе, com, dll.
Интерпретатор — это программа, преобразующая код ЯПВУ в машинный код шаг за шагом, т. е. каждая команда преобразуется интерпретатором и сразу выполняется компьютером, затем интерпретатор преобразует следующую команду, компьютер ее выполняет и т. д. (интерпрета-
тор — «синхронный переводчик»). Недостаток интерпретаторов — низкая скорость выполнения программ. Примеры: интерпретаторы языков Basic и Java Script. Для языка Basic в настоящее время существуют как интерпретаторы, так и компиляторы.
Типы данных
При решении задач на компьютере следует определить данные задачи и их типы. Данные — это информация, необходимая для выполнения программы, представленная в формальном виде, который обеспечивает возможность ее хранения, обработки и передачи (англ. data).
Языки высокого уровня организуют обработку данных с помощью переменных. Переменная — это именованная область оперативной памяти, в которой может храниться нужная информация (данные). Способ хранения определяется типом переменной.
Константа — это именованное значение, которое остается неизменным на протяжении всего времени выполнения программы. Числовая константа представляет собой какое-либо число (7; 3.14), а строковая константа — произвольную строку ("количество учеников в классе").
В любом ЯПВУ переменные и константы характеризуются своими типами. Тип данных — это правила хранения и формат данных. Во время работы программы тип данных будет определять, каким образом данные будут извлекаться из оперативной памяти (ОП), интерпретироваться и сохраняться в ОП. Например, величины 2 05 и -45 относятся к целочисленному типу и их можно складывать, вычитать, перемножать и делить. Величины "цвет" и "ок" относятся к строковому типу, их можно сцеплять, но над ними нельзя выполнять арифметические операции.
В языкe Basic существуют следующие типы данных.
Примечание. Массив — индексированный набор элементов одного типа1; string (англ.) — ряд, последовательность, цепочка; строка — последовательность символов.
Реализация основных алгоритмических структур на языке программирования
Основные этапы разработки программ
Разработка законченного программного продукта в виде компьютерной программы — длительный и трудоемкий процесс. Чтобы окончательный вариант программы работал правильно и содержал как можно меньше ошибок, программисты придерживаются полного цикла разработки программы, состоящего из шести базовых этапов:
- Постановка и анализ задачи. Четкое определение задачи и наборов входных и выходных данных.
- Разработка алгоритма. Определение зависимости между входными и выходными данными, создание процедуры их преобразования.
- Разработка пользовательского интерфейса. Определение того, что пользователь должен видеть на экране, как будут вводиться данные, где и в каком формате будут представлены выходные данные.
- Написание программного кода. Преобразование алгоритма в компьютерную программу на языке высокого уровня.
- Тестирование и отладка программы. Тестирование -— прогон программы на наборе тестов, для которых известен результат, с целью проверки правильности ее работы. Отладка (debug) — процесс выявления и устранения ошибок в программе.
- Составление документации. Подготовка документов, содержащих описание программы, включая техническое задание, блок-схемы, предположения, список входных и выходных переменных (часто совмещается с программным кодом), руководства пользователя.
Билет № 6
Технология нисходящего программирования. Разбиение задачи на подзадачи. Процедуры и функции.
Технологии программирования
Под алгоритмом, в случае, когда исполнителем является компьютер, можно понимать последовательность команд для процессора. В узком смысле слова, программирование рассматривается как кодирование — реализация одного или нескольких взаимосвязанных алгоритмов на некотором языке программирования. В более широком смысле, программирование — процесс создания программ, т. е. разработка программного обеспечения.
Существуют разные типы языков программирования. Одни из них — структурные языки, особенностью которых является, во-первых, организация программы в виде командных структур, а, во-вторых, обособление кода и данных.
Для уменьшения затрат на написание и отладку часто повторяющихся участков кода их обособляют в отдельные именованные участки, обладающие своей внутренней структурой программного кода и переменных. В дальнейшем программа может обращаться к этому участку по имени. Такие участки называются подпрограммами.
Структурные языки: Pascal, Ada, Java, C#, C++, С, Modula-2.
Пример неструктурных языков программирования — декларативные языки. В этих языках нет программы действий как таковой, а есть набор данных и правил их преобразования. Таким образом, исполнение программы — это попытка получения новых данных в соответствии с некоторым правилом. Такие языки позволяют описывать достраивающиеся программы (доопределяющие свой набор правил) и применяются при работе с крупными наборами данных (декларируя определенные множества) в экспертных системах.
Декларативные языки: Prolog, Lisp, XSL.
К неструктурным языкам программирования относится также ассемблер.
Существуют различные технологии программирования. Технология восходящего программирования («снизу вверх») реализуется так:
- Вначале создаются и отлаживаются самые элементарные подпрограммы (скорее всего используя созданные ранее, хранимые в модулях-библиотеках).
- Реализуется более крупный блок задачи путем вызова таких подпрограмм.
- Повторяется пункт 2 до тех пор, пока не реализуется вся задача.
Достоинства этого подхода — уменьшается общий объем работы за счет ранее созданных участков кода; снижаются требования к аппаратным ресурсам; уменьшается вероятность возникновения ошибок, так как только на поздних этапах проекта мы работаем с большим объемом кода.
Недостатки — уже реализованные, отлаженные и протестированные модули иногда приходится разрабатывать заново (так как головной модуль разрабатывается на завершающем этапе). Использование готовых частей кода может привести к менее эффективной структуре решения в целом. Кроме того, при применении такого подхода в чистом виде возникает опасность потерять общую логику разработки.
Технология нисходящего программирования — это создание программы «сверху вниз». Сначала разрабатывается основная программа (точнее, ее общая структура) и в ней записываются обращения к пока еще не написанным вспомогательным подпрограммам; и так далее — до самых простых «неделимых» подпрограмм.
Существенный этап такой разработки — определить основные структуры данных и правила их обработки. То есть определить, с какими данными подпрограммы будут работать и что должно быть ими сделано в результате выполнения.
При этом для ускорения процесса работы над задачей руководитель может разрабатывать основную программу, а другие сотрудники — подпрограммы. Если какая-то подпрограмма не готова, ее заменяют подпрограммой-«заглушкой», которая при заданных входных данных дает разумный результат (хотя фактически подпрограмма не работает). Технология нисходящего программирования (метод последовательной детализации) лежит в основе технологии структурного программирования и широко применяется при использовании структурных языков программирования, таких как Pascal или C++.
Алгоритм решения основной задачи называется основным алгоритмом. Алгоритм решения некоторой подзадачи по отношению к исходной (основной) задаче называется вспомогательным алгоритмом.
Таким образом, структурное программирование естественно возникает во многих классах задач, прежде всего в таких, где задача естественно расщепляется на подзадачи, а информация — на достаточно независимые структуры данных.
Структурное программирование предполагает, что логическая структура программы может быть выражена комбинацией трех базовых структур: следования, ветвления и цикла. Эти структуры могут комбинироваться одна с другой, как того требует программа.
Итак, особенности структурного программирования:
- модульность — создание программы из более мелких составляющих — модулей, блоков, подпрограмм. Один из этих модулей является в проекте главным и содержит нечто вроде конспекта всей программы. Обычно этот модуль содержит только вызовы подчиненных модулей или блоков;
- структурность — составление программ как комбинации базовых структур трех типов: следования, ветвления, цикла.
При разработке программ крайне рекомендуется принимать меры к обеспечению читабельности и ясности кода — следовать правилам и соглашениям по организации программ. Четкость и простота текста упрощают отладку задачи, ее сопровождение и последующую модификацию.
Этапы решения сложной задачи X сверху вниз:
- Разбиваем задачу X на несколько функциональных подзадач XI, Х2, ХЗ и т. д., т. е. выполняем ее декомпозицию.
- Предполагаем, что впоследствии эти части будут разработаны, создаем их спецификации:
- вид подпрограммы (процедура или функция);
- ее имя;
- имена и типы формальных параметров, их порядок;
- для функции — тип возвращаемого значения;
- комментарии, описывающие назначение подпрограммы.
3. Пишем программу решения задачи X, заменив каж
дую из подпрограмм XI, Х2, ХЗ «заглушками», и от
лаживаем ее в таком виде.
- Параллельно работаем с каждой из подпрограмм XI, Х2, ХЗ, при необходимости так же разбивая каждую из них на подзадачи еще более низкого уровня, т. е. используя методику, начиная с п. 1. Каждую подзадачу можно решать независимо от других.
- Проводим комплексную отладку постепенно, по одной заменяя заглушки на автономно отлаженные подпрограммы.
Пример декомпозиции задачи (разбиения задачи на подзадачи). Пусть задача заключается в сборе информации из разных источников: вводе с клавиатуры и вводе из файла, ее обработке и выводе результатов, как в файл, так и на экран монитора. Тогда метод последовательной детализации можно представить так:
Вспомогательные алгоритмы (подпрограммы) создаются еще и в том случае, когда есть необходимость использования одного и того же набора действий во многих алгоритмах. Например, решение системы линейных уравнений выполняется многократно, но с различным количеством уравнений и разными значениями коэффициентов.
Достоинства метода программирования «сверху вниз» — серьезные ошибки с большой вероятностью отыскиваются уже на ранних стадиях проекта; тестирование систематично.
Недостаток — при отладке поглощается больше машинных ресурсов. Необходимо снижать трудоемкость тестирования и отладки программы.
Процедуры и функции
Подпрограмма (subroutine) — именованная последовательность операторов языка, предназначенная для решения некоторой подзадачи. Часто подпрограмма имеет свои переменные, не пересекающиеся с переменными других подпрограмм или самой программы (если только переменные не были объявлены специальным образом или переданы подпрограмме). Каждая подпрограмма имеет имя, по которому к ней можно обратиться. В языках Turbo Pascal и QBasic механизм подпрограмм реализуется в виде процедур (procedure) и функций (function) с такой же структурой, как и основная программа. Они различаются назначением и способом использования.
Основное назначение процедуры — выполнение самостоятельных действий (без возврата какого-либо значения), а функции — возврат значения для использования в выражениях основной программы.
Подпрограммы вводятся в основную программу с помощью соответствующего описания, затем к ним можно выполнять обращение. Создание подпрограмм облегчает программирование, так как: 1) не требует многократно повторять в тексте программы аналогичные фрагменты; 2) улучшает структуру, облегчая ее понимание; 3) уменьшает вероятность появления ошибок (отлаживается отдельно);
- позволяет очень длинную программу разбить на части;
- позволяет использовать подпрограммы в других программах. В языках программирования высокого уровня существуют как стандартные вспомогательные подпрограммы, так и возможность разработки пользователем своих программ при решении сложных задач.
Процедура начинается с заголовка, за ним следует имя, а в круглых скобках — список формальных параметров.
Процедура может получить из основной программы несколько переменных (фактических параметров) для изменения их значений. Чтобы выполнить процедуру, к ней следует обратиться из основной программы с фактическими параметрами. Количество, тип и порядок следования формальных и фактических параметров должны совпадать.
Функция предназначена для того, чтобы возвращать одно значение, оно и является ее результатом. Описание функции начинается с заголовка, за ним следует имя, а в круглых скобках — список формальных параметров:
Функция или процедура — самостоятельная часть программы, имеющая собственные переменные, которым отводится отдельное, не зависящее от основной программы, место в памяти компьютера.
Билет № 7
Структуры данных. Обработка массивов. Поиск в массиве. Основные алгоритмы сортировки массивов.
В связи с тем, что подавляющее большинство прикладных задач оперируют большим количеством разнообразных данных, практически все развитые универсальные языки программирования высокого уровня имеют в своем синтаксисе конструкции, предназначенные для организации сложных моделей представления данных.
Основное назначение таких конструкций — упростить описание модели, упорядочить дальнейшую обработку и позволить создавать объединения из отдельных переменных.
Самый простой случай такой структуры данных — массив. В компилируемых языках высокого уровня массив определяют как упорядоченный набор однотипных переменных. Такой набор переменных объявляется заранее, с указанием типа переменных и их количества — для отведения нужного объема памяти. Переменные в массиве называются его элементами. Каждый элемент массива имеет индекс — целое число, задающее его положение по порядку в массиве.
Основная операция с массивом — обращение к его элементам. Элементы массива используются и изменяются как обычные переменные.
Массивы активно используются в тех случаях, когда нужно обработать большое количество однотипных данных. Примеры: массив значений температуры, массив названий товаров и пр.
Часто возникает задача поиска (определения индекса) элемента в массиве по заданному критерию. Простейший способ такого поиска: перебор всех элементов до нахождения нужного. В качестве ответа можно хранить значение, а можно — индекс найденного элемента.
Если в массиве выдержан какой-то принцип расположения элементов (упорядочение), то все операции поиска можно ускорить. Упорядоченным по неубыванию считается массив, в котором каждый следующий элемент не меньше предыдущего, упорядоченным по невозрастанию — тот, где каждый следующий элемент не больше предыдущего.
В упорядоченных массивах можно искать любой заданный элемент методом деления отрезка пополам, а поиск максимума и минимума вообще не нужен.
Алгоритмов сортировки массивов достаточно много, наиболее простой в реализации — метод пузырька. Этот алгоритм предполагает многократный проход по массиву; на каждом проходе (итерации цикла) циклически обмениваются местами попарно элементы, стоящие в неправильной последовательности. В результате самый «легкий» элемент (минимальный или максимальный) «всплывает» и занимает свое место. На каждой итерации количество обрабатываемых элементов уменьшается на единицу. Итерации повторяются, пока требуется выполнить хотя бы одну перестановку:
Другой пример — сортировка вставками. На i-й итерации считается, что часть масива с 1-го по (i - 1)-й элемент уже упорядочена. Далее i-й элемент вставляется в отсортированную часть массива без нарушения упорядоченности. И так далее.
Билет № 8
Основные понятия и операции формальной логики. Законы логики. Логические переменные. Логические выражения и их преобразования. Построение таблиц истинности логических выражений.
Основные понятия и операции алгебры логики
Формальной логикой принято называть античную логику, основанную Аристотелем. Это название происходит от основного принципа логики как науки, который гласит, что правильность рассуждения (умозаключения) определяется только его логической формой, или структурой, и не зависит от конкретного содержания входящих в него суждений [16].
Логика изучает формы мышления с точки зрения их структуры, законы и правила получения некоторого знания. Формами мышления являются: понятие, суждение, умозаключение.
Понятие — форма мышления, отражающая существенные свойства предмета или класса однородных предметов. Характеризуется содержанием и объемом. Содержание понятия — те признаки предмета, которые позволяют отличить предмет от всех остальных. Объем понятия — множество предметов, каждому из которых принадлежат эти признаки.
Суждение — форма мышления, в которой что-либо утверждается или отрицается о наличии предмета, его свойствах и действиях. Характеризуется содержанием и формой. Содержанием суждения является его смысл. Форма — способ построения. Суждения бывают истинными и ложными.
Умозаключение — форма мышления, в которой из одного или нескольких суждений на основании определенных правил вывода получается новое суждение (вывод, или заключение).
В своем развитии логика прошла ряд этапов. Современную логику называют математической. Алгебра высказываний (алгебра логики) — раздел математической логики.
Алгебра логики возникла в середине XIX века в трудах Джорджа Буля. Создание алгебры логики представляло собой попытку решать традиционные логические задачи алгебраическими методами.
Учение о высказываниях, называемое алгеброй высказываний (алгеброй логики), является первой из формальных логических теорий. Объектами алгебры логики являются высказывания.
Алгебра логики имеет приложения при синтезе релей-но-контактных и электронных схем. В этой теории отвлекаются от содержания высказывания, а рассматривают только то его свойство, что оно представляет собой или истину, или ложь. Тогда высказывание можно рассматривать как вели
Всякое сложное высказывание, составленное из некоторых исходных высказываний посредством логических операций, будем называть логическим выражением. Его также называют формулой алгебры логики.
Исходные высказывания могут быть логическими константами (если имеют постоянное значение «истина» или «ложь») или логическими переменными.
Переменные высказывания — это такие переменные, значениями которых могут быть любые наперед заданные простые высказывания — константы.
Логические операции позволяют каждой формуле при заданных значениях входящих в нее высказываний приписать одно из двух значений: 0 или 1. Тем самым каждая формула может рассматриваться как некоторый способ задания или реализации функции алгебры логики. Логическая функция — это функция, определенная на множестве значений (истина, ложь) и принимающая значение из того же множества [16]. Например: Л = А&В, F2 = AvB.
Функцию можно задавать как в виде формулы, так и в виде таблицы, которая содержит все наборы значений переменных и значения функции на этих наборах. Такую таблицу называют таблицей истинности.