39300

Работа в системе программирования TURBO-PASCAL

Книга

Информатика, кибернетика и программирование

Лабораторный практикум состоит из шести лабораторных работ в которых приведены основные сведения о линейных алгоритмах и программах ветвления и циклах в программах и алгоритмах использованию структурированных типов данных таких как массивы комбинированные типы и файлы. Если оценка больше 2 то S := S N; иначе прекратить вычисления выход из цикла. Существует три типа операторов цикла: циклы со счетчиком; циклы с предусловием; циклы с постусловием. В таких циклах указывают переменную целого типа которая называется счетчиком...

Русский

2013-10-02

208 KB

20 чел.

Содержание

Введение……………………………………………………………………………5

Лабораторная работа № 1

Работа в системе программирования TURBO-PASCAL. Линейные

алгоритмы. Арифметические выражения. Стандартный ввод/вывод

данных. Форматы вывода. Модуль CRT

  1.  Цель работы…………………………………………………………...……….6
  2.  Краткие теоретические сведение…………………………………...………...6
  3.  Задание ……………………………………………..………………….…… ..12
  4.  Методические указания по выполнению задания………………………….14
  5.  Контрольные вопросы……………………..………………………………....14
  6.  Пример выполнения работы…………………………………………………15

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

Ветвления в алгоритмах. Логические выражения. Операторы сравнения и перехода. Оператор варианта. Операторы циклов.

  1.  Цель работы…………………………………………………………………..18
  2.  Краткие теоретические сведение……………………………………………18
  3.  Задание ………………………………..……………………………………...27
  4.  Методические указания по выполнению задания……………………….....28
  5.  Контрольные вопросы………………………………………….....………….29

Лабораторная работа № 3

Массивы, их виды. Использование массивов.

  1.  Цель работы…………………………………………………..………………30
  2.  Краткие теоретические сведение…………………………..………………..30
  3.  Задание ……………………………………………………………………….34
  4.  Методические указания по выполнению задания………………………….34
  5.  Контрольные вопросы………………………………...…..………………….35


Введение

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

Для успешного освоения навыков программирования хорошо подходит язык программирования Turbo Pascal. Этот язык программирования был разработан первоначально как язык обучения программированию. Он позволяет освоить структурное, модульное и объектно-ориентированное программирование.

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

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

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

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


Лабораторная работа № 1

Работа в системе программирования TURBO-PASCAL.

Линейные алгоритмы. Арифметические выражения. Стандартный ввод/вывод данных. Форматы вывода. Модуль CRT

1.Цель работы:

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

2.Краткая теория:

Система программирования – это программная среда, предназначенная для создания, отладки и выполнения программ на определенном языке программирования. В состав системы программирования входят:

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

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

Набор библиотек – это набор стандартных встроенных функций языка программирования.

Справочные системы – помогает пользователю находить информацию о системе программирования или языке программирования.

Сервисные средства для работы с библиотеками – средства обеспечивающие работу с библиотеками функций.

Редакторы связей – предназначены для организации больших программе пакетов программ.

И т. д.

В системе программирования Tурбо-Паскаль 5.5 допускается изменение структуры программы, заголовок программы не обязателен, разделы описания глобальных описаний могут следовать в любом порядке,

Расширен синтаксис описания констант, разрешено определять типизированные константы, введены шестнадцатеричные константы, расширен список арифметических функций, введены типы данных word и bite, расширен список процедур и функций для работы с файлами и модулями.

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

Главное меню интегрированной среды содержит след. пункты:

File – содержит команды для работы с файлами

Edit – команды для редактирования

Run – позволяет выполнять программы

Compile – содержит команды выполняющие компиляцию

Options – команды установки опций интегрированной среды

Debug – устанавливает параметры отладки программы

Break/watch – выборочная отладка отдельных участков исходного текста.

Начиная с версии 6.0 появилась возможность работать в многооконном режиме, редактирую несколько файлов одновременно, допускается работа с мышью, стало возможным объектно-ориентированное проектирование программ (библиотека Turbo Vision)

Главное меню версии 7.0 дополняют  пункты:

File   Edit  Search   Run   Compile  Options  Debug  Window  Help  Tools

Window – организует работу с окнами

Help – система помощи и подсказок

Tools – инструментальные программные средства. Библиотека стандартных модулей содержит след. модули: Crt, Graph, Graph3, Overlay, String, System, Turbo3, WinAPI, WinCrt, WinDos, WinPrn, WinTypes, WinProcs.

Обычно работа в среде системы программирования начинается с загрузки текста программы, хранящегося на диске, в окно редактирования или создания нового файла с исходным текстом. Исходные тексты программ на Pascal имеют расширение .pas.

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

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

Основные команды системы программирования Turbo-Pascal:

- создание нового файла – File-New

- загрузка файла с диска – File–Load

- сохранение файла на диске – File–Save (Write) или File–Save to (Write to)

- выход из окна редактора – F10

- переключение окон редактора -

- редактирование исходного текста – через меню Edit

- компиляция программы – Compile–Compile или F9

- выполнение программы – Run–Run или Ctrl-F9

- выход из системы программирования – File-Exit

Понятие алгоритма – одно из фундаментальных понятий информатики.

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

Графическое описание алгоритма называют блок-схемой. Блок-схема наглядно представляет порядок выполнения операций для обработке информации.

Алгоритм и  программа решения задачи на ЭВМ должны разрабатываться  в соответствии с обязательными этапами:

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

Ввод информации в ЭВМ осуществляется с помощью устройств ввода информации ( клавиатура, мышь, файл на диске).

Вывод информации из ЭВМ осуществляется с помощью устройств выводы информации ( экран, принтер, файл на диске).

Основные блоки, используемые в блок-схемах,   представлены на рис. 1:

Рис. 1. Основные виды блоков

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

Рассмотрим примеры.

Пример 1: составить алгоритм определяющий  длину отрезка по двум точкам на плоскости. пусть координаты точек (Х1, Х2) и ( Х2, Х3), DL- искомый отрезок. алгоритм решения задачи приведен на рис.2.

Рис. 2. Линейный алгоритм

 

К арифметическим операциям относятся операции сложения, вычитания, умножения, деления, а также целочисленное деление DIV и остаток от деления MOD,  оператор DIV и MOD выполняются только над  

Пример 2:

A Div В – определяет целую часть от деления переменной А на В

А mod В – определяет остаток от деления переменной А на В

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

Операции в арифметическом выражении выполняются в следующем порядке:

  •  действия в скобках
  •  математические функции
  •  умножение, деление, целочисленное деление, деление с остатком
  •  сложение, вычитание

Математические функции, используемые в арифметических выражениях, могут быть определены пользователем в виде подпрограммы или принадлежать множеству стандартных математических функций ПАСКАЛЯ.

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

ABS (x) – модуль числа х,

LN(x) – натуральный логарифм числа х,

EXP(x) – число е =  2,73.. в степени х,

SQR(x) – квадрат числа х,

SQRT(x) – корень квадратный числа х,

SIN(x) – синус числа х,

COS(x) – косинус числа х,

ROUND(x) – округление до целых числа х,

TRUNC(x) – определение дробной части числа х,

ARCTAN(x) – арктангенс числа х.

Для тригонометрических функций аргумент должен указываться в радианах.

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

Для изменения значения переменной используют оператор присваивания.

Его формат:  

ПЕРЕМЕННАЯ:= Арифметическое выражение;

Тип переменной должен соответствовать типу результата арифметического выражения:

  •  Если результат выражения целого типа, то переменная может быть целого или вещественного типа.
  •  Если результат выражения вещественного типа, то переменная должна быть вещественного типа.
  •  При умножении или делении целых чисел результат является вещественным числом.

Порядок выполнения оператора присваивания:

  •  Вычисляется значение выражения
  •  Вычисленный результат заносится в переменную.

Алгоритм и программа решения задачи на ЭВМ должны разрабатываться в соответствии с обязательными информационной технологии:

- ввод исходной информации в ЭВМ с клавиатуры, диска мыши и др. устройств ввода

- выполнение преобразования исходной информации в результатную с помощью ЭВМ

- вывод результата пользователю на экран, печать, внешний носитель и т.д.  

 Стандартный ввод – это ввод информации с клавиатуры в переменные, хранящиеся в оперативной памяти.

 Стандартный вывод – это вывод информации на экран из оперативной памяти ( переменных ).

Для стандартного ввода используют следующий оператор:

READLN (список ввода)

Список ввода – список вводимых переменных, разделенных запятыми.

Выполнение оператора READLN вызывает:

  •  переход ЭВМ в режим ожидания действий пользователя, при этом на экране появляется мигающий курсор,
  •  Пользователь должен набрать на клавиатуре значение, нажать на клавишу ENTER
  •  Введенное значение помещается в переменную, а выполнение программы продолжается.

Для стандартного вывода используют  операторы:

WRITE ( список вывода )      или

WRITELN ( список вывода )

Список вывода – список выводимых переменных, разделенных запятыми.

Пример 3:

VAR A, B: integer;

C: real;

Begin

Writeln(‘Введите числа А и В -’);

Readln(A, B);

C:=A*B;

Write(‘Произведение = ’,C);

End.

В списке вывода после имени переменной можно указывать формат вывода.

Форматы вывода особенно удобно использовать для вещественных значений.

  1.  Формат вывода  - величина: число

Если величина является символом или строкой, то число – это количество выводимых символов. Пробелы добавляются справа – в конце строки.

Если величина целого типа, то число указывает длину поля для выводимого числа, пробелы добавляются перед числом.

Представление числа в нормализованном виде  

Если величина вещественная, число указывается длина поля, включая запятые, знак числа, знак степени и знак Е. При этом общий вид выводимого значения, например для числа соответствует 0,4566Е+3, где после Е указывается степень десятки, что соответствует  

Пример 4:

Значение переменной А

Формат

Вид на экране

‘ABCDFE’

А:2

AB

‘AB’

A:5

AB___

345

А:4

_345

-345.56

A:11

-0.34556E+3

345,56

А:11

_0,34556Е+3

  1.  Формат вывода - величина: M: N

M – общее количество символов для вывода вещественного числа

N – количество значков, отводимых под дробную часть.

Пример 5: Пусть в программе используются следующие операторы

А= 3,5555;

Write(A:5:2);

Тогда на экране : _3,56

Модуль CTR предоставляет дополнительные возможности для работы с экраном в текстовом режиме. По умолчанию на экране помещается 25 строк ( 0 – 24 ) и 80 колонок ( 0 – 79 ).

Наиболее часто используют следующие  функции  модуля CRT:

ClrScr – очистка экрана

GotoXY( колонка, строка) – устанавливает курсор в позицию экрана

TextMode(номер цвега или его название) – установка цвета, выводимых символов

TextBackGround ( цвет ) – задает цвет фона

WhereX – определяет  номер текущей колонки курсора

WhereY– определяет  номер текущей строки курсора

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

USES CRT;

.

3.Задание

Составить линейный алгоритм и программу для решения задачи.

В ходе выполнения задания необходимо составить программы решения задачи 2 способами :

  1.  без использования форматов вывода и модуля CRT,
  2.  с использованием форматов вывода и модуля CRT.

Варианты работы:

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

2. Стороны основания прямоугольного параллелепипеда равны a и b. Диагональ параллелепипеда наклонена к плоскости основания под углом 600. Определить боковую поверхность параллелепипеда.

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

4. Катеты прямоугольного треугольника равны a и b. Найти длину биссектрисы прямого угла.

5. Найти площадь равнобедренной трапеции, зная длину её диагонали L и угол α между этой диагональю и большим основанием.

6. Найти угол между часовой и минутной стрелками.

7. В прямом параллелепипеде стороны основания a и b образуют угол 300. Боковая поверхность равна S. Найдите его объём.

8. Сосуд имеет форму полушара радиуса R, дополненного цилиндром. Какой высоты должна быть цилиндрическая часть, чтобы сосуд имел объём V. (Контр.прим.: R=3, V=81,Pi=3.14, h≈0.87).

9. Имеется кусок свинца массой m кг. Сколько шариков диаметром 1 см можно отлить из куска? (Плотность свинца 11,4 г/см3).

10. Найти площадь той части круга, которая расположена вне вписанного в него квадрата. Радиус круга R.

11. Периметр параллелограмма равен P см, его острый угол α., одна из сторон а. Определить длины высот параллелограмма, если его площадь равна S см2.

12. Высота пирамиды равна h м. Площадь основания равна S м2. На каком расстоянии от основания находится сечение, параллельное ему, если площадь сечения W м2.

13. Треть пути тело двигалось со скоростью v км/ч. Остальной путь – S м – тело прошло за t с. Определить среднюю скорость движения.

14. Газ нагрели от температуры T1 0C до температуры T2 0C. На сколько процентов увеличился объём газа, если давление газа осталось неизменным?

15. Газ нагрели от температуры T1 0C до температуры T2 0C. На сколько процентов увеличился объём газа, если давление газа изменялось с P1 до P2 кПа (условие P1>P2)?

16. Сторона правильного вписанного в окружность треугольника равна a. Найдите сторону квадрата, вписанного в эту окружность.

17. Дано квадратное уравнение. Чему равны корни данного кв. уравнения.

18. Цена на товар повысилась в июне на X %, в июле на Y %, а в августе на Z %. На сколько процентов по сравнению с начальной ценой изменилась цена товара за лето?

4.методические указания по выполнению

задания

4.1 Перед выполнением лабораторной работы обучающийся должен получить индивидуальное задание.

4.2 Изучить теоретический лекционный материал и ознакомиться с описанием лабораторной работы.

4.3 Изучить систему программирования Turbo Pascal, процедуры и функции модуля Crt.

4.4 Проанализировать задание для выполнения лабораторной работы.

4.5 Выполнить постановку задачи

4.6 Выполнить формализацию задачи.

4.7 Составить алгоритм решения задачи в графической форме.

4.8 Составить программу решения задачи на языке Turbo Pascal.

4.9 С помощью системы программирования Turbo Pascal создать текст программы и выполнить ее.

4.10 Проверить правильность составления программы с помощью контрольного примера.

  1.  Оформить отчет по лабораторной работе.

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

5.1 Что понимают под алгоритмом?

5.2 Какой алгоритм называется линейным?

5.3 Что такое система программирования?

5.4 Что понимается под термином TURBO-PASCAL?

5.5 Для чего выполняют компиляцию программы?

5.6 Как выполнить компиляция программы?

5.7 Какие ошибки могут быть обнаружены в программе?

5.8 Как исправить ошибки в тексте программы?

5.9 Какие основные блоки используются при составлении блок-схемы алгоритмы?

5.10 Каковы этапы решения задачи на ЭВМ?

5.11 Что понимается под стандартных вводом и стандартным выводом информации?

5.12 Каков формат оператора стандартного ввода информации?

5.13 Каков формат оператора стандартного вывода информации?

5.14 Какие форматы вывода информации вы знаете?

5.15 Как используются форматы вывода и для какой цели?

5.16 Какие функции модуля CRT наиболее часто используются в программах?

6. Пример выполнения работы

Задание:

Известны координаты двух точек на плоскости. Определить расстояние между этими точками.

Этап 1. Постановка задачи:

- Входной информацией является

координаты точки А - X1, Y1- вещ. числа,

координаты точки В - X2, Y2 – вещ. числа

- Выходной информацией является

Расстояние между двумя точками – DL – вещ. число

Этап 2.Формализация задачи

Этап 3. Блок-схема алгоритма на рис.3.

Рис.3. Блок-схема решения задачи

1 способ решения задачи:

Этап 4.Текст программы без использования форматов вывода и модуля CRT

VAR X1,Y1,X2,Y2 : real;       {   объявление координат точек   }

DL: real;                        {   расстояние между точками      }

Begin

Writeln(‘Введите координаты точки А -’);

Read(Х1, Y1);

Writeln(‘Введите координаты точки B -’);

Read(Х2, Y2);

DL:=sqrt(sqr(X2-X1)+sqr(Y2-Y1));

Writeln(‘Расстояние между точками - ’,DL);

End.

Этап 5.Контрольный пример – Вид экран представлен на рис. 4

Введите координаты точки А - 1 1

Введите координаты точки В - 2 2

Расстояние между точками - 1414213Е-6

Рис.4. Вид  экрана с результатом решения задачи

2 способ решения задачи

Этап 4. Текст программы с использования форматов вывода и модуля CRT

USES CRT;

VAR X1,Y1,X2,Y2 : real;       {   объявление координат точек   }

DL: real;                        {   расстояние между точками      }

Begin

CLRSCR;

GOTOXY(10,5);

Write(‘*****************************************’);

GOTOXY(10,6);

Write(‘*    Введите координаты точки А -’);

Read(Х1, Y1);

GOTOXY(45,6);

Write(‘*’);

GOTOXY(10,7);

Write(‘*    Введите координаты точки B -’);

Read(Х2, Y2);

GOTOXY(45,7);

Write(‘*’);

GOTOXY(10,8);

Write(‘*****************************************’);

DL:=sqrt(sqr(X2-X1)+sqr(Y2-Y1));

GOTOXY(10,9);

Write(‘*     Расстояние между точками - ’,DL:4:2);

GOTOXY(45,9);

Write(‘*’);

GOTOXY(10,10);

Write(‘*****************************************’);

End.

Этап 5. Контрольный пример (Вид экран представлен на рис. 5)

 **************************************

          *    Введите координаты точки А - 1 1              *

          *    Введите координаты точки В - 2 2              *

         **************************************

 *    Расстояние между точками -  1,41               *

 **************************************

Рис.5. Вид  экрана с результатом решения задачи


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

Ветвления в алгоритмах. Логические выражения.

Операторы сравнения и перехода. Оператор варианта.

Операторы циклов.

1.Цель работы:

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

2.Краткая теория:

Понятие алгоритма – одно из фундаментальных понятий информатики.

Алгоритмы, при выполнении которых порядок следования команд определяется в зависимости от результатов проверки некоторых условий, называются разветвляющимися. Для их описания в блок-схеме используется следующая конструкция – рис.6:

Рис.6. Ветвление в блок-схемах

 В языке Паскаль ветвления реализуются оператором сравнение - IF.

Его формат:

If    < условие >   Then  < оператор 1 >  Else  < оператор 2 >;

или

If    < условие >   Then  < оператор 1 >  ;

 < условие > - выражение логического типа. Может содержать логические операции и операции сравнения ( операции отношений).

К операциям сравнения относятся следующие - >, <, =, <>. Эти операции используются для сравнения числовых величин. Для сравнения символьных и строковых значений используются в основном операции   =   и   <>. Сравнение строк выполнятся по байтно. При этом сравниваются коды символов, поэтому большей считается строка у которой код символа больше .

К логическим операциям относятся операции логического сложения – OR , логического умножения - AND, сложение по модулю 2 (отрицания OR) - XOR и логического отрицания - NOT. Логическая операция AND обычно используют в случаях когда должны выполняться одновременно несколько условий. Операция OR – когда должно выполняться хоты бы одно из условий. Операция NOT используется для отрицания некоторого условия. Операция XOR – если условия не должны совпадать.

Порядок выполнения оператора IF:

Если < условие > истинно, то выполняется  < оператор 1 > в противном случае   

< оператор 2 >.

В случае если вместо < оператор 1> или < оператор 2 > должны выполняться несколько операторов применяют операторные скобки

BEGIN  < операторы >  END;

 В Паскале допускается вложенность операторов сравнения. В этом случае Then и Else относятся к ближайшему If :

If    < условие >   Then If    < условие >   Then  < оператор 1 >  Else  < оператор 2 >       Else If    < условие >   Then  < оператор 1 >  Else  < оператор 2 >;

Допускается  3 уровня вложенности оператора If .

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

В этом алгоритме для организации ветвления можно использовать условие Х >=0. Если это условие верно, то Y = 4X, если не верно, то Y = 0.

На языке Паскаль этот алгоритм может быть записан следующим образом:

PROGRAM vetvlen;

{ Эта программа демонстрирует ветвление }

VAR

х,у : real;

BEGIN

Writeln (' введите значение х’);

Readln(x);

IF х >= 0 THEN y:=4*x

ELSE y:=0;

Writeln('y=’,y:6:3);

END.

В качестве операторов каждой из альтернатив THEN и ELSE может использоваться оператор перехода на метку GOTO.

Формат оператора имеет вид:

GOTO <метка>;

Оператор GOTO используется для передачи управления тому оператору перед которым стоит <метка>. Все метки используемые в программе должны быть описаны в разделе описания меток:

LABEL <метка1>,<метка2>,…,<меткаN>;

Для пояснения использования меток в программе рассмотрим следующий пример.

Пример 2:Пусть требуется найти значение

PROGRAM METKI;

{ Эта программа демонстрирует использование меток }

LABEL M;

VAR х,у : real;

BEGIN

Writeln (' введите значение х’);

Readln(x);

IF х = 0 THEN BEGIN y:=4; GOTO M; END;

IF x>0 THEN y:=4*x ELSE y:=x/4;

   M: Writeln (‘Значение у=’, у:5:2);

    END.

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

Оператор выбора (варианта) имеет следующий общий вид:

CASE <выражение> OF

<конст. 1>: <оператор 1>:

<конст. 2> : <оператор 2>;

<конст. N> : <оператор N>

ELSE <оператор>

END;

Значение выражения в операторе CASE не может быть вещественного и строкового типов.

Оператор выбора позволяет организовать несколько альтернативных ветвей.

Блок-схема оператора CASE имеет вид (рис. 7):

Рис. 7. Блок-схема оператора CASE

Порядок выполнения оператора CASE:

  •  Вычисляется выражение.
  •  Последовательно просматриваются <конст.1>, < конст.2>, ..., < конст. N> и отыскивается та, которая совпадает со значением выражения;
  •  выполняется соответствующий оператор.
  •  Если среди < конст.1>,< конст.2>, ... ,< конст. N> не будет найдено константы совпадающей со значением выражения, то выполняется <оператор N+1>.

Пример 3: Пусть с клавиатуры вводят номер дни недели, а на экран нужно вывести название дня недели.

Алгоритм представлен на рис. 8.

Текст программы:

PROGRAM Variant;

VAR N:Byte;

BEGIN

Writeln (' введите значение номер дня недели’);

Readln(N);

CASE N OF

 1: Writeln(‘Понедельник’);

 2: Writeln(‘Вторник’);

 3: Writeln(‘Среда’);

 4: Writeln(‘Четверг’);

 5: Writeln(‘Пятница’);

 6: Writeln(‘Суббота’);

 7: Writeln(‘Воскресенье’);

 ELSE Writeln(‘Нет такого дня недели’)

END;

END.

Рис. 8. Блок-схема к примеру 3

Часто для решения задач одна и та же последовательность действий выполняется несколько раз. Например, при поступлении в институт абитуриент сдает 3 экзамена, при этом подсчитываются набранные им баллы (переменная S; ее начальное значение S:=0;). За каждый экзамен он получает оценку N. Если оценка больше 2, то S := S + N; иначе — прекратить вычисления (выход из цикла).

Цикл — это последовательность операторов, которая может быть  выполнена более одного раза.

Существует три типа операторов цикла:

— циклы со счетчиком;

— циклы с предусловием;

— циклы с постусловием.

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

Оператор цикла состоит из двух частей:

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

Формат цикла со счетчиком:

FOR <счетчик цикла>:= <начальное значение> ТО <конечное значение> DO <оператор>;

Здесь

  •  FOR, TO, DO — зарезервированные слова (англ.: для, до, выполнить);
  •  <счетчик (параметр) цикла> — переменная типа INTEGER, которая изменяется от <начального значения>, увеличиваясь на единицу после очередного выполнения тела цикла;
  •  <оператор> — любой (чаще составной) оператор.

Существует другая форма этого оператора:

FOR <счетчик цикла>:= <начальное значение> DOWNTO <конечное значение> DO <оператор> ;

Замена ТО на DOWNTO (англ.: вниз до) означает, что шаг изменения параметра цикла равен - 1 , т. е. происходит пошаговое уменьшение счетчика на единицу.

Цикл со счетчиком обозначается в схемах алгоритма так как показано на рис. 9.

Рис.9. Обозначение цикла со счетчиком в логических схемах

Циклы с предусловием используют тогда, когда выполнение цикла связано с некоторым логическим условием. Оператор цикла с предусловием имеет две части: условие выполнения цикла и тело цикла.

WHILE <условие> DO <оператор>;

Здесь

  •  WHILE, DO — резервированные слова (англ.: пока, делать);
  •  <условие> — выражение логического типа;
  •  <оператор> — произвольный (возможно составной) оператор.

При использовании цикла с предусловием необходимо знать следующее:

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

2) если условие истинно, то выполняется тело цикла, после чего повторяется проверка условия. Если условие ложно, то происходит выход из цикла;

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

Графическое изображение цикла с предусловием представлено на рис.10.

Рис. 10. Графическое изображение цикла с предусловием

Цикл с постусловием  схож с предыдущим циклом, но условие в них указывают после тела цикла.

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

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

Если условие истинно, то происходит выход из цикла, иначе операторы цикла выполняется еще раз.

Этот оператор имеет вид:

REPEAT <тело цикла> UNTIL <условие>;

Здесь

  •  REPEAT, UNTIL — резервированные слова (англ.: повторять, пока не);
  •  <условие> — выражение логического типа, если его значение истинно, то происходит выход из цикла.

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

Графическое изображение цикла с постусловием представлено на рис. 11.

Рис. 11. Обозначение цикла с постусловием в блок-схемах

Примеры циклических алгоритмов

Пример 4: Вычислить сумму п членов последовательности{1/i}:

l+l/2+1/3+...+l/n.

При решении данной задачи удобно использовать цикл со счетчиком, так как число шагов суммирования точно определено. Для вычисления значения суммы в этой программе используют переменную S. которой предварительно присваивается нулевое значение (S:=0). На каждом шаге к ранее вычисленному значению S прибавляется i-ый член последовательности, поэтому в теле цикла должен присутствовать оператор S:= S+1/i;.

Program SUMMA1;

{ Вычисление суммы первых n членов последовательности (1/i) }

Var

i, N : Integer;

S : Real;

Begin

S=0;

Write('ввeдитe N: ');

Readln(N);

For i := 1 to N do S=S+l/i; { тело цикла }

Writeln('Cyммa равна=',3:6:3);

End.

Пример 5: Найти сумму заранее неопределенного количества членов числовой последовательности. Признаком окончания последовательности является 0.

Так как в данной задаче количество элементов неопределенно заранее, то в программе естественно использовать цикл с предусловием.

Program SUMMA2;

{ Вычисление суммы элементов вводимой последовательности }

Var

S, a : integer;

Begin

S:=0;

Writeln('Введите элемент последовательности — '):

Read(a);

While a <> 0 do

begin

S:=S+a;

Writeln('Введите элемент последовательности — ');

Read(a);

end:

Writeln(‘Сумма равна=',3:6);

End.

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

Пример 6: Найти минимальное число элементов последовательности, сумма которых превышает введенное с клавиатуры значение предельной суммы.

Аналогично задаче 5 количество вводимых элементов последовательности неизвестно. В нижеприведенной программе предельная сумма заносят в переменную SP, а элемент последовательности в переменную А. В теле цикла мы накапливаем число введенных элементов последовательности в переменной i (i := i + 1), а их сумму — в переменной S (S := S + а). Так как суммирование должно выполниться хотя бы один раз, естественно использовать цикл с постусловием.

Program SUMMA3;

{ Нахождение минимального числа элементов последовательности, сумма которых превышает значение предельной суммы }

Var

SP : Integer; { предельная сумма }

S : Integer; { сумма }

i : Integer; { число введенных элементов }

а : Integer; { текущий вводимый элемент }

Begin

S:=0;

i:=0;

Writeln('Введите предельную сумму: ');

Readln(SP):

Repeat

Write('Введите элемент: ');

Readln(a).

S:=S + a,

I:=I+1;

Until S > SP; { условие конца цикла }

Writeln('Число элементов равно ', i:6);

End.

3.задание

Составить алгоритм с ветвлениями и программу для решения задачи.

Составить алгоритмы и программы для каждой из разновидностей циклов.

Варианты заданий

1. Найти минимальное из двух чисел.

2. Найти минимальное из трех чисел.

3. Определить принадлежит ли число Х отрезку [а; b].

4. Найти минимум функции  на отрезке [а; b].

5. Найти значение функции

6. Даны две точки А(x1, y1) и B(x2, y2). Определить которая из точек находится ближе к началу координат.

7. Определить правильность даты, введенной с клавиатуры (число – от 1 до 31, месяц -  от 1 до 12). Если введены некорректные данные, то сообщить об этом.

8. Даны три числа a, b, c. Определить, какое из них равно d. Если ни одно не равно d, то найти max (d-a, d-b, d-c).

9. Дано натуральное число n. Вычислить:

10. Дано натуральное число N. Вычислить произведение первых N сомножителей. .

11. Вычислить значения функции F(x) на отрезке [a,b] с шагом h. Результат представить в виде таблицы, первый столбец которой – значения аргумента, второй – соответствующие значения функции. F(x) = x – sin x.

4.методические указания по выполнению

задания

4.1 Перед выполнением лабораторной работы обучающийся должен получить индивидуальное задание.

4.2 Изучить теоретический лекционный материал и ознакомиться с описанием лабораторной работы.

4.3 Изучить операторы Turbo Pascal, организующие ветвления и циклы.

4.4 Проанализировать задание для выполнения лабораторной работы.

4.5 Выполнить постановку задачи

4.6 Выполнить формализацию задачи.

4.7 Составить алгоритм решения задачи в графической форме.

4.8 Составить программу решения задачи на языке Turbo Pascal.

4.9 С помощью системы программирования Turbo Pascal составить текст программы и выполнить ее.

4.10 Проверить правильность составления программы с помощью контрольного примера.

  1.   Оформить отчет по лабораторной работе.

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

  1.  В каких случаях используют Writeln(‘Понедельник’); циклы с предусловием ?
  2.  Каковы особенности использования цикла с постусловием ?
  3.  В чем сходство и различие операторов CASE и IF ?
  4.  Каков порядок выполнения цикла с параметром ?
  5.  Что такое счетчик цикла ?
  6.  Как задаются условия в операторах циклов и сравнения ?
  7.  Какой формат имеет оператор CASE ?
  8.   Какой формат имеет оператор IF ?
  9.  Как избежать «зацикливания» при использовании операторов циклов?
  10.   В каких случаях используются «операторные скобки» ?
  11.   Что такое вложенные операторы ?


ЛАБОРАТОРНАЯ РАБОТА № 3

Массивы, их виды. Использование массивов.

1.Цель работы:

Составление алгоритмов и программ для решения задач с использованием массивов.

2.Краткая теория:

Массивы

Одним из основных направлений применения ЭВМ является накопление и обработка данных — различных таблиц, справочников, словарей и другой информации. Для представления такой информации в программе удобно использовать массивы. Как правило, обработка элементов массива осуществляется по одному и тому же закону, для чего удобно использовать циклические алгоритмы.

Пример 1: Пусть даны вещественные числа а12, …, а1000. Необходимо к каждому из этих чисел добавить число 2,

Если решать эту задачу с помощью простых переменных, то каждое из чисел надо обозначить собственным идентификатором и затем написать 1000 операторов присваивания типа bi = ai + 2; и т. д. Чтобы избежать этих трудностей, числа а12, …, а1000 могут быть организованы как одномерный массив с именем А.

Одномерный массив — это конечная последовательность данных (компонентов) одного типа, имеющих общее имя. Каждый отдельный компонент массива называется элементом. Количество элементов называется размером массива. Тип элементов определяет тип массива. Размер и тип массива указываются при его описании, причем размер может быть указан либо конкретным значением, либо ранее определенной константой. Например, упомянутый выше массив А на языке Паскаль может быть описан следующим образом:

VAR A : Array [1..1000] of Real;

или

CONST N=1000;

VAR A : Array [1..N] of real;

Номер элемента называется индексом. Индексы являются целыми положительными константами или целыми переменными. Чтобы обратиться к некоторому элементу массива, нужно рядом с идентификатором массива в скобках указать индекс элемента. Например, А [99] означает 99-й элемент массива А.

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

Program MASSIV;

{ Эта программа демонстрирует использование массивов }

VAR

i : Integer;

А, В : Array [1..1000] of Real;

BEGIN

Writeln(‘введите массив А');

For i:=l to 1000 do

Begin

Write(‘Введите ',1,'-элемент ->');

ReadLn (A [i]);

End;

WriteIn(‘ массив В: ‘);

For i:=l to 1000 do

Begin

B[i]:=A[i]+2;

Write (B[i]:6:3);

End;

END.

Данные могут быть организованы в виде таблицы (матрицы), где расположение каждой переменной определяется номером строки и номером столбца. Например, место в зрительном зале задается указанием номера ряда и номером места в этом ряду. Такие данные удобно описать как двумерный массив. В отличие от одномерного массива каждому элементу двумерного массива соответствует пара индексов. Первый индекс — это номер строки, а второй — номер столбца, где расположен элемент массива. .

Размер двумерного массива задается парой чисел: М х N, где М — число строк, а N — число столбцов в таблице.

Пусть задан двумерный массив MATR, имеющий размер 10 х 20. Этот массив на языке Паскаль может быть описан следующим образом:

VAR MATR : Array [1..10,1..20] of Integer,

тогда

MATR [5,7] — элемент, расположенный в 5-й строке и в 7-м столбце.

Любая константа, переменная, значение функции или выражения в Турбо-Паскале характеризуются своим типом. Тип любого из этих объектов определяет множество допустимых значений, которые может иметь объект, а также множество допустимых операций, которые применимы к объекту. Кроме того, тип определяет и формат внутреннего представления значения объекта.

Имя, которое программист присваивает своему определяемому типу, — произвольный идентификатор. Объявление типа должно быть сделано в разделе объявлений, и ему должно предшествовать кодовое слово TYPE.

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

TYPE

digit = ARRAY [0..9] OF integer;

matrix = ARRAY [1..100, 0..9] OF real;

VAR

m : matrix;

d : digit;

i : integer;

Описание типа массива задается следующим образом:

<имя типа> = ARRAY [<сп.инд.типов>] OF <тип>;

Здесь: .

  •  <имя типа> — правильный идентификатор;
  •  ARRAY, OF — служебные слова (англ.: массив, из);
  •  <сп.инд.типов> — список из одного или нескольких индексных типов, разделенных запятыми;
  •  <тип> — любой тип Турбо-Паскаля.

Обычно в качестве индексного типа используется тип-диапазон, в котором задаются границы изменения индексов через две точки (..). Так как <тип>, идущий за словом OF, — любой тип Турбо-Паскаля, он может быть, в частности, другим массивом.

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

Пример 2: Дана таблица целых чисел, содержащая 10 строк и 20 столбцов. Сосчитайте сумму всех чисел в таблице.

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

Program MASSIV;

{ Эта программа демонстрирует использование

двумерных массивов и вложенных циклов }

VAR

i,j : Integer; l

SUMMA: Integer;

A : Array [1..10, 1..20] of Integer:

BEGIN

SUMMA:= 0;

Writeln(‘ Введите массив А');

For I:=l to 10 do

For j:=l to 20 do

Begin

Write(‘A[‘,,’,’,j,’]=’);

Readln (A [i,j]);

SUMMA:= SUMMA+A[i,j];

End;

Writeln('Cyммa =’, SUMMA);

END.

Обратите внимание, что внутри цикла со счетчиком i организован цикл со счетчиком j. В результате суммируются в начале числа 1-й строки (i=l, при j=1, 2, ..., 20), затем суммируются числа 2-й строки (i=2, j= 1, 2, ..., 20) и т. д.

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

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

Процедура RANDOMIZE. 

Предназначена для инициализации датчика случайных чисел. Формат обраще

ния:

RANDOMIZE;

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

Функция RANDOM. 

Обеспечивает генерацию псевдослучайного числа. Формат обращения:

RANDOM(W); или RANDOM.

Здесь

W — переменная типа WORD.

Результат выполнения этой функции существенно зависит от варианта ее вызова (одним параметром или без параметров):

  •  RANDOM(W) возвращает псевдослучайное целое число х, равномерно распределенное в интервале 0  х < W;
  •  RANDOM возвращает псевдослучайное вещественное число х, равномерно распределенное в интервале 0  х < 1.

Для освоения этих средств модифицируйте вышеприведенные задачи 5.1—5.3, обеспечив формирование массивов случайным образом. Для контроля работы программы необходимо выдать значения элементов массива на экран.

3.задание

Разработать алгоритм и программу для решения задачи, использующей массивы.

Варианты заданий

  1.  Дана матрица [7х7] , состоящая из целочисленных элементов. Увеличить все элементы строки с номером k на число B. Числа k и В целого типа, вводятся с клавиатуры.
  2.  Вычислить среднее арифметическое k-го столбца матрицы (k - вводится с клавиатуры). Матрица размерности [5х5] состоит из вещественных элементов.
  3.  Даны две последовательности целых чисел а1, а2, … аn и b1,b1 …bn. Все члены последовательностей – различные числа. Найти, сколько членов первой последовательности совпадает с членами второй последовательности.
  4.  Найти в матрице 4х4, состоящей из вещественных элементов, наименьший элемент и его расположение в матрице.
  5.  Подсчитать количество четных и нечетных элементов матрицы 4х5 в каждом столбце и каждой строке.
  6.  Найти сумму ненулевых элементов, расположенных по главной диагонали матрицы вещественных чисел [6x6] и заменить элементы по главной диагонали на 1.
  7.  Посчитать среднее арифметическое матрицы (7х4) состоящей из вещественных элементов.
  8.  В квадратной матрице найти по главной диагонали максимальный по модулю элемент и строку с этим элементом возвести в квадрат.
  9.  В матрице [10х10] состоящей из целочисленных элементов, найти сумму положительных элементов, строки, номер которой введен с клавиатуры.

4.методические указания по выполнению

задания

4.1 Перед выполнением лабораторной работы обучающийся должен получить индивидуальное задание.

4.2 Изучить теоретический лекционный материал и ознакомиться с описанием лабораторной работы.

4.3 Изучить массивы, их виды, операции над массивами.

4.4 Проанализировать задание для выполнения лабораторной работы.

4.5 Выполнить постановку задачи

4.6 Выполнить формализацию задачи.

4.7 Составить алгоритм решения задачи в графической форме.

4.8 Составить программу решения задачи на языке Turbo Pascal.

4.9 С помощью системы программирования Turbo Pascal составить текст программы и выполнить ее.

4.10 Проверить правильность составления программы с помощью контрольного примера.

  1.  Оформить отчет по лабораторной работе.

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

  1.  Каков порядок выполнения цикла с параметром ?
  2.  Каков формат объявления типа массив ?
  3.  Каков формат объявления переменной типа массив ?
  4.  Как обратится к элементу массива ?
  5.   Какие виды массивов Вы знаете ?
  6.   Что такое генератор случайных чисел ?
  7.   Как можно задать значения элементов массива или другой числовой переменной ?
  8.  Какие операторы используются для работы с элементами массива ?
  9.   Что такое вложенные операторы цикла и для чего их используют?


Требования к оформлению отчета

Отчет по лабораторной работе должен оформляться согласно требований ГОСТ.

Отчет должен состоять из следующих частей:

- Титульный лист

  •  1. Цель работы
  •  2. Задание
  •  2.1. Постановка задачи
  •  2.2. Формализация задачи
  •  2.3. Блок-схема алгоритма
  •  2.4. Текст программы
  •  2.5. Контрольный пример
  •  2.6. Контрольный пример ( зарисовать экран с результатом)
  •  3. Выводы по работе

Используемая литература

  1.  Симонович С., Евсеев Г., Практическая информатика, учебное пособие, М.: АСТ-пресс,2000.
  2.  Фаронов, Turbo Pascal 7.0., М.: Инфра-М,1998.
  3.  Могилев А.В., Пак Н.И., Хеннер Е.К., Информатика, Учебное пособие для студ. пед. вузов, 2-е изд., М.:Изд. центр “Академия”, 2001 – 816с.
  4.  Немнюгин С.А., Turbo Paascal/ С.А. Немнюгин.- Спб.: Питер, 2003. – 492 с.: ил.
  5.  Немнюгин С.А., Turbo Paascal: практикум / С.А. Немнюгин.- Спб.: Питер, 2001. – 256 с.: ил.


Начало

Ввод Х1, У1, Х2, У2

DL= (|X2-X1|2  + |Y2-Y1|2)1/2

Вывод DL

Конец

Начало

Ввод Х1, У1, Х2, У2

DL= (|X2-X1|2  + |Y2-Y1|2)1/2

ывод DL

Конец

условие

оператор 1

оператор 2

да

нет

Нет



перем.=конст.1

перем.=конст.2

перем.=конст.N

Оператор 1

Оператор 2

Оператор N

Да

Нет



Да

Да

Нет



Оператор N+1

Нет



N=1

N=2

N=7

Да

Нет



Да

Да

Нет



“нет такого дня недели”

Началр

Ввод N

“Понедельник

“Вторник

“Воскресенье

Конец

Счетчик:= нач. зн.÷ кон. зн.

Оператор

Да

Оператор

Нет

Условие

Условие

Операторы

Нет

Да

  1.  

 

А также другие работы, которые могут Вас заинтересовать

28564. Система RSA. Использование алгоритма Евклида для расчета секретного ключа d 23.69 KB
  Подобный блок может быть интерпретирован как число из диапазона 0; 2i1;; для каждого такого числа назовем его mi вычисляется выражение ci=mie mod n 3.По теорема Эйлера если число n представимо в виде двух простых чисел p и q то для любого x имеет место равенство Xp1q1 mod n =1 Для дешифрования RSAсообщений воспользуемся этой формулой. Возведем обе ее части в степень y: Xyp1q1 mod n = 1 y=1 Теперь умножим обе ее части на x : xyp1q11 mod n =...
28565. Алгоритма цифровой подписи Эль Гамаля, преимущества по сравнению с методом RSA, недостатки 13.41 KB
  Алгоритма цифровой подписи Эль Гамаля преимущества по сравнению с методом RSA недостатки. В отличие от RSA метод ЭльГамаля основан на проблеме дискретного логарифма. По сравнению с методом RSA данный метод имеет целый ряд преимуществ: 1. Кроме того данный алгоритм подписи не допускает его использования в качестве алгоритма шифрования в отличии от RSA в котором шифрование и подпись суть одно и то же а следовательно не подпадает ни под какие экспортные ограничения из США.
28566. Проблема дискретного логарифмирования, аутентификация 86.42 KB
  Система строится из криптографических примитивов низкого уровня:групповой операции симметричного шифра функции хэширования и алгоритма вычисления кода аутентификации сообщенияимитовставки MAC. Код аутентификации сообщения позволяет пользователям обладающим общим секретным ключом выработать битовую строку для аутентификации и проверки целостности данных Пусть Msg = {01} – пространство сообщений mKey = {01}mLen – пространство ключей для вычисления MAC для некоторого mLen N Tag = {01}tLen – включающее множество всех возможных...
28567. Система открытого шифрования RSA, атаки на RSA 15.87 KB
  В настоящее время наиболее развитым методом криптографической защиты информации с известным ключом является RSA названный так по начальным буквам фамилий ее изобретателей Rivest Shamir и Adleman и представляющую собой криптосистему стойкость которой основана на сложности решения задачи разложения числа на простые сомножители. Чтобы использовать алгоритм RSA надо сначала сгенерировать открытый и секретный ключи выполнив следующие шаги: выберем два очень больших простых числа p и q; определим n как результат умножения p на q n = p Ч...
28568. Система электронной подписи Эль Гамаля (EGSA - ElGamal Signature Algorithm) 16.07 KB
  Затем выбирается секретное число х и вычисляется открытый ключ для проверки подписи y=gxmod p Далее для подписи сообщения М вычисляется его хэшфункция т = hM. Выбирается случайное целое k:1 k p1 взаимно простое с р–1 и вычисляется r=gkmod p. После этого с помощью расширенного алгоритма Евклида решается относительно s уравнение m=xrksmodp1. Получатель подписанного сообщения вычисляет хэшфункцию сообщения m=hM и проверяет выполнение равенства yrrs=gxrgks=gxrks=gmmod p.
28569. Система открытого шифрования Эль Гамаля 58 KB
  Для шифрования сообщения M проводится следующая процедура: Выбирается случайное число k kP1=1 Вычисляется G=AK mod P Вычисляется H=yK M mod P Пара G H является шифрованным сообщением M При расшифровании вычисляется: H GX mod P = yK M AXK mod P = M mod P Преимуществами системы ЭЦП и ОШ Эль Гамаля является простота генерации открытых и секретных ключей а так же то что параметры P и A могут быть общими для всех участников сети связи.
28570. Общая схема электронной подписи на основе дискретной экспоненты 14.29 KB
  Пусть DATA – пеpедаваемое Александpом Боpису сообщение. Александp подписывает DATA для Боpиса пpи пеpедаче: Eebnb{Edana{DATA}}. Боpис может читать это подписанное сообщение сначала пpи помощи закpытого ключа Eebnb Боpиса с целью получения Edana{DATA}= Edbnb{ Eebnb{ Edana {DATA}}} и затем откpытого ключа EeAnA Александpа для получения DATA= Eeana{ Edana {DATA}}. Таким обpазом у Боpиса появляется сообщение DATA посланное ему Александpом.
28571. Однонаправленные хеш-функции Понятие хеш-функции 13.67 KB
  Изменения в тексте сообщения приводят к изменению значения хешфункции. На бесключевые хешфункции накладываются определенные условия. однонаправленность устойчивость к коллизиям устойчивость к нахождению второго прообраза Применение ключевых хэшфункций Ключевые хешфункции применяются в случаях когда стороны имеют общий секретный ключ доверяют друг другу.
28572. Примеры хеш-функций 14.18 KB
  Расширение исходного сообщения Собственно хеширование . Расширение исходного битового сообщения M длины L происходит следующим образом. Алгоритм хеширования работает циклами за один цикл обрабатывается блок исходного сообщения длины 512 бит. Цикл состоит из четырех раундов каждый из которых вычисляет новые значения переменных A B C D на основании их предыдущего значения и значения 64битного отрезка хешируемого 512битного блока исходного сообщения.