Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ответы по информатике!).docx
Скачиваний:
61
Добавлен:
01.04.2025
Размер:
175.5 Кб
Скачать

37. Оператор выбора в языке Паскаль

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

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

case <селектор> of

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

...

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

else

<оператор>

end;

Здесь <селектор> – это выражение любого порядкового типа; <константа> - постоянная величина того же типа, что и селектор, представляет собой различные значения, которые может иметь селектор варианта, называется меткой варианта. После каждой метки располагается оператор. Когда одно и то же действие необходимо выполнить для нескольких различных значений селектора варианта, эти значения можно записать в виде списка.

Выполнение оператора выбора происходит так:

  • вычисляется выражение-селектор;

  • затем в списках констант ищется такое значение, которое совпадает с полученным значением селектора;

  • далее исполняется оператор, помеченный данной константой. Если такой константы не найдено, то происходит переход к выполнению оператора, следующего после else.

Изображение оператора варианта на блок-схеме приведено на рисунке.

Примеры использования

Селектор интервального типа:

case I of

1..10  : writeln('число ', I:4, ' в диапазоне 1 - 10');

11..20 : writeln('число ', I:4, ' в диапазоне 11 - 20');

21..30 : writeln('число ', I:4, ' в диапазоне 21 - 30')

else

writeln('число ', I:4, ' вне пределов контроля')

end;

Селектор целочисленного типа:

case I of

1 : Z := I + 10;

2 : Z := I + 100;

3 : Z := I + 1000

end;

 38.

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

В языке Turbo Pascal имеются три различных оператора, с помощью которых можно запрограммировать повторяющиеся фрагменты программы.

Счетный оператор цикла или оператор цикла с параметром

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

Этот оператор имеет следующую структуру:

For <пар_цик> : = <нач_знач> to <кон_знач> do <оператор>;

Здесь: For, to, do - зарезервированные слова;

           <пар_цик> - параметр цикла - переменная типа Integer (точнее любого порядкового типа);

           <нач_знач> - начальное значение - выражение того же типа;

           <кон_знач> - конечное значение - выражение того же типа;

           <оператор> - произвольный оператор Turbo Pascal.

При выполнении оператора For вначале вычисляется начальное значение и осуществляется его присваивание параметру цикла. Затем производится проверка условия <пар_цик> <= <кон_знач>, если условие имеет значение ИСТИНА, то выполняется оператор следующий за словом do, в противном случае оператор Forпрекращает свою работу.

Отметим два обстоятельства. Во-первых, условие, управляющее работой оператораFor, проверяется перед выполнением оператора <оператор>: если условие не выполняется в самом начале работы циклического оператора, исполняемый оператор не будет выполнен ни разу. Другое обстоятельство - шаг наращивания параметр строго постоянен и равен +1. Существует другая форма оператора:

For <пар_цик> : = <нач_знач> downto <кон_знач> do <оператор>;

Замена зарезервированного слова to на downto означает, что шаг наращивания параметра цикла равен -1.

В случае использования в цикле не одного, а нескольких операторов, то принято заключать эти группы операторов в логические скобки begin и end.

Пример 1.

Дана последовательность целых чисел, состоящая из 25 элементов. Вычислить сумму элементов последовательности.

.... ....

Program primer1;

Var i, a, s : integer;

Begin

  x := 0;

  For i := 1 to 25 do

    begin

      Read (a);

      x := x + a;

    end;

  Write ('Сумма элементов равна ', x);

End.

Пример 2.

Решим задание из примера 1 используя конструкцию оператора For, в которой шаг наращивания будет равен -1.

.... ....

Program primer2;

Var i, a, s : integer;

Begin

  x := 0;

  For i := 25 downto 1 do

    begin

      Read (a);

      x := x + a;

    end;

  Write ('Сумма элементов равна ', x);

End.

39. Оператор цикла с предусловием (начинающийся с ключевого сло-

ва while) содержит в себе выражение, которое управляет повторным

выполнением оператора (который может быть составным оператором).

┌─────┐ ┌─────────┐ ┌──┐ ┌────────┐

оператор ───>│while├──>│выражение├──>│do├──>│оператор├──>

while └─────┘ └─────────┘ └──┘ └────────┘

Выражение, с помощью которого осуществляется управление пов-

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

производится до того, как внутренний оператор будет выполнен.

Внутренний оператор выполнятся повторно до тех пор, пока выраже-

ние принимает значение Тruе. Если выражение с самого начала при-

нимает значение False, то оператор, содержащийся внутри оператора

цикла с предусловием, не выполняется.

Примерами операторов цикла с предусловием могут служить сле-

дующие операторы:

while Data[I] <> X do I := I + 1;

While I > 0 do

begin

if Odd(I) then Z := Z * X;

I := I div 2;

X := Sqr(X);

end;

while not Eof(InFile) do

begin

Readln(InFile,Line);

40. В операторе цикла с постусловием (начинающимся со слова

repeat) выражение, которое управляет повторным выполнением после-

довательности операторов содержится внутри оператора repeat.

┌──────┐ ┌────────┐ ┌─────┐ ┌─────────┐

оператор ─>│repeat├────>│оператор├──┬─>│until├──>│выражение├──>

repeat └──────┘ ^ └────────┘ │ └─────┘ └─────────┘

│ ┌───┐ │

└────┤ ; │<────┘

└───┘

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

заключенные между ключевыми словами repeat и until, выполняются

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

значение True. Последовательность операторов выполнится по край-

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

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

Приведем примеры оператора цикла с постусловием:

repeat

K := I mod J;

I := J;

J := K;

until J = 0;

repeat

Write('Введите значение (0..9):');

Readln(I);

until (I >= 0) and (I <= 9);

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

  • Компоненты массива называются переменными с индексами

  • Наименьший индекс называется нижней границей, наибольший индекс – верхней границей, а число элементов – размером массива

  • Количество индексов называют размерностью массива

Описываем массив в блоке описаний:

VAR <имя_массива>: array[n..k] of <тип_элементов>;

Типизированное описание массива:

TYPE <имя_типа>=array[n..k] of <тип_элементов>;

VAR <имя_массива>: <имя_типа>;

Примеры:

  • Var a: array[1..3] of integer; a[1] Var b: array[‘a’..’c’] of integer; b[‘a’] Var c: array[red,green,blue] of integer; c[red]

  • Var d: array[byte] of real;

  • Однако, размер массива в байтах не может превышать 65520!

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

Рассмотрим матрицу А размерностью 2*3, то есть в ней будет две строки, а в каждой строке по три элемента:

Каждый элемент имеет свой номер, как у одномерных массивов, но сейчас номер уже состоит из двух чисел - номера строки, в которой находится элемент, и номера столбца. Таким образом, номер элемента определяется пересечением строки и столбца. Например, a12 - это элемент, стоящий в первой строке и во втором столбце.

Существуют несколько способов объявления двумерного массива.

Способ 1. В Паскале двумерный массив можно описать как одномерный, элементами которого являются одномерные массивы. Например, для матрицы А, приведённой выше:

Const n = 2; m = 3; Type omyarray = Array[1..m] Of <тип элементов >; dmyarray = Array[1..n] Of omyarray; Var v : omyarray; a : dmyarray;

В данном случае переменная v объявлена как одномерный массив из трёх элементов вещественного типа. Переменная а описана как двумерный массив из двух строк, каждую из которых включено по три элемента.

Способ 2. Описание массива А можно сократить, исключив определение типа omyarray в определении типа dmyarray:

Const n = 2; m = 3; Type dmyarray = Array[1..n, 1..m] Of <тип элементов>; Var a : dmyarray.

Способ 3. Ещё более краткое описание массива А можно получить, указывая имя массива и диапазоны изменения индексов для каждой размерности массива:

Const n = 2; m = 3; Type dmyarray = Array[1..n, 1..m] Of <тип элементов >;

Var a : dmyarray.

Если указанный тип используется для определения одного массива в программе, то удобно объявление массива в разделе описания переменных:

Var a: Array [1..n, 1..m] Of < тип элементов >.

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

Пример 1

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

Program Example_45; Const n = 2; m = 15; Type dmyarray = Array[1..n., 1..m] Of Integer; Var A : dmyarray;

Procedure Init(Var x: dmyarray); {процедура формирования массива} Var i, j : Integer; Begin For i:=1 To n Do For j:=1 To m Do x[i,j]:=-25+Random(51); End;

Procedure Print(x: dmyarray); {процедура вывода массива на экран} Var i, j : Integer; Begin For i:=1 To n Do Begin {ввод i-ой строки массива} For j:=1 To n Do Write(x[i,j]:5); Writeln; {переход на начало следующей строки} End;

Begin{основная программа} Init(A); {вызов процедуры формирования массива} Writeln('Массив А:'); Print(A); {вызов процедуры вывода} Readln; End.

При решении задач с двумерными массивами можно выделить несколько видов задач.

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

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

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

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

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

При работе с подпрограммами важными являются понятия формальных и фактических параметровФормальные параметры — это идентификаторы входных данных для подпрограммы. Если формальные параметры получают конкретные значения, то они называютсяфактическими. Формальные параметры могут получить конкретные значения только в той программе, где производится обращение к данному модулю-подпрограмме. Тип и порядок записи фактических параметров должны быть такими же, как и формальных параметров. В противном случае результат работы программы будет непредсказуемым. Из этого следует, что фактические параметры используются при обращении к подпрограмме из основной, а формальные параметры — только в самом модуле.

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

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

1) каждая подпрограмма имеет свое имя и список формальных параметров;

2) процедура из основной программы вызывается командой вызова, которая по форме ничем не отличается от вызова команды исполнителя. Результат присваивается одной или нескольким переменным, которые находятся в списке формальных параметров. Но результатом могут быть, конечно, не только значения переменных, но какое либо действие, выполненное ЭВМ.

Пример 1. Используем алгоритм нахождения наибольшего общего делителя двух натуральных чисел в качестве вспомогательного при решении задачи: составить программу вычитания дробей (abcd — натуральные числа). Результат представить в виде обыкновенной несократимой дроби.

Подпрограмма.

1) Ввести натуральные числа M, N.

2) Если M=N, перейти к п. 5, иначе к следующему пункту.

3) Если M>N, то M:=M-N, иначе N:=N-M.

4) Перейти к п. 2.

5) Передать значение M в основную программу.

6) Конец подпрограммы.

Основная программа.

1) Ввести значения A, B, C, D.

2) E:=A*D - B*C.

3) F:= B*D.

4) Если E=0, вывести значение E и перейти к п. 9, иначе перейти к следующему пункту.

5) M:=|E|, N:=F, перейти к подпрограмме вычисления НОД.

6) G := M.

7) E и F нацело разделить на G.

8) Вывести значения E и F на печать.

9) Конец программы.

Program Sub;

Var A, B, C, D, G, E, F : Integer;

Procedure Nod(M, N : Integer; Var K : Integer);

Begin

While M <> N Do

If M > N Then M := M - N Else N := N - M;

K := M

End;

Begin

Write('Введите числители и знаменатели дробей:');

ReadLn(A, B, C, D);

E := A * D - B * C;

F := B * D;

If E = 0 Then WriteLn(E)

Else

Begin

Nod(Abs(E), F, G);

E := E Div G;

F := F Div G;

WriteLn('Ответ: ', E, '/', F)

End

End.

44. Процедуры в Паскале Структура процедуры аналогична структуре программы и состоит из заголовка и блока (тела процедуры).            PROCEDURE <имя>(<сп. форм. пар.>);                 <блок> где      PROCEDURE – зарезервированное слово процедура; <имя>             - имя процедуры, является уникальным, выбирается по общим пра- вилам, желательно чтобы оно отражало смысл процедуры; <сп. форм. пар.>   - список формальных параметров т.е. список имен обозначаю- щих  исходные данные и результат работы процедуры с указани- ем их типов;        <блок>            - тело процедуры представляющее разделы описаний и раздел операторов,  представляющий составной оператор (совокупность операторов,  заключенных в операторные скобки BEGIN END). Разделы описаний процедуры содержат те же разделы что и основная программа, в том числе описания подпрограмм низшего уровня (вложенных). Глобальные объекты – это объекты, описанные в разделах описаний основной программе. Областью их действия является программа и все, содержащиеся в ней подпрограммы. Локальные объекты – это объекты, описанные в разделах описаний подпрограммы. Областью их действия является подпрограмма и все содержащиеся в ней подпрограммы низшего уровня. Локальные описания отменяют глобальные. Оператор вызова процедуры активизирует процедуру. Он имеет вид: <имя>(<сп. факт. пар.>); где:       <имя> - имя процедуры;       <сп. факт. пар.> - список фактических параметров. Это список конкретных значений, имен и выражений подставляемых вместо формальных параметров и передаваемых в подпрограмму, а так же возвращаемые  результаты обработки. Список фактических параметров может отсутствовать. Между формальными и фактическими параметрами существует взаимно  - однозначное соответствие по количеству, порядку следования и типу.

Источник: http://life-prog.ru/view_algoritmleng.php?id=103

45. Функции в Паскале Структура описания и механизм использования функции аналогичен  процедуре с учетом некоторых особенностей. Описание состоит из заголовка и блока (тела функции).            FUNCTION <имя>(<сп. форм. пар.>):<тип>;                 <блок>; где:  FUNCTION  – зарезервированное слово функция; <имя> - имя функции, является уникальным, выбирается по общим                                правилам, желательно чтобы оно отражало смысл   функции;     <сп. форм. пар.>  - список формальных параметров т.е. список имен обозначающих исходные данные функции с указанием их типов;     <тип> -  тип результата возвращаемого функцией и присваиваемого имени функции;    <блок> - тело процедуры представляющее разделы описаний и раздел операторов, представляющий составной оператор  (совокупность операторов,  заключенных в операторные  скобки BEGIN END).      Разделы описаний функции содержат те же разделы что и основная программа, в том числе описания подпрограмм низшего уровня (вложенных). В содержательной части функции ее имени должен быть присвоен результат работы функции. Вызов функции представляет собой операнд (указатель функции) в отличии от процедуры обращение к которой представляет оператор. Он имеет вид: <имя>(<сп. факт. пар.>); где:      <имя> - имя функции (указатель);      <сп. факт. пар.> - список фактических параметров. Это список конкретных значений, имен и выражений подставляемых вместо формальных параметров и передаваемых в функцию.   Отличие процедуры от функции Функция в отличие от процедуры возвращает единственное скалярное значение Результат вычисления функции присваивается имени, а процедуре входит в список параметров. Имя функции имеет тип. Обращение к функции представляет операнд, а процедуры оператор.     

46. Криптогра́фия (от др.-греч. κρυπτός — скрытый и γράφω — пишу) — наука о методах обеспечения конфиденциальности (невозможности прочтения информации посторонним) и аутентичности (целостности и подлинности авторства, а также невозможности отказа от авторства) информации.

Изначально криптография изучала методы шифрования информации — обратимого преобразования открытого (исходного) текста на основе секретного алгоритма и/или ключа в шифрованный текст (шифротекст). Традиционная криптография образует раздел симметричных криптосистем, в которых зашифрование и расшифрование проводится с использованием одного и того же секретного ключа. Помимо этого раздела современная криптография включает в себя асимметричные криптосистемы, системы электронной цифровой подписи (ЭЦП), хеш-функцииуправление ключамиполучение скрытой информацииквантовую криптографию.

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

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

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

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

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