Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Паскаль / sidorov / Сидоров.DOC
Скачиваний:
30
Добавлен:
10.12.2013
Размер:
1.68 Mб
Скачать

1. 10. 1. Линейные массивы

Линейным массивом можно обозначить, например, оценки учеников класса. Каждая оценка является значением элемента массива оценок "A" и имеет порядковый номер (индекс). В Турбо-Паскале значение индекса указывается в квадратных скобках после имени массива. Можно создать массив фамилий "S" учеников класса. Значением элемента массива будет фамилия ученика, а индексом - порядковый номер по списку. Пусть дан список фамилий учеников и их оценки:

N Фамилии оценки Описание массивов: Var A: array[ 1. . 30 ] of byte;

1. Иванов 5 S: array[ 1. . 30 ] of string;

2. Петров 4 {или} SO: array[ 1. . 30 ] of string[12];

3. Сидоров 5

4. Титов 5 Присвоение значений элементам массива:

. . . . . . . . . . . . . "A" - A[1]:= 5; A[2]:= 4; и т. д.

30. Якупов 4 "S " - S[1]:= 'Иванов'; S[2]:= 'Петров'; и т. д.

Приведем таблицу обозначений и соответствия элементам массива, их значений и индексов:

Номер элемента (индекс) 1 2 3 4 i 30

Элементы массива "S “ S[ 1 ] S[ 2 ] S[ 3 ] S[ 4 ] S[ i ] S[ 30 ]

Значения элементов Иванов Петров Сидоров Титов . . . Якупов

Элементы массива "A “ A[ 1 ] A[ 2 ] A[ 3 ] A[ 4 ] A[ i ] A[ 30 ]

Значения элементов 5 4 5 5 . . . 4

40

Если известна зависимость, по которой изменяются значения элементов массива, то присвоение значений удобно проводить в операторах цикла c параметром или с условием. Например, присвоим значения элементам массива "y" по зависимости: y=sin(x), где x= Pi * i/180, 0<= i <=180 .

For i:= 0 to 180 Do y[i]:= sin(Pi * i/180);

Присвоим случайные значения в диапазоне от -30 до +40 ста элементам массива "R":

Randomize; for i:= 1 to 100 Do R[i]:= - 30 + Random(71);

Присвоим значения семи элементам массива "A" оператором Readln:

For i:= 1 to 7 Do begin Write( ' Введите A[ ' , i , ' ] = ' ); Readln( A [ i ] ) end;

При выводе массива на экран удобно размещать данные в виде таблицы - в несколько колонок. Для вывода обозначений переменных ("шапки таблицы") можно использовать операторы вывода символов в цикле, например:

For j:=1 to 66 do Write('-'); Writeln;

For j:=1 to 3 do Write('|_ _ Фамилия _ _| _ оценка _|'); Writeln;

For j:=1 to 66 do Write('-'); Writeln;

- шапка для вывода в три пары колонок значений переменных "S" и "A". Шапка занимает 66 позиций (по ширине экрана в текстовом режиме размещается 79 символов и пробел). Оператор Writeln; переводит курсор на новую строчку.

Вывод значений ста элементов массивов "S" и "A" в три пары колонок, произведем операторами:

For i:= 1 to 100 do begin Write('|', s[i]:11,'|', a[i]:8, '|');

if (i mod 3) = 0 Then Writeln;

if (i mod 60) = 0 then readln end;

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

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

s:= 0; for i:= 1 to 100 do s:= s + a[i]; { s - сумма элементов массива }

a_max:= a[1]; for i:= 1 to 100 do { поиск наибольшего элемента a[j] }

if a[i] > a_max then begin a_max:= a[i]; j:= i end;

j:= 0; k:= 0;

for i:=1 to 100 do {создание новых массивов с элементами: b[j] >=0, c[k] <0}

if a[i] >= 0 then begin j:= j+1; b[j]:= a[i] end

else begin k:= k+1; c[k]:= a[i] end;

j:= 0; k:= 8;

for i:= 1 to 100 do {создание массива номеров "M" для элементов: a[i] > a[k]}

if a[i] > a[k] then begin j:= j+1; M[j]:= i end;

41

Практическое задание N 1. 18

1. Вывести на экран таблицу с колонкой "Фамилии" и тремя колоноками "оценки" по различным предметам и заполнить ее 10 строками данных. Значения элементов массива фамилий задаются в программе оператором присваивания, значения элементов массивов оценок задаются функцией Random.

2. Рассчитать общий средний балл десяти учащихся по одному предмету. Составить список фамилий учащихся с оценками, превышающими средний балл. Программа запрашивает ввод с клавиатуры фамилий и оценок учащихся и выводит на экран исходную таблицу: Фамилия - оценка, а также средний балл и таблицу учащихся с оценками, превышающими средний балл.

Практическое задание N 1. 19

1. Рассчитать наибольшее и наименьшее значения функции y= sin(x) - x2 на интервале 0 =< x <= 1, изменяя значение "х" с шагом 0. 005. Вывести на экран таблицу значений "х" и "у" в три пары колонок, а также наибольшее и наименьшее значения функции "у" и соответствующие им значения "х".

2. Рассчитать наибольшее и наименьшее значения функции y= cos(x) + x на интервале 0 =< x <= Pi/2, разбив интервал на 99 отрезков. Вывести на экран таблицу значений "х" и "у" в две пары колонок, а также наибольшее и наименьшее значения функции "у" и соответствующие им значения "х".

Практическое задание N 1. 20

1. Рассчитать момент инерции массива точек относительно осей "x" и "y" :

Jx = m1 * x12 + m2 * x22 +. . . + mN * xN2,

Jy = m1 * y12 + m2 * y22 +. . . + mN * xN2.

Массив "N" точек ( N = 60 ), имеющих массы "m" ( 5 =< m <= 25 ) определен на прямоугольнике с координатами -10 <= x <= 10 и 10 <= y <= 20. Вывести на экран таблицу значений "N", "х", "у", "m", а также моменты инерции "Jx", "Jy".

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

2. Расcчитать координаты центра тяжести массива точек: Xc = Xm/M, Yc = Ym/M, где

Xm = m1 * x1 + m2 * x2 +. . . + mN * xN,

Ym = m1 * y1 + m2 * y2 +. . . + mN * yN,

M = m1 + m2 +. . . + mN,

Массив из "N" точек ( N = 45 ), имеющих массы "m" (3 =< m <= 35) определен на прямоугольнике с координатами -22 <= x <= 33 и 11 <= y <= 44. Вывести на экран таблицу значений "N", "х", "у", "m", а также координаты центра тяжести "Xc", "Yc" и массу точек "M". Определить и вывести на экран номера точек с экстремальными значениями координат и массы.

42

3. Рассчитать массив "r" - расстояние между точками с соседними номерами и массива "s"- расстояние от каждой точки до последней вдоль ломанной, например:

r1 = ((x1 - x2)2 + (y1 - y2)2) - расстояние от точки "1" до точки "2",

s1 = r1 + r2 + ... + rN - расстояние от точки "1" до последней точки "N",

s2 = s1 - r1 - расстояние от точки "2" до последней вдоль ломанной.

Массив из "N" точек ( N = 30 ) определен на прямоугольнике

с координатами 9<=x<=25 и 21<=y<=34. Вывести на

экран таблицу значений "N", "х", "у", "s".

4. Рассчитать массив "s"- сумма расстояний от каждой точки до всех остальных, по формулам: 6

7 2

rij = ((xi-xj)2+(yi-yj)2) - расстояние от i- ой 1

до j- ой точки, 3

4

si = si + rij 5

- суммирование производится во внутреннем цикле с параметром "j", а во внешнем цикле меняется параметр "i".

Массив из "N" точек ( N = 20 ) определен на прямоугольнике с координатами 3<=x<=15 и 8<=y<=14. Вывести на экран таблицу значений "N", "х", "у", "s".

5. К задаче п3. Определить массив "M" - номеров точек , которые придут к финишу быстрее первой, т. е. для которых выполняется условие: T[i] < T[1].

Здесь T[i] = S[i] / V[i] - время движения от i-ой точки до последней,

V[i] = 30 - i - скорость движения i-ой точки. Вывести на экран таблицу значений "N", "х", "у", "S", "V", "t" для всех точек и таблицу для "быстрых" точек.

6. К задаче п4. Определить массив номеров точек "M", которые ходят в гости к другим точкам дольше первой, т. е. для которых выполняется условие: S[i]>S[1] (точки каждый раз возвращаются в исходное положение (домой), скорость всех точек постоянна и одинакова). Вывести на экран таблицу значений "N", "х", "у", "s", для всех точек и таблицу для "медленных" точек.

Примечание к п.п. 1-6: Значения "x", "y", "m" задаются функцией Random.

Практическое задание N 1. 21

1. Разложить произвольное длинное целое число N на массив Z составляющих его цифр. Например, N=538, разлогается на Z[1]= 5, z[2]= 3, Z[3]= 8.

2. Определить массив всех простых чисел от 1 до N. Алгоритм состоит в нахождении чисел не делящихся нацело на ранеее найденные простые числа. Например, при Z[1]=2, Z[2]=3, проверяются числа >3, не делящиеся нацело на Z[1] и Z[2]. Наибольшее проверяемое число не превышает N.

Примечание: Установить ограничение по числу элементов массива “Z” ,

43