Методические разработки к ЛПЗ по теме "Основы алгоритмизации и программирования"

Разделы: Информатика


Лабораторная работа 1. Запись алгоритмов с помощью блок-схем

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

Основные понятия

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

Разрабатываемый алгоритм должен обладать следующими свойствами:

  • массовостью, позволяющей решать не одну задачу, а целый класс задач;
  • детерминированностью, однозначно определяющей выполняемые действия (промежуточные и окончательные результаты разных пользователей должны быть одинаковыми при одинаковых исходных данных);
  • результативностью, позволяющей получить результат после конечного числа шагов.

По используемой структуре управления вычислительным процессом алгоритмы классифицируют следующим образом:

  • линейной структуры;
  • разветвляющейся структуры;
  • циклической структуры;
  • смешанной (комбинированной) структуры.

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

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

Алгоритм циклической структуры - алгоритм, содержащий многократно выполняемые участки вычислительного процесса, называемые циклами. Если алгоритм содержит цикл, внутри которого размещен один или несколько других циклов, то такой алгоритм называется алгоритмом со структурой вложенных циклов.

Существует много способов записи алгоритмов, отличающихся друг от друга наглядностью, компактностью, степенью формализации и другими показателями. Наибольшее распространение получил графический способ (блок-схем).

Схема алгоритма представляет собой последовательность блоков, предписывающих выполнение определенных действий, и связи между ними. Она может выполняться с разной степенью детализации.

Запись блоков

Пример

Напишите блок-схему алгоритма программы, которая запрашивает с клавиатуры целое число N и если это число больше 10, то вычисляет и выводит на экран произведение всех целых чисел от 1 до N, иначе выводит на экран значение N.

Алгоритм решения задачи:

  1. Ввод исходных данных (N).
  2. Проверка условия N > 10.
  3. В случае выполнения условия вычисляется произведение всех целых чисел от 1 до N.
  4. Вывод на экран полученного произведения и завершение выполнения программы.
  5. В противном случае вывод на экран значения N и завершения выполнения программы.

Блок-схема

Задания

Напишите блок-схему алгоритма программы, которая:

1) классифицирует компьютерную сеть. Программа запрашивает у пользователя число компьютеров в сети и в зависимости от введенного количества выводит класс сети (если число ЭВМ меньше 256 - то это сеть класса C, от 256 до 65535 - сеть класса B, свыше 65535 - сеть класса A);

2) запрашивает у пользователя номер одного из весенних месяцев, и выводит количество дней в этом месяце. Программа должна проверять, является ли введенный месяц весенним;

3) выводит на экран приглашение: «Который час?», вводит с клавиатуры число X, имеющее смысл времени суток, и печатает слова «Доброе утро», «Добрый день», «Добрый вечер» или «Доброй ночи» в зависимости от введенного времени. Программа должна реагировать на ввод неправильного времени: меньше 0 или больше 24;

4) запрашивает у пользователя размер хищений (р.), определяет и выводит на экран масштаб в соответствии с принятой классификацией (например, если размер хищений меньше 1000 р. - «мелкий», от 1000 до 10 000 - «крупный», свыше 100 000 - «особо крупный»);

5) запрашивает произвольное число N, вычисляет сумму всех целых чисел от 1 до N. Если полученная сумма больше 10, то выводит на экран ее значение, иначе выводит на экран сообщение «Сумма меньше 10»;

6) выводит на экран приглашение: «Введите месяц», вводит с клавиатуры число X, имеющее смысл месяца, и печатает слова «Зима», «Весна», «Лето» или «Осень» в зависимости от введенного месяца. Программа должна реагировать на ввод неправильного месяца: меньше 1 или больше 12;

7) запрашивает с клавиатуры два произвольных числа X и Y. Если X больше Y, то вычисляет и выводит на экран сумму всех целых чисел от 1 до X, иначе вычисляет и выводит на экран произведение всех целых чисел от X до Y;

8) запрашивает у пользователя номер одного из летних месяцев, и выводит количество дней в этом месяце. Программа должна проверять, является ли введенный месяц летним;

9) вводит с клавиатуры 10 чисел и выводит на экран максимальное и минимальное из них;

10) запрашивает с клавиатуры два произвольных числа X и Y, вычисляет их разность. Если разность больше 10, то вычисляет и выводит на экран сумму всех целых чисел от Y до X, иначе выводит на экран значение разности;

11) выводит на экран приглашение: «Введите день недели», вводит с клавиатуры число X, имеющее смысл дня недели, и печатает слова «Рабочий день», «Короткий день», «Выходной» в зависимости от введенного дня. Программа должна реагировать на ввод неправильного дня недели: меньше 1 или больше 7;

12) запрашивает произвольное число N, вычисляет произведение всех целых чисел от 1 до N. Если полученное произведение больше 50, то выводит на экран ее значение, иначе выводит на экран сообщение «Произведение меньше 50»;

13) запрашивает у пользователя номер одного из осенних месяцев, и выводит количество дней в этом месяце. Программа должна проверять, является ли введенный месяц осенним;

14) запрашивает с клавиатуры два целых числа, их сумму и произведение и выводит на экран сообщение о правильности сделанных пользователем вычислений;

15) запрашивает с клавиатуры два произвольных числа X и Y. Если X больше Y, то вычисляет и выводит на экран произведение всех целых чисел от 1 до X, иначе вычисляет и выводит на экран сумму всех целых чисел от 1 до Y;

16) запрашивает с клавиатуры два произвольных числа X и Y, вычисляет их разность. Если разность больше 10, то вычисляет и выводит на экран произведение всех целых чисел от Y до X, иначе выводит на экран значение разности;

17) запрашивает с клавиатуры два целых числа, их разность и частное (результат деления) и выводит на экран сообщение о правильности сделанных пользователем вычислений;

18) запрашивает у пользователя номер одного из зимних месяцев, и выводит количество дней в этом месяце. Программа должна проверять, является ли введенный месяц зимним;

19) запрашивает с клавиатуры число X. Если X меньше 10, то вычисляет и выводит на экран квадрат числа X, а если больше или равно, то вводилось новое число Y, а затем вычисляет и выводит на экран значение суммы X и Y;

20) запрашивает с клавиатуры два произвольных числа X и Y. Если разность X и Y больше 0, то вычисляет и выводит на экран сумму всех целых чисел от Y до X, иначе вычисляет и выводит на экран разность всех целых чисел от Y до X.

Лабораторная работа 2

Знакомство со средой Borland Pascal

Цель работы: научиться работать со средой Borland Pascal, познакомиться со структурой программы в Pascal и действиями, выполняемыми над данными.

Основные понятия

Процессор компьютера может выполнять только те команды, которые ему знакомы. Эти команды представляются двоичным кодом. Однако создать файл с такими командами вручную очень сложно.

Поэтому для облегчения программирования разработаны специальные языки - алгоритмические языки или языки программирования. Программист с помощью текстового редактора создает файл с текстом программы, записанной на алгоритмическом языке. Но чтобы получить готовую для выполнения программу, этот текст нужно преобразовать в коды команд процессора. Для такого преобразования служат специальные программы-переводчики, их называют компиляторы и трансляторы (от англ. слов translate - переводить, compile - составлять).

С момента появления первых ЭВМ было придумано много разных алгоритмических языков: Basic,

Pascal, C, Fortran, Prolog, Assembler и т.д. При этом существуют и развиваются различные версии компиляторов для этих языков (Turbo Pascal, Borland Pascal версий 5.0, 6.0, 7.0, и т.д.).

Ознакомимся с языками программирования на примере языка Pascal.

Структура программы. Программа на языке Pascal состоит из заголовка программы и двух частей: раздела описаний и раздела операторов.

PROGRAM Name; {Заголовок программы}
{Раздел описаний}
BEGIN
{Раздел операторов}
END.

В Pascal игнорируется различие в высоте букв (заглавные или строчные), т.е. Name, NAME, name одно и то же.

Слово PROGRAM зарезервировано в Pascal, т.е. не может использоваться ни в каких иных целях, кроме как для объявления имени программы. Заголовок программы необязателен и игнорируется компьютером.

Первая строка заканчивается особым разделителем - точкой с запятой. Этот разделитель в языке Pascal отмечает конец оператора или описания. Использование особого разделителя позволяет располагать несколько операторов в одной строке.

Зарезервированное слово BEGIN сигнализирует компилятору о начале другой части программы - раздела операторов. Завершает всю программу зарезервированное слово END. Точка оповещает компилятор о конце текста программы.

Обязательной частью являются лишь тело программы (раздел операторов). Заголовок программы является хотя и необязательным, но желательным элементом.

Раздел описаний состоит из следующих подразделов:

  • описания меток (LABEL);
  • описания внешних модулей (USES);
  • описания типов (TYPE);
  • описания констант (CONST);
  • описания переменных (VAR);
  • описания функций (FUNCTION);
  • описания процедур (PROCEDURE).

Порядок размещения подразделов произвольный, можно создавать несколько одинаковых подразделов

Подраздел описания меток. Метка - точка перехода. Используется в операторе безусловного перехода. Данный подраздел начинается со слова LABEL, за которым следует список меток:

LABEL 1,77, 190;

В программе в качестве меток могут использоваться целые числа без знака. Сама метка ставится в телепрограммы перед оператором и отделяется от него двоеточием.

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

USES Модуль,

где USES - зарезервированное слово;

Модуль - имя подключаемого модуля.

Подраздел описания типов. Среди типов данных различают стандартные (предопределенные разработчиками языка) и пользовательские (определяемые программистом в своей программе).

Основные (стандартные) типы данных, используемые в языке Pascal следующие:

  • целые числа;
  • вещественные числа;
  • логический тип;
  • символьный тип;
  • строковый тип.

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

Имя типа = (идентификатор1, идентификатор2, … , идентификаторN)

Рассмотрим простые типы данных, каждый из которых определяет упорядоченное множество значений:

Целые типы

Shortint (-128 ... 127, 1 байт)
Integer (-32767 ... 32768, 2 байта)
Longint (-2147483648 ... 2147483647, 4 байта)
Byte (0 ... 255, 1 байт)
Word (0 ... 65535, 2 байта)

Вещественные типы

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, хранятся точно, поскольку это целые числа)

Логический тип (Boolean)

Переменные логического типа занимают в памяти один байт и могут принимать одно из двух значений False - ложное или True - истинное

Символьный тип (Char)

Символьный тип позволяет работать с символами, которые записываются двумя способами: в одинарных кавычках или по их коду, например 'a', 'B', '*' или, что, то же самое, #97, #130, #42. В отличие от текста программы на Паскале, символы, соответствующие строчным и заглавным буквам, различаются

Строка (String)

Строка символов, занимает MAX+1 байт, где MAX - максимальное количество символов в строке

Вещественные числа хранятся неточно. Каждый из имеющихся вещественных типов гарантирует правильное хранение только определенного количества значащих цифр, их называют верными цифрами.

Подраздел описания констант. Константами в языке считаются такие объекты программы, которые не могут изменять своего значения. В языке Pascal константы могут иметь собственное имя (идентификатор). Константы описываются следующим образом:

CONST Имя = Значение,

где CONST - зарезервированное слово; Имя - имя константы; Значение - значение константы.

В Pascal есть зарезервированные константы. Например, число π, идентификатор pi (pi = 3.14159265).

Подраздел описания переменных. Переменная - объект программы, который может изменять свое значение в процессе выполнения (счета). Переменная представляет собой некоторый адрес ячейки памяти, по которому будет размещен тот или иной элемент данных, с которым оперирует компьютерная программа. В процессе решения переменная может изменять свои значения, но в каждый момент времени в памяти ЭВМ хранится только одно «текущее» значение. Объем памяти, отводимый под переменную, определяется типом данных (Real, Integer и т.д.). Описание переменных производится следующим образом:

VAR Имя : тип,

где Var - зарезервированное слово; Имя - идентификатор переменной; тип - тип переменной.

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

Процедуры (подпрограммы) и функции представляют собой относительно самостоятельные фрагменты программы, оформленные особым образом и снабженные именем.

Основные правила выбора идентификаторов (имен)

1 Идентификатор может состоять из букв латинского алфавита (a…z), цифр (0…9), знака подчеркивания;

2 Идентификатор не может содержать специальные знаки:

  • знаки пунктуации . () [] .. (разделение границ диапазона) : ; ' (апостроф) = $ # (признак кода числа);
  • знаки операций + - * / > < @.

3 Идентификатор не может начинаться с цифры.

4 Идентификатор не может совпадать ни с одним из зарезервированных слов.

5 Длина идентификатора может быть произвольной, но значащими считаются первые 63 символа.

6 Заглавные и строчные буквы в идентификаторах считаются одинаковыми.

Действия, выполняемые над данными

Арифметические действия

Арифметические действия выполняются над данными вещественного и целого типов

+- сложение
- - вычитание
* - умножение
/ - деление вещественное
DIV - деление целочисленное
MOD - вычисление оста

Операции отношения (сравнения)

Результат любой операции соотношения имеет логический тип, т.е. либо True - истина, либо False - ложь

= - равно
<> - не равно
< - меньше
> - больше
<= - меньше или равно
>= - больше или равно

Операции отношения (сравнения)

Логические операции над данными логического типа дают результат того же типа, над данными целого типа - результат целого типа

OT - логическое НЕ (превращает True в False, а False в True)
AND - логическое И (логическое умножение)
OR - логическое ИЛИ (логическое сложение)
XOR - исключающее или (True если операнды разные)

Принцип действия этих операций можно проиллюстрировать такой таблицей:

Из идентификаторов, констант, знаков арифметических, логических операций и операций сравнения составляются выражения.

Правила составления выражений

1 Два символа арифметических операций не должны стоять рядом; исключение составляет знак «-» перед отрицательной константой.

2 Нельзя опускать знак умножения.

3 Круглые скобки определяют очередность выполнения операций.

4 Число левых и правых скобок должно быть одинаково.

5 При отсутствии скобок вычисление выражения выполняется согласно приоритету операций:

  • унарные операции: NOT, + (увеличение на 1), - (уменьшение на 1);
  • oперации типа умножения: *, /, DIV, MOD, AND;
  • операции типа сложения: +, -, OR;
  • операции отношения =, <, >, <=, >=, <>.

Система программирования Borland Pascal

Система программирования Borland Pascal представляет собой единство компилятора с языка программирования Pascal и некоторой инструментальной программной оболочки, способствующей повышению эффективности создания программ.

Назначение среды: написание и редактирование текстов программ, загрузка с диска и сохранение на диске программ на языке Pascal, компиляция, запуск и отладка программ, а также многое другое.

«Горячие» клавиши

F1

Помощь

F2

Запись текста программы в файл на диске

F3

Загрузка текста программы с диска

F10

Вход в главное меню

Alt + X

Выход из системы

Текстовый редактор. Текстовый редактор среды Borland Pascal предоставляет пользователю удобные средства создания и редактирования текстов программ.

Клавиши перемещения
курсора

Клавиши удаления и замены

На один символ вправо

BackSpace

Удаление символа
перед курсором

На один символ влево

На одну строку вверх

Delete

Удаление символа над курсором

На одну строку вниз

Ctrl + Y

Удаление текущей строки

Home

Начало строки

Insert

Вкл./выкл. Режима замены символа

End

На конец строки

Работа с блоками

Pg Up

На страницу вверх

Pg Dn

На страницу вниз

Shift + стрелка

Выделение блока

Ctrl + Home

В начало страницы

Ctrl + Insert

Забрать выделенный блок в буфер

Ctrl + End

На конец страницы

Shift + Insert

Вставить блок из буфера

Ctrl + Pg
Up

Начало текста

Ctrl + K,
Ctrl + Y

Удалить выделенный блок

Ctrl + Pg
Dn

В конец текста

F9

Компиляция программы

Ctrl + F9

Компиляция программы с последующим запуском

Alt + F5

Переключиться в экран выполнения программы

F7

Шаг отладки с заходом в подпрограммы

F8

Шаг отладки без захода в подпрограмму

F4

Выполнение программы до текущего местоположения курсора

Ctrl + F4

Просмотреть содержимое переменной

Ctrl + F2

Выход из режима отладки

Пример. Расчет корней квадратного уравнения.

Общий вид:

аx2 + bx + c = 0.

Исходные данные:

a, b, c.

Найти:

корни x1 и х2.

Алгоритм:

1 Вводим a, b, c.
2 Вычисляем дискриминант D = b2 - 4ac.
3 Проверяем условие D < 0, если «да», то выводим на экран сообщение «Действительных корней нет» и завершаем выполнение программы.
4 В противном случае, вычисляем корни уравнения x1 и x2.
5 Выводим на экран x1 и x2.

Блок-схема:

(Составить самим).

Программа:

PROGRAM QuadrEq;

VAR a, b, c, x1, x2, d : real;
BEGIN
WRITELN('Введите коэффициенты уравнения');
READLN(a, b, c);
d:=b*b-4*a*c;
IF d<0 THEN WRITELN('Действительных корней нет')
ELSE
BEGIN
x1:=(-b+sqrt(d))/2*a;
x2:=(-b-sqrt(d))/2*a;
WRITELN ('x1=', x1, ' x2=', x2);
END;
END.

См. продолжение разработки