Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Изменение значения некоторых элементов



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

Циклические программы

 

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

1.1.;

 

ПОРЯДОК ПРОВЕДЕНИЯ РАБОТЫ

2.1. Изучить теоретический материал

2.2. Проделать практическое задание

ТЕОРЕТИЧЕСКАЯ ЧАСТЬ

 

Цикл представляет собой последовательность операторов, которая выполняется неоднократно.

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

 

Цикл с постусловием

 

Иногда при решении задач возникает необходимость выполнить тело цикла хотя бы один раз, а потом исследовать условие повторять ли его еще раз. Эту задачу выполнит цикл с постусловием Repeat.

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

repeat повторяй

операторы операторы

until < условие>; до тех пор, пока условие не будет верным

 

Для выполнения в цикле repeat нескольких операторов не следует помещать эти операторы в операторные скобки begin... end. Зарезервированные слова repeat и until действуют как операторные скобки.

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

Условие выхода из цикла — это выражение логического типа: простое выражение отношения или сложное логическое выражение;

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

 
 

Рис. 7 Условное обозначение на схемах алгоритмов оператора repeat

 

Например,

a) repeat read (Number); Sum: = Sum+Number; until Number=-1 b) repeat i: = i+1; writeln (Sqr(i)) until Number=-1

 

Цикл с предусловием

 

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

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

Begin

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

end;

Условие выполнения циклаэто выражение логического типа.

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

 
 

Рис. 8 Условное обозначение на схемах алгоритмов оператора while

 

Взаимосвязь операторов while и repeat: оператор while Условие do Инструкция; эквивалентен оператору if Условие then repeat Инструкция until Not Условие;

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

...

s: = 0; i: = 1;

while i< =10 do { находим сумму чисел от 1 до 10 }

begin

s: =s+i;

i: =i+1; { изменение переменной управления циклом }

end;

Цикл с параметром

 

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

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

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

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

Begin

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

end;

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

На блок-схеме алгоритма цикл с параметром удобно обозначать следующим образом (рис. 9). Такое обозначение, правда, не совсем соответствует ГОСТу.

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

 

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

Это соответствует всем значениям счетчика от начального до конечного включительно.

Например, выполнение цикла — фрагмента программы:

for i: =10 to 14 do write(i: 3);

выведет на экран последовательность цифр в виде:

10 11 12 13 14

 

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

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

Begin

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

end;

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

Например, выполнение цикла — фрагмента программы:

for i: =14 downto 10 do write(i: 3);

выведет на экран последовательность цифр в виде:

14 13 12 11 10

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

Параметр цикла for может изменяться (увеличиваться или уменьшаться) каждый раз при выполнении тела цикла только на единицу.Если нужен другой шаг изменения параметра, предпочтительнее циклы repeat и while.

Например, рассмотрим фрагмент программы, в котором предпринята попытка " обмануть" оператор for и получить изменение параметра i на 2 на каждом шаге цикла (единица прибавляется автоматически и еще одна единица прибавляется в теле цикла).

for i: = 1 to 10 do

begin

write(i: 4); i: = i + 1;

end;

В данном случае на экране будут выведены числа 1 3 5 7 9.

Однако настоятельно не рекомендуем пользоваться таким приемом. Стоит только немного видоизменить заголовок цикла предыдущего примера и взять в качестве конечного значения 9, а не 10: for i: = 1 to 9 do, как ваша программа не сможет нормально выйти из цикла — " зациклится", так как в момент проверки условия выхода из цикла i никогда не будет равно 9 (сначала 8, а потом сразу 10).

Пример

 

Составить блок-схему алгоритма и программу для вычисления и вывода на экран таблицы значений функции , где аргумент Х изменяется от начального значения (например, 1) до конечного (например, 2) с заданным шагом (например, 0, 05). Параметры А и В задаются оператором ввода.

Здесь переменная xmin используется для обозначения начального значения аргумента Х, xmax - для обозначения конечного значения аргумента Х, dx - для обозначения шага, А и В - для обозначения параметров, необходимых для вычислений, X и Y - для обозначения текущего значения аргумента и текущего значения функции. Эта задача может быть решена тремя способами.

Вариант 1: Цикла с постусловием (REPEAT-UNTIL) (Рис. 10)

 

Рис.10. Блок-схема для цикла с постусловием.

 

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

program prim_1;

{программа вычислений и вывода на экран таблицы значений функции с использованием оператора REPEAT-UNTIL}

var a, b: real;

xmin, xmax, dx: real;

x, y: real;

begin

write('A='); readln(a);

write('B='); readln(b);

write('начальное значение='); readln(xmin);

write('конечное значение='); readln(xmax);

write('шаг='); readln(dx);

writeln('|___|___|');

writeln('| X | Y |');

writeln('|___|___|');

x: =xmin;

repeat

y: =A*sin(B*x)/x;

writeln('|', x: 6: 2, '|', y: 7: 2, '|');

x: =x+dx;

until x > xmax+dx/2;

writeln('|___|___|');

end.

 

Вариант 2: Цикла с предусловием (WHILE-DO) (Рис.11)

 

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

program prim_2;

{программа вычислений и вывода на экран таблицы значений функции с использованием оператора WHILE-DO}

var a, b: real;

xmin, xmax, dx: real;

x, y: real;

begin

write('A='); readln(a);

write('B='); readln(b);

write('начальное значение='); readln(xmin);

write('конечное значение='); readln(xmax);

write('шаг='); readln(dx);

writeln('|___|___|');

writeln('| X | Y |');

writeln('|___|___|');

x: =xmin;

while x < xmax+dx/2 do

begin

y: =A*sin(B*x)/x;

writeln('|', x: 6: 2, '|', y: 7: 2, '|');

x: =x+dx;

end;

writeln('|___|___|');

end.

 

 

Рис.11 Блок-схема для цикла с предусловием.

 

Вариант 3: Цикла с параметром (FOR-DO) (Рис.12)

 

Рис.12. Блок-схема для цикла с параметром.

 

program prim_4;

{программа вычислений и вывода на экран таблицы значений функции с использованием оператора FOR-DO}

var a, b: real;

xmin, xmax, dx: real;

x, y: real;

i, n: integer;

begin

write('A='); readln(a);

write('B='); readln(b);

write('начальное значение='); readln(xmin);

write('конечное значение='); readln(xmax);

write('шаг='); readln(dx);

writeln('|___|___|');

writeln('| X | Y |');

writeln('|___|___|');

n: =trunc((xmax-xmin)/dx)+1;

x: =xmin;

for i: =1 to n do

begin

y: =A*sin(B*x)/x;

writeln('|', x: 6: 2, '|', y: 7: 2, '|');

x: =x+dx;

end;

writeln('|___|___|');

end.

 

Одномерные массивы

 

Задача. Дан массив а, состоящий из 10 элементов. Составить программу поиска максимального элемента массива.

Используем идею предыдущей задачи. Перед началом поиска выберем условно в качестве максимального первый элемент массива Max: =a[1]. Затем по очереди каждый элемент массива сравним со значением переменной m. Если он окажется больше, то изменим значение Max. После анализа всех элементов массива переменная Max содержит значение максимального элемента массива.

 

...

Max: =a[1];

for i: = 2 to 10 do

if Max< a[i]

then

Max: = a[i];

...

 

Задача. Дан массив а, состоящий из 10 элементов. Составить программу поиска элементов массива.

 

program sorting;

const

n=20; {}

Type

Tarray=array[1..n] of integer;

var i, buf, j: integer;

a: Tarray;

begin

writeln('сортировка по возрастанию');

writeln('заполнение массива');

for i: =1 to n do begin

a [i]: =random(100);

write(a[i]: 3, ' ' );

end;

for i: =2 to n do

for j: =n downto 1 do

if a[j-1]> a[j] then

begin buf: =a[j-1];

a[j-1]: =a[j];

a[j]: =buf;

end;

writeln('сортированный массив');

for j: =1 to n do

write(a[j]: 3, ' ' );

 

readln;

end.

 

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

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

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

3. Также пригодится процедура, которая берет элемент с индексом i, перемещает его на место элемента с номером j. А все элементы, которые имеют индексы от j до i-1 сдвигает на одну позицию вправо.

 

Доступ к элементам массива.

 

Рассмотрите предложенные ниже фрагменты программ для решения некоторых типичных задач.

Перестановка двух элементов

Задача. Поменять местами два элемента массива с номерами k1 и k2. Эту задачу можно решить следующим образом:

Var

m: MyArray;

n, k1, k2, x: integer;

Begin

x: =m[k1];

m[k1]: = m[k2];

m[k2]: = x;

End;

Перестановка части массива

Задача. Дан одномерный массив А, состоящий из 2n элементов. Поменять местами первую и вторую его половины

Заметим лишь, что необходимо поменять местами элементы с номерами 1 и n+1, 2 и n+2 и т.д., последняя пара - n и 2n, а значит, обмен происходит по правилу: элемент с номером i меняется местами с элементом с номером n+i.

Двумерные массивы

 

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

Каждый элемент такого массива имеет два индекса:

Первый индекс – это номер строки;

Второй индекс – номер столбца.

 

A[1, 1] A[1, 2] A[1, 3] A[1, 4] A[1, 5]
A[2, 1] A[2, 2] A[2, 3] A[2, 4] A[2, 5]
A[3, 1] A[3, 2] A[3, 3] A[3, 4] A[3, 5]
A[4, 1] A[4, 2] A[4, 3] A[4, 4] A[4, 5]

 

Создание двумерного массива

 

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

Для формирования массива используется два вложенных цикла. Первый цикл перебирает строки, а второй – столбцы.

 

Вариант 1 For i: =1 to n do for j: =1 to m do readln (a[i, j]); Вариант 2 For i: =1 to n do for j: =1 to m do a[i, j]: =random(100); Вариант 3 For i: =1 to n do for j: =1 to m do a[i, j]: =i*j;

 

Практическая часть

 

Задание 1: Составить блок-схему алгоритма и программу с использованием цикла с предусловием или постусловием для вычисления и вывода на экран таблицы значений функции. Вывод выполнить в два столбика: первый столбик - значения аргумента, второй - значения функции. При разработке программы следует учитывать область определения функции и в случае необходимости организовать печать сообщения - “функция не определена”.

Таблица 1

Задание 3

 

  1. Дан одномерный массив. Найдите разность наибольшего и наименьшего чисел в этом массиве.
  2. Даны два одномерных массива А и В. Подсчитайте количество тех i, для которых:

а) А[i] < B[i];

б) A[i] = B[i];

в) A[i] > B[i].

  1. Составьте программу определения количества элементов массива, больших среднего арифметического всех его элементов.
  2. Дан одномерный массив. Подсчитайте, сколько раз встречается в этой таблице максимальное по величине число.
  3. Дан одномерный целочисленный массив. Составьте программу определения значения наибольшего элемента этого массива.
  4. Дан одномерный целочисленный массив. Составьте программу определения индекса(-ов) минимального элемента массива.
  5. Составьте программу, проверяющую упорядочены ли элементы одномерного массива по возрастанию.
  6. Дан одномерный массив чисел. Определите сумму его элементов.
  7. Дан одномерный массив чисел. Измените знаки всех его элементов на противоположные.
  8. Дан одномерный массив чисел. Подсчитайте, сколько раз в нем встречается число 1.
  9. Дан одномерный массив чисел. Подсчитать в нем количество элементов равных нулю, отрицательных элементов и положительных элементов.
  10. В массиве А (m, n) найдите количество всех чисел, по модулю меньших заданного Т.

 

Задание 4

 

  1. Удалить первый отрицательный элемент, если таковой имеется.
  2. Удалить все отрицательные элементы.
  3. Удалить все элементы, больше данного числа А (А вводить с клавиатуры).
  4. Удалить все четные элементы, стоящие на нечетных местах.
  5. Удалить все повторяющиеся элементы, оставив только их первые вхождения, то есть получить массив различных элементов.
  6. Удалить последний четный элемент.
  7. Удалить все элементы, меньше данного числа А (А вводить с клавиатуры).
  8. Удалить все элементы, кратные 3.
  9. Удалить все элементы, начиная с k1-го по k2-ой. Сделать проверку корректности ввода значений k1 и k2, если ввод некорректный, то вывести сообщение об ошибке и закончить работу.
  10. Удалить все положительные элементы.

 

Задание 5

 

  1. Вставить элемент после первого отрицательного элемента.
  2. Вставить элемент перед отрицательным последним элементом.
  3. Вставить два элемента: первый - после максимального элемента, второй - перед максимальным элементом.
  4. Вставить по одному элементу перед всеми элементами, кратными заданному числу.
  5. Вставить по одному элементу перед всеми отрицательными элементами.
  6. Вставить два элемента: первый - после всех элементов, больших данного числа Р, а второй - перед всеми элементами, большими данного числа Р (Р вводить с клавиатуры).
  7. Вставить число А перед всеми элементами, большими А, а число В - после всех элементов, меньших его.

 

Задание 6

 

  1. Дан одномерный массив чисел а. Cформируйте такой массив b, который содержит копию положительных элементов массива а.
  2. Скопируйте отрицательные и положительные кратные заданному числу элементы массива А в массив В в обратном порядке.
  3. Из двух упорядоченных одномерных массивов (длины K и N) сформируйте одномерный массив размером K+N, упорядоченный так же, как исходные массивы.
  4. Из двух упорядоченных одномерных массивов (длины K и N) сформируйте одномерный массив размером K+N, упорядоченный в обратную сторону.
  5. Дан упорядоченный целочисленный массив. Сформировать второй массив всех таких различных значений, которые в первом массиве встречаются по два и более раза.
  6. Дан упорядоченный целочисленный массив. Сформировать второй массив всех таких различных чисел, которые ни разу в первом массиве не встречаются и имеют величину больше минимального и меньше максимального из чисел первого массива.
  7. Сформировать массив:

Y[1]=A[1]+A[n]

Y[2]= A[2]+A[n-1]

Y[3]= A[3]+A[n-2]

и т.д. (n - четное)

  1. Даны два одномерных массива А и В. Подсчитайте количество тех i, для которых:

а) А[i] < B[i]

б) A[i] = B[i];

в) A[i] > B[i]

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

 

Задание 7: Составить программу для выполнения заданных действий над двумерным массивом вещественных чисел A(N, M). В программе предусмотреть ввод значений его элементов, вывод исходной и, при необходимости, преобразованной матриц.

1. Вычислить и запомнить сумму и число положительных элементов каждого столбца матрицы. Результаты отпечатать в виде двух строк.

2. Вычислить и запомнить сумму и число отрицательных элементов каждой строки матрицы. Результаты отпечатать в виде двух столбцов.

3. Вычислить сумму и число элементов матрицы, находящихся под главной диагональю и на ней.

4. Вычислить сумму и число элементов матрицы, находящихся над главной диагональю и на ней.

5. Записать на место отрицательных элементов матрицы нули, а на место положительных элементов матрицы — единицы.

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

7. Найти наибольший и наименьший элементы матрицы и поменять их местами

8. Найти строку с наибольшей и наименьшей суммой элементов. Вывести на печать найденные строки и суммы их элементов.

9. Найти столбец с наибольшей и наименьшей суммой элементов. Вывести на печать найденные столбцы и суммы их элементов.

10. Каждый элемент строки разделить на предварительно рассчитанную сумму элементов этой строки.

11. Удалить последнюю строку матрицы и вывести ее на печать.

12. Удалить последний столбец матрицы и вывести ее на печать.

13. Найти максимальный элемент на главной диагонали матрицы.

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

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

 

Задание 8:

1.Найти сумму всех четных элементов двумерного массива.

2.Найти сумму всех элементов двумерного массива, расположенных на главной диагонали.

3.Найти номер строки и столбца максимального элемента.

4.Имеется двумерный массив целых чисел. Найти номер строки, для которой среднеарифметическое значение ее элементов максимально.

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

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

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

8.Найти все неповторяющиеся элементы двумерного массива целых чисел.

9.Заполнить двумерный массив целыми числами от 1 до 100 по спирали.

10.В двумерном массиве целых чисел заменить все элементы, меньшие суммы элементов первой строки на эту сумму.

11.Отсортировать строки массива целых чисел по убыванию.

12.Отсортировать нечетные столбцы массива по возрастанию.

13. Ввести вещественную матрицу размерности n * m построчно, а вывести по столбцам.

14. Выяснить сколько положительных элементов содержит матрица размерности n * m, если aij = sin(i+j/2).

15. Дана квадратная вещественная матрица размерности n. Является ли матрица симметричной относительно главной диагонали.

 

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

Циклические программы

 

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

1.1.;

 

ПОРЯДОК ПРОВЕДЕНИЯ РАБОТЫ

2.1. Изучить теоретический материал

2.2. Проделать практическое задание

ТЕОРЕТИЧЕСКАЯ ЧАСТЬ

 

Цикл представляет собой последовательность операторов, которая выполняется неоднократно.

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

 

Цикл с постусловием

 

Иногда при решении задач возникает необходимость выполнить тело цикла хотя бы один раз, а потом исследовать условие повторять ли его еще раз. Эту задачу выполнит цикл с постусловием Repeat.

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

repeat повторяй

операторы операторы

until < условие>; до тех пор, пока условие не будет верным

 

Для выполнения в цикле repeat нескольких операторов не следует помещать эти операторы в операторные скобки begin... end. Зарезервированные слова repeat и until действуют как операторные скобки.

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

Условие выхода из цикла — это выражение логического типа: простое выражение отношения или сложное логическое выражение;

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

 
 

Рис. 7 Условное обозначение на схемах алгоритмов оператора repeat

 

Например,

a) repeat read (Number); Sum: = Sum+Number; until Number=-1 b) repeat i: = i+1; writeln (Sqr(i)) until Number=-1

 

Цикл с предусловием

 

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

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

Begin

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

end;

Условие выполнения циклаэто выражение логического типа.

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

 
 

Рис. 8 Условное обозначение на схемах алгоритмов оператора while

 

Взаимосвязь операторов while и repeat: оператор while Условие do Инструкция; эквивалентен оператору if Условие then repeat Инструкция until Not Условие;

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

...

s: = 0; i: = 1;

while i< =10 do { находим сумму чисел от 1 до 10 }

begin

s: =s+i;

i: =i+1; { изменение переменной управления циклом }

end;

Цикл с параметром

 

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

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

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

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

Begin

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

end;

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

На блок-схеме алгоритма цикл с параметром удобно обозначать следующим образом (рис. 9). Такое обозначение, правда, не совсем соответствует ГОСТу.

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

 

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

Это соответствует всем значениям счетчика от начального до конечного включительно.

Например, выполнение цикла — фрагмента программы:

for i: =10 to 14 do write(i: 3);

выведет на экран последовательность цифр в виде:

10 11 12 13 14

 

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

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

Begin

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

end;

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

Например, выполнение цикла — фрагмента программы:

for i: =14 downto 10 do write(i: 3);

выведет на экран последовательность цифр в виде:

14 13 12 11 10

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

Параметр цикла for может изменяться (увеличиваться или уменьшаться) каждый раз при выполнении тела цикла только на единицу.Если нужен другой шаг изменения параметра, предпочтительнее циклы repeat и while.

Например, рассмотрим фрагмент программы, в котором предпринята попытка " обмануть" оператор for и получить изменение параметра i на 2 на каждом шаге цикла (единица прибавляется автоматически и еще одна единица прибавляется в теле цикла).

for i: = 1 to 10 do

begin

write(i: 4); i: = i + 1;

end;

В данном случае на экране будут выведены числа 1 3 5 7 9.

Однако настоятельно не рекомендуем пользоваться таким приемом. Стоит только немного видоизменить заголовок цикла предыдущего примера и взять в качестве конечного значения 9, а не 10: for i: = 1 to 9 do, как ваша программа не сможет нормально выйти из цикла — " зациклится", так как в момент проверки условия выхода из цикла i никогда не будет равно 9 (сначала 8, а потом сразу 10).

Пример

 

Составить блок-схему алгоритма и программу для вычисления и вывода на экран таблицы значений функции , где аргумент Х изменяется от начального значения (например, 1) до конечного (например, 2) с заданным шагом (например, 0, 05). Параметры А и В задаются оператором ввода.

Здесь переменная xmin используется для обозначения начального значения аргумента Х, xmax - для обозначения конечного значения аргумента Х, dx - для обозначения шага, А и В - для обозначения параметров, необходимых для вычислений, X и Y - для обозначения текущего значения аргумента и текущего значения функции. Эта задача может быть решена тремя способами.

Вариант 1: Цикла с постусловием (REPEAT-UNTIL) (Рис. 10)

 

Рис.10. Блок-схема для цикла с постусловием.

 

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

program prim_1;

{программа вычислений и вывода на экран таблицы значений функции с использованием оператора REPEAT-UNTIL}

var a, b: real;

xmin, xmax, dx: real;

x, y: real;

begin

write('A='); readln(a);

write('B='); readln(b);

write('начальное значение='); readln(xmin);

write('конечное значение='); readln(xmax);

write('шаг='); readln(dx);

writeln('|___|___|');

writeln('| X | Y |');

writeln('|___|___|');

x: =xmin;

repeat

y: =A*sin(B*x)/x;

writeln('|', x: 6: 2, '|', y: 7: 2, '|');

x: =x+dx;

until x > xmax+dx/2;

writeln('|___|___|');

end.

 

Вариант 2: Цикла с предусловием (WHILE-DO) (Рис.11)

 

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

program prim_2;

{программа вычислений и вывода на экран таблицы значений функции с использованием оператора WHILE-DO}

var a, b: real;

xmin, xmax, dx: real;

x, y: real;

begin

write('A='); readln(a);

write('B='); readln(b);

write('начальное значение='); readln(xmin);

write('конечное значение='); readln(xmax);

write('шаг='); readln(dx);

writeln('|___|___|');

writeln('| X | Y |');

writeln('|___|___|');

x: =xmin;

while x < xmax+dx/2 do

begin

y: =A*sin(B*x)/x;

writeln('|', x: 6: 2, '|', y: 7: 2, '|');

x: =x+dx;

end;

writeln('|___|___|');

end.

 

 

Рис.11 Блок-схема для цикла с предусловием.

 

Вариант 3: Цикла с параметром (FOR-DO) (Рис.12)

 

Рис.12. Блок-схема для цикла с параметром.

 

program prim_4;

{программа вычислений и вывода на экран таблицы значений функции с использованием оператора FOR-DO}

var a, b: real;

xmin, xmax, dx: real;

x, y: real;

i, n: integer;

begin

write('A='); readln(a);

write('B='); readln(b);

write('начальное значение='); readln(xmin);

write('конечное значение='); readln(xmax);

write('шаг='); readln(dx);

writeln('|___|___|');

writeln('| X | Y |');

writeln('|___|___|');

n: =trunc((xmax-xmin)/dx)+1;

x: =xmin;

for i: =1 to n do

begin

y: =A*sin(B*x)/x;

writeln('|', x: 6: 2, '|', y: 7: 2, '|');

x: =x+dx;

end;

writeln('|___|___|');

end.

 

Одномерные массивы

 

Задача. Дан массив а, состоящий из 10 элементов. Составить программу поиска максимального элемента массива.

Используем идею предыдущей задачи. Перед началом поиска выберем условно в качестве максимального первый элемент массива Max: =a[1]. Затем по очереди каждый элемент массива сравним со значением переменной m. Если он окажется больше, то изменим значение Max. После анализа всех элементов массива переменная Max содержит значение максимального элемента массива.

 

...

Max: =a[1];

for i: = 2 to 10 do

if Max< a[i]

then

Max: = a[i];

...

 

Задача. Дан массив а, состоящий из 10 элементов. Составить программу поиска элементов массива.

 

program sorting;

const

n=20; {}

Type

Tarray=array[1..n] of integer;

var i, buf, j: integer;

a: Tarray;

begin

writeln('сортировка по возрастанию');

writeln('заполнение массива');

for i: =1 to n do begin

a [i]: =random(100);

write(a[i]: 3, ' ' );

end;

for i: =2 to n do

for j: =n downto 1 do

if a[j-1]> a[j] then

begin buf: =a[j-1];

a[j-1]: =a[j];

a[j]: =buf;

end;

writeln('сортированный массив');

for j: =1 to n do

write(a[j]: 3, ' ' );

 

readln;

end.

 

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

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

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

3. Также пригодится процедура, которая берет элемент с индексом i, перемещает его на место элемента с номером j. А все элементы, которые имеют индексы от j до i-1 сдвигает на одну позицию вправо.

 

Доступ к элементам массива.

 

Рассмотрите предложенные ниже фрагменты программ для решения некоторых типичных задач.

Изменение значения некоторых элементов

Задача. Заменить отрицательные элементы на противоположные по знаку.

program Zamena;

const

n=20;

Type

Tarray=array[1..n] of integer;

var i: integer;

a: Tarray;

begin

writeln('замена отрицательного знака на положительный’);

writeln('заполнение массива');

randomize;

for i: =1 to n do begin

a [i]: =random(10+20)-20;

write(a[i]: 3, ' ' );

end;

for i: =1 to n do

if a[i]< 0 then

a[i]: =-1*a[i];

writeln('новый массив');

for i: =1 to n do

write(a[i]: 3, ' ' );

 

readln;

end.

 


Поделиться:



Популярное:

Последнее изменение этой страницы: 2016-08-24; Просмотров: 707; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.361 с.)
Главная | Случайная страница | Обратная связь