Задача. Вычислить площадь кругаДано: R, радиус круга. Требуется: S, площадь руга. Связь: S=3.14R2. Запишем алгоритм словесно (на русском языке). То есть запишем последовательность команд, выполнение которых позволит при заданном значении радиуса круга найти его площадь: Прочесть (получить) значение R. (ВВОД ДАННЫХ) Присвоить переменной S значение выражения 3,14*R*R. (КОМАНДА ПРИСВАИВАНИЯ) Записать (вывести) полученное значение S. (ВЫВОД РЕЗУЛЬТАТА) Короче можно записать так: Прочесть значение R S := 3,14*R*R Записать значение S Знак ":=" означает "присвоить". Запись А:=А+2 в программировании она означает команду присваивания. Сначала исполнитель вычисляет значение выражения, стоящего в правой части, а затем полученное значение присваивает переменной, стоящей в левой части. Например, после выполнения команд х:=3; х:=х*5 переменная х примет значение 15.
Блок ввода
Блок вычисления
Блок вывода
Разветвляющиеся алгоритмы. Команда ветвления. Существует широкий круг задач, при решении которых необходимо сделать определенный выбор в зависимости от выполнения некоторых условий. Процесс решения таких задач описывается алгоритмом, тип которого определяется как ветвящийся (разветвляющийся). В разветвляющихся алгоритмах принцип линейного автоматического перехода от команды к команде, от действия к действию в порядке естественного следования не является всеобщим, так как иногда возникает необходимость произвольного перехода к предписанию, то есть нарушения линейности переходов. Ветвящиеся алгоритмы допускают два способа представления - графический и словесный. При графическом представлении алгоритма ветвление (развилка, выбор дальнейших действий) организуется с помощью логического элемента (ромб с записанным внутри условием), имеющего один вход и несколько (в простейшем случае - два) выходов. Назначение логического элемента - проверка заданного условия. В зависимости от выполнения (истинности) или невыполнения (ложности) проверяемого условия возможен выход соответственно на ветвь "Да" или "Нет". Пример: Задача: вычислить y=|x|. Дано: х – значение аргумента.
Словесное представление: Прочесть значение x. Если х>=0 то y:= х иначе у:=– х Конец ветвления Записать значение у Упражнение.Какое значение примет Z в результате выполнения алгоритма X:=3; Y:=4 ЕСЛИ X>Y, ТО Z:=X*X+Y ИНАЧЕ Z:= Y*Y+X Конец ветвления Z:=2*Z Вид получившейся графической схемы объясняет, почему алгоритм, соответствующий ей, назвали ветвящимся. Кроме того, на схеме наглядно проявляется важное свойство ветвящихся алгоритмов: их исполнение всегда проходит только по одному из возможных путей, который определяется конкретными текущими условиями, причем в каждом случае от начала алгоритма (входа) до его конца (выхода). Это свойство присуще всякому логически правильно составленному алгоритму и является признаком правильной организации ветвлений. Составляя алгоритм решения задачи о вычислении абсолютной величины заданного значения переменной, мы получили так называемую полную условную конструкцию. Общий вид полной условной конструкции, реализующей ветвление при графическом представлении алгоритма, изображен на рисунке Здесь Q - проверяемое условие; P1, P2, …, Pn - действия, которые должны быть выполнены в случае истинности условия Q (положительная ветвь ветвления); T1, T2, …, Tm - действия, выполняемые, если условие Q ложно (отрицательная ветвь ветвления).
Если Q то P1 P1 … Pn иначе T1 T2 … Tm Конец ветвления
Циклические алгоритмы. Команда повторения При составлении алгоритмов решения достаточно большого круга задач нередко возникает потребность в неоднократном повторении одних и тех же команд. Алгоритм, составленный с использованием многократных повторений одних и тех же действий (циклов), называется циклическим. Однако "неоднократно" не значит "до бесконечности". Организация циклов, никогда не приводящая к остановке в выполнении алгоритма (так называемое "зацикливание"), является нарушением требования его результативности - получения результата за конечное число шагов.
Пока Р повторять S Конец цикла Таким образом, если Р не выполняется, то предусмотрен выход из цикла на команду, записанную после строки "Конец цикла". Здесь условие Р - это условие на продолжение цикла.
Повторять S Пока не Р Конец цикла Отметим основное отличительное свойство циклических алгоритмов: количество действий, исполняемых в процессе выполнения алгоритма, может существенно превышать количество команд, из которых организован цикл. Чтобы в этом убедиться, достаточно алгоритм "проиграть", то есть выполнить его шаг за шагом при некоторых наборах допустимых исходных данных, перевоплотившись в предполагаемого педантичного исполнителя. (Отметим также, что перед началом этапа программирования полезно проводить указанным образом "проигрывание" любого алгоритма, так как эта процедура позволяет легко обнаружить ошибки, допущенные в логической организации алгоритма). Для примера напишем блок-схему алгоритма вычисления суммы всех натуральных чисел от 1 до введенного пользователем N. Надо отметить, что можно было бы обойтись линейным алгоритмом, используя формулу суммы n членов арифметической прогрессии. Однако нам интересно именно на этом простом примере проиллюстрировать работу циклического алгоритма.
Дано n=10. Найти S=1+2+…+10. Учитывая то, что Si+1= Si+i+1, где Si =1+2+…+i. Наша цель – получить тело цикла, т.е. блок команд, который будет повторяться несколько раз.
Итак, тело нашего цикла:
Найдем условие продолжения цикла. Так как перед входом в цикл значение переменной i равно 0. Поставим условие продолжения <100, т.е. i =0,1,2,…,99.
[kgl]
[gl]ЛЕКЦИЯ 11. ОСНОВЫ ЯЗЫКА ПАСКАЛЬ[:] Алфавит языка Элемента основного словаря языка Паскаль принято подразделять на символы, используемые в идентификаторах, специальные знаки и зарезервированные слова. Идентификатор – это имя какого-либо элемента программы (константы, переменной, типа, процедуры или функции). Он может состоять из строчных и прописных латинских букв (a,...,z, A,…,Z), цифр (0,...,9) и знака подчеркивания и не должен начинаться с цифры. Прописные и строчные буквы в идентификаторах и зарезервированных словах считаются идентичными, они различаются лишь в строковых константах. Длина идентификатора не ограничена, но значимыми являются лишь первые 63 символа. Разделители используются для отделения друг от друга идентификаторов, чисел и зарезервированных слов. К разделителям относятся, например, пробел и комментарий. В любом месте программы, где разрешается один пробел, их можно вставить любое количество. Комментарии заключаются либо в фигурные скобки { комментарий 1 }, либо в символы (* комментарий 2 *) и могут занимать любое количество строк. Последовательность из трех символов (*) начинает комментарий до конца строки. Текст комментария игнорируется при компиляции, если это не директивы компилятора, которые имеют вид К специальным знакам относятся знаки пунктуации (. () [] .. : ;), знаки операций и зарезервированные слова. Знаки операций могут быть как символьные (+,-,*,/ и т.д.), так и буквенными (mod, div, not). Зарезервированные слова являются служебными и не могут быть переопределены пользователем, т.е. их нельзя использовать как имена пользовательских объектов. Неиспользуемые символы - это коды ASCII, которые используются только в комментариях и символьных строках, но не в языке. К ним относятся все русские буквы, а также символы %, &, ! и т.п.
Структура программы
В программе, написанной на Турбо Паскале, могут быть следующие разделы: Program ... ; { Заголовок программы } Uses ... ; { Подключение модулей } Label ... ; { Раздел объявления меток } Const ... ; { Раздел объявления констант } Type ... ; { Раздел объявления новых типов } Var ... ; { Раздел объявления переменных } Procedure ... ; { Описание своих процедур } Function ... ; { Описание своих функций } Begin { начало основной программы } ...; { Операторы } ...; End. Обязательной частью является лишь тело программы, которое начинается словом begin, а заканчивается словом end с точкой. Операторы в Паскале разделяются точкой запятой. Заголовок программы является хотя и необязательным, но желательным элементом и состоит из зарезервированного слова program и идентификатора - имени программы, за которым следует точка с запятой. Порядок объявлений и описаний не регламентируется. ПРИМЕР : Простейшая программа. program prim_1; { демонстрация структуры программы} {эта программа не требует никаких объявлений и описаний} Begin write('Привет! Вот мы и начали.') (* эта строка текста появится на экране *) end. program olimpiada; var num,year:integer; begin write('Year: '); readln(year); if year<1896 then writeln('Too early year.') else if year mod 4=0 then begin num:=(year-1896) div 4+1; writeln('num=',num); end else writeln('Non olimpic year.');
readln; end.
ТИПЫ ДАННЫХ
Понятие типа данных является ключевым в языке Паскаль. Тип данных характеризует внутреннее представление, множество допустимых значений для этих данных, а также совокупность операций над ними. Среди типов данных различают стандартные (предопределенные разработчиками языка) и пользовательские (определяемые программистом в своей программе). Мы будем рассматривать следующие стандартные типы: целые числа, вещественные числа, логический тип, символьный и строковый типы. Программист может описать свой тип на основе этих базовых в разделе описания типов, который начинается словом Type. Затем для каждого типа следует конструкция вида: идентификатор типа = определение типа; Рассмотрим сначала простые типы данных, каждый из которых определяет упорядоченное множество значений: целые типы, логический тип, символьный тип, вещественные типы. Все эти типы, кроме вещественых являются порядковыми. Каждому значению порядкового типа функция Ord ставит в соответствие натуральное число - порядковый номер данного значения в множестве допустимых значений. К любым порядковым типам также можно применять функции Pred - возвращает предыдущее значение и Succ - следующее значение. Тип относится к упорядоченным если для переменных и выражений этого типа определены операции отношения или сравнения: =, <>, <, >, <=, >=. Любой порядковый тип является упорядоченным, но не наоборот. Так вещественные типы и тип string упорядоченные, но не порядковые.
Целые типы
В языке Турбо Паскаль определено 5 целых типов: Shortint (-128 ... 127, 1 байт), Integer (-32767 ... 32768, 2 байта), Longint (-2147483648 ... 2147483647, 4 байта), Byte (0 ... 255, 1 байт), Word (0 ... 65535, 2 байта). Для целых чисел определены такие операции. Унарные: +,-. Бинарные: сложение, вычитание, умножение, получение частного (div) и остатка (mod) при целочисленном делении и некоторые другие. Также с целыми числами можно производить операции, результаты которых не целые числа. Это обычное деление и операции отношения. Кроме того, имеется большое количество встроенных функций для работы с целыми числами: abs, sqr, sqrt, sin, cos, exp, ln и др.
Вещественные типы
В Турбо Паскале имеется 5 вещественных типов. Real (занимает 6 байт, диапазон от 2.9E-39 до 1.7E+38 по модулю, точность 11-12 значащих цифр) Single(занимает 4 байта, диапазон от 1.5E-45 до 3.4E+38 по модулю, точность 7-8 значащих цифр) Double(занимает 8 байт, диапазон от 5.0Е-324 до 1.7Е+308по модулю,точность 15-16 значащих цифр) Extended (занимает 10 байт, диапазон от 3.4E-4932 до 1.1E+4932 по модулю, точность19-20 значащих цифр). Comp(занимает 8 байт, диапазон от -9.2E-18 до 9.2E+18, хранятся точно, поскольку это целые числа) Вещественные типы являются упорядоченными, но не порядковыми. Операции над вещественными числами: сложение ,вычитание, умножение, деление и операции отношения. Кроме того, имеется большое количество встроенных функций для работы с числами: abs, sqr, sqrt, sin, cos и т.п. Вещественные числа хранятся неточно. Каждый из имеющихся вещественных типов гарантирует правильное хранение только определенного количества значащих цифр, их называют верными цифрами. С математической точки зрения, из за особенностей внутреннего представления речь идет об относительной погрешности. Неточности в хранении вещественных чисел могут привести к тому, что при вычитании близких чисел может произойти потеря значимости. Это же объясняет, почему следует избегать сравнения вещественных величин на точное равенство. ПРИМЕР: тип Single - хранится 7-8 знаков после десятичной точки, тип Double - 15-16, тип Extended - 19-20. program sravnenie; var x : single; y : double; z : extended; Begin x := 1/3; y := 1/3; z := abs(x-y); writeln('z=',z); end. Эта программа выдаст в результате число z=9.93410748106882E-0009. Обычно принято считать, что a=b, если выполняется условие abs(a-b)<eps. Число eps можно определять следующим образом: min(abs(a),abs(b))*10^(-m), где m - необходимое число совпадающих десятичных разрядов.
Логический тип В обычной школьной и вузовской практике учащимся и студентам предлагаются для решения те задания, которые представлены в задачниках или составлены преподавателем. Однако усвоение материала будет более осознанным, если предоставить ученикам возможность самостоятельно разработать и решить задачи на указанную тему. Здесь появляется возможность дать волю фантазии, выдумке, сделать какие-то нестандартные ходы. Всё это идёт на пользу делу. В настоящей публикации представлены наиболее удачные задачи по теме "Логические выражения и их запись на языке Pascal", которые были составлены студентами. Задание они получили в следующей формулировке: "Составить высказывание, содержащее переменные, которое в зависимости от их значений принимает значение TRUE или FALSE. Записать соответствующее логическое выражение.". Тема "Логические выражения" является очень важной при изучении программирования как в школьном, там и вузовском курсе. Зачастую она остается незаслуженно обойденной, в то время как именно по этой причине учащиеся затрудняются правильно построить логическое выражения, являющееся условием в развилке или цикле. Потому подобного рода задания позволяют акцентировать внимание на указанной проблематике и лучшей степени подготовить учащихся к изучению тем "Развилка", "Циклы". Что касается моего задания, то следует отметить, что некоторые студенты подошли к его выполнению формально, предложив полные аналоги задач из учебников, но были и своего рода находки. Ниже приведены сами задания и соответствующие им логические выражения. 1. Сумма цифр заданного четырёхзначного числа N превосходит произведение цифр этого же числа на 1. N Div 1000 + N Div 100 Mod 10 + N Mod 100 Div 10 + N Mod 10 - 1 = (N Div 1000) * (N Div 100 Mod 10) * (N Mod 100 Div 10) * (N Mod 10) 2. Сумма двух последних цифр заданного трёхзначного числа N меньше заданного K, а первая цифра N больше 5. (N Div 10 Mod 10 + N Mod 10 < K) And (N Div 100 > 5) 3. Заданное натуральное число N является двузначным и кратно K. (N >= 10) And (N <= 99) And (N Mod K = 0) или (N in [10..99]) And (N Mod K = 0) 4. Сумма двух первых цифр заданного четырёхзначного числа N равна произведению двух последних. N Div 1000 + N Div 100 Mod 10 = (N Mod 100 Div 10) * (N Mod 10) 5. Каждая последующая цифра трёхзначного числа N, начиная со старшего разряда, больше предыдущей на 1. (N Mod 10 - N Div 10 Mod 10 = 1) And (N Div 10 Mod 10 - N Div 100 = 1) 6. X — отрицательное целое число, делящееся на 3 нацело. (X < 0) And (X Mod 3 = 0) 7. Заданы три положительных числа A, B, C. Эти числа являются сторонами равнобедренного треугольника. (A + B > C) And (A + C > B) And (B + C > A) And ((A = B) Or (B = C) Or (A = C)) Для действительных A, B, C (A + B > C) And (A + C > B) And (B + C > A) And ((Abs(A - B) < 1E-7) Or (Abs(B - C) < 1E-7) Or (Abs(A - C) < 1E-7)) 8. Среди заданных целых чисел A, B, C, D есть хотя бы два чётных. Ord(Not Odd(A)) + Ord(Not Odd(B)) + Ord(Not Odd(C)) + Ord(Not Odd(D)) >= 2 9. Прямоугольник с измерениями A, B подобен прямоугольнику с соответствующими измерениями C, D. Abs(A / C - B / D) < 1E-7 10. Дробь A / B является правильной. (A < B) And (B > 0) 11. Дано натуральное число N — некоторый год. Этот год является високосным. (N Mod 4 = 0) And (N Mod 100 <> 0) Or (N Mod 400 = 0) или (N Mod 4 = 0) And Not((N Mod 100 = 0) Xor (N Mod 400 = 0))
Переменные логического типа Boolean занимают в памяти один байт и могут принимать одно из двух значений False - ложное или True - истинное. Этот тип является порядковым (Ord(False) = 0, Ord(True) = 1) и, следовательно, упорядоченным. Результат любых операций сравнения имеет логический тип и может быть присвоен логической переменной. Для операндов типа boolean определены следующие логические операции: NOT - отрицание (превращает false в true, а true в false), AND - логическое умножение "и", OR – логическое сложение "или", XOR - исключающее или (true если операнды разные). Принцип действия этих операций можно проиллюстрировать такими схемами: Символьный тип Символьный тип Char также называют литерным. Он позволяет работать с символами, которые записываются двумя способами: в одинарных кавычках или по их коду, например 'a', 'B', '*' или, что то же самое, #97, #130, #42. В отличие от текста программы на паскале, символы, соответствующие строчным и заглавным буквам различаются. Множество значений типа Char представляет собой полный набор ASCII - символов (американская стандартная кодировка). В компьютере хранятся шестнадцатеричные коды символов (1 байт), которые и используются в операциях отношения (сравнения). Функция Ord выдает код соответствующего символа, который может быть от 0 до 255. Обратной функцией, которая по коду выдает соответствующий символ, является функция Chr. Читайте также: Почему люди поддаются рекламе?: Только не надо искать ответы в качестве или количестве рекламы... ![]() ©2015-2020 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (1137)
|
Почему 1285321 студент выбрали МегаОбучалку... Система поиска информации Мобильная версия сайта Удобная навигация Нет шокирующей рекламы |