Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Алгоритм. Определение. Свойство алгоритма.Стр 1 из 18Следующая ⇒
АЛГОРИТМ.ОПРЕДЕЛЕНИЕ.СВОЙСТВО АЛГОРИТМА. Алгоритм -- одно из фундаментальных понятий информатики. Этим словом обозначают точное и безотказное предписание действий, которые должны быть выполнены. Т.е. мы можем считать алгоритмом любую инструкцию, если: ее команды не допускают различных вариантов исполнения; указания предусмотрены для всех возможных вариантов развития событий. С этой точки зрения можно составить, к примеру, алгоритм переливания из пустого в порожнее. Однако, на практике алгоритмы составляют для решения тех или иных задач, т.е. получения необходимых результатов по заданным исходным данным. Вид алгоритма, да и сама возможность его написания зависят от исполнителя (это может быть и человек, и автоматическое устройство), или точнее, от его системы команд (т.е. набора инструкций, которые он "умеет" выполнять). Поэтому, в дальнейшем мы будем пользоваться следующим определением. Алгоритм решения задачи -- это последовательность допустимых команд исполнителя, определяющих его действия по переходу от исходных данных к искомому результату. Какими свойствами должен обладать алгоритм? Перечислим их: дискретность -- алгоритм делится на отдельные элементарные шаги; определенность -- каждая команда однозначно определяет действие исполнителя; конечность (результативность) -- алгоритм должен завершаться за конечное число шагов. Кроме этого, алгоритм может обладать еще одним полезным (но не обязательным) свойством -- массовостью. Это значит, что он будет годиться не для одной конкретной задачи, а для целого класса похожих задач. С определенностью непосредственно связана существенная особенность, о которой нельзя забывать: исполнитель выполняет алгоритм формально, абсолютно не задумываясь над смыслом производимых действий. Поэтому не стоит обижаться на компьютер, "не догадавшийся", что вы подразумевали, -- он честно делает то, что вы написали. Существует много разных способов записи алгоритмов: графические (например, в виде блок-схем), с помощью естественного языка, какими-нибудь условными знаками идр. Но если мы хотим, чтобы алгоритм был исполнен компьютером, он должен быть обязательно записан на особом языке. Такая запись называется программой, а язык -- языком программирования.
Вы знаете, что вся информация в компьютере представляется в виде двоичных кодов. В кодах, каждый из которых обозначал одно простейшее действие (вроде, "перенести число из одной ячейки памяти в другую"), приходилось писать и программы для первых ЭВМ. Но это занятие очень сложное и кропотливое, а кроме того, требующее глубокого знания особенностей конкретной машины. Поэтому были придуманы языки программирования высокого уровня. Программа на таком языке -- это последовательность команд, обозначаемых словами естественного языка или их сокращениями. Каждая из них соответствует последовательности из десятков, а то и сотен машинных команд. В результате запись получается гораздо более компактной и понятной. Но процессор не понимает команд языков высокого уровня, поэтому их предварительно нужно "перевести". Для этого служат особые программы -- трансляторы.
Системное программное обеспечение § операционная система; § файловый менеджер; § архиватор; § перекодировщик; § антивирус; § другие... ЯЗЫК ПРОГРАММИРОВАНИЯ ВЫСОКОГО УРОВНЯ. ОСОБЕННОСТИ. ПРИМЕРЫ. Высокоуровневый язык программирования отличается от низкоуровневого тем, что для программиста он более прост и удобен. Язык программирования высокого уровня содержит смысловые конструкции и команды, которые представляют из себя стандартные структуры из нескольких простейших (низкоуровневых, машинных) команд, таким образом программист освобождается от необходимости писать каждую машинную команду по отдельности, то есть сокращается время работы программиста для написания определенного функционала, также сокращается размер текстового файла содержащегоисходный код алгоритма программы, команды выглядят более человеко понятными и могут объединяться в структуры (блоки кода из нескольких команд), всё это способствует возможности "держать в голове" весь алгоритм программы, работать с небольшими и понятными областями кода взамен огромных листов утомительных машинных кодов, которые включает язык программирования низкого уровня.
Примеры: C, C++, Pascal, Delphi, Visual Basic, Java, Python, PHP, Ruby, Perl Кроме того, языки делятся еще на интерпретируемые и компилируемые: § Компилируемые: C, C++, Паскаль, Delphi § Интерпретируемые: Visual Basic, Java, Python, PHP, Ruby, Perl Компилируемые языки выдают в результате исполняемый модуль, например EXE файл, он получается из исходного кода программы путем компиляции, то есть исходный код на языке высокого уровня автоматически обрабатывается компилятором и переводится в машинный код, который (вместе с данными) и записывается внутрь исполняемого файла. Интерпретируемый язык не оформляется в исполняемый файл, он всегда остается в виде исходного кода, в данном случае исходный код получает название скрипт. Скрипт последовательно выполняется (команда за командой) на виртуальной машине самого языка программирования. Таким образом, для выполнения программы, на компьютере должна находиться соответствующая виртуальная машина, которая выполнит данный скрипт. Естественно, это негативно влияет на быстродействие программы, но зато сам скрипт становится кроссплатформенным. Операторы ветвлений
Условный оператор IF <условие> THEN <оператор1> [ELSE <оператор2>] Условие – значение типа BOOLEAN или логическая операция. Если условие верно, выполняется оператор, или блок операторов, следующий за THEN, в противном случае выполняется блок операторов после ELSE, если он есть.
Условия могут быть вложенными и в таком случае, любая встретившаяся часть ELSE соответствует ближайшей к ней "сверху" части THEN.
Рассмотрим программу, которая вводит произвольное целое число от 0 до 15 и выводит его в шестнадцатеричной системе:
Операторы повторений Составной оператор Составной оператор представляет собой совокупность последовательно выполняемых операторов, заключенных в операторные скобки begin и end: begin Он может потребоваться в тех случаях, когда в соответствии с правилам! построения конструкций языка можно использовать один оператор, а выполнить нужно несколько действий. В такой составной оператор входит ряд операторов выполняющих требуемые действия. В дальнейшем везде, где будет указываться, что можно использовать один оператор, им может быть и составной оператор. Отдельные операторы внутри составного оператора отделяются друг от друга точкой с запятой (см. пример в п. 5.1.2, где тело цикла представляет составной оператор). Так как завершающее составной оператор слово end не является отдельным предложением, то перед ним точку с запятой можно не ставить, в противном случае компилятор будет считать, что перед словом end стоит пустой оператор. Можно считать, что и само тело программы, т. к. оно заключено в операторные скобки begin и end, тоже является составным оператором. Условный оператор IF Оператор IF реализует алгоритмическую конструкцию РАЗВИЛКА и изменяет порядок выполнения операторов в зависимости от истинности или ложности некоторого условия. Существует два варианта оператора:
if S then A В этих операторах: Так как условный оператор IF является единым предложением, ни перед then, ни перед else точку с запятой ставить нельзя. Примеры использования оператора: if X < 0 then X:= -Y; Пример. Ввести целое число и вывести символ, соответствующий этому числу в кодировке ASCII, если такой символ есть, или сообщение, что такого символа нет (управляющие символы не учитываются). program EXAMPLE5; Условный оператор CASE С помощью этого оператора можно выбрать вариант из любого количества вариантов. Структура этого оператора в Turbo Pascal: case S of В этой структуре: S - выражение порядкового типа, значение которого вычисляется; C1, C2,..., CN - константы, с которыми сравнивается значение выражения S; Instruction1, Instruction2,..., InstructionN - операторы, из которых выполняется ТОТ, с константой которого совпадает значение выражения S; Instruction - оператор, который выполняется, если значение выражения S не совпадает ни с одной из констант С1,..., CN. Ветвь оператора else является необязательной. Если она отсутствует и значение выражения S не совпадет ни с одной из перечисленных констант, весь оператор рассматривается как пустой. В отличие от оператора IF перед словом else точку с запятой можно ставить. Если для нескольких констант нужно выполнять один и тот же оператор, их можно перечислить через запятую (или даже указать диапазон, если возможно), сопроводив их одним оператором. Пример. case I of Пример использования оператора CASE приведен также в п. 16.3.21. Оператор цикла REPEAT Оператор цикла REPEAT организует выполнение цикла, состоящего из любого числа операторов, с неизвестным заранее числом повторений. Тело цикла выполняется хотя бы один раз. Выход из цикла осуществляется при истинности некоторого логического выражения. Структура этого оператора:
repeat В этой структуре: Instruction1, Instruction2,..., InstructionN - выполняемые операторы, составляющие тело цикла; S - логическое выражение, истинность которого проверяется в конце каждой итерации. Так как слова repeat и until являются своеобразными операторными скобками, точку с запятой перед словом until ставить не обязательно. Пример. Усовершенствованная программа, вычисляющая сумму двух чисел (см. пример п. 2). program EXAMPLE6;
Оператор цикла WHILE Оператор цикла WHILE организует выполнение одного оператора неизвестное заранее число раз. Выход из цикла осуществляется, если некоторое логическое выражение окажется ложным. Так как истинность логического выражения проверяется в начале каждой итерации, тело цикла может не выполняться ни разу. Структура оператора цикла имеет вид: while S do В этой структуре: S - логическое выражение, истинность которого проверяется в начале каждой итерации; Instruction - выполняемый оператор цикла. Пример. Найти все делители целого положительного числа (кроме 1 и самого числа). program EXAMPLE7; Оператор цикла FOR Оператор цикла FOR организует выполнение одного оператора заранее известное число раз. Существует два варианта оператора: For Param:=Start to Finish do Instruction; В этих операторах: Param - параметр цикла, являющийся переменной порядкового типа; Start - выражение, определяющее начальное значение параметра цикла; Finish - выражение, определяющее конечное значение параметра цикла; Instruction - выполняемый оператор. Start и Finish должны быть совместимы для присваивания с параметром цикла (см. п. 9.3). Цикл действует таким образом. Сначала вычисляются и запоминаются начальное - Start и конечное - Finish значения параметра цикла. Далее параметру цикла Param присваивается начальное значение Start. Затем значение параметра цикла сравнивается со значением Finish. Далее, пока параметр цикла меньше или равен конечному значению (в первом варианте оператора) или больше или равен конечному значению (во втором варианте), выполняется очередная итерация цикла; в противном случае происходит выход из цикла. Выполнение очередной итерации включает в себя сначала выполнение оператора Instruction, а затем присваивание параметру цикла следующего большего значения (в первом варианте оператора) или следующего меньшего значения (во втором варианте).
Естественно, что, если в первом варианте значение Start больше Finish или во втором варианте меньше Finish, оператор не выполняется ни разу. После выхода из цикла параметр цикла становится неопределенным, за исключением случая, когда выход из цикла был осуществлен с помощью оператора GOTO или стандартной процедуры Break. Пример. Вывести на экран буквы от Z до A. program EXAMPLE8; Пример. Вычислить 101 значение sin x с заданным шагом и вывести первое отрицательное значение синуса. program EXAMPLE9; End End. Интересно, что в качестве оператора, который выполняется по выполнению или невыполнению условия, может выступать условный же оператор. В этом случае говорят о вложенности условных операторов. Я настоятельно рекомендую при решении такого рода задач составлять блок-схему алгоритма в тетради. Только потом, при составлении программы, вам остается лишь аккуратно прописывать сначала всю Then- часть, а затем переходить к Else- части. Обычно при записи условных операторов на языке Паскаль (особенно при множественных ветвлениях) команды записывают уступом вправо и вниз. Это повышает наглядность, и, поверьте, снижает потери времени на отладку. Для иллюстрации решим еще одну задачу: "решить уравнение вида A*x^2 + B*x + C = 0". Прошу не путать с квадратным уравнением, для которого нам было известно, что коэффициент А не равен нулю. Здесь же коэффициенты могут быть любыми числами. Исходя из элементарных математических рассуждений, получаем следующий алгоритм:
Program Sq2; Writeln ('Введите коэффициенты уравнения (A, B, C) '); If C=0 Then Writeln('X - любое число') Else Begin X:=-C/B; Writeln('X=',X:8:3) End D:=B*B-4*A*C; X1:=(-B+SQRT(D))/2/A; End End End.
Пример программы с использованием Case of Program dni_nedeli; Следует помнить, что все константы из списка выбора должны быть различны. Любому из операторов списка выбора может предшествовать не одна, а несколько констант выбора, разделенных запятыми. Например, следующая программа при вводе одного из символов ‘ y’ или ‘ Y’ выведет на экран «Да», а при вводе ‘ n’ или ‘ N’ – слово «Нет». Пример программы с использованием Case of с несколькими переменными Var ch: char; Очевидно, что рассмотренные выше программы можно записать с помощью вложенных или последовательно расположенных условных операторов, но в подобных задачах использование оператора выбора является более простым. Основное отличие условного оператора от оператора выбора состоит в том, что в условном операторе условия проверяются одно за другим, а в операторе выбора значение ключа выбора непосредственно определяет одну из возможностей. BEGIN I:=2; K:=I/5; END; Слова BEGIN и END играют роль операторных скобок. Тело самой программы также имеет вид составного оператора. После последнего END ставится точка. Нельзя извне составного оператора передавать управление внутрь его. Примечание редактора: имеется в виду неизучаемый нами оператор GOTO (безусловного перехода). ОПЕРАТОР ЦИКЛА С ЗАДАННЫМ ЧИСЛОМ ПОВТОРЕНИЯ.БЛОК-СХЕМА.СИНТАКСИС НА ЯЗЫКЕ ПАСКАЛЬ. На языке Паскаль повторение некоторой последовательности действий известное число раз выполняет оператор for. Подсчет количества выполняемых действий осуществляется при помощи специальной переменной — счетчика. Поэтому цикл for называют иногда циклом со счетчиком. Цикл for на Паскале может быть представлен в двух формах. Первая форма последовательно наращивает счетчик: Вторая форма последовательно уменьшает счетчик: Оператор for с последовательным увеличением счетчика Пример 6.1. Program Test1; Поясним пример 6.1. Рис. 6.1. Блок-схема организации цикла в примере 6.1 Как только N превысит конечное значение, выполнение цикла прекращается. Считается, что после окончания цикла переменная цикла не определена (то есть в разных реализациях языка Паскаль она может принимать разные значения). Иными словами, неправильно считать, что после окончания цикла переменная-счетчик цикла имеет какое-то определенное значение.
Оператор for с последовательным уменьшением счетчика Счетчик может изменяться с шагом -1. Пример 6.2. Program Test2; Простые типы данных В таблице приведены простые типы данных Турбо Паскаль, объем памяти, необходимый для хранения одной переменной указанного типа, множество допустимых значений и применимые операции.
Перечисляемый и интервальный тип относятся к типам, определяемым пользователем и будут рассмотрены нами позже.
Порядковые типы, выделяемые из группы простых типов, характеризуются следующими свойствами:
В языке Паскаль введены понятия эквивалентности и совместимости типов. Два типа Т1 и Т2 являются эквивалентными (идентичными), если выполняется одно из двух условий:
Менее строгие ограничения накладываются на совместимость типов. Так, типы являются совместимыми, если:
В Турбо Паскаль ограничения на совместимость типов можно обойти с помощью приведения типов. Приведение типов позволяет рассматривать одну и ту же величину в памяти ЭВМ как принадлежащую разным типам. Для этого используется конструкция Имя_Типа(переменная или значение) Напрмер, Integer('Z') представляет собой значение кода символа 'Z' в двухбайтном представлении целого числа, а Byte(534) даст значение 22, поскольку целое число 534 имеет тип Word и занимает два байта, а тип Byte занимает один байт, и в процессе приведения старший байт будет отброшен.
ПОРЯДКОВЫЕ ТИПЫ ДАННЫХ.ФУНКЦИИ, ОПРЕДЕЛЕННЫЕ В ЯЗЫКЕ ПАСКАЛЬ ДЛЯ ПОРЯДКОВЫХ ТИПОВ ДАННЫХ. Порядковые типы данных Среди базовых типов данных особо выделяются порядковые типы. Такое название можно обосновать двояко:
Пример переменных с булевым значением X:=true; Логические выражения Логические выражения (условия) – это выражения, которые могут принимать лишь одно из двух значений: true (истина) или false (ложь). Для построения логических выражений используются операции отношения, которые обозначаются знаками: = (отношение на равенство), <> (отношение на неравенство), < (отношение меньше), > (отношение больше), <= (отношение меньше или равно), >= (отношение больше или равно). Сложные условия составляются из простых с помощью логических операций: and (логическое «И»), or (логическое «ИЛИ») и not (логическое «НЕ»). При составлении сложных условий операнды логического выражения берутся в скобки (это важно!). Пример логических выражений: 5>3; При вычислении логических выражений операции выполняются в следующем порядке: not, and, or, операции отношения, арифметические операции. Если порядок выполнения операций нужно изменить, то применяют скобки.
СИМВОЛЬНЫЙ ТИП ДАННЫХ.СРАВНЕНИЕ ВЕЛИЧИН СИМВОЛЬНОГО ТИПА. Ип данных CHAR Каждая переменная символьного типа может принимать значение только одного символа. Все символы упорядочены в соответствии с принятым в ЭВМ коде (например ASCII). При этом порядковый номер символов называется кодом (например, код латинского символа 'А ' равен 65; символа '3' равен 51). Пример: Из набора 10 любых символов напечатать только заглавные английские буквы и их коды. program lr1; Тип данных STRING В Турбо Паскале предусмотрен тип данных STRING. Переменная типа STRING может принимать значения переменной длины. Максимально возможная длина переменной 255 символов. Например: 1) Функция LENGTH 2) Функция СОNCAТ - сцепление строк в порядке их перечисления. 3) Функция POS 4) Функция COPY 5) Процедура DELETE(Str, I, J); 6) Процедура INSERT(Str1, Str2, I); 7) Процедура STR (V, S1); 8) Процедура VAL (S1, V, C); Строковое выражение S1 преобразуется в величину целочисленного или вещественного типа и записывается в переменной V. Если при этом ошибок не обнаруживается, то С будет равно 0. В противном случае значение С будет равно номеру позиции первого ошибочного символа и V будет неопределено. Строка S1 не должна содержать незначащих пробелов, переменная V может быть целой или вещественной, а переменная С - только целой.
program lr2;
ПЕРЕЧИСЛЯЕМЫЕ ТИПЫ ДАННЫХ.СПОСОБЫ ОПИСАНИЯ. Перечисляемый тип данных Перечисляемый тип представляет собой ограниченную упорядоченную последовательность скалярных констант, составляющих данный тип. Значение каждой константы задается ее именем. Имена отдельных констант отделяются друг от друга запятыми, а вся совокупность констант, составляющих данный перечисляемый тип, заключается в круглые скобки. Программист объединяет в одну группу в соответствии с каким-либо признаком всю совокупность значений, составляющих перечисляемый тип. Например, перечисляемый тип Rainbow (РАДУГА) объединяет скалярные значения RED, ORANGE, YELLOW, GREEN, LIGHT_BLUE, BLUE, VIOLET (КРАСНЫЙ, ОРАНЖЕВЫЙ, ЖЕЛТЫЙ, ЗЕЛЕНЫЙ, ГОЛУБОЙ, СИНИЙ, ФИОЛЕТОВЫЙ). Перечисляемый тип Traffic_Light (СВЕТОФОР) объединяет скалярные значения RED, YELLOW, GREEN (КРАСНЫЙ, ЖЕЛТЫЙ, ЗЕЛЕНЫЙ). Перечисляемый тип описывается в разделе описания типов, например: typeRainbow = (RED, ORANGE, YELLOW, GREEN, LIGHT_BLUE, BLUE, VIOLET); Каждое значение является константой своего типа и может принадлежать только одному из перечисляемых типов, заданных в программе. Например, перечисляемый тип Traffic_Light не может быть определен в одной программе с типом Rainbow, так как оба типа содержат одинаковые константы. Описание переменных, принадлежащих к скалярным типам, которые объявлены в разделе описания типов, производится с помощью имен типов. Например: type Traffic_Light= (RED, YELLOW, GREEN);var Section: Traffic_Light;Это означает, что переменная Section может принимать значения RED, YELLOW или GREEN. Переменные перечисляемого типа могут быть описаны в разделе описания переменных, например: var Section: (RED, YELLOW, GREEN);При этом имена типов отсутствуют, а переменные определяются совокупностью значений, составляющих данный перечисляемый тип. К переменным перечисляемого типа может быть применим оператор присваивания: Section:= YELLOW;Упорядоченная последовательность значений, составляющих перечисляемый тип, автоматически нумеруется, начиная с нуля и далее через единицу. Отсюда следует, что к перечисляемым переменным и константам могут быть применены операции отношения и стандартные функции Pred, Succ, Ord.
ТИП-ДИАПАЗОН.СПОСОБЫ ОПИСАНИЯ.
Тип-диапазон (интервальный тип) есть подмножество своего базового типа, в качестве которого может выступать любой порядковый тип, кроме типа-диапазона. Тип-диапазон задается границами своих значений внутри базового типа: <мин.знач.>.. <макс.знач.>Где: <мин.знач.> - минимальное значение типа-диапазона; <макс.знач.> - максимальное его значение. Примеры: type Workdays = Mon.. Fri; Index = 0.. 63; Letter = 'A'.. 'Z'; Natural = 0.. MaxInt; Positive = 1.. MaxInt;Тип-диапазон необязательно описывать в разделе type, а можно указывать непосредственно при объявлении переменной. При объявлении типа-диапазона нужно руководствоваться следующими правилами: § два символа.. рассматриваются как один символ, поэтому между ними недопустимы пробелы; § левая граница диапазона не должна превышать его правую границу. Тип-диапазон наследует все свойства своего базового типа, но с ограничениями, связанными с его меньшей мощностью. В стандартную библиотеку Паскаля включены две функции, поддерживающие работу с типами-диапазонами: § high(x) – возвращает максимальное значение типа-диапазона, к которому принадлежит переменная x; § low(x) – возвращает минимальное значение типа-диапазона, к которому принадлежит переменная x;
ВЕЩЕСТВЕННЫЕ ТИПЫ ДАННЫХ.АРИФМЕТИЧЕСКИЕ ФУНКЦИИ ЯЗЫКА ПАСКАЛЬ,РЕЗУЛЬТАТ КОТОРЫЙ ВЕЩЕСТВЕННОЕ ЧИСЛО. Вещественные типы В Турбо Паскале имеется пять видов вещественных типов, диапазон возможных значений которых зависит от их внутреннего представления. Типы целых, объем занимаемой памяти, количество значащих цифр и диапазон возможных значений приведен в табл. 3.
Над данными вещественного типа определены следующие операции:
ТИП ДАННЫХ СТРОКА.ОПИСАНИЕ.ПРОЦЕДУРЫ И ФУНКЦИИ ОБРАБОТКИ СТРОК В ЯЗЫКЕ ПАСКАЛЬ. Строка (string) - это последовательность литер. Литерные строки уже использовались нами в качестве аргументов операторa write при изучении темы "Ввод-вывод". Теперь познакомимся с ними подробнее. Тип данных (string) определяет строки с максимальной длиной 255 символов. Переменная этого типа может принимать значения переменной длины. Н
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Последнее изменение этой страницы: 2017-02-07; просмотров: 228; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.226.166.214 (0.154 с.) |