Программирование алгоритмов со структурой ветвления 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Программирование алгоритмов со структурой ветвления



Алгоритмическая структура ветвления программируется в  PascalABC с помощью условного оператора

If <условие> Then <оператор 1> Else   <оператор 2>; (полная форма)

Кроме того, возможно использование неполной формы услов­ного оператора:

If  <условие> Then <оператор>; (неполная форма)

Если значение условия истина, то будет выполняться <оператор 1> (после Then), если ложно, то <оператор 2> (после Else) для полной формы или сразу следующий оператор после условного для неполной формы (без Else).

 

Программирование циклов

Оператор REPEAT (постусловие)

Оператор повтора repeat состоит из заголовка (repeat), тела и условия окон­чания (until). Ключевые слова repeat, until обозначают "повторяй" и "по­ка" соответственно.

Repeat

{ Инструкции }

until Условие выхода из цикла;

Вначале выполняется тело цикла — инструкции, которые находятся между repeat И until, затем проверяется значение Условия выхода из цикла. В ТОМ случае, если оно равно false (ложь), т. е. не выполняется — инструкции цикла повторяются еще раз. Так продолжается до тех пор, пока условие не станет true (истина).

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

var х: integer;

begin

...

repeat

write('Введите двузначное число ');

readln(x);

until (x>9)and{x<100);

end.

Оператор WHILE (предусловие)

Оператор повтора while состоит из заголовка и тела цикла. Ключевые слова while и do обозначают "до тех пор, пока" и "выполняй" соответственно.

while Условие выполнения цикла do

Begin

{ Инструкции }

end;

Оператор while аналогичен оператору repeat, НО Проверка Условие выполне­ния цикла производится в самом начале оператора — если значение условия равно true (истина), то выполняются инструкции цикла, находящиеся между begin И end И снова вычисляется выражение Условие выполнения цикла. Так продолжается до тех пор, пока значение Условие выполнения цикла не станет равно false (ложь).

Например, рассмотрим фрагмент программы суммирования чисел от 1 до 10. В данном примере использование всех видов цикла равноценно:

s:= 0; i:= l;

while i<=10 do 

begin

s:=s+i;

i:=i+l;   

end;

Оператор FOR (цикл с параметром или счетчик)

Этот вид оператора цикла называют циклом со счетчиком или циклом с па­ раметром. В нем важную роль играет переменная-параметр, которая на каж­дом шаге цикла автоматически изменяет свое значение ровно на единицу — поэтому ее и называют счетчиком.

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

Вариант 1 (с увеличением счетчика).

for Счетчик:= НачальноеЗначение to КонечноеЗначение do

begin

{ Инструкции }

end;

Ключевые слова for, do обозначают "для", "выполняй" соответственно. Стро­ка, содержащая for...do, называется заголовком цикла, оператор, стоящий  после do образует его тело. Очень часто тело цикла — составной оператор. Если тело цикла представлено одиночным оператором, то begin и end не пишутся.

Вариант 2 (с уменьшением счетчика).

for Счетчик:= НачальноеЗначение downto КонечноеЗначение do

begin

{ Инструкции }                                                                                      

end;                                                                                        

Инструкции между begin и end выполняются столько раз, сколько опреде­ляет выражение [(НачальноеЗначение – КонечноеЗначение) +1].

Если    НачальноеЗначение меньше, чем КонечноеЗначение, то инструкции между begin и end не выполняются ни разу.

Например, рассмотрим фрагмент программы вывода на экран первых 10 чисел

var

i:integer;

Begin

For i:=1 to 2 do

Writeln (I:3);

Readln

End.

 

 

Пример решения задачи

Задача: Если стаж работы сотрудника менее 5 лет, то зарплата 1300 рублей, при стаже от 5 до 15 лет – 1800 рублей, при стаже выше 15 лет зарплата повышается с каждым годом на 100 рублей. Построить алгоритм и написать программу, которая вычислит и выводит на экран з/плату каждого из трех сотрудников.

1. Математическое обоснование:

ST – стаж работы

ZP – зарплата

Если ST<5, то ZP =1300

Если 5<=ST<=15, то ZP =1800

Если ST>15, то ZP =1800+(ST-15)*100

I счетчик, конечное значение счетчика =3

Вид алгоритма: ветвления с циклом

 

 


2. построение блок-схемы:

 

 

3 исполнение алгоритма:

 

I ST ZP
1 4 1300
2 10 1800
3 20 2300

 

 

4. программирование

Program ZARP;

VAR

I: integer; {объявление переменной счетчика, целого типа }

ST, ZP: real; {объявление переменных стаж работы зарплата, вещественного типа }

Begin

For i:=1 to 3 do {начало работы счетчика }

Begin

Writeln (‘ введите ST’);

Readln (ST); {ввод данных стаж работы }

IF (ST <5) THEN ZP:=1300 {проверка условия }

ELSE

IF ST >15 THEN

ZP:=1800+(ST -15)*100 {проверка условия }

ELSE ZP:=1800;

Writeln (‘ ZP =’, ZP:6:2); {вывод на экран переменной зарплата }

End;

Readln

End.

5. Запуск на выполнение

Меню>run>run

 

6. Результат работы

Введите ST 4 ST=1300.00 Введите ST 10 ST=1800.00 Введите ST 20 ST=2300.00    

 

Массивы

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

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

Элементы массива пронумерованы, и обратиться к каждому из них можно по номеру (или нескольким номерам — например, для элемента таблицы зада­ется номер строки и столбца). Номера элементов массива иначе называются индексами, а сами элементы массива — переменными с индексами (индексиро­ ванными переменными).

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

Характеристики массива:

· тип — общий тип всех элементов массива;

· размерность (ранг) — количество индексов массива;

· диапазон изменения индекса (индексов) — определяет количество эле­ментов в массиве.

Вектор (одномерный массив) — это пример массива, в котором элементы ну­меруются одним индексом.

Если в массиве хранится таблица значений (матрица), то такой массив называется двумерным, его элементы нумеруются двумя индексами — номером строки и столбца соответственно.

В качестве номера (индекса) элемента массива, в общем случае, используется выражение порядкового типа. Наиболее часто индекс — это целая константа переменная типа integer, реже — типа char ИЛИ boolean. обращении к элементу массива индекс указывается в квадратных скобках после имени массива. Например, а[3], b[1,2]. Однако использование элементов массива в качестве обычных переменных не дает существенной выгоды. Массивы ценны тем, что их индексы сами могут быть переменны-I или выражениями, обеспечивая доступ не к одному, а к последовательно- mm элементов. Обработка массивов производится при изменении индексов элементов.

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

· a[i] — всех элементов;

· a[2*i] — элементов, стоящих на четных местах;

· a[2*i-1] — элементов, стоящих на нечетных местах.

 

Предварительное описание типа массива

· Описание одномерного массива:

Type

ИмяТипа = array [ НижняяГраница.. ВерхняяГраница ] of Тип Элементов;

Var

ИмяМассива: ИмяТипа;

 

· Описание двумерного массива:

Type

ИмяТипа = array [ НижняяГраницаИндекс1.. ВерхняяГраницаИндекс1,

                            НижняяГраницаИндекс2.. ВерхняяГраницаИндекс2]

of ТипЭлементов;

Var

ИмяМассива: ИмяТипа;

 

Например, объявим массив matrix типа matr — двумерный вещественный Массив с maxrow строк И maxcol столбцов:

const

maxrow=10; maxcol=15;

Type

matr = array [1..maxrow, 1..maxcol] of real; matrix: matr;

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

Заполнение массива данными

Значения элементов массива также можно задать следующими способами:

· при вводе данных с клавиатуры;

· При помощью датчика случайных чисел;

· присваиванием заданных значений;

· считывая значения элементов из файла

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

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

· вектора из 5 элементов:

for i:=l to 5 do readln(a[i]);

· матрицы размером 3x2 (всего потребуется ввести 6 чисел):

for i:=l to 3 do

for j:=l to 2 do

readln (a[i,j]);

Вывод массива

Вывод значений элементов массива также выполняется в цикле for с ис­пользованием операторов write и writeln.

Например, вывод вектора из 5 элементов:

· в столбец:

for i:=l to 5 do writeln(a[i]); □ в одну строку,

· через пробел-разделитель:

for i:=l to 5 do write(a[i],' ');

· или с заданием формата, где под каждый элемент отводится 4 позиции:

for i:=l to 5 do write(a[i]:4);

Вывод матриц в стандартной форме записи — по строкам и столбцам — выполняется при помощи оператора writeln; (без параметра). Он использует­ся после вывода текущей строки матрицы для перевода курсора в начало следующей строки экрана:

for i:=l to n do begin

for j:=1 to n do

write (a[i,j]:4); writeln; end;

Замечание

Задание формата вывода помогает расположить матрицу на экране ровными столбцами.

Обработка массива

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



Поделиться:


Последнее изменение этой страницы: 2021-06-14; просмотров: 45; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.191.46.36 (0.029 с.)