Скачать программы Все программы автора1. 10. 1. Линейные массивыЛинейным массивом можно обозначить, например, оценки учеников класса. Каждая оценка является значением элемента массива оценок "A" и имеет порядковый номер (индекс). В Турбо - Паскале значение индекса указывается в квадратных скобках после имени массива. Можно создать массив фамилий "S" учеников класса. Значением элемента массива будет фамилия ученика, а индексом - порядковый номер по списку. Пусть дан список фамилий учеников и их оценки:
Описание массивов:
Var A: array[ 1. . 30 ] of byte; S: array[ 1. . 30 ] of string; { или } SO: array[ 1. . 30 ] of string[12];
Присвоение значений элементам массива:
"A" - A[1]:= 5; A[2]:= 4; и т. д. "S " - S[1]:= 'Иванов'; S[2]:= 'Петров'; и т. д. Приведем таблицу обозначений и соответствия элементам массива, их значений и индексов:
Если известна зависимость, по которой изменяются значения элементов массива, то присвоение значений удобно проводить в операторах цикла 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;
Практическое задание N 1. 18
1. Вывести на экран таблицу с колонкой "Фамилии" и тремя колоноками "оценки" по различным предметам и заполнить ее 10 строками данных. Значения элементов массива фамилий задаются в программе оператором присваивания, значения элементов массивов оценок задаются функцией Random. 2. Рассчитать общий средний балл десяти учащихся по одному предмету. Составить список фамилий учащихся с оценками, превышающими средний балл. Программа запрашивает ввод с клавиатуры фамилий и оценок учащихся и выводит на экран исходную таблицу: Фамилия - оценка, а также средний балл и таблицу учащихся с оценками, превышающими средний балл.
Практическое задание N 1. 19
1. Рассчитать наибольшее и наименьшее значения функции y= sin(x) - x 2 на интервале 0 =< x <= 1, изменяя значение "х" с шагом 0. 005. Вывести на экран таблицу значений "х" и "у" в три пары колонок, а также наибольшее и наименьшее значения функции "у" и соответствующие им значения "х". 2. Рассчитать наибольшее и наименьшее значения функции y= cos(x) + x на интервале 0 =< x <= Pi/2, разбив интервал на 99 отрезков. Вывести на экран таблицу значений "х" и "у" в две пары колонок, а также наибольшее и наименьшее значения функции "у" и соответствующие им значения "х".
Практическое задание N 1. 20
1. Рассчитать момент инерции массива точек относительно осей "x" и "y" : Jx = m 1 * x 1 2 + m 2 * x 2 2 +. . . + m N * x N 2 , Jy = m 1 * y 1 2 + m 2 * y 2 2 +. . . + m N * x N 2 . Массив "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 = m 1 * x 1 + m 2 * x 2 +. . . + m N * x N , Ym = m 1 * y 1 + m 2 * y 2 +. . . + m N * y N , M = m 1 + m 2 +. . . + m N , Массив из "N" точек ( N = 45 ), имеющих массы "m" (3 =< m <= 35) определен на прямоугольнике с координатами - 22 <= x <= 33 и 11 <= y <= 44. Вывести на экран таблицу значений "N", "х", "у", "m", а также координаты центра тяжести "Xc", "Yc" и массу точек "M". Определить и вывести на экран номера точек с экстремальными значениями координат и массы. 3. Рассчитать массив "r" - расстояние между точками с соседними номерами и массива "s" - расстояние от каждой точки до последней вдоль ломанной, например: r 1 = O ((x 1 - x 2 ) 2 + (y 1 - y 2 ) 2 ) - расстояние от точки "1" до точки "2", s 1 = r 1 + r 2 + ... + r N - расстояние от точки "1" до последней точки "N", s 2 = s 1 - r 1 - расстояние от точки "2" до последней вдоль ломанной.
Массив из "N" точек ( N = 30 ) определен на прямоугольнике с координатами 9<=x<=25 и 21<=y<=34. Вывести на экран таблицу значений "N", "х", "у", "s".
4. Рассчитать массив "s" - сумма расстояний от каждой точки до всех остальных, по формулам:
r ij = O ((x i -x j ) 2 +(y i -y j ) 2 ) - расстояние от i - ой до j - ой точки, s i = s i + r ij - суммирование производится во внутреннем цикле с параметром "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]. Наибольшее проверяемое число не превышает O N. Примечание: Установить ограничение по числу элементов массива “Z”. |