Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Общий вид алгоритма разветвляющегося процесса




Repeat

«Тело цикла»;

until «Условие окончания цикла»;

«Тело цикла» − произвольная последовательность операторов;

«Условие» − выражение логического типа.

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

Repeatuntil − зарезервированные слова («Повторять», «пока не [выполнится условие]»).

Program Name3; Var X, А: integer; Y: real; Begin A:=5; X:=1; repeat Y:=X*X+sin(X+A); Writeln ('X=',X,'; Y=',Y:4:1); X:=X+2; until X>10; readln; end.  

4 способ: Организация цикла с параметром (FOR)

Общий вид алгоритма цикла с параметром

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

i –параметр цикла i1– начальное значение, i2 –конечное значение

Общий вид записи:

for «Параметр цикла» := «Начальное значение» to (downto) «Конечное значение» do

«Тело цикла»;

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

for, to, downto, do – зарезервированные слова («для», «до», «уменьшить до»,
«выполнить»).

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

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

К – в данной программе будет означать конечное значение цикла.

1) Присвоение значения переменной А.

2) Присвоение переменной К значения, полученного до разработки алгоритма решения задачи.

3) Присвоение значения 1 переменной Х (начальное значение).

4) Организация цикла с параметром по переменной i (целое число).

5) Вычисление значения функции Y.

6) Вывод значения функции Y.

7) Добавление шага к переменной Х.

Program Name4; Var X, А, К i: integer; Y: real; Begin A:=5; K:=5; X:=1; for i:=1 to K do begin Y:=X*X+sin(X+A); Writeln ('X=',X, ';Y=',Y:4:1); X:=X+2; end; readln; end.  

Задание 4. Циклические вычислительные процессы. Решение задач,
содержащих вычисление конечных сумм и произведений

Условие задачи:

Вычислите конечное значение суммы функции

Для решения задачи использовать разные способы организации цикла:

1) Цикл с предусловием (WHILE);

2) Цикл с постусловием (REPEATUNTIL);

3) Цикл с параметром (FOR) со счётчиком (с шагом 1).

Пояснение:

1 способ: Цикл с предусловием (WHILE)

Обозначения:

А – вспомогательная переменная, в которой вычисляется слагаемое;

S – переменная, в которой происходит накапливание значений сумм.

Первое значение переменной S=0.

Program Summa1; Var X: integer; S, A: real; Begin X:=1; S:=0; While X<=20 do begin A:=1/(X*X); S:=S+A; X:=X+1; end; Writeln ('S=', S:4:2); readln; End.  

2 способ: Цикл с постусловием (REPEATUNTIL)

Program Summa2; Var X: integer; S, A: real; Begin X:=1; S:=0; repeat A:=1/(X*X); S:=S+A; X:=X+1; until Х>20; Writeln ('S=', S:4:2); readln; End.  

3 способ: Цикл с параметром (FOR) со счётчиком (с шагом 1)

Program Summa3; Var X: integer; S, A: real; Begin S:=0; for X:=1 to 20 do begin A:=1/(X*X); S:=S+A; end; Writeln ('S=', S:4:2); readln; End.  

Условие задачи:

Вычислите конечное значение произведения функции

Пояснение:

1способ: Цикл с предусловием (WHILE)

Обозначения:

А – вспомогательная переменная, в которой вычисляется множитель;

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

Первое значение переменной P=1.

Program Summa1; Var N: integer; P, A: real; Begin N:=1; P:=1; While N<=10 do begin A:=N*N/(3+N); P:=P*A; N:=N+1; end; Writeln ('P=', P:4:2); readln; End.  

 

Остальные способы аналогично вычислению конечной суммы.

Задание 5. Разветвление в цикле

Разветвление в цикле означает, что тело цикла содержит разветвляющийся процесс.

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

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

If «Условие» then «Оператор_1» else «Оператор_2»;

«Условие» − логическое выражение.

if, then, else − зарезервированные слова («если», «то», «иначе»).

Условие задачи:

Найдите значения функции ,

если

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

1. Присвоение значений переменным A и B.

2. Организация цикла по переменной Х.

3. Вычисление функции D в зависимости от условия.

4. Вычисление значений функции F.

5. Вывод значения функции F.

1 способ: Цикл с предусловием (WHILE)

 
Program funk_F1; Var а, b, d, x, F: real; begin a:= 2.7; b:= -0.3; x:=1; While x<=8 do begin if x<2.3 then d:=(a+x)/x else if x>=5 then d:=a*x*x+b*x else d:=(a+b)/(x+1); F:=b*d+ln(d); writeln('F(',x:2:1, ')= ',F:6:2); x:=x+0.5; end; readln; end.

2 способ: Цикл с постусловием (REPEATUNTIL)

Program funk_F2; var a, b, d, x, F:real; begin a:= 2.7; b:=-0.3; x:=1; repeat if x<2.3 then d:=(a+x)/x else if x>=5 then d:=a*x*x+b*x else d:=(a+b)/(x+1); F:=b*d+ln(d); Writeln ('F(',x:2:1, ')= ',F:6:2); x:=x+0.5; until x>8; readln; end.

Задание 6. Обработка одномерных массивов

Одномерный массив − это фиксированное количество элементов одного и того же типа, объединенных одним именем, где каждый элемент имеет свой номер.

Например, A(8) – одномерный массив, где А – имя массива, 8 – количество элементов.

Общий вид записи:

А1, А2, А3……., Аn – это одномерный массив,

где Аi – элементы массива, i=1, 2, 3……n – индекс представляет собой переменную целого типа. Запись элемента массива на языке Паскаль А[i].

Общий вид записи описания одномерного массива:

Var «Имя массива»: Array[n1..n2] Of «Тип элементов»;

n1 − номер первого элемента;

n2 − номер последнего элемента.

Array, of – зарезервированные слова («массив», «из»).

Задача 1. В массиве X(15) вычислите максимальный элемент массива и его порядковый номер.

Обозначения: MAX– максимальный элемент массива; K – порядковый номер максимального элемента массива. Program Massiv1; Var {Описание используемых переменных} K, i, MAX: integer; {Описание массива X} X: array [1..15] of integer; begin {Организация цикла для ввода элементов массива с клавиатуры} for i:=1 to 15 do readln (X[i]); {Присвоение начальных значений максимальному элементу и его порядковому номеру} MAX:=X[1]; K:=1; {Организация цикла для поиска максимального элемента массива и его порядкового номера} for i:=2 to 15 do if X[i]>MAX then begin MAX:=X[i]; K:=i; end; {Вывод результатов вычисления на экран} writeln ('MAX=', MAX:2, ';K=', K); readln; end.

Задача 2. В массиве R(8) найдите минимальный элемент и замените его на 5.

Обозначения: MIN– минимальный элемент массива; N – порядковый номер минимального элемента.   Program Massiv2; Var R: array[1..8] of integer; i, n, MIN: integer; begin for i:=1 to 8 do readln (R[i]); {Присвоение начальных значений минимальному элементу и его порядковому номеру} MIN:= R[1]; n:=1; {Организация цикла для поиска минимального элемента массива и его порядкового номера} for i:=2 to 9 do if R[i]<MIN then begin MIN:= R[i]; n:=i; end; {Вывод результатов вычисления на экран} writeln ('MIN=',MIN); {Замена минимального элемента массива на 5} R[n]:=5; {Вывод нового массива на экран} for i:=1 to 8 do write (R[i]:5); readln; end.  

 

Задача 3. В массиве А(8) определите количество положительных и отрицательных элементов.

Обозначения: p – количество положительных элементов; ot – количество отрицательных элементов.   Program Massiv3; Var p, ot, i: integer; a: array[1..8] of integer; begin writeln ('Введите элементы массива А'); for i:=1 to 8 do readln (А[i]); {Присвоение начальных значений количеству положительных и отрицательных элементов} p:=0; ot:=0; {Организация цикла для подсчёта количества положительных и отрицательных элементов массива} for i:=1 to 8 do if А[i]>0 then p:=p+1 else ot:=ot+1; {Вывод результатов вычисления на экран} writeln ('Количество положительных элементов=', p:2); writeln ('Количество отрицательных элементов=', ot:2); readln; end.  

 

Задача 4. В массиве X(15) вычислите сумму элементов массива меньших 10
и произведение элементов массива больших нуля.

Обозначения: S – сумма элементов массива, меньших 10; P – произведение элементов массива, больших нуля.   Program Massiv4; Var i, S, P: integer; X: array [1..15] of integer; begin for i:=1 to 15 do readln (X[i]); {Присвоение начальных значений сумме и произведению} S:=0; P:=1; {Организация цикла для вычисления суммы и произведения элементов массива} for i:=1 to 15 do begin if X[i]<10 then S:=S+X[i]; if X[i]>0 then P:=P*X[i]; end; {Вывод результатов вычисления на экран} writeln ('S=', S); writeln ('P=', P); readln; end.  

 

Задача 5. В массиве D(15) найдите все положительные элементы и замените их на среднее арифметическое отрицательных элементов.

Обозначения: S – сумма отрицательных элементов массива; SA – среднее арифметическое отрицательных элементов массива; K –количество отрицательных элементов массива.   Program Massiv5; Var K, I: integer; S, SA: real; D: array [1..15] of real; Begin write ('Введите элементы массива D'); for i:=1 to 15 do readln (D[i]); {Присвоение начальных значений сумме и количеству элементов} S:=0; K:=0; {Организация цикла для вычисления суммы и количества отрицательных элементов массива} for i:=1 to 15 do if D[i]<0 then begin S:=S+D[i]; K:=K+1; end; {Вычисление среднего арифметического элементов массива} SA:=S/K; {Вывод среднего арифметического элементов массива на экран} writeln ('SA=',SA:7:2); writeln ('Вывод нового массива D'); {Организация цикла для определения положительных элементов массива и замена их на среднее арифметическое и вывод нового массива на экран} for i:=1 to 15 do begin if D[i]>0 then D[i]:=SA; writeln ('D(',i, ')= ', D[i]:5:2); end; readln; end.

Задача 6. В массиве С(7) отсортируйте все элементы по возрастанию.

Обозначения: m – вспомогательная переменная для перестановки элементов массива.   Данные массива задаются типизированной константой, значения элементов массива выбираются произвольно   Program Massiv6; Var k, i, M: integer; {Описание массива С с помощью типизированной константы} const c: array[1..7] of integer = (5,-4,2,7,-1,88,9); begin {Сортировка массива} for k:=1 to 7 do for i:=k+1 to 7 do if c[i]<=c[k] then begin M:=c[i]; c[i]:=c[k]; c[k]:=M; end; {Вывод нового массива на экран} for i:=1 to 7 do writeln ('c[',i,']=',c[i]:2); readln; end.  

Алгоритм сортировки массива:

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

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

Переменная M является в качестве подсобной для перестановки элементов.

Задача 7. В массиве Х(8) подсчитайте сумму элементов, стоящих на чётных местах.

Обозначения: S − сумма элементов, стоящих на чётных местах; i − переменная цикла с предусловием.   Program Massiv7; Var i,s: integer; X: array[1..8] of integer; begin for i:=1 to 8 do readln (X[i]); {Присвоение начальных значений сумме и переменной} S:=0; i:=2; {Организация цикла с предусловием} While i<=8 do begin {Вычисление суммы и переход на следующее чётное место} S:=S+X[i]; i:=i+2; end; {Вывод результатов вычисления на экран} writeln ('S=',S); readln; end.

 

 

Задание 7. Обработка двумерных массивов

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

Например, D(3×4) – двумерный массив, состоящий из 3 строк и 4 столбцов.

Общий вид записи:

где Dij– элементы массива; i– индекс строки; j– индекс столбца.

Запись элементов двумерного массива на языке Паскаль D[i,j].

Общий вид записи описания двумерного массива:

Var «Имя массива»: array[n1..n2, m1..m2] of «Тип элементов»;

n1 − номер первой строки; n2 − номер последней строки; m1 – номер первого столбца; m2 – номер последнего столбца.

array, of – зарезервированные слова («массив», «из»).

Задача 1. Найдите максимальный элемент в каждой строке матрицы A(4×3).

Обозначения: MAX– максимальный элемент матрицы. Program Matriza1; Var i, j, MAX: integer; А:array[1..4,1..3] of integer; begin {Организация ввода матрицы с клавиатуры построчно}for i:=1 to 4 dofor j:=1 to 3 do readln (A[i, j]); {Организация цикла для поиска максимального элемента в каждой строке} for i:=1 to 4 do begin {Присвоение начального значения максимальному элементу текущей строки} MAX:=a[i,1]; for j:=2 to 3 do if a[i,j]>MAX then MAX:=a[i,j]; {Вывод результатов вычисления на экран} writeln ('Макс.элемент в', i, 'строке=', MAX); end; readln; end.

Задача 2. В матрице D(3×3) найдите произведение элементов каждого столбца.

Обозначения: P – произведение элементов каждого столбца.   Program Matriza2; Var {Описание переменных матрицы} i, j, p: integer; {Описание матрицы D} D: array[1..3,1..3] of integer; Begin {Организация ввода матрицы с клавиатуры построчно}for i: =1 to 3 dofor j: = 1 to 3 do readln (D[i, j]); {Организация цикла для вычисления произведения элементов каждого столбца} for j:=1 to 3 do begin {Присвоение начального значения произведению} P:=1; for i:=1 to 3 do p:=p*D[i,j]; {Вывод результатов вычисления на экран} writeln ('P=',P); end; readln; end.  

Задача 3. В матрице С(5×5) элементы, лежащие выше главной диагонали, уменьшите на сумму элементов главной диагонали.

Обозначения: Элементы, лежащие на главной диагонали, имеют одинаковые индексы (i=j). S – сумма элементов главной диагонали. Для ввода данных используется функция Random (50) –датчик случайных чисел в диапазоне [0;49]. Program Matriza3; Var i, j, s: integer; C: array[1..5,1..5] of integer; begin {Запуск генератора случайных чисел} Randomize; Writeln ('Данная матрица'); For i:=1 to 5 do begin For j:=1 to 5 do begin C[i, j]:=Random(50); Write (' ',C[i, j]:4); End; Writeln; End; {Присвоение начального значения сумме} S:=0; {Вычисление суммы элементов главной диагонали матрицы} For i:=1 to 5 do S:=S+C[i, i]; Writeln ('S=',S); Writeln ('Новая матрица'); {Организация цикла для уменьшения элементов матрицы, лежащих выше главной диагонали на сумму} For i:=1 to 5 do begin For j:=1 to 5 do begin If i<j then C[i, j]:= C[i, j]-S; {Вывод новой матрицы на экран} Write (' ',C[i, j]:4); end; Writeln; End; Readln; End.

Задача 4. В матрице В(3×3) все элементы, лежащие на главной диагонали,
замените на 0.

Данные задаются типизированной константой, значения элементов массива выбираются произвольно   Элементы, лежащие на главной диагонали, имеют одинаковые индексы (i=j). Program Matriza4; Var i, j: integer; {Описание матрицы В с помощью типизированной константы} const B: array[1..3,1..3] of integer= ((1,-3,2), (5,-4,-2), (-1,5,8)); begin {Организация цикла для замены элементов главной диагонали матрицы на0} for i:=1 to 3 do for j:=1 to 3 do if i=j then B[i, j]:=0 {Вывод новой матрицы на экран} for i:=1 to 3 do begin for j:=1 to 3 do write (B[i, j]:5); writeln; end; readln; end.

 

Задача 5. В матрице А(4×4) определите в каждом столбце количество отрицательных элементов.

Обозначения: k– количествоотрицательных элементов. Program Matriza5; Var i, j, k: integer; A: array[1..4,1..4] of integer; begin for i: = 1 to 4 do for j: = 1 to 4 do readln (А[i, j]); {Организация цикла для подсчёта количества отрицательных элементов в каждом столбце} for j:=1 to 4 do begin {Присвоение начального значения количеству элементов} k:=0; for i:=1 to 4 do if A[i,j]<0 then k:=k+1; {Вывод результатов вычисления на экран} writeln ('В столбце №',j, 'кол-во отриц.элементов- ',k); end; readln; end.

Задача 6. Выполните транспонирование матрицы Х(3×3) (замените строки
столбцами).

Обозначения: Yij – элементы полученной матрицы после транспонирования. Program Matriza6; Var i, j: integer; Y: array[1..3,1..3] of integer; X: array[1..3,1..3] of integer; begin {Организация ввода матрицы X с клавиатуры} for i:=1 to 3 do for j:=1 to 3 do readln (X[i, j]); {Организация цикла для замены строк столбцами матрицы} for i:=1 to 3 do for j:=1 to 3 do Y[j,i]:=X[i,j]; {Вывод новой матрицы Y на экран} for i:=1 to 3 do begin for j:=1 to 3 do write (Y[i,j]:5); writeln; end; readln; end.  

 

Задача 7. Определите произведение элементов четных столбцов матрицы В(3×4).

Обозначения: Р – произведение элементов.   Program Matriza7; Var Р, i, j: integer; B: array[1..3,1..4] of integer; begin for i: = 1 to 3 do for j: = 1 to 4 do readln (B[i, j]); j:=2; {Организация цикла с предусловием} while j<=4 do begin {Присвоение начального значения произведению} P:=1; {Вычисление произведения} for i:=1 to 3 do Р:=Р*В[i,j]; {Вывод результатов вычисления на экран} writeln ('Р=',Р); {Переход на следующий чётный столбец} j:=j+2; end; readln; end.  

 

Задача 8. В каждой строке матрицы А(3×3) определите сумму положительных элементов.

Обозначения: S– сумма положительных элементов.   Program Matriza8; Var s, i, j: integer; A: array[1..3,1..3] of integer; begin for i: = 1 to 3 do for j: = 1 to 3 do readln (А[i, j]); {Организация цикла для вычисления суммы положительных элементов матрицы в каждой строке} for i:=1 to 3 do begin {Присвоение начального значения сумме} S:=0; for j:=1 to 3 do if A[i,j]>0 then S:=S+A[i,j]; {Вывод результатов вычисления на экран} writeln ('Сумма ',i,' строки=',S); end; readln; end.  



Поделиться с друзьями:


Дата добавления: 2015-01-03; Просмотров: 427; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.009 сек.