Вы - -й посетитель этой странички 

Лабораторные работы по алгоритмизации

Д.П. Береговой,
Краснодарский край, станица Каневская

Продолжение. Начало см. в № 44/2001

Лабораторная работа № 3
Циклические алгоритмы и их применение

    Цель работы: Изучение основных приемов организации циклических алгоритмов.

    Техническое задание 3.1 а: Разработать алгоритм вывода на дисплей всех четных чисел от 2 и до 12.

    Алгоритм 3.1а: Этот простейший пример приведен лишь для того, чтобы показать, как оформляется цикл. Во-первых, нужно ввести переменную — параметр цикла. Часто для параметра цикла используются символы i, j, k, l. Пусть будет i. Начальное значение параметра установим равное 0. Используем его в качестве исходных данных. Для этого к начальному значению 0 в цикле добавляется 2. Нужно только посмотреть, где разместить операцию изменения значения переменной i. Поскольку начальное значение параметра цикла равно 0, то вывод на дисплей первого четного числа (каковым, как известно, является 2) должен быть размещен после операции изменения значения i.


    Программа 3.1а: Сама по себе программа достаточно проста:

    CLS
    i = 0
    DO UNTIL i > 10
        i = i + 2
        PRINT i
    LOOP
    END

    Особенности циклов DO — LOOP следующие:
    — Вы, видимо, уже обратили внимание, что цикл оформляется как операторные скобки.
    — Начальное значение параметра цикла задается перед входом в цикл и изменяется в теле цикла, что полностью согласуется с общей блок-схемой циклических алгоритмов.
    — В показанном примере в качестве условия выхода из цикла использована конструкция UNTIL i > 10, то есть цикл прерывается после того, как значение параметра цикла превысит 10, хотя с тем же успехом можно было бы использовать WHILE i <= 10. Попробуйте.
    — Кроме того, условие выхода из цикла можно было бы расположить после тела цикла, то есть записать постусловие в виде LOOP UNTIL i > 10 (в этом случае после DO, разумеется, ничего писать не надо). Однако помните, что при использовании постусловия тело цикла выполнится хотя бы один раз.
    Реализовать тот же алгоритм с использованием оператора FOR — NEXT можно так:

    CLS
    FOR i = 2 TO 12 STEP 2
        PRINT i
    NEXT i
    END

    Конструкция FOR — NEXT менее наглядна с алгоритмической точки зрения, и начинающие программисты иногда не следят за тем, чтобы цикл закрывался по своему параметру (уж если открыли по i, то и закрывайте по i).

    Техническое задание 3.1б: Разработать алгоритм и программу для подсчета суммы значений элементов массива. Сумма должна выводиться на экран дисплея.

    Алгоритм 3.1б: Вот действительно классическая задача на использование цикла. Циклов здесь будет два: первый — для заполнения массива элементами; второй — для подсчета суммы.
    Введем параметр цикла i, изменяющийся в пределах от 1 до n, n введем в ручном режиме. Параметр цикла здесь, как и в большинстве случаев, будет одновременно выступать и как индекс элемента массива.
    Чтобы не мудрствовать с исходными данными, заполним в цикле массив Arr последовательностью чисел от 1 до n, Arr(i) := i. За каждый проход по циклу его параметр изменяется на 1, так что текущему элементу массива присваивается значение номера прохода. Не забудьте объявить массив в начале программы.
    Для получения суммы значений необходимо ввести переменную, в которой эта сумма будет накапливаться. Такая переменная называется аккумулятором. Механизм суммирования прост: так как параметр цикла в каждом проходе цикла меняется на 1, то за один проход к накопившейся в аккумуляторе сумме добавляется значение следующего элемента массива. Это стандартный прием накопления чего-нибудь в переменной, и его желательно запомнить.
    Аккумулятор перед суммированием обязательно должен обнуляться. Иначе при последующих запусках алгоритма значения слагаемых будут прибавляться к уже имеющейся сумме.

    Программа 3.1б : Реализация алгоритма несложна. Программу можно написать, просто заменяя блок-символы на соответствующие операторы. В программе, кроме того, показаны два полезных технологических приема.
    Для того чтобы объявить группу переменных одним типом (в нашем случае все используемые в программе переменные являются целочисленными), можно воспользоваться служебным словом DEFINT A— Z. Тогда все переменные, начинающиеся с символов от A до Z (иначе говоря, абсолютно все), будут объявлены как целые. Очень удобно.
    Как известно, по умолчанию индексы в массивах нумеруются с 0. Бейсик же позволяет нумеровать элементы массива с 1. Для этого достаточно записать в начале программы строку OPTION BASE 1, и все индексы ваших массивов будут начинаться с 1.

    DEFINT A-Z
    OPTION BASE 1
    CLS
    INPUT "Количество элементов массива ", n
    DIM Arr(n)
    Sum = 0
    i = 1
    DO WHILE i < = n
        Arr(i) = i
        i = i + 1
    LOOP
    i = 1
    DO WHILE i < = n
        Sum = Sum + Arr(i)
        i = i + 1
    LOOP
    PRINT "Сумма элементов равна: "; Sum
    END

    Техническое задание 3.1в: Заполнить двухмерный массив Arr(m, n) последовательными натуральными числами и вывести его на дисплей в виде таблицы.

    Алгоритм 3.1в: Эта задача рассматривается специально для того, чтобы показать, как организуются и реализуются так называемые вложенные циклы. Рассмотрим процедуру ввода данных. Суть заключается в том, что сначала в цикле нужно заполнить данными первую строку массива (см. алгоритм 3.1б), затем перейти ко второй и повторить ту же операцию, перейти к третьей и т.д. То есть налицо еще один цикл, содержащий тот, в котором заполняются строки. Соответственно, один из них называется внешним, а другой — внутренним. Каждый цикл использует свой параметр. Скажем, внешний — j, внутренний — i. Причем j будет меняться от 1 до m (число строк), а i от 1 до n (число столбцов). Для разнообразия сделаем так, чтобы каждая строка начиналась с элемента, значение которого совпадает с номером строки, т.е. (j, i)-й элемент массива равен j + i — 1. Вывод осуществляется с помощью аналогичного двойного цикла.

    Программа 3.1в: Никаких особенных отличий в реализации цикла, по сравнению с предыдущими примерами, программа не содержит, исключая, конечно, наличие вложенного цикла. А вот вывод в таблицу имеет некоторую особенность: во внутреннем цикле производится вывод элементов в строку, для чего оператор PRINT заканчивается точкой с запятой, а для вывода следующей строки во внешний цикл вставляется пустой оператор PRINT.

    OPTION BASE 1: DEFINT A—Z
    CLS
        INPUT "Введите число столбцов и строк (через запятую) ", n, m
        DIM Arr(m, n)
            j = 1
            DO WHILE j < = m
                i = 1
                DO WHILE i < = n
                    Arr(j, i) = i + j — 1
                    i = i + 1
                LOOP
                j = j + 1
            LOOP
            j = 1
            DO WHILE j < = m
                i = 1
                DO WHILE i < = n
                    PRINT Arr(j, i);
                    i = i + 1
                LOOP
                PRINT
                j = j + 1
            LOOP
        END

    Техническое задание 3.1г: Дан одномерный числовой массив. Разработать алгоритм поиска в нем наибольшего значения. Вывести на дисплей это значение.

    Алгоритм 3.1г: Рассматриваемый пример иллюстрирует применение комбинированной конструкции: цикл, содержащий разветвляющийся алгоритм.
    Для работы нам нужен заполненный элементами массив (назовем его Arr). Причем нужно, чтобы значения элементов массива были произвольно перемешаны. Воспользуемся генератором случайных чисел (ГСЧ). Ввод чисел в массив осуществим с помощью цикла, присваивая за каждый проход очередному элементу значение числа, сгенерированного ГСЧ. Так как ГСЧ выдает числа в диапазоне [0; 1], а хотелось бы поработать с более широким числовым интервалом, то генерируемые числа умножаем на n с последующим округлением до ближайшего целого. Тогда получим последовательность чисел от 0 до n.
    Основная идея алгоритма состоит в последовательном переборе элементов массива и выборе наименьшего из них. Для этого до организации цикла в переменную Max введем число, значение которого будет заведомо меньше любого значения из массива (например, —1). Затем в цикле сравниваем значение 1-го элемента с этим числом: условие Arr(i) > Max. Если условие истинно (а для 1-го элемента это само собой разумеется), то переменной Max присваиваем значение этого элемента. Далее эта же операция циклически повторяется с каждым элементом массива, но теперь сравнение производится со значением, взятым из массива, и если текущее значение не больше того, что хранится в Max, то сравнивается следующий элемент и т.д., так что в конце концов в переменной Max останется наибольшее значение из массива.

    Программа 3.1г: В приведенной программе имеются следующие новшества.
    Применен генератор случайных чисел — функция RND(). В качестве аргумента можно использовать любое число. Это не имеет ровно никакого значения.
    Для округления чисел до ближайшего целого в языке Бейсик имеется функция CINT(), которая применена для заполнения массива целыми числами.
    Все остальные приемы — циклы и разветвление — применены стандартно.

    OPTION
    BASE 1
    CLS
    INPUT "", n
    DIM Arr(n)
    Max = —1
    i = 1
    DO WHILE i < = n
        Arr(i) = CINT(n * RND(n))
        i = i + 1
    LOOP
    i = 1
    DO WHILE i < = n
        IF Arr(i) > Max THEN Max = Arr(i)
        i = i + 1
    LOOP
    PRINT ""; Max
    END

    Техническое задание 3.2а: Дан набор десяти символов русского алфавита: “А”, “Б”, …, “К”. Организуйте ввод этих символов в массив.   

    Рекомендации. Задача сродни техническому заданию 3.1а. Соответственно и алгоритм практически не будет отличаться от алгоритма 3.1а. Нужно лишь обратить внимание на то, что массив должен быть символьный, — в алгоритме этот факт никак не отразится, но в программе это должно быть учтено. Что же касается реализации ввода в программе, то можно, конечно, применить самый простой способ, аналогичный тому, который применен в программе 1.1б. Однако попробуйте использовать циклический алгоритм. Для этого вам потребуется изучить новый оператор ввода списка DATA — READ. В начале программы в списке DATA перечисляются буквы (не забудьте, что это символы, — возьмите их в кавычки), а считывание оператором READ осуществляется в цикле.

    Техническое задание 3.2б: Вывести на экран дисплея таблицу умножения для произвольно введенного числа. (Усложнение: то же, но для диапазона введенных чисел. Например, от 2 до 6.)

    Рекомендации. Все очень просто. Запрашиваем число, таблицу умножения на которое хотелось бы получить, и далее в цикле умножаем на числа от 1 до 9. Никаких массивов здесь не надо — результат выводится сразу на экран. “Продвинутый” вариант интереснее. Здесь нужно применить вложенный цикл. Параметром для внешнего будут введенные числа, а для внутреннего — все те же числа от 1 до 9. Попробуйте вывести результаты в таблицу. Для примера воспользуйтесь программой 3.1в.

    Справка: В XIII веке итальянский математик Фибоначчи (Леонардо из Пизы) сформулировал такую задачу. Имеется пара кроликов — самец и самка. В течение некоторого строго определенного периода времени у них появляются два детеныша — тоже самец и самка, которые также воспроизводят следующую пару (а предыдущая никуда не девается и тоже с успехом размножается), и т.д. Вопрос: сколько кроликов мы получим через определенный промежуток времени, при условии, что все они выживают? Результатом решения задачи явился ряд чисел, образованный по правилу: 1, 1, 2, 3, 5, …, то есть первые два элемента ряда — это 1, а каждый последующий образуется суммой двух предыдущих. Иначе говоря, a1 = 1; a2 = 1; ai = ai–1 + ai–2 . Этот ряд назвали последовательностью Фибоначчи.

    Техническое задание 3.2в: Разработайте алгоритм, который
        — выводит в строку n элементов ряда Фибоначчи;
        — подсчитывает сумму нечетных элементов ряда;
        — проверяет на четность k-й элемент.

    Рекомендации. Далее предложены некоторые подсказки, которые помогут решить поставленную задачу.
        — Чтобы построить ряд, нужно воспользоваться формулой общего члена последовательности: ai = ai—1 + ai—2 . Причем первые два члена, равные 1, вводятся автоматически, а дальше все в цикле получается само собой, начиная с 3-го элемента.
        — Что нужно, чтобы вычислить каждый i-й элемент? Правильно, сохранить предыдущие два в массиве. Не забудьте для вывода n элементов ряда запросить это самое n.
        — Второе задание — комбинированное. В процессе расчета значений последовательности нужно проверять на четность каждый индекс. И если он оказывается нечетным, прибавлять значение элемента к переменной-аккумулятору (см. алгоритм и программу 3.1б). Проверить четность индекса вам будет очень легко, вспомнив решение задачи из технического задания 2.2а. Если вы по каким-либо причинам не выполняли ТЗ 2.2а, то не торопитесь и вернитесь к нему.
        — Поскольку в массиве сохранены все элементы, нужно после выхода из цикла проверить на четность k-й элемент. Можно, конечно, проверить его и сразу. Тогда придется сравнивать каждый индекс с k.

    Техническое задание 3.3: Разработать алгоритм расчета n элементов заданной в таблице последовательности. В алгоритме определить, возрастает или убывает ряд, о чем вывести сообщение.

Контрольные вопросы

    1. Дайте определение понятиям “цикл” и “циклический алгоритм”.
    2. Чем характеризуется циклический алгоритм?
    3. Что такое параметр цикла?
    4. Чем характеризуется параметр цикла?
    5. Какую роль выполняет параметр цикла?
    6. Что такое тело цикла?
    7. Укажите в вашем алгоритме параметр и тело цикла.
    8. Изобразите общую блок-схему циклического алгоритма.
    9. Изобразите развернутую блок-схему циклического алгоритма с верхним окончанием. Опишите его особенности.
    10. Изобразите развернутую блок-схему циклического алгоритма с нижним окончанием. Опишите его особенности.

Ряд Ряд Ряд Ряд
1 i + (-1)i 8 i + 1 / (i +1) 15 1 + 2i 22 (i - 1) / (i + 1)
2 i / (i + 1) 9 ii+1 16 i - 1 / (1 + i) 23 i / i(2-i)
3 1 + 2i 10 a1 = 1;
ai =
1 / [(-1)i + 1]
17 1 / 2i 24 a1 = 1;
ai =
1 / (1 - i)
4 a1 = 1;
ai =
1 / (1 - i 1/i)
11 1 + (-2)i 18 a1 = 1;
ai = i +
1 / i
25 1 / (i +2)
5 2i+1 + i 12 (i + 1) / 2 19 1+ i / (i + 1) 26 3i+1
6 i / (-1)i 13 (1 + i)2i 20 i1/(i + 1) 27 1 + 1 / (i +1)
7 i2i+1 14 1 - i/2 21 1 / [1 + (-1)2i] 28 (-2)i + i

Лабораторная работа № 4
Алгоритмические модули и их использование

    Цель работы: Изучение и отработка навыков использования модульных конструкций при решении задач на ЭВМ.

    Техническое задание 4.1а: Разработать алгоритм перевода температуры, заданной в шкале Цельсия, в абсолютную температуру, используя функцию, определенную пользователем (ФОП). Ввод температуры с клавиатуры; вывод на дисплей.

    Для тех, кто не знал или забыл. Для перевода температуры из шкалы Цельсия в шкалу Кельвина необходимо к температуре по шкале Цельсия добавить 273,15 градуса.

    Алгоритм 4.1а: Поставленная задача чрезвычайно проста и решается с помощью элементарного линейного алгоритма. Но на его примере мы попробуем понять принцип создания и работы пользовательской функции. При этом нужно помнить следующие правила:
    любая ФОП перед применением должна быть описана с помощью формальных параметров;
    функции должно быть присвоено уникальное имя;
    вызов функции осуществляется по ее имени, а в качестве аргументов могут использоваться конкретные значения любой переменной (совпадающей по типу, разумеется).
    На блок-схеме показан вариант решения задачи. Хотя ФОП можно определять в любом месте алгоритма — лишь бы до ее вызова, — но лучше это сделать сразу. Внимательно разберитесь в обозначениях: переменная Tc является формальным параметром, а T — фактическим. Имя функции — FTK, а в переменную Tk записывается значение функции при введенном T. Описание ФОП в алгоритме обозначается как модуль, поэтому используется соответствующий блок-символ.

    Программа 4.1а: В этом примере показан самый простой способ создания и применения ФОП в языке Бейсик с помощью оператора DEF fn.

    CLS
    DEF fnFTK (Tc) = Tc + 273.15
        INPUT "Введите температуру в град. Цельсия ", T
        Tk = fnFTK(T)
        PRINT "Tc = "; T; "Tk = "; Tk
    END

    Видимо, комментарии излишни…

    Техническое задание 4.1б: Разработать алгоритм расчета значения выражения:

r = v(ax3 + bx2 + cx + d)

для произвольных коэффициентов. Результат вывести на дисплей.

    Алгоритм 4.1б: В общем-то и эта задача для вас уже не должна представлять трудностей. Однако представьте ситуацию, когда подобное выражение нужно вычислять несколько раз, причем в разных местах алгоритма, да еще и при разных исходных значениях a, b, c, d и, естественно, x. Чтобы не выписывать каждый раз эту формулу, рискуя ошибиться, воспользуемся мощью ФОП! Достаточно однажды описать функцию и далее использовать только ее формальное определение. Единственная проблема заключается в том, что придется использовать довольно сложную структуру функции, поскольку под корнем может оказаться, вообще говоря, и отрицательное число. Поэтому описание ФОП нужно оформлять отдельно и включать в алгоритм как модуль, например, так, как показано ниже.

    Вы, наверное, уже догадались, что переменные x1, x2, x3, x4, x5 являются фактическими параметрами и соответствуют формальным параметрам a, b, c, d, x функции R. Значение функции, равное —1, будет индикатором того, что подкоренное выражение отрицательно, что тоже удобно использовать для организации последующих действий.

    Программа 4.1б: Реализация алгоритма 4.1б может быть самой разнообразной. Но так как в задании нужно всего лишь посчитать значение выражения, то основной целью написания программы является иллюстрация еще одного способа организации и использования ФОП в языке Бейсик. Этот способ используется как раз для определения сложных функций. В основе способа лежит служебное слово FUNCTION, которое позволяет оформить ФОП как функцию-процедуру. Кстати, в программе показано, как используется значение функции после ее анализа (выводим либо ее значение из переменной SomeThing, либо уведомляем пользователя о невозможности расчета).

    DECLARE FUNCTION R (a, b, c, d, x)
    CLS
    INPUT "Введите пять параметров (через запятую)"; x1, x2, x3, x4, x5
    SomeThing = R(x1, x2, x3, x4, x5)
    IF SomeThing = —1 THEN
        PRINT "Увы! Подкоренное выражение отрицательно…"
                                    ELSE
        PRINT SomeThing
    END IF
    END
    FUNCTION R (a, b, c, d, x)
        t = a * x ^ 3 + b * x ^ 2 + c * x + d
        IF t < 0 THEN
            R = —1
                        ELSE
            R = SQR(t)
        END IF
    END FUNCTION

    Обратите внимание на следующие важнейшие моменты:
    описание функции оформляется после основного текста программы, то есть после служебного слова END, тело функции находится в операторных скобках FUNCTION — END FUNCTION;
    не пугайтесь — как только вы наберете
        FUNCTION < имя> (<идент1>[,<идент2>, …])
и нажмете клавишу ввода, редактор языка Бейсик переключится в окно модулей и автоматически вставит операторные скобки. Ваше дело — создать описание функции. Переключение между модулями осуществляется клавишей <F2>, после чего появится соответствующее окно, а там уже выбирайте, что вам нужно;
    перед основным текстом программы необходимо указать на описание функции с помощью служебного слова DECLARE FUNCTION < имя функции>. (Впрочем, транслятор языка Бейсик сделает это сам при сохранении программы на диске.)

    Техническое задание 4.1в: Разработать алгоритм расчета длины окружности и площади круга произвольного радиуса. Расчет величин оформить в виде процедуры.

    Алгоритм 4.1в: На первый взгляд в блок-схеме алгоритма решения этой задачи нет ничего нового. Но, приглядевшись повнимательнее, вы обнаружите, что используемый модуль с незатейливым названием CS (R, C, S) заранее как бы нигде и не описывается. В этом первое отличие процедур от ФОП — они являются самостоятельными, логически законченными блоками алгоритма (то же, кстати, относится и к функциям-процедурам, поэтому они и предпочтительнее ФОП).
    Второе отличие заключается в том, что процедура может возвращать любое количество переменных (в том числе и ни одного), а пользовательские функции — обязательно только одно. Теперь нужно разобраться в том, что именно описывается в процедуре и как с ней работать. Как видно, процедура вызывается из основного алгоритма по имени (в нашем случае CS), при этом, как и у ФОП, в скобках описываются какие-то переменные. Так же, как и в случае ФОП, это формальные параметры, которые при вызове процедуры замещаются фактическими. Для простоты мы обозначили формальные и фактические параметры одинаково.

    Программа 4.1в: Программы с процедурами по своей структуре сильно похожи на программы с пользовательскими функциями-процедурами. Да это и понятно: по своей идеологии это один и тот же объект, разница носит сугубо технический характер, о чем уже говорилось. Для формирования процедуры используются операторные скобки SUB — END SUB, внутри которых, как нетрудно догадаться, находится описание тела процедуры. Далее приведена программа, реализующая алгоритм 4.1в, — все ли вам в ней понятно? Зафиксируйте свои вопросы, а потом читайте дальше.

    DECLARE SUB CS (R, C, S)
    CLS
    INPUT "Введите радиус ", R
    CALL CS(R, C, S)
    PRINT "При радиусе окружности "; R
    PRINT "Длина окружности "; C
    PRINT "Площадь круга ";S
    END
    SUB CS (R, C, S)
        CONST Pi = 3,14159
        C = 2 * Pi * R
        S = Pi * R * R
    END SUB

    Вы наверняка обратили внимание на новый оператор вызова процедуры CALL. Ее синтаксис довольно прост: для вызова процедуры необходимо написать ее имя с обязательным перечислением переменных, значения которых будут в нее передаваться (т.е. со списком фактических параметров). Наиболее сложным является понимание того, что имена фактических и формальных параметров могут и не совпадать. Тут, как и в функции-процедуре, важен порядок их следования, в процессе выполнения первый фактический параметр попадет в первый формальный и т.д. Иногда об этом забывают, и это приводит к ошибкам.

    Техническое задание 4.1г: Используя техническое задание 3.1б, оформить алгоритм и программу в виде модулей (процедур).

    Алгоритм 4.1г: Этот пример хорошо показывает модульную технологию разработки программ, когда готовый алгоритм разбивается на отдельные модули (функции и процедуры). Ценность такого подхода заключается в том, что модули в дальнейшем можно использовать совершенно независимо от главной программы, для которой они изначально разрабатывались. Надо только правильно согласовать формальные и фактические параметры.
    Результат разбиения алгоритма 3.1б на модули показан ниже. В алгоритме выделены две процедуры: InitData и SumData. Первая предназначена для ввода исходных данных в массив. Вторая — для подсчета суммы элементов массива.

    Примечание. Обратите внимание на то, что обнуление аккумулятора s нужно делать в процедуре, а не в основном модуле.

    Программа 4.1г: В приведенной ниже программе имеется одно новшество — использование массива в качестве формального параметра. Здесь нужно просто запомнить синтаксис: в описании процедуры указываются имя массива и пустые скобки.

    DECLARE SUB InitData (n%, Arr%())
    DECLARE SUB SumData (n%, Arr%(), s%)
    DEFINT A—Z
    OPTION BASE 1
    CLS
    INPUT "Введите количество элементов массива ", n
    DIM Arr(n)
    CALL InitData(n, Arr())
    CALL SumData(n, Arr(), s)
    PRINT "Сумма элементов массива: "; s
    END
    SUB InitData (n, Arr())
        i = 1
        DO WHILE i <= n
            Arr(i) = i
        i = i + 1
        LOOP
    END SUB
    SUB SumData (n, Arr(), s)
        s = 0
        i = 1
        DO WHILE i <= n
            s = s + Arr(i)
        i = i + 1
        LOOP
    END SUB

    Техническое задание 4.2а: Разработать алгоритм перевода градусной меры углов в радианную и наоборот. Организовать запрос о направлении перевода (“радианы” > “градусы” или “градусы” > “радианы”) и в соответствии с этим использовать нужную ФОП.

    Рекомендации
   
Для тех, кто никак не запомнит формулу перевода углов из одной меры в другую, советуем вновь обратиться к техническому заданию 2.2б.
    Вам понадобятся две ФОП, причем в каждой из них константу ? можно ввести в явном виде (то есть в виде числа 3.1415…).
    Запрос о направлении перевода можно организовать так:
    — вывести на экран, например, такое сообщение:
        1. Радианы в градусы.                    2. Градусы в радианы.
    — организовать ручной ввод цифры в переменную;
    — проверить, какая из цифр (1 или 2) введена, и выбрать соответствующую ФОП.

    Техническое задание 4.2б: Разработать алгоритм расчета силы взаимодействия двух электрических зарядов произвольной величины и знака, расположенных на произвольном расстоянии. На дисплей вывести величину силы взаимодействия и ее направление (притяжение или отталкивание). Расчет силы оформить в виде пользовательской функции-процедуры.

    Рекомендации
   
Расчет силы взаимодействия производите по формуле Кулона.
    Направление силы определите либо сравнивая знаки зарядов, либо проверяя знак силы (на ваш вкус).
    Описывая функцию, не забудьте проверить нулевую величину расстояния между зарядами. Организуйте вывод соответствующего сообщения, если оно равно 0. Воспользуйтесь приемом из алгоритма и программы 4.1б.
    Константу k нужно определять в функции!

    Техническое задание 4.2в: Используя техническое задание 3.1г, оформить алгоритм и программу в виде модулей (процедур).

    Техническое задание 4.3: Разработать алгоритм вычисления выражения (см. таблицу к техническому заданию 2.3). При построении алгоритма использовать функцию-процедуру.

Контрольные вопросы
  
1. Что называется алгоритмическим модулем?
    2. Укажите типы алгоритмических модулей.
    3. Изобразите общую блок-схему алгоритма, исполь зующего алгоритмические модули.
    4. Что такое формальные параметры?
    5. Что такое фактические параметры?
    6. В чем основные преимущества использования модульных конструкций алгоритмов?

 

Лабораторная работа № 5
Простейшие приемы построения графических изображений
 

    Цель работы. Освоить простейшие приемы построения графических изображений с помощью ЭВМ.

    Техническое задание 5.1а. Разработать алгоритм вывода на экран дисплея 100 точек (пикселей) случайных цветов в случайных местах экрана.

    Алгоритм 5.1а. Эта очень простая задача позволит освоить основные приемы работы с графикой на ЭВМ. Прежде всего необходимо задать параметры графического объекта (или примитива). Поскольку в нашем случае это точка, то необходима пара чисел, определяющих положение точки относительно верхнего левого угла экрана; а также атрибуты примитива: для точки это ее цвет.
    Поскольку все параметры задаются случайным образом, очевидно, что нужно воспользоваться генератором случайных чисел (см. алгоритм и программу 3.1г). Здесь, однако, имеется одна тонкость. Требуется учесть то, что размеры экрана и количество цветов, которые можно использовать, ограничены.
    Для этого служат переменные Ex, Ey и C, которые определяют размер экрана по горизонтали и вертикали, а также номер цвета точки соответственно. И еще: поскольку выводить нужно заранее заданное количество точек, целесообразно воспользоваться циклом с параметром.

    Программа 5.1а. Реализация вывода графики на языке Бейсик имеет ряд особенностей. Во-первых, необходимо переключиться в режим работы с графикой. Для этого имеется оператор SCREEN (в переводе на
русский — экран). Во-вторых, нужно задать режим графического дисплея. Режимы графического дисплея (конечно, у вас эти значения могут быть иными) нумеруются с 7-го по 13-й и определяют размер (разрешение) экрана и количество возможных цветов. В приведенной программе применен 12-й режим (он задается переменной Mode, что соответствует размеру дисплея 640 ? 480 точек и палитре из 16 цветов. Не забудьте, что нумерация точек и цветов начинается с нуля, что и отражено в начальных установках переменных Ex, Ey и C.
    В качестве начального значения для генератора случайных чисел здесь использованы показания системных часов компьютера. Они вызываются функцией TIMER, которая возвращает количество секунд, прошедших с полуночи.

    RANDOMIZE TIMER
    DEFINT A-Z
    CLS
    n = 100
    EndX = 639
    EndY = 479
    C = 15
    Mode = 12
    SCREEN Mode
    FOR i = 1 TO n
        x = CINT(EndX * RND(TIMER))
        y = CINT(EndY * RND(TIMER))
        ColorPoint = CINT(C * RND(TIMER))
        PSET (x, y), ColorPoint
    NEXT i
    END

    Техническое задание 5.1б. Даны координаты левого верхнего и правого нижнего углов прямоугольника:

xлв = 100, yлв= 100;
xпн=350, yпн= 250.

    Произвести параллельный перенос прямоугольника на 150 пикселей вправо и вниз.

    Алгоритм 5.1б. Любые преобразования графических объектов (в данном случае это примитив в виде прямоугольника) требуют пересчета его старых координат в новые. Так что без математики тут не обойтись. Иногда она достаточно проста, как в данном случае, а иногда и не очень. Ну и, конечно, для совершения такого рода перестроений на экране нужно знать элементарную геометрию. В частности, вспомните, что параллельный перенос любого объекта куда бы то ни было обозначает прибавление к координатам всех его точек одной и той же величины: в нашем случае к координате по оси x нужно прибавить 150 пикселей; по оси y — столько же.
    Обозначим величину переноса вправо dx, а величину переноса вниз — dy. Не забывайте, что на экране дисплея ось OX расположена обычно, но ось OY направлена от левого верхнего угла экрана вертикально вниз!
    Имеем следующую математическую модель параллельного переноса (индексом н обозначены новые координаты):

xлвн = xлв + dx,
xпнн = xпн + dx,
yлвн = yлв + dy,
yпнн = yпн + dy.

    Таким образом, алгоритм решения задачи будет состоять из следующих блоков:
    ввод исходных данных;
    пересчет координат;
    построение прямоугольников.
    Как видите, ничего необычного нет.

    Программа 5.1б. В программе реализован перенос исходного прямоугольника (его координаты заданы переменными Xlu, Ylu и Xrd, Yrd, кроме того, он закрашен темно-бирюзовым цветом) на заданные величины (переменные Dx, Dy). Новый прямоугольник закрашен светло-бирюзовым цветом. Кроме того, желтым показаны линии переноса базовых координат прямоугольника. Напомним, что переход в графический режим осуществляется с помощью оператора SCREEN

    DEFINT A—Z
    CLS
    Xlu = 100: Ylu = 100
    Xrd = 350: Yrd = 250
    Dx = 150: Dy = 150
    XluNew = Xlu + Dx: YluNew = Ylu + Dy
    XrdNew = Xrd + Dx: YrdNew = Yrd + Dy
    SCREEN 12
    LINE (Xlu, Ylu)—(Xrd, Yrd), 3, BF
    LINE (XluNew, YluNew)—(XrdNew, YrdNew), 11, BF
    LINE (Xlu, Ylu)—(XluNew, YluNew), 14
    LINE (Xrd, Yrd)—(XrdNew, YrdNew), 14
    END

    Техническое задание 5.1в. Вершины треугольника заданы тремя парами чисел. Разработать алгоритм
построения его медиан. Результат вывести на дисплей в графическом виде.

    Напоминание. Медианой называется отрезок, соединяющий вершину треугольника с серединой противоположной стороны.

    Алгоритм 5.1в: Напоминание должно навести на мысль о том, что для построения отрезка прямой нужно иметь по крайней мере две пары координат, указывающих его начало и конец. С координатами начала этих отрезков проблем нет, так как вершины треугольника заданы. А вот координаты концов необходимо вычислять. Хотя сами вычисления достаточно примитивны — нужно определить среднее арифметическое двух чисел, но весьма поучительны, так как иллюстрируют общее правило: перед тем как что-то нарисовать на экране, нужно рассчитать координаты точек объекта.
    Итак, если обозначить через xi, yi координаты вершин треугольника, а через xmi, ymi — координаты медиан, то модель расчета координат точек медиан будет выглядеть так:

xm1 = 1/2 (x2 + x3);  ym1 = 1/2 (y2 + y3)
xm2 = 1/2 (x1 + x3);  ym1 = 1/2 (y1 + y3)
xm3 = 1/2 (x1 + x2);  ym3 = 1/2 (y1 + y2)

    Алгоритм, таким образом, не будет отличаться особенной сложностью, и это является следствием простоты расчетов.

    Программа 5.1в. В приведенной ниже программе использованы следующие приемы. Во-первых, координаты вершин треугольника генерируются случайным образом. Это дает возможность увидеть, как работает модель построения медиан, и, кроме того, помогает убедиться в том, что медианы пересекаются в одной точке Во-вторых, в программу введен новый оператор WINDOW который служит для определения размеров окна, в которое будет выводиться графика. В предложенном варианте используется окно, в котором определяется “нормальная” система координат, то есть шкала оси ординат возрастает снизу вверх. Этот эффект достигается указанием координат окна вывода. При этом точка дисплея с координатами (0, 0) переносится в точку с координатами (0, 479). Однако имейте в виду, что использование оператора WINDOW в два раза замедляет процесс вывода графики экран дисплея, так что использовать его нужно только случае крайней необходимости.

    RANDOMIZE TIMER
    CLS
    DIM i AS INTEGER
    DIM X(3) AS INTEGER, Y(3) AS INTEGER
    FOR i = 1 TO 3
        X(i) = CINT(500 * RND(TIMER))
        Y(i) = CINT(300 * RND(TIMER))
    NEXT i
    Xm1 = (X(2) + X(3)) / 2
    Ym1 = (Y(2) + Y(3)) / 2
    Xm2 = (X(1) + X(3)) / 2
    Ym2 = (Y(1) + Y(3)) / 2
    Xm3 = (X(1) + X(2)) / 2
    Ym3 = (Y(1) + Y(2)) / 2
    SCREEN 12
    WINDOW (0, 479)—(639, 0)
    LINE (X(1), Y(1))—(X(2), Y(2)), 14
    LINE (X(2), Y(2))—(X(3), Y(3)), 14
    LINE (X(3), Y(3))—(X(1), Y(1)), 14
    LINE (X(1), Y(1))—(Xm1, Ym1), 9
    CIRCLE (Xm1, Ym1), 3, 9
    LINE (X(2), Y(2))—(Xm2, Ym2), 9
    CIRCLE (Xm2, Ym2), 3, 9
    LINE (X(3), Y(3))—(Xm3, Ym3), 9
    CIRCLE (Xm3, Ym3), 3, 9
    END

    Для наглядности середины сторон дополнительно обведены окружностями.

    Техническое задание 5.2а. Разработать алгоритм вывода на экран дисплея 10 окружностей случайных радиусов (от 0 до 10 пикселей) с центрами, расположенными в случайных местах экрана. Цвета окружностей также задавайте случайно, выбирая их из первой восьмерки цветов.

    Рекомендации: Здесь можно воспользоваться алгоритмом и программой 5.1а. Однако потребуется еще и сгенерировать радиус окружности. Кстати, попробуйте использовать параметр, задающий сжатие окружностей, и посмотреть, что из этого выйдет.

    Техническое задание 5.2б. Задан прямоугоник координатами верхнего левого и нижнего правого углов:

xлв = 100, yлв= 100;
xпн=350, yпн= 250.

    Построить на экране дисплея прямоугольники в 2 раза больше и в 3 раза меньше заданного. Левые верхние углы исходного и полученных прямоугольников должны совпадать. Для каждого прямоугольника использовать свою окраску границы.

    Рекомендации: Чтобы решить поставленную задачу, нужно для начала рассчитать длину диагонали исходного прямоугольника, а затем — длины диагоналей новых.

    Техническое задание 5.2в. Построить в центре экрана дисплея следующий набор графических элементов:
    квадрат со стороной 100 пикселей;
    диагонали этого квадрата;
    окружность, описывающую квадрат;
    окружность, вписанную в квадрат.

    Рекомендации: Достаточно правильно построить квадрат, тогда координаты всех остальных объектов легко определяются. Попробуйте сначала изобразить требуемые объекты на бумаге, и вы сами в этом убедитесь.

    Техническое задание 5.2г. Разработайте алгоритм построения на экране дисплея координатной сетки, состоящей из 10 отрезков по вертикали и 10 отрезков по горизонтали. Оси сетки должны быть выделены цветом, а граничные линии — располагаться на краях экрана дисплея. Центр координатной сетки должен совпадать с центром экрана.

    Рекомендации: Понятно, что для построения такой сетки потребуется использовать циклический алгоритм, так как выполняется одна и та же операция: рисование отрезков. При этом лишь изменяются координаты их концов. Необходимо организовать два цикла: для горизонтальных и вертикальных линий отдельно.

    Не забудьте также, что экранные координаты не совпадают с общепринятыми. Например, Bx = 0, By = 0 —координаты начала системы координат дисплея — это левый верхний угол, а Ex = 639, Ey = 463 — координаты правого нижнего угла. Соответственно центр системы координат для вашей задачи определится так:
        Cx = (Bx + Ex) \ 2, Cy = (By + Ey) \ 2.
    Обратите внимание, что здесь использовано целочисленное деление на 2, поскольку в выражении стоит обратный слэш (\).
    В качестве параметров циклов лучше всего использовать номера линий и строить их, пользуясь следующими формулами:
    для изменения x-й координаты вертикалей: Cx ± iDx
    для изменения y-й координаты горизонталей: Cy ± iDy.
    Здесь Dx, Dy — величины шагов по горизонтали и вертикали соответственно;
              i = 0, 1, 2, 3, 4 — номер линии.
    Подумайте, каковы должны быть величины шагов Dx и Dy?

Контрольные вопросы

    1. Дайте определение понятию “машинная (компьютерная) графика”.
    2. Что такое графический дисплей и чем он характеризуется?
    3. Что определяет режим работы графического дисплея?
    4. Укажите особенности координатной сетки графического дисплея.
    5. Что такое графический примитив?
    6. Перечислите основные виды графических примитивов.
    7. Опишите параметры основных графических примитивов.
    8. Перечислите технологические приемы построения изображений в ЭВМ.

Лабораторная работа № 6
Основные приемы обработки символьных данных

   Цель работы. Освоение основных приемов обработки символьных данных с помощью ЭВМ.

    Техническое задание 6.1а. Введите ваши фамилию, имя и отчество в три различные переменные. Организуйте присвоение фамилии, имени и отчества одной переменой. Результат вывести на дисплей.

    Алгоритм 6.1а. Для решения поставленной задачи потребуется простейший линейный алгоритм. Но это как раз тот случай, когда “маленький шаг одного человека” может привести к большим последствиям. В различных задачах мы уже использовали символьные данные (см., например, технические задания 1.1а, 1.1в, 1.2а …), но в них все ограничивалось вводом-выводом какого-то заранее заданного текста. Все муки творчества сводились к написанию правильного синтаксиса предложения в программе.
    Сейчас же нам требуется не только ввести, но и обработать символьную информацию. Для объединения символов служит операция конкатенации. В переводе на русский язык — сцепление, что, конечно, запоминается легче. Блок-схема алгоритма приведена ниже. В нем использованы следующие переменные: в FN, LN, SN вводятся фамилия, имя, отчество соответственно. Переменная U содержит результат их конкатенации. Не забудьте, что все переменные символьные!

    Программа 6.1а. Вы, наверное, помните, что в языке Бейсик для группового определения типа переменных можно воспользоваться служебным словом DEF. В приведенной программе это использовано для того, чтобы объявить символьными все переменные, чьи имена начинаются на букву S. Кроме того, имена символьных переменных начинаются с префикса str (от англ. string — символьная строка).

    DEFSTR S
    CLS
    INPUT "Введите фамилию: ", strFirstName
    INPUT "Введите имя: ", strLastName
    INPUT "Введите отчество: ", strSecondName
    strUnion = strFirstName + strLastName + strSecondName
    PRINT strUnion
    END

    После выполнения программы у вас должен возникнуть по крайней мере один вопрос: “почему все введенные значения “прилеплены” друг к другу без пробелов и что с этим делать?”
    Ответ: А у вас не возникает вопроса, почему между словами не появился значок “+” или, скажем, запятая?
Важно понять, что пробел — точно такой же символ, как и все остальные, и нет никаких причин добавлять лишние символы при операции сцепления. Поэтому, чтобы выводимое выражение было более читабельным, вставьте необходимые пробелы, например, вот так:

strUnion = strFirstName + " " + strLastName + " " + strSecondName

    Техническое задание 6.1б. Вывести на экран дисплея символьный набор ЭВМ.

    Алгоритм 6.1б. Чтобы выполнить это задание, нужно вспомнить, что каждый символ имеет свой ASCII-код, который выражается в виде двоичного (шестнадцатеричного) или десятичного числа. Причем эти коды лежат в диапазоне [0, 25510]. Значит, нужно организовать цикл, в котором перебираются эти значения и соответствующие им символы выводятся на дисплей. Преобразование кода в символ производится с помощью некоей функции. В алгоритме мы ее просто обозначим Символ(<код >).

    Программа 6.1б. В языке Бейсик для преобразования кода в его символьное представление имеется функция CHR$(<код>), от англ. character — буква. Обратите внимание, что функция возвращает символ, поэтому в ее имени присутствует символ “$”.

    DEFINT I
    DEFSTR S
    CLS
    FOR i = 0 TO 255
        strSymbol = CHR$(i)
        PRINT strSymbol;
    NEXT i
    END

    Символы выводятся в строку. Заметьте, что в процессе выполнения программы компьютер должен “бибикнуть”. Таким образом он отреагирует на вывод символа CHR$(7), так как код 710 соответствует звуковому сигна лу. Полюбуйтесь на набор символов вашей ЭВМ и вспомните, что первые 32 символа (коды 00—3110) — это управляющие (непечатаемые) символы. Они не предназначены для вывода на экран, однако при попытке это сделать можно получить интересные эффекты. Кроме того, целый набор символов отсутствует на клавиатуре (например, v), и иначе, как через функцию CHR$(),на дисплей их не вывести.

    Техническое задание 6.1в. Дан набор символов: “Информатика — это область знаний, изучающая природу создания, хранения и передачи информации в естественных и технических системах”. Определить количество пробелов в нем.

    Алгоритм 6.1в. Данная задача является как бы обратной к сформулированной в техническом задании 6.1а. Там нам нужно было из набора символов (или слов, что с точки зрения алгоритма все равно) сконструировать одно сообщение, то есть произвести синтез выражения. Здесь же нужно выяснить: есть ли внутри сообщения требуемый символ, то есть произвести анализ имеющегося выражения.
    Первое, что приходит в голову: нужно просматривать каждый символ сообщения и проверять, пробел это или нет. И если результат проверки “истина”, то увеличить значение некоей переменной на 1. То есть налицо цикл с разветвлением (см. алгоритм 3.1г). Что нужно добавить? Во-первых, перед организацией цикла надо знать длину сообщения L и, во-вторых, ввести переменную, в которой будет подсчитываться количество пробелов, назовем ее Q. При обнаружении пробела в наборе символов ее значение будет изменяться на единицу, поэтому такие переменные называют счетчиками. Блок-схема соответствующего алгоритма приведена ниже. Запомните этот прием, он встречается достаточно часто. (Под M1 подразумевается текущий символ сообщения.)

    Программа 6.1в. Успех реализации алгоритма зависит от того, насколько хорошо вы знаете имеющийся в языке (в нашем случае это Бейсик) набор функций, предназначенных для обработки символьных данных. В рассматриваемой задаче нам понадобятся две наиболее часто используемые функции:
    определения длины сообщения — LEN(<сообщение>);
    “вырезание” группы символов — MID$(<сообщение>, <текущий номер символа>, <количество символов>).
    Заметьте, что функция LEN() возвращает число, поэтому не имеет суффикса, а функция MID$() возвращает символы, поэтому снабжена суффиксом $.

    DEFINT I
    DEFSTR S
    CLS
    CONST strMessage = "Информатика — это область знаний, изучающая природу создания, хранения и передачи информации в естественных и технических системах."
    intLength = LEN(strMessage)
    intQ = 0
    FOR i = 1 TO intLength
        strLetter = MID$(strMessage, i, 1)
        IF strLetter = " " THEN intQ = intQ + 1
    NEXT i
    PRINT "В выражении найдено "; intQ; " пробелов."
    END

    Техническое задание 6.2а: С клавиатуры вводятся два произвольных символа. Определить порядок их следования в ASCII-таблице.

    Рекомендации. Для решения данной задачи нужно вспомнить, что сравнение символов, так же как и чисел, производится с помощью операций отношения. Собственно, сравниваются коды символов, которые в ASCII-таблице расположены в алфавитном порядке. Вывод результата сравнения можно оформить в виде, например, такого сообщения: “Символ <x> расположен раньше символа <y>”. Поэкспериментируйте с различными символами (цифры, спецсимволы, буквы латиницы и кириллицы).

    Техническое задание 6.2б. Дан произвольный набор символов. Вывести на экран коды, соответствующие каждому символу сообщения.

    Рекомендации: Для разложения строки на символы можно использовать тот же прием, что и в алгоритме 6.1в, то есть в цикле с помощью функции MID$() вырезать последовательно по одному символу, а затем преобразовывать каждый символ в его код с помощью функции ASC(<символ>).

Контрольные вопросы
    1. Укажите особенности символьного типа данных.
    2. Что такое стандарт ASCII?
    3. Перечислите основные группы символьных кодов.
    4. Что является результатом операции конкатенации?
    5. Как происходит сравнение символов (строк символов)?
    6. Перечислите основные группы символьных функций.

Приложение 1
Задачи для самостоятельного решения


    1. Разработать алгоритм для вычисления значения выражения:

    2. Разработать алгоритм вычисления среднего арифметического пяти чисел, задаваемых с клавиатуры.
    3. С помощью показаний системного таймера определить, сколько прошло полных минут и часов от полуночи.
    4. По произвольно заданным парам координат точек (x1, y1) и (x2,y2) определить расстояние между
точками на плоскости.
    5. Разработать алгоритм вычисления суммы кубов двузначных натуральных чисел. Результат вывести на экран дисплея.
    6. Разработать алгоритм вычисления суммы квадратов двузначных натуральных чисел, кратных 3. Результат вывести на экран дисплея.
    7. Разработать алгоритм генерации последовательности целых случайных чисел в заданном диапазоне [a; b].
    8. Дан одномерный числовой массив из p элементов. Рассчитать сумму его положительных элементов. Результат вывести на экран дисплея.
    9. Дан одномерный числовой массив из k элементов. Разработать алгоритм для подсчета суммы четных элементов массива. Результат вывести на экран дисплея.
    10. Задана последовательность из m чисел. Разработать алгоритм для подсчета количества нулей, положительных, отрицательных чисел.
    11. Заданы n пар чисел x и y. Разработать алгоритм присвоения переменной r значения 1, если x<y; 0, если x = y; и —1, если x > y. В алгоритме должен производиться подсчет соответствующих пар. После каждого сравнения переменную r выводите на экран дисплея.
    12. Разработать алгоритм приближенного вычисления числаp. Результат должен быть выведен на экран дисплея. Воспользоваться формулой:

    13. Заданы два одномерных массива A и B, содержащие по q чисел. Разработать алгоритм формирования массива C, содержащего 2q чисел, в который последовательно включены элементы массивов A и B.
    14. Заданы два одномерных массива A и B, содержащих n чисел. Разработать алгоритм для формирования одномерного массива C, в котором четные элементы взяты из массива A, а нечетные — из массива B, причем С(1) = B(1), C(2) = A(1), C(3) = B(2), C(4) = A(2) и т.д.
    15. Задана функция: y = v((f(x)-1)/(f(x)+1)). Разработать f(x) +1 алгоритм определения значения функции при f(x) = x + 2, f(x) = x2 — 2, f(x) = ln(x + 1).
    16. Разработать алгоритм решения квадратного уравнения ax2+ bx + c = 0 для произвольных коэффициентов a, b и c.
    17. Разработать алгоритм, который по введенным фамилии, имени и отчеству выводит фамилию и инициалы. Например, вводится: Иванов Иван Иванович; выводится: Иванов И. И.
    18. Разработать алгоритм подсчета слов в введенном предложении.
    19. Определить, является ли введенный набор символов палиндромом. Палиндром — это слово, одинаково читающееся слева направо и справа налево.
    20. Вводится произвольное четырехзначное число. Разработать алгоритм вычисления суммы его цифр.

Приложение 2
Контрольная работа.
Основные алгоритмические структуры

Вариант 1
   
1. Дайте словесное описание блок-схемы алгоритма. Опишите его характеристики.

    2. Укажите, что будет выведено на дисплей в результате выполнения приведенного ниже алгоритма.

    3. Укажите ошибки, допущенные в блок-схеме.

    4. Имеется одномерный целочисленный массив из десяти элементов. Ниже дана блок-схема алгоритма, который заменяет четные значения элементов на 1, а нечетные — на —1. Модифицируйте алгоритм таким образом, чтобы четные элементы исходного массива были заменены на —1, а нечетные — на 1.

    5. Дан двухмерный числовой массив. Разработайте алгоритм, заменяющий нулевые значения его элементов на 1, а всех остальных — на 0.

Вариант 2

    1. Дайте словесное описание блок-схемы алгоритма. Опишите его характеристики.

    2. Укажите, что будет выведено на дисплей в резуль-тате выполнения приведенного ниже алгоритма, если было введено значение k = 1.

    3. Укажите ошибки, допущенные в блок-схеме.

    4. Имеется одномерный целочисленный массив, содержащий 10 элементов. Алгоритм, блок-схема которого приведена ниже, производит замену всех четных элементов массива на 0. Модифицируйте алгоритм таким образом, чтобы он заменял все нечетные значения элементов массива на 0.

    5. Дан двухмерный числовой массив. Разработайте блок-схему алгоритма (и программу) его транспонирования (при транспонировании матрицы строки и столбцы меняются местами). Приведем пример транспонирования матрицы:

Приложение 3

    Отчет о выполнении лабораторной работы № __ “Название работы”

    Цель работы. Она указана в пособии.

    Техническое задание. Также приведено в пособии.

    Алгоритм. Изобразите здесь блок-схему алгоритма решаемой задачи. Не забудьте, что аккуратность — одна из главных составляющих успеха. И обязательно опишите, для чего предназначена та или иная переменная.

    Программа. Здесь должен быть листинг программы, если преподавателем не указано иное.

    Протокол работы программы. Внимание! Все, что выводится на экран дисплея в процессе работы алгоритма: запросы значений переменных; сообщения; результаты обработки; служебные или аварийные сообщения — то есть абсолютно все, — записывается в этот протокол.