Информатика. В 4 ч. Ч. 3
.pdf
Исходные данные: vx 1,5 |
м/с, v y 3 |
м/с, tнач 0 с, |
dt 0,05 с. |
|
|
При решении задачи необходимо для каждого момента времени t определить координату yt траектории движения и сравнить ее с координатой yp, полученной для предыдущего момента времени.
Сравнение координат y начинается после получения второго значенияyt, поэтомунеобходимоиспользовать цикл спостусловием.
Схема алгоритма вычислительного процесса имеет вид
Начало
vx, vy, tнач, dt
G
Впрограммеиспользуютсяследующиеидентификаторы(табл. 3.10):
Математическое |
x |
yt |
yp |
t |
tнач |
dt |
vx |
vy |
|
обозначение |
|||||||||
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
Идентификатор |
x |
yt |
yp |
t |
tn |
dt |
vx |
vy |
|
|
|
|
|
|
|
|
|
|
Программа имеет вид
Program lr3_6_2; {103162 User15 Соколов О.Д.} Uses crt;
Var t,tn,dt,vx,vy,yp,yt,x:real;
begin ClrScr;
write ('Введите vx,vy,tn,dt'); readln (vx,vy,tn,dt);
t:=tn;
61
yt:=vy*t-9.81*t*t/2; |
{начало цикла} |
repeat |
|
yp:=yt; |
|
t:=t+dt; |
|
yt:=vy*t-9.81*t*t/2 |
yt<yp-истина, то конец |
until yt<yp; {если |
|
цикла} |
|
t:=t-dt; |
|
x:=vx*t;
writeln('максимальной высоты снаряд достигает');
writeln('при t=',t:5:2,' c');
writeln('в точке x=',x:5:2,' y=',yp:5:2); repeat until keypressed
end.
Результаты работы программы имеют вид
Введите vx,vy,tn,dt 1.5 3 0 0.05
максимальной высоты снаряд достигает при t = 0.30 c
в точке x = 0.45 y = 0.46
62
G
t = tнач
yt v y |
9,81t 2 |
||
2 |
|
||
|
|
|
|
|
|
|
|
|
|
|
|
Начало цикла с параметром t
t
yp = yt
t = t + dt
yt v y |
9,81t 2 |
|
2 |
||
|
||
|
|
t, yt < yp
t = t – dt
x = vx t
t, x, yp
Конец
Конец цикла, если yt < yp,
то цикл прекратить
63
Контрольные вопросы
1.Какой оператор используется для организации цикла с предусловием ?
2.Какой оператор используется для организации цикла с постусловием ?
Задания для выполнения
Для двух задач составить схемы алгоритмов и программы.
Вариант 1
1.Использовать задание а) лабораторной работы 1.5 (ч.1).
2.Для заданного массива B(k), k 15, найти сумму всех положительных элементов массива до первого отрицательного. Если таких элементов нет, то вывести сообщение об этом.
Значения k = 7, B = (3,6; 0,2; 4,8; 1,3; –4,7; 1,9; 9,5).
Вариант 2
1.Использовать задание а) лабораторной работы 1.5 (ч.1).
2.Для заданного массива B(t), t 20, найти произведение всех элементов до первого элемента, большего 3,5. Если таких элементов нет, то вывести сообщение об этом.
Значенияt = 10, B = (1,3; –3,5; 1,9; 2,1; –4,2; 0,6; 1,1; 3,4; 6,1; 1,3).
Вариант 3
1.Использовать задание а) лабораторной работы 1.5.
2.Для заданного массива X(t), t 25, найти количество элементов до первого элемента, меньшего 2,7. Если таких элементов нет, то вывести сообщение об этом.
Значения t = 8, X = (4,6; 9,3; 6,8; 6,1; 4,2; 2,8; –1,4; 3,5).
Вариант 4
1. Использовать задание а) лабораторной работы 1.5 (ч.1).
Для заданного массива A(n), n 30, найти сумму элементов до первого элемента, большего –0,2. Если таких элементов нет, то вывести сообщение об этом.
Значения n = 7, A = (–3,6; –7,2; –1,4; –0,1; 4,6; 3,8; –2,5).
64
Вариант 5
1.Использовать задание а) лабораторной работы 1.5 (ч.1).
2.Для заданного массива W(t), t 25, найти произведение элементов до первого элемента, большего 0,9. Если таких элементов нет, то вывести сообщение об этом.
Значения t = 8, W = (0,2; –1,5; –5,2; 0,4; –5,2; 1,5; 8,5; 3,8).
Вариант 6
1.Использовать задание а) лабораторной работы 1.5 (ч.1).
2.Для заданного массива Z(k), k 25, найти количество элементов до первого элемента, меньшего 8,5. Если таких элементов нет, то вывести сообщение об этом.
Значения k = 6, Z = (9,5; 11,4; 43,9; 2,4; 2,5; 7,5).
Вариант 7
1.Использовать задание а) лабораторной работы 1.5 (ч.1).
2.Для заданного массива B(t), t 20, найти сумму всех отрицательных элементов массива до первого положительного. Если таких элементов нет, то вывести сообщение об этом.
Значения t = 6, B = (–4,2; –1,6; –2,8; –0,2; 4,7; –3,6).
Вариант 8
1.Использовать задание а) лабораторной работы 1.5 (ч.1).
2.Для заданного массива Y(k), k 20, найти произведение элементов до первого элемента, меньшего 2,5. Если таких элементов нет, то вывести сообщение об этом.
Значения k = 7, Y = (3,6; 2,8; 7,2; 1,7; 8,3; –2,5; 1,5).
Вариант 9
1.Использовать задание а) лабораторной работы 1.5 (ч.1).
2.Для заданного массива C(n), n 30, найти количество всех отрицательных элементов массива до первого положительного. Если таких элементов нет, то вывести сообщение об этом.
Значения n = 8, C = (–2,5; –4,1; –6,4; –2,7; –1,7; 4,7; –1,5; –6,1).
65
Вариант 10
1.Использовать задание а) лабораторной работы 1.5 (ч.1).
2.Для заданного массива H(k), k 30, найти сумму элементов до первого элемента, большего 5,2. Если таких элементов нет, то вывести сообщение об этом.
Значения k = 6, H = (2,5; 3,1; 6,3; –2,5; 8,4; –3,1).
Лабораторная работа № 3 . 7
Программирование вычислительных процессов с использованием вложенных циклов
Цель работы: приобретение практических навыков составления программ, содержащих вложенные циклы.
Теоретические сведения
Как известно, с точки зрения программирования матрица, имеющая m строк и n столбцов, является двумерным массивом размерности m n . Каждый элемент такого массива характеризуется:
1)именем массива, элементом которого он является;
2)номером строки, в которой он расположен;
3)номером столбца, в котором он расположен;
4)значением.
В программе двумерные массивы целесообразно описывать, используя пользовательский тип с указанием максимальной размерности, в виде
Туре
<имя типа> = array [<диапазон индексов строки>,<диапазон индексов столбца>] of <тип элементов> ;
Var
<имя матрицы>: <имя типа>; . Например,
Type
Matr = array [1..6,1..8] of real; Var
A:Matr; .
66
При таком описании предполагается, что в матрице будет не более 6 строк и не более 8 столбцов.
В разделе операторов обязательно осуществляется ввод рабочей размерности матрицы, т.е. того количества строк и столбцов, с которым выполняется программа.
Все действия с матрицами осуществляются поэлементно с использованием вложенных циклов, параметрами которых являются индексы строки и столбца.
Обращение к элементу матрицы в Паскаль–программе имеет вид <имя матрицы> [<индекс строки>, <индекс столбца>] . Например, A[2,3] – элемент матрицы A, стоящий на пересечении
2-й строки и 3-го столбца.
Пример. Для матрицы А(m,n), где m 5, n 4:
а) построить одномерный массив МX, каждый элемент которого равен максимальному элементу соответствующей строки матрицы А; б) получить матрицу В, умножая каждый элемент матрицы А на
сумму элементов столбца, в котором он находится. Введем следующие идентификаторы:
i– индекс строки элемента матрицы;
j– индекс столбца элемента матрицы; max – максимальный элемент i-й строки;
МХ– массивразмерностиm, содержащиймаксимальныеэлементы;
B – новая матрица, каждый элемент которой равен Ai j s , где s –
сумма элементов j-го столбца.
Схема алгоритма решения задачи имеет вид
Начало |
|
|
||
m, |
n |
|
Ввод рабочей размер- |
|
|
||||
ности матрицы А |
||||
|
|
|||
S |
|
|
||
|
|
|||
67
S |
|
|
|
|
i = 1, m |
|
|
|
|
i |
|
|
Вывод приглаше- |
|
|
|
ния к вводу i–й |
|
|
|
|
|
строки |
|
j = 1, n |
|
|
|
|
Ai |
j |
|
|
|
i = |
1, |
|
За максимальный |
|
|
|
|
||
|
|
|
элемент принимаем |
|
max = Ai 1 |
|
первый элемент |
||
|
|
|
строки |
|
j = 2, n |
|
|
|
|
нет |
|
да |
Уточнение |
макси- |
max < Ai j |
|
|||
|
|
|
мального элемента |
|
|
|
max = Ai j |
|
|
|
|
|
Присвоение |
|
MXi = max |
|
элементу |
массива |
|
|
MX максимального |
|||
|
|
|
элемента |
соответ- |
|
|
|
ствующей строки |
|
W
68
W
i = 1, m
Вывод массива MX MXi
поэлементно
|
|
|
|
|
|
j = 1, n |
|
Перебор номера |
|
||
столбца |
|
||||
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
||
s = 0 |
|
Начальное значе- |
|||
|
ние суммы |
||||
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
i = 1, m
Вычисление суммы элемен-
s = s + Ai j
тов столбца
i = 1, m
Вычисление
строки матрицы В
Bi j = s Ai j
R
69
R
i = 1, m
j = 1, n
Вывод значе-
Bi j
ния элемента Bi j
Конец
Текст программы на языке Паскаль имеет вид
Program lr3_7; {103112 USER14 Филанович П.А.} Uses crt;
Type
matr=array[1..5,1..4] of real; vector=array[1..5] of real;
Var b,a:matr; mx:vector; s,max:real;
m,n,i,j:integer; begin
ClrScr;
write('Введите количество строк матрицы m='); readln(m);
write('Введите количество столбцов матрицы n='); readln(n);
writeln;
writeln(' ':6,'Bведите матрицу A'); for i:=1 to m do
70
