Тема 5. "Технология алгоритмического программирования". Несмотря на популярность в настоящее время языков объектно-ориентированного программирования, таких как Delphi, Visual Basic, навыки программирования, по нашему мнению, лучше всего отрабатывать на примере классических языков программирования в MS Dos. Кроме того, на вступительных экзаменах по информатике в ВУЗах РФ допускается использовать любые языки программирования в Dos, такие как Паскаль, Си, Фортран, Бейсик. Остановим наш выбор на языке Бейсик, как наиболее распространенном в большинстве средних учебных заведений. Элементы языка Бейсик. Первичные конструкции языка Бейсик. В языке Бейсик используются следующие символы: Буквы латинского алфавита. Буквы русского алфавита. Русские буквы используются только при записи символьных констант и в комментариях. Цифры от 0 до 9. Специальные символы: + - / ., ( ) = < > " % и другие. Ключевые слова: LET ПУСТЬ PRINT ВЫВОД REM КОММЕНТАРИЙ IF ЕСЛИ FOR ДЛЯ STEP ШАГ DIM РАЗМЕРНОСТЬ INPUT ВВОД С КЛАВИАТУРЫ END КОНЕЦ THEN ТОГДА TO ДО NEXT СЛЕДУЮЩИЙ и другие. Знаки арифметических операций: + сложение, - вычитание, * умножение, / деление, ^ возведение в степень, MOD определение остатка от деления. Знаки отношения:> больше, < меньше, = равно, <> не равно, >= больше или равно, <= меньше или равно. Знаки логических операций: NOT ЛОГИЧЕСКОЕ ОТРИЦАНИЕ AND ЛОГИЧЕСКОЕ УМНОЖЕНИЕ OR ЛОГИЧЕСКОЕ СЛОЖЕНИЕ К первичным конструкциям языка относятся константы и идентификаторы. Константы различают арифметические и символьные. Арифметические константы бывают целыми и вещественными. Целая константа - целое десятичное число, которое может иметь знак плюс или минус и находится в диапазоне - 32768 .. + 32767. Вещественная константа - десятичное число, представленное в естественной форме (с фиксированной точкой) или в экспоненциальной форме (с плавающей точкой). В любом случае используется знак "точка". При использовании экспоненциальной формы записи основание системы счисления указывается символом Е, за которым следует порядок в виде целого числа со знаком: 6,234Е-5 -7936Е+12 Символьная литерная константа - это цепочка допустимых символов, заключенная в верхние кавычки или апострофы. Пример: "Бейсик- язык программирования". Идентификатор в Бейсике должен начинаться с латинской буквы, за которой следуют латинские буквы и цифры. Выражения. Различают арифметические, символьные и логические выражения. Пример использования арифметических выражений: Обычная запись 7х-4у а2+bх аb:с Запись на языке Бейсик 7*х-4*у а*а+в*х а*b/с Старшинство арифметических операций совпадает с общепринятым. Используются скобки, когда это необходимо. В задачах вычислительного характера определены следующие стандартные функции: Обозначение Название SIN(X) Вычисление синуса х COS(X) Вычисление косинуса х TAN(X) Вычисление тангенса х ARCTAN(X) Вычисление арктангенса х SQR(X) Вычисление квадратного корня из х SGN(X) Вычисление знака х LOG(X) Вычисление натурального логарифма EXP(X) Вычисление экспоненциальной функции ABS(X) Вычисление абсолютного значения х RND(X) Получение случайного числа в диапазоне от 0 до 1 INT(X) Вычисление целой части FIX(X) Округление до ближайшего целого Аргументом может быть любое арифметическое выражение. Для тригонометрических функций аргумент указывается в радианах. Обычная запись 3,7cosу 1+esin(a+b) Запись на языке Бейсик 3.7*cos(у) 1+EXP(sin(a+b)) Символьные (строковые) выражения образуются из символьных констант и переменных с помощью символьных операций и функций. Специальные функции для обработки символьных данных: LEN (S) Вычисляет длину символьного выражения S CHR$(X) Возвращает символ, десятичный код которого равен Х ASC(X) Возвращает десятичный код первого символа выражения X Логические выражения образуются из арифметических и символьных данных и имеют своими значениями только два значения - истина (TRUE) и ложь (FALSE). Пример записи логических выражений: (x>0) and (X=rez) Структура программы на языке Бейсик. Программа имеет строчную структуру. Для указания заголовка нет специальных операторов, для выделения раздела объявлений имен используется оператор комментария. Его общая форма: REM Текст комментария. Текст может состоять из любых символов, кроме двоеточия. Если в программе не используются массивы, то раздел объявления имен может отсутствовать. Тип переменных определяется символом (% или $) в конце идентификатора или его отсутствием (для вещественного типа). Если используются массивы, то они должны быть объявлены в начале программы. Для этого используется оператор DIM список. где список состоит из элементов, разделяемых запятыми. Каждый элемент - идентификатор массива, за которым в скобках указывается размерность массива. Можно использовать массивы размерности 1-N. По каждой размерности указывается наибольшее значение индекса. Наименьшее значение равно 1 (в некоторых версиях - 0). Пример 1. DIM FAKT(6,9) - Массив из 6 строк, 9 столбцов (двумерный, вещественный). Пример 2. DIM TEMP(24) - Одномерный массив из 24 вещественных элементов. Общие правила программирования рекомендуют заканчивать программу оператором END, хотя в Бейсике он, строго говоря, не обязателен. Реализация линейных алгоритмов. Прежде чем изучать данный раздел, необходимо повторить теоретические материалы Темы 4. Для реализации линейных алгоритмов используются операторы присваивания, ввода и вывода данных. Оператор присваивания предназначен для присваивания переменной нового значения. <переменная>=<выражение> Пример 3. А=27.5 Вещественной переменной присваивается значение 27.5 ARR(5)=0 Пятому элементу массива присваивается значение 0. F$="Пример" Символьной переменной присваивается символьное значение "Пример". Ввод данных с клавиатуры. Общий вид оператора INPUT [ "текст";] "список" Список - имена переменных, значения которых вводятся. Значения при наборе с клавиатуры отделяются запятыми. Пример 4. INPUT А, В, С на клавиатуре могут быть набраны значения 0.1, 1.5, 0.05 Вывод результатов. Оператор вывода результатов на экран имеет вид: PRINT "список" На экран выводятся значения элементов списка. Значения переменных при этом сохраняются. Символьные данные выводятся без кавычек, арифметические - с фиксированной точкой, знак выводится только для отрицательного значения. Если в качестве разделителя элементов списка используется запятая, то следующий за запятой элемент выводится в зонном формате. размер зоны (14-16 символов) зависит от конкретного устройства вывода. Значения в зоне "прижимаются" к правой границе. Если в качестве разделителя используется точка с запятой, то вывод осуществляется в уплотненном формате - через 2 пробела. Список элементов можно закончить точкой с запятой, запятой или пробелом. Если указан пробел, то исполнение оператора завершается переходом в новую строку экрана, при указании точки с запятой или запятой значения элементов следующего оператора PRINT выводятся в ту же строку. При указании оператора PRINT без списка элементов выводится пустая строка. Реализация разветвляющихся алгоритмов. Для реализации разветвлений в Бейсике используются условные операторы и оператор выбора, а также оператор перехода. Условный оператор имеет вид: IF <условие> THEN <операторы-1> ELSE <операторы-2> если то иначе Вся конструкция записывается в одной символьной строке. Если условие при текущих значениях переменных истинно, ТО выполняются операторы-1, иначе выполняются операторы-2. В конструкции условного оператора ветвь иначе может отсутствовать: IF <условие> THEN <операторы> Если условие ложно, то управление просто переходит к другой строке программы. Один условный оператор можно заменить двумя в сокращенной форме. В условном операторе после ключевых слов THEN и ELSE можно использовать другой условный оператор. Такая конструкция называется вложенным условным оператором. Пример 5. IF А>В THEN Х=А ELSE Х=В Простой условный оператор IF Х>0 THEN IF Х<=1 THEN Y=1+X ELSE Y=X*X вложенный условный оператор Оператор перехода используется для изменения естественной последовательности выполнения строк программы. Общая форма оператора: GOTO <номер строки> Управление программой передается строке с указанным номером. Следует рационально использовать оператор перехода, исключив его использование там, где можно использовать другие средства. Пример 6. GOTO 200 Х=А+В: GOTO 30 Оператор выбора называется также оператором вычисляемого перехода и имеет следующую форму: ON <арифметическое выражение> GOTO <список номеров строк> Вычисляется указанное арифметическое выражение, полученное значение округляется до целого числа, которое определяет номер элемента из списка номеров строк. Если значение арифметического выражения окажется меньше единицы или больше числа элементов в списке номеров строк, то передачи управления не происходит, просто выполняется оператор, следующий в программе далее. Пример 7. ON I% GOTO 250, 280, 300,90 Если I%=2, то управление будет передано строке 280. Пример реализации разветвляющегося алгоритма. Разработать Бейсик-программу для вычисления функции у = 1/(1-а2+b2) REM Программа вычисления функции REM А,В - аргументы REM Y - функция REM F$ - ФИО исполнителя REM D$ - дата исполнения REM Этап ввода исходных данных INPUT "А="; А INPUT "В="; В INPUT "ФИО исполнителя :"; F$ INPUT "дата исполнения:"; D$ REM вычисления и вывод Y=1-A*A+B*B PRINT "Результаты вычислений" PRINT "Аргументы функций" PRINT "А=":А "В=":В IF Y=0 THEN PRINT "Нет решения" IF Y <>0 THEN PRINT "Функция ="; 1/Y PRINT "Исполнил:"; F$ PRINT "Дата:"; D$ END Реализация циклических алгоритмов. Для реализации циклов в программах на языке Бейсик используются условные операторы в сочетании с оператором перехода, а также операторы цикла. Цикл с известным числом повторений называется также циклом с параметром, или циклом "FOR-NEXT". FOR <переменная> = выражение 1 TO выражение 2 [STEP выражение 3] <операторы> NEXT <переменная> <Переменная> называется параметром цикла, может использоваться любая арифметическая переменная. выражения 1..3 - любые арифметические выражения, определяющие начальное, конечное значения цикла и его приращение (шаг). Вычисляются до входа в цикл. Шаг может быть положительным или отрицательным, если шаг равен +1, то его можно не указывать. Оператор FOR называют заголовком цикла. Все остальное до оператора NEXT называется телом цикла. Выполнение всех конструкций происходит следующим образом: Параметру цикла присваивается начальное значение выражение 1 и один раз выполняется тело цикла. Оператором NEXT значение параметра изменяется на величину заданного шага (выражение 3). Проверяется выполнение условия: параметр цикла <= выражение 2 при выражение 3 >0 параметр цикла >= выражение 2 при выражение 3 <0 Если условие истинно, то осуществляется повторное выполнение цикла и вновь параметр изменяется на величину шага выражение 3 Если условие ложно, то происходит выход из цикла, т.е. переход к оператору, следующему за NEXT и дальнейшему выполнению программы. Реализация расчетов в некоторых практических задачах требует вычисления значений двух и более циклов, выполненных "один в другом". Получаемая конструкция называется вложенным циклом. В такой ситуации охватывающий цикл называется внешним, а вложенный - внутренним. В качестве параметров для этих циклов должны использоваться переменные с разными именами. Оператор NEXT для внутреннего цикла должен предшествовать оператору NEXT для внешнего цикла. Цикл с неизвестным числом повторений называется также итерационным циклом или циклом "Пока". Общая форма конструкции имеет вид: WHILE "выражение" <операторы> WEND "Выражение" определяет условие продолжения цикла. Первая строка - оператор WHILE - заголовок цикла. Операторы образуют тело цикла. Это могут быть любые исполнимые операторы языка. Оператор WEND закрывает тело цикла. Выполнение всей конструкции происходит следующим образом. вычисляется выражение, указанное в заголовке цикла. Если выражение истинно, то один раз выполняется тело цикла и вновь вычисляется выражение. Пункт 3 повторяется до тех пор, пока выражение истинно. Если выражение ложно, то тело цикла не выполняется, осуществляется выход из цикла, управление передается оператору, следующему за оператором WEND. Из сказанного следует, что операторы тела цикла должны изменять выражение, указанное в заголовке. В противном случае будет иметь место бесконечный цикл. В итерационных циклах могут быть вложенные циклы. Итерационные циклы обычно используются для вычисления функций с требуемой точностью. |