Задание 1. Записать алгоритм определения периметра прямоугольника.
Задание 2. Записать блок-схему алгоритма решения квадратного уравнения.
Задание 3. В приведенном ниже фрагменте блок-схемы массив сначала заполняется, а потом изменяется. В результате все элементы этого массива …
1. окажутся равны 1
2. сдвигаются на 1 элемент вправо, кроме последнего элемента
3. сдвигаются на 1 элемент влево, кроме первого элемента
4. окажутся равны своим индексам
Решение: Данный алгоритм является циклическим с известным числом повторений. Тело первого цикла повторяется 11 раз. На каждой итерации очередному i элементу массива присваивается значение i+1; таким образом, значение А[0] = 1, А[1] = 2, А[2] = 3 … А[10] = 11.
Тело второго цикла повторяется 10 раз. На каждой итерации очередному элементу массива присваивается значение предыдущего элемента:
А[1] = А[0] = 1,
А[2] = А[1] = 1,
А[3] = А[2] = 1,
………………
А[10] = А[9] = 1.
Задание 4. Блок-схемой представлен алгоритм…
1. вывода на печать трех чисел в порядке убывания их значений
2. нахождения максимального из трех чисел
3. вывода на печать трех чисел в порядке возрастания их значений
4. перестановки значений переменных А, В, С в порядке убывания
Решение: На блок-схеме представлена алгоритмическая конструкция ветвления в полной форме. Причем положительная (если условие истинно) и отрицательная (если условие ложно) ветви алгоритма содержат вложенные условные конструкции. В первом условии сравниваются значения переменных А и В. Положительная ветвь, соответствующая условию А > В, содержит дополнительные проверки условий А > C и B > С. Если все три условия истинны, то переменные выводятся в следующем порядке: наибольшее значение (переменная А), среднее значение (переменная В), наименьшее значение (переменная С). Если истинны условия А > В и А > C, а условие B > С ложно, то переменные выводятся в следующем порядке: наибольшее значение (переменная А), среднее значение (переменная С), наименьшее значение (переменная В). Если истинно условие А > В, а условие А > C ложно, то переменные выводятся в следующем порядке: наибольшее значение (переменная С), среднее значение (переменная А), наименьшее значение (переменная В). Отрицательная ветвь условия А > В (условие А > В ложно) содержит дополнительные проверки условий В > C и А > С. Если последние два условия истинны, то переменные выводятся в следующем порядке: наибольшее значение (переменная В), среднее значение (переменная А), наименьшее значение (переменная С). Если условие В > C истинно, а А > С ложно, то переменные выводятся в следующем порядке: наибольшее значение (переменная В), среднее значение (переменная С), наименьшее значение (переменная А). Если условие В > C ложно, то переменные выводятся в следующем порядке: наибольшее значение (переменная С), среднее значение (переменная В), наименьшее значение (переменная А). Проанализировав все ветви данного алгоритма, можно сделать вывод, что числа выводятся на печать в порядке убывания их значений.
Задание 5. Условие 1 задает в алгоритме …
1. цикл с предусловием
2. цикл с известным числом повторений
3. цикл с постусловием
4. полное ветвление
Тестовые задания: Тема «Алгоритмы»
1. Представленный фрагмент блок-схемы алгоритма вычисляет
а. 2 4
1. 2 5
2. 1*2*3*4
3. 1*2*3*4*5
2. Наиболее наглядным способом записи алгоритма является
1. изображение в виде последовательно блоков, каждый из которых предписывает выполнение определенных действий
2. описание последовательности шагов
3. описание функциональных зависимостей между данными, предписывающих выполнение определенных действий
4. описание действий с помощью логических связок и кванторов
3. Представленный фрагмент блок-схемы алгоритма вычисляет
1. A4
2. 1*2*3*4
3. 1*2*3*4*5
4. A 5
4. На рисунке продемонстрирована команда
1. цикл с предусловием
2. цикл с постусловием
3. ветвление
4. сортировка
5. В результате выполнения фрагмента блок-схемы алгоритма a и b примут значения …
1. a=2, b=2
2. a=4, b=2
3. a=2, b=4
4. a=0, b=0
6. В результате выполнения фрагмента блок-схемы алгоритма
X и Y примут следующие значения …
1. X=3, Y=4,5
2. X=2, Y=2
3. X=3, Y=0,5
4. X=2, Y=3,5
7. В результате выполнения фрагмента алгоритма элементы массива А2, А4, А6, А8 при N=8 получат, соответственно, значения …
1. 2, 4, 16, 32
2. 4, 16, 36, 64
3. 4, 16, 32, 48
4. 4, 12, 24, 36
8. Укажите сколько раз выполнится цикл в представленном фрагменте программы
a:=3; b:=7;
ПОКА (a / 2) ≤ (b / 3)
НЦ
a:=a+2;
b:=b+3;
КЦ;
1. 10
2. бесконечное число раз
3. 100
4. 1000
9. В результате работы алгоритма
Y:= X + 5
X:= Y
Y:= X + Y
вывод Y
переменная Y приняла значение 14. Укажите число, которое являлось значением переменной X до начала работы алгоритма.
1. 7
2. 2
3. 5
4. 10
10. Значение переменной d после выполнения фрагмента алгоритма (операция mod (х, y) – получение остатка целочисленного деления х на y)
k:= 70
выбор
| при mod(k, 12) = 7: d:= k;
| при mod(k, 12) < 5: d:= 2;
| при mod(k, 12) > 9: d:= 3;
| иначе d:= 1;
все
равно
1. 3
2. 70
3. 2
4. 1
Лабораторная работа №4
Тема: ОСНОВЫ ПРОГРАММИРОВАНИЯ НА ЯЗЫКЕ TURBO PASCAL
Цель работы:
1. Ознакомиться со структурой программы, алфавитом языка, типами данных, операторами.
2. Научиться составлять программы.
Задание: Изучить основные понятия по теме, составить программы по заданию преподавателя.
Литература: [1]-стр. 275-295, [2]-стр. 157-176.
Структура программы:
-заголовок, состоящий из зарезервированного слова program и имени программы. Заголовок несет только смысловую нагрузку и может отсутствовать.
-программный блок, состоящий из раздела описаний и раздела операторов.
Раздел описаний может содержать:
· описание имен подключаемых библиотечных модулей (uses);
· описание меток (label);
· описание констант (const);
· описание типов данных (type);
· описание переменных (var);
· описание процедур и функций (procedure или function).
Каждый элемент раздела описаний начинается соответствующим служебным словом, после которого идет последовательность величин одного типа, разделенных запятой. После списка имен ставится двоеточие и указывается тип данных. Например:
Var
al, a2, a3: integer; xl,xl: real;
Раздел операторов начинается служебным словом begin. Далее следуют операторы программы, которые отделяются один от другого символом точка с запятой. Заканчивается раздел служебным словом end, после которого ставится точка.
Пример программы
program Priml; (заголовок программы}
Var
а,b,х,у:real; {описание переменных}
begin {начало исполнительной части}
write('введите два числа через пробел');
readln(a,b); {ввод значений а и Ь}
х:=а+Ь; {вычисление суммы}
у:=а*Ь; {вычисление произведения}
writeln('А+В=',х,’А*В=',у); {вывод результата}
end. {конец программы}
В программе вычисляется сумма и произведение двух чисел. Числа обозначены именами а, b, результаты вычислений - именами х, у.
Алфавит языка TURBO PASCAL составляют:
· прописные и строчные буквы латинского алфавита: А, В, C...Y, Z, a, b, с,...у, z;
· десятичные цифры: 0, 1, 2,...9;
· специальные символы: + - */ ><=;# х,.: {} [] ()
· комбинации специальных символов, которые нельзя разделять пробелами, если они используются как знаки операций: «: =», «..», «><», «< =», «> =».
Данные, типы данных. Задача любой программы состоит в обработке данных. В языке TURBO PASCAL данные могут быть представлены в виде констант и переменных. Константы не изменяют своих значений в процессе выполнения программы, переменные могут изменять значения. Переменная определяется именем. Имя переменной состоит их латинских букв и цифр, начинается с буквы. Например, Alfa, Mas2 - имена переменных; 20, 'pascal' - константы.
Для описания множества допустимых значений величины и совокупности операций, в которых участвует данная величина, используется указание типа данных. Каждый тип имеет свой диапазон значений и специальное зарезервированное слово для описания.
Целочисленные типы данных используются для представления целых чисел. Основной тип Integer представляет целые числа в диапазоне:
-32768...32767.
Вещественные (действительные) типы данных представляют собой значения, которые используются в арифметических выражениях и могут быть представлены двумя способами: с фиксированной и с плавающей точкой. Основной вещественный тип real, представляет числа с дробной частью, содержащей 11-12 знаков после запятой.
Действительные числа с фиксированной точкой записываются по обычным правилам арифметики, только целая часть от дробной отделяется точкой, например 32.5. Числа могут быть представлены в экспоненциальном виде (с плавающей точкой). Например
0.518Е+2 = 0.518 * 102= 51.8 0.518Е-2 = 0.518 * 10 2 = 0.00518 |
Логический (булевский) тип boolean определяется двумя значениями: true (истина) и false (ложь). Он применяется в логических выражениях.
Над числовыми данными могут выполняться арифметические операции, которые приведены в таблице 5.
Таблица 5
Арифметические операции
Операция | Действие | Тип операндов | Тип результата |
+ | Сложение | Целый, вещественный | Целый, вещественный |
- | Вычитание | Целый, вещественный | Целый, вещественный |
* | Умножение | Целый, вещественный | Целый, вещественный |
/ | Деление | Целый, вещественный | Вещественный |
D1V | Целочисленное деление | Целый | Целый |
MOD | Остаток от деления | Целый | Целый |
Например, для нахождения целой части результата деления а на z, где а и z- целые, следует записать a DIV z. Если а =17, z =5, то результат равен 3.
Для нахождения остатка от деления а на z, где а и z - целые, следует записать a MOD z. Если а=17, z=5, то результат равен 2.
Примечание
Возведение числа х в целую степень, т. е. вычисление у=хn для п целого типа (integer), заменяется операцией умножения: xn = х*х*...х - п раз.
Для возведения положительного числа х в нецелую степень n (real), расчет производится по формуле:
Для выполнения некоторых заранее предопределенных действий в языке TURBO PASCAL разработаны и используются стандартные функции. В таблице 6 приведены некоторые часто используемые стандартные функции. При использовании стандартных функций в программе необходимо учитывать следующее:
1. после имени стандартной функции в скобках записывается аргумент, который может быть арифметическим выражением cos (х+у), константой cos (1.3), переменной cos (х), стандартной функцией cos (In (х)).
2. аргумент тригонометрической функции должен быть задан в радианах.
Таблица 6
Стандартные математические функции
Обращение | Тип аргумента | Тип результата | Функция |
Abs(x) | Целый, вещественный | Целый, вещественный | Модуль аргумента |
Arctan(x) | Целый, вещественный | Вещественный | Арктангенс |
Cos(x) | Целый, вещественный | Вещественный | Косинус |
Ехр(х) | Целый, вещественный | Вещественный | ех- экспонента |
Frac(x) | Вещественный | Вещественный | Дробная часть х |
lnt(x) | Вещественный | Вещественный | Целая часть х |
Trunc(x) | Вещественный | Целый | Ближайшее целое, не превышающее х по модулю |
Kound(x) | Вещественный | Целый | Округление до ближайшего целого |
Ln(x) | Целый, вещественный | Вещественный | Натуральный логарифм |
Kandom(x) | Целый | Целый | Псевдослучайное число [0,х] |
Sin(x) | Целый, вещественный | Вещественный | Синус |
Sqr(x) | Целый, вещественный | Вещественный | Квадрат числа х |
Sqrt(x) | Целый, вещественный | Вещественный | Корень квадратный из числа X |
Pi | Вещественный | 3.1415... |
Арифметические выражения. В арифметических выражениях используются константы, переменные, функции, знаки арифметических действий и круглые скобки. Значением арифметического выражения является число.
Правила записи арифметических выражений:
· все знаки операций проставляются;
· используются только круглые скобки, при этом число открывающихся и закрывающихся скобок должно быть одним и тем же;
· последовательность вычислений в выражении определяется в соответствии с приоритетами:
1. вычисление стандартных функций,
2. *, /, DIV, MOD,
3. +,-.
Пример арифметического выражения:
(In(х)*ln(х)-cos(а*а)+sqrt(у-х*х))/х
соответствует алгебраическому выражению
Логические выражения образуются из логических переменных, арифметических, строковых выражений, операций отношения (>,< и т. д.) и логических операторов not, and, or. Результатом вычисления логического выражения является true (истина) или false (ложь).
Примеры логических выражений:
(а>0) and (b>0) - имеет значение true, если а >0 и b>0;
(a>0)or(b>0) - имеет значение true, если а>0 или b>0 или (а>0 и b>0);
Ввод и вывод данных. Ввод данных это передача информации от внешнего носителя информации (например, с клавиатуры) в оперативную память компьютера для обработки. Ввод данных в программе осуществляется с помощью процедур Read и Readln. Общий вид вызова процедур:
Read (<список переменных>); Readln (<Список переменных>); |
В списке переменных перечисляются имена переменных. Значения этих переменных вводятся через пробел с клавиатуры при выполнении программы. После ввода данных для одной процедуры Read нажимается клавиша ввода <Enter>. Процедура чтения Readln аналогична процедуре Read, единственное отличие в том, что после считывания последнего в списке значения курсор переходит на начало новой строки.
Например, при выполнении оператора read (i, k); следует ввести с клавиатуры два числа через пробел, затем нажать клавишу <Enter>.
Вывод данных - обратный процесс, когда данные передаются после обработки из оперативной памяти на внешний носитель (экран монитора, принтер, дискету или винчестер и другие устройства). Выполнение этих операций в программе производится с помощью стандартных процедур Write, Writeln. Общий вид вызова процедур:
Write(<список вывода>); Writeln(<Список вывода>);
В списке вывода могут быть представлены переменные, выражения и произвольный текст, заключенный в апострофы. Например, Write('Привет'); Write(34.7); Write(45+55); Write(b, d);
При выполнении процедуры на экран выводятся текущие значения переменных и выражений, текст, заключенный в апострофы, выводится без апострофов. Процедура Writeln аналогична процедуре Write, отличие состоит в том, что после вывода последнего в списке значения курсор переходит на начало новой строки.
Оператором TURBO PASCAL называется предложение языка программирования, задающее полное описание некоторого действия, которое необходимо выполнить. Основная часть программы на языке TURBO PASCAL представляет собой последовательность операторов. Разделителем операторов служит точка с запятой. Операторы, не содержащие других операторов, называются простыми. К ним относятся операторы присваивания, безусловного перехода, вызова процедуры, пустой оператор. Структурные операторы представляют собой конструкции, построенные из других операторов по строго определенным правилам.
Оператор присваивания используется для присваивания значений переменным. В его левой части указывается имя переменной, правая часть представляет собой выражение, тип которого совместим с типом переменной в левой части. Символ «:=» означает «присвоить значение». Оператор присваивания выполняется в два этапа: сначала вычисляется значение выражения в правой части, затем выполняется присваивание результата левой части, т.е. результат записывается в ячейку, отведенную переменной, указанной в левой части оператора. Например,
х:= 1;
а:= 5.02;
b:= 32*a+Sin(х);
s:= 'Иван Иваныч';
Пример
Поменять между собой значения двух переменных а и b, воспользовавшись третьей переменной r для временного хранения значения.
Программа
Program Prim2;
Var
a,b,r: real;
Begin
write('Введите два числа '); readln(a,b);
r: =a; {значение переменной а записывается в переменную r}
а: =b; {значение переменной b записывается в переменную а}
b:=r; {значение переменной r записывается в переменную b}
write ('а=', а, 'b=', b);
End.
Cоставной оператор представляет собой совокупность произвольного числа операторов, отделенных друг от друга точкой с запятой, и ограниченных операторными скобками begin и end. Он воспринимается как единое целое и может находиться в любом месте программы, где возможно наличие оператора.
Begin
<оператор 1>;
<оператор 2>;
…
<оператор N>
End;
Условный оператор if используется в программе для организации ветвлений в зависимости от выполнения некоторого условия. Структура оператора:
if <условие> then <оператор 1>;
или
if <условие> then <оператор 1> else <оператор 2>;
Здесь <условие> это некоторое логическое выражение;
<оператор 1>, <оператор 2> простые или составные операторы.
Действие оператора: если <условие > выполняется (логическое выражение равно true), то выполняется <оператор 1>, если < условие> не выполняется (логическое выражение равно false), то выполняется <оператор 2>. Если в структуре этого оператора else отсутствует и <условие> не выполняется, то управление передастся оператору, следующему за оператором if.
Рассмотрим примеры использования условного оператора if.
Пример 1
if a>b then write (a) else write (b); если a>b;
то будет выполнена процедура вывода значения переменной а, в противном случае - процедура вывода значения переменной b.
Пример 2
if (a>b) and (а>с) then write (a);
по этому оператору будет выполнена процедура вывода значения переменной а только в том случае, если а>b и а>с.
Пример 3
if а < 0 then
Begin
b:=2 * а;
Write(b);
End
Else
с: = sqr(a);
если значение переменной а меньше 0, то будет вычислено значение переменной b и выведено на экран, если значение переменной а больше либо равно 0, то будет вычислено значение переменной с.
Операторы цикла используются для организации повтора выполнения некоторой группы операторов в программе.
Структура оператора цикла с предусловием:
while< условие > do <оператор>;
Здесь
<условие> - некоторое логическое выражение;
<оператор> - простой или составной оператор внутри цикла (тело цикла).
Тело цикла будет выполняться до тех пор, пока < условие > имеет значение true, прекращает выполняться, если < условие > принимает значение false.
Структура оператора цикла с постусловием:
Repeat
< тело цикла >
until < условие>;
Здесь
< тело цикла > - может содержать любые допустимые операторы языка TURBO PASCAL, разделенные символом точка с запятой. Но этому оператору < тело цикла > выполняется до тех пор, пока не выполнится заданное < условие >.
Структура оператора цикла с параметром for
for i:=n to nk do <оператор>;
или
for і: =n downto nk do <оператор>;
Здесь
і - параметр цикла; n, nk - соответственно начальное и конечное значения параметра цикла. Шаг изменения параметра цикла равен 1 для первой формы оператора и равен минус 1 для второй формы оператора.
< оператор > - простой или составной оператор (тело цикла).
Оператор for применяют в тех случаях, когда число повторений цикла заранее известно.
Пример
Вычислить значение переменной у при заданном значении n.
program РгіmЗ;
Var
і,n:integer;
у:real;
Begin
writeln(1 введите число n1);
Readln(n);
{1 способ организации цикла с помощью оператора WHILE}
у:=0;
i:=l;
while i<=n do
Begin
у:=у+1/і;
і:=і+1;
End;
writeln('у=', у);
{2 способ организации цикла с помощью оператора REPEAT}
у:=0;
і: =1;
repeat
у:=у+1/і;
і:=і + 1;
until i>n;
writeln(1y=',y);
{3 способ организации цикла с помощью оператора FOR}
у:=0;
for i:=l to n do
у:=у+1/і;
writeln('у=',у);
End.
Массив - это упорядоченная последовательность данных, состоящая из фиксированного числа элементов, имеющих один и тот же тип и обозначенных общим именем. Перед использованием в программе массив должен быть объявлен в описательной части программы.
Одномерный массив - это массив, у которого в описании указан только один индекс. Например, а (і) значение элемента массива а с номером і. Массивы, используемые в программе, должны быть объявлены в разделе описаний следующим образом:
а: array [l..n ] of<тип >;
Здесь а - имя массива; п - максимально допустимое количество элементов в массиве; < тип > - тип данных в массиве (real, integer и т.д.).
Размер массива т.е. максимально допустимое количество элементов в нем, можно задавать в явном виде или с помощью константы в описательной части программы.
В явном виде program Mas; var a: array[1..20] of real; begin … end. | С помощью константы program Mas; const n=20; var a: array[l..n] of real; begin … end. |
Доступ к каждому конкретному элементу массива осуществляется по имени с указанием значения индекса (номера) элемента. Например: а [1] - элемент массива с номером 1; а [3] - элемент массива с номером 3; а [ і ] - элемент массива с номеромі.
Двумерный массив - это массив, у которого в описании указаны два индекса. Двумерный массив можно рассматривать как матрицу или таблицу, в которой каждый элемент однозначно определяется номером строки и столбца, па пересечении которых он находится. При этом первый индекс определяет номер строки, второй - номер столбца. Например, если в массиве количество строк равно количеству столбцов и равно 3, то массив можно представить в виде:
а[1,1] | а[1,2] | а[1,3] |
а[2,1] | а[2,2] | а[2,3] |
а[3,1] | а[3,2] | а[3,3] |
Доступ к каждому конкретному элементу массива осуществляется по имени с указанием значений индексов элемента. Например:
а[1,2] - элемент массива, расположенный на пересечении строки с номером 1 и столбца с номером 2;
a[i,k] - элемент массива расположенный на пересечении строки с номером і и столбца с номером к.
Двумерный массив можно описать следующим образом:
a: array [1..n,1..m] of< тип >;
Здесь п максимально допустимое количество строк, m - максимально допустимое количество количество столбцов массива.
Например: a: array[1..10,1..10] of integer;
Объявляется двумерный массив, содержащий данные типа integer, состоящий из 10 строк и 10 столбцов.
Ввод и вывод значений элементов массива рассмотрим на примерах. Массив а - одномерный, состоит из 10 элементов. Массив b - двумерный, состоит из 10 строк и 10 столбцов. Массив а заполняется значениями полностью, т.е. всем элементам массива присваиваются значения с клавиатуры. При вводе значений элементов массива b сначала вводится количество строк и столбцов (меньше либо равно 10), которые будут использованы при выполнении программы. Значения элементов массива а выводятся в одну строку. Значения элементов двумерного массива b выводятся в виде таблицы.
Program Prim4; var
а:array[1..10] of real;
b:array[1..10, 1..10] of real;
i,j,m,n: integer;
Begin
{ввод элементов одномерного массива с клавиатуры}
for і:=1 to 10 do
Begin
writeln(' ввести',і, ' - элемент массива ');
readln(а[і]);
End;
{ввод элементов двумерного массива с клавиатуры построчно}
writeln('введите количество строк n<=10');
Readln(n);
writeln('введите количество столбцов m<=10');
Readln(m);
for i:=l to n do
for j:=1 to m do
Begin
writeln ('введите',і, ', ',j, 'элемент массива');
readln(b[і,j]);
End;
{вывод элементов одномерного массива на экран}
for i:=l to 10 do write(а[і]);
{вывод на экран элементов двумерного массива b в виде таблицы}
for i:=l to n do
Begin
for j:=l to m do write(b[i,j]);
Writeln;
End;