Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Типовые действия с массивамиСодержание книги Поиск на нашем сайте
Массивы должны быть описаны в программе в разделе описания типов или переменных. Например: CONST N=10; TYPE Vector = ARRAY[1..20] OF REAL; Matr = ARRAY[1..N,1..5] OF BYTE; VAR A, B: Vector; C: ARRAY [1..N] OF INTEGER; D: Matr; Здесь описаны три одномерных и один двумерный массивы. Одномерные массивы А и В типа Vector состоят из двадцати элементов, а массив С – из десяти элементов. Двумерный массив D представляет собой матрицу размерами 10 5, имеющую десять строк и пять столбцов. Далее приводятся фрагменты программ для реализация типовых действий с массивами. Предполагается, что описания массивов в программах имеются, а индексы начинаются с 1.
1. Ввод массивов с клавиатуры: а) одномерного массива А б) двумерногомассива С For I:=1 То N DоFor I:=1 То N Dо {строки} Read(A[i]);For J:=1 To M Dо {столбцы} Read(C[i,j]);
При каждом выполнении оператора Read вводится один элемент массива (после набора каждого элемента нужнонажиматьклавишуEnter (Ввод)). Ввод двумерногомассива осуществляется в приведенном примере по строкам.
2. Вывод на экран массивов: а) одномерного в строку б) одномерного в столбец For I:=l To N Do For I:=l To N Do Write(A[i]); Writeln(A[i]); в) двумерного построкам For I:=l To N Do Begin For J:=l To M Do Write (C[i,j]); Writeln; End.
3. Суммирование элементов массивов: а) одномерного б) двумерного S:=0; S:=0; For I:=l To N Do For I:=l To N Do S:=S+A[i]; For J:=l To M Do S:=S+C[i,j]; 4. Суммирование диагональных элементов матрицы (вычисление следа матрицы): S:=0; For I:=l To N Do S:=S+C[i,i];
5. Суммирование двух массивов по элементам (оба массива -слагаемых должны полностью совпадать как по размерности, так и по типам их элементов): а) одномерного б) двумерного For i:=1 To N Do For i:=l To N Do C[i]:=A[i]+B[i]; For j:=l To M Do C[i,j]:=A[i,j]+B[i,j];
6. Суммирование элементов заданной k-й строки матрицы: S:=0; For j:=l To M Do S:=S+C[k,j];
7. Суммирование элементов строк матриц:. Необходимо вычислить сумму элементов каждой строки матрицы С размерами N М. Результат получим в виде вектора D: For i:=lТо К Do Begin S:=0; For j:=l To M Do S:=S+C[i,j]; D[i]:=S; End; 8. Транспонирование матрицы: Необходимо заменить строки матрицы ее столбцами, а столбцы — строками, т.е. вычислить dij = cji, i =1,... N, j = 1,... M: For i:=l To N Do For j:=l To M Do D[i,j]:=C[j,i]; Транспонированную матрицу можно получить в исходном массиве С. Для квадратной матрицы размерами N N для этого необходимо поменять местами каждый элемент верхнего треугольника с соответствующим элементом нижнего (диагональные элементы переставлять не нужно). При этом для каждой строки нужно выполнять перестановку элементов, расположенных правее главной диагонали, с элементами соответствующего столбца, расположенного ниже главной диагонали, т.е. взаимно перемещать элементы Сi,j и Сj,i,i =1,..., N -1; j = i +1,..., N. For i:=l To N-1 Do For j:=i+l To N Do Begin X:= C[i,j]; C[i,j]:= C[j,i]; C[j,i]:= X; End; Для прямоугольной матрицы алгоритм усложняется.
9. Умножение матрицы на вектор: Для вычисления произведения С матрицы A размерами N М на вектор В размером М необходимо вычислить С i= i =1,... N: For i:=lTo N Do Begin S:=0; For j:=l To M Do S:=S+A[i,j]*B[j]; C[i]:=S; End;
10. Умножение матрицы на матрицу: Для умножения матрицы А размерами N L на матрицу B размерами L М необходимо вычислить Сij = , i = 1... N, j = l,... М; For i:=1 То М Do For j:=l To N Do Begin S:=0; For k:=l To L S:=S+A[i,k]*B[k,j]; C[i,j]:=S; End; 11. Удаление элемента из массива: Требуется удалить k— й элемент из массива А размером N. Удалить элемент, расположенный на k— м месте в массиве, можно, сдвинув весь "хвост" массива, начиная с (k + 1)—го элемента, на одну позицию влево, т.е. выполняя операцию ai:= ai +1, i = k, k +1,... ,N -1: N:=N-l; For i:=k To N Do A[i]:=A[i+l];
12. Включение элемента в заданную позицию массива: Перед включением элемента в k— ю позицию необходимо раздвинуть массив, т.е. передвинуть "хвост" массива вправо на одну позицию, начиная с (k + 1)-го элемента, выполняя операцию ai +1:= ai, i = N, N -1,..., k. Перемещения элементов массива нужно начинать с конца. В противном случае весь "хвост" будет заполнен элементом аk. Далее k-му элементу присваивается заданное значение В. Размер массива увеличивается на 1: For i:=N Downto k Do A[i+l]:=A[i]; A[k]:=B; N:=N+1;
13. Включение элемента в массив, упорядоченный по возрастанию, с сохранением упорядоченности: Сначала следует найти элемент, перед которым необходимо включать заданное число В. Для этого нужно проверять условие В < аi, для всех i =1,2,.... При выполнении условия текущее значение индекса i определяет позицию добавляемого элемента. Далее включение элемента осуществляется по алгоритму, описанному в п. 12. k:=1; While B<a[k] do Begin k:=k+1; End; For i:=N Dowto k-1 Do A[i+l]:=A[i]; A[k-1]:=B; 14. Удаление строки из матрицы: Требуется удалить строку с заданным номером К. Решение этой задачи аналогично решению задачи удаления элементаиз одномерного массива. Все строки, начиная с (К + 1)-й, нужно переместить вверх. Число строк уменьшается на 1. N:=N-1; For i:=K To N Do For j:=l To M Do B[i,j]:=B[i+l,j]; Удаление столбца осуществляется аналогично.
15. Включение cтроки в матрицу: Включаемая строка задана как вектор С. Включение строки в матрицу аналогично включению элемента в одномерный массив (см. п.12). For i:=N Downto К Do For j:=1 To M Do B[i+l,j]:=B[i,j]; For j:=1 To M Do B[K,j]:=C[j]; N:=N+1;
16. Поиск минимального (максимального) элемента в массиве: Требуется найти минимальный элемент в массиве и егозначениепоместить в переменную Р, а индекс — в переменную K. Р:=А[1]; К:=1; For i:=2 To N Do If P>A[i] Then Begin P:=A[i]; K:=i End;
Если в массиве несколько элементов имеют минимальное значение, то в К будет запоминаться индекс первогоиз них. Если проверять условие Р >= А (i), то будет запоминаться индекс последнего элемента. Для поиска максимального элемента нужно проверять условие P < A (i). Для двумерногомассива алгоритм аналогичный, но нужно просматривать все элементы каждой строки, что требует организации двойного цикла, и запоминать два индекса: номер строки К и номер столбца L.
P:=C[l,l]; K:=l; L:=l; For i:=l To N Do For j:=l To M Do If P>C[i,j] Then Begin P:=C[i,j]; K:=i; L:=j End;
17. Преобразование матрицы: Преобразование матрицы, как правило, производится относительно какой-либо оси, которой могут быть главная диагональ, побочная диагональ, любая строка или столбец. Рассмотрим эти понятия на примере матрицы А размерами N N, обозначив номер строки переменной I, а номер столбца - переменной J. 1. Элементы главной диагонали имеют одинаковые индексы, т.е. А (1,1) (например А (1,1), А (2, 2),... A (N, N)). 2. У всех элементов, расположенных выше (правее) главной диагонали, J > I. 3. У всех элементов, расположенных ниже главной диагонали, J < I. 4. Элементами, симметричными относительно главной диагонали, являются пары A (I, J) и A (J, I). 5. У элементов, образующих побочную диагональ, есть зависимость индексов: I + J = N +1, или J = N +1- I, т.е. A (I, N +1- I). 6. У всех элементов, расположенных выше побочной диагонали, I < N +1- J. 7. У всех элементов, расположенных ниже побочной диагонали, I > N +1- J. 8. Элементами, симметричными относительно побочной диагонали, являются пары A (I, J) и A (N +1- J, N +1- I). 9. Элементами, симметричными относительно средней горизонтальной оси, являются пары A (I, J) и A (I, N +1- J). Примеры решения задач по обработке массивов
Пример 2.1. Сформировать массив Y из положительных элементов заданного массива Х размером 10. Решение. Возможный вариант программы: PROGRAM PRIM21; VAR X, Y: ARRAY [1..10] OF REAL; I, K: INTEGER; {X – исходный массив} {Y – сформированный массив} {K – количество элементов массива Y} BEGIN {Ввод массива Х} For I:=1 To 10 Do Read (X[I]); {Формирование массива Y} K:=0; For I:=1 To 10 Do If X[I] > 0 Then BEGIN K:=K+1; Y[K]:=X[i]; END; {Вывод сформированного массива Y на экран} For I:=1 To K Do Write(Y[i]:5:2); End. Пример 2.2. В одномерный массив размером N ввести произвольные числа. Поменять местами элементы массива, стоящие равноудаленно от элемента с заданным индексом К. Вывести на экран в строку исходный и новый массивы. Решение. Введем произвольные числа в массив A (N). Индекс элемента, относительно которого производится обмен, обозначим переменной К. При вводе К следует выполнить проверку, так как К не должно быть меньше единицы или больше N. Алгоритм. Алгоритм заключается в том, что менять местами элементы массива можно до тех пор, пока не закончится массив слева или справа от К, т.е. пока индекс элемента слева больше или равен единице, а индекс элемента справа от К меньше или равен N. Для формирования индекса элемента слева от К назначаем переменную L, а для формирования индекса элемента справа от К - переменную PR. Вариант программы PROGRAM PRIM22; VAR A: ARRAY [1.. 100] OF REAL; N, I, L, K,PR: INTEGER; X: REAL; BEGIN Write('Введите размер массива (не более 100)’); Readln(N); WHILE (N<=2) OR (N>=100) DO Begin Writeln(‘Ошибка ввода. Повторить’); Writeln(‘Введите размер массива’); Readln(N); End; FOR I:=1 ТО N Do Begin Write(‘Введите ‘, I:3, ‘ число ’); Readln(A[I]); End; Writeln(‘Исходный массив’); FOR I:=1 TO N Do Begin Write(A[I]); If I Mod 6 = 0 Then Writeln; End; Writeln; Write(‘Введите индекс‘); Readln(К); L:=K-1; PR:=K+1; WHILE (L>=1) AND (PR<=N) Do Begin X:=A[L]; A[L]:=A[PR]; A[PR]:=X; L:=L-1; PR:=PR+1; END; Writeln; Writeln(‘Новый массив’); FOR I:=1 ТО N Do Begin Write(A[I]); If I Mod 6 = 0 Then Writeln; End; END. Пример 2.3. В массивы вводятся элементы двух последовательностей Ai и Bj целых чисел, которые содержат 6 и 8 элементов соответственно. Ai — неубывающая и Bj — невозрастающая последовательности. Необходимо вывести на экран общий список значений элементов этих последовательностей по их возрастанию без создания третьего массива. Решение. Для решения этой задачи необходимо каждый раз перед выводом на экран очередного числа сравнивать два числа из разных массивов, пока они не закончились, и выводить на экран меньшее из них. В соответствии с условиями задачи, массив А начинаем просматривать с первой ячейки, а массив В — с последней, т.е. если условие А[1]<В[8] выполняется - на экран выводится А[1]; если условие А[2]<В[8] не выполняется - на экран выводится В[8]; если условие А[2]<В[7] не выполняется - на экран выводится В[7]; если условие А[2]<В[6] не выполняется - на экран выводится В[6]; если условие А[3]<В[1] не выполняется - на экран выводится В[1]. Дальнейшее сравнение чисел из двух массивов невозможно, так как один из них (массив В) закончился. Оставшиеся в массиве А числа следует вывести на экран. Отметим, что какой из двух массивов закончится раньше, определяется числами, находящимися в нем, а не длиной массива, поэтому при составлении программы необходимо предусмотреть вывод на экран оставшихся чисел и из массива А, и из массива В. Анализируя приведенные выше строки сравнения чисел из разных массивов, приходим к выводу: - индексы элементов массива меняются, поэтому введем переменные для формирования индексов (К 1 и К 2); - начальное значение индекса элемента в массиве А — К 1 равно 1;начальное значение индекса элемента в массиве В — К 2 равно 8; - сравнивать числа из разных массивов можно до тех пор, пока один из массивов не закончится, т.е. пока К 1<=6, а К 2>1. Программа PROGRAM PRIM23; VAR A: ARRAY [1..6] OF INTEGER; B: ARRAY [1..8] OF INTEGER; I, K1, K2: INTEGER; BEGIN Writeln(‘Введите массив А’); FOR I:=1 ТО 6 Do Begin Write(‘Введите ‘, I:1, ‘ число массива А’); Readln(A[I]); End; Writeln(‘Введите массив B’); FOR I:=1 ТО 8 Do Begin Write(‘Введите ‘, I:1, ‘ число массива B’); Readln(B[I]); End; Writeln(‘Общий список чисел по возрастанию’); К1:=1; К2:=8; WHILE (К1<=6) AND (K2>=1) Do IF A[K1]<B[K2] THEN Begin Write(A[K1]:4); K1:=K1+1 End ELSE Begin Write(B[K2]:4); К2:=К2-1; END; {Из двух циклов For в зависимости от чисел, введенных в массивы, будет работать какой-либо один из них} FOR I:=K1 TO 6 Do Write(A[I]:4); FOR I:=K2 DownTo 1 Do Write(В[I]:4); END. Пример 2.4. В одномерный массив ввести N произвольных чисел. Задан индекс К одного из элементов массива. Требуется записать в обратном порядке все элементы, стоящие слева и справа от заданного К. Вывести на экран в строку новый массив. Решение. Предположим, что исходный массив (A (N)) заполнен произвольно, а К = 5. Алгоритм. Анализируя расположение чисел в новом массиве, приходим к выводу, что для решения данной задачи следует выполнить обмен элементов отдельно слева и справа от элемента с индексом К. Слева должны меняться местами элементы: А [1] с А [4]; А [2] с А [3]. Справа должны меняться элементы: А [6] с А [14]; А [7] с А [13]; А [8] с А [12]; А [9] с А [11]. При обмене индексы элементов меняются, поэтому для их формирования выбираем переменные L и PR. Для реализации предложенного алгоритма необходимо организовать два цикла (обмен слева от К и обмен справа от К), пока индекс левой переменной меньше индекса правой переменной (L < PR). Программа PROGRAM PRIM24; LABEL 10; VAR A: ARRAY [1..100] OF REAL; I, N, K, L, PR: INTEGER; X: REAL; BEGIN Write('Введите размер массива (не более 100)’); 10:Readln(N); IF (N<=2) OR (N>=100) THEN Begin Writeln(‘Ошибка ввода. Повторить’); GOTO 10; End; FOR I:=1 ТО N Do Begin Write(‘Введите ‘, I:3, ‘ число ’); Readln(A[I]); End; Writeln(‘Исходный массив’); FOR I:=1 TO N Do Begin Write(A[I]); If I Mod 6 = 0 Then Writeln; End; Write(‘Введите индекс К ’); Readln(К); {Цикл обмена слева от К } L:=1; PR:=K-1; WHILE L<PR Do Begin X:=A[L]; A[L]:=A[PR]; A[PR]:=X; L:=L+1; PR:=PR-1; End; {Цикл обмена справа от К } L:=K+1; PR:=N; WHILE L<PR Do Begin X:=A[L]; A[L]:=A[PR]; A[PR]:=X; L:=L+1; PR:=PR-1; End; Writeln(‘Новый массив'); FOR I:=1 ТО N Do Begin Write(A[I]); If I Mod 6 = 0 Then Writeln; End; END. Пример 2.5. Ввести два одномерных массива (первый из N целых чисел, второй — из 5 различных целых чисел). Удалить из первого массива числа, содержащиеся во втором. При удалении элементов первого массива он должен быть сжат перемещением оставшихся элементов в массиве. Если какое-либо число из второго массива не встретилось в первом ни разу, вывести соответствующее сообщение. Вывести измененный массив. Решение. Для решения задачи следует по очереди каждое число из массива В сравнивать на совпадение с каждым числом массива А. При совпадении осуществляется перемещение справа налево всех чисел, стоящих правее найденного. Например, если найдено число в ячейке А [2], то осуществляется последовательное перемещение: А [2] А [3], А [3] А [4], А [4] А [5]... А [ Х -1] А [ Х ], где Х — переменная, определяющая меняющуюся длину сжимаемого» массива. Каждый раз после удаления очередного числа массив А укорачивается и для просмотра, и для последующих перемещений элементов, хотя заданная длина массива А не меняется. Программа PROGRAM PRIM25; LABEL 10, 20; VAR A: ARRAY [1.. 100] OF INTEGER; B: ARRAY [1.. 5] OF INTEGER; N, I, J, X, F, K: INTEGER; BEGIN { Ввод размера и элементов массива А } Write(‘Введите количество чисел массива А’); Readln(N); FOR I:=1 ТО N Do Begin Write(‘Введите ‘, I:3, ‘ число массива А’); Readln(A[I]); End; { Ввод элементов массива B } FOR I:=1 ТО 5 Do Begin Write(‘Введите ‘, I:3, ‘ число массива B’); Readln(B[I]); End; {первоначальная длина массива А заносится в переменную X} X:=N; {внешний цикл (по i) для выбора элементов массива В} FOR I:=1 ТО 5 Do Begin {каждое новое число массива В начинаем искать с первой ячейки массива А (К=1), переменная F показывает, встретилось ли очередное число массива В хотя бы раз в массиве А} K:=1; F:=0; {цикл поиска очередного числа массива В в массиве А, перемещение чисел массива А справа налево, изменение длины массива А (Х=Х-1) и изменение значения переменной F, которое фиксирует, что очередное число массива В встретилось в массиве А} 10: WHILE K<=X Do Begin IF B[I]<>A[K] THEN Begin K:=K+1; GOTO 10 End; FOR J:=K TO X-1 Do A[J]:=A[J+1]; Х:=Х-1; F:=1 End; IF F=0 THEN Writeln(‘Число’, В [J],’не встретилось в массиве А'); End; IF X=0 THEN Begin Writeln(‘Массив А состоял только из чисел массива В, поэтому он полностью сжался’); GOTO 20; End; {вывод на экран оставшихся чисел массива А в случае, если какие-то числа остались} Writeln(‘Измененный массив А’); FOR I:=1 ТО X Do Write(A[I]:4); 20: END. Пример 2.6. В одномерный массив ввести N произвольных чисел (N - заданное число). Переместить его элементы таким образом, чтобы в конце массива были все отрицательные числа, сохранив при этом начальный порядок следования отдельно для отрицательных и отдельно для нулевых и положительных элементов. Дополнительный массив не использовать. Решение. Возможный вариант программы: PROGRAM PRIM26; VAR A: ARRAY [1..50] OF REAL; N, I, P: INTEGER; X: REAL; BEGIN Write(‘N= ‘); Readln(N); FOR I:=1 ТО N Do Begin Write(‘Номер ‘, I); Readln(A[I]); End; Writeln(‘Исходный массив’); FOR I:=1 ТО N Do Write(A[I]:6:2); P:=1; WHILE P<>0 Do Begin P:=0; FOR I:=1 TO N-1 Do IF (A[I]<0) AND (A[I+1]>=0) THEN Begin X:=A[I]; A[I]:=A[I+1]; A[I+1]:=X; P:=1 End; End; Writeln(‘Модифицированный массив’); FOR I:=1 ТО N Do Write(A[I]:6:2); END. Пример 2.7. Сформировать массив из индексов минимальных элементов строк матрицы А размерами 5 4. Решение. Возможный вариант программы: PROGRAM PRIM27; VAR A: ARRAY [1..5,1..4] OF REAL; X: ARRAY [1..5] OF INTEGER; I, J, K: INTEGER; MIN: REAL; BEGIN For I:=1 To 5 Do For J:=1 To 4 Do Read(A[i,j]); For I:=l To 5 Do Begin MIN:=A[i,1]; K:=l; For J:=2 To 4 Do If A[i,j]<MIN Then Begin MIN:=A[i,j]; K:=J; End; X[i]:=K; End; For I:=l To 5 Do Write(X[i]:4); End. Пример 2.8. Задана матрица A размерами 5 5. Найти максимальный по модулю элемент матрицы. Строку, содержащую этот элемент, поменять местами с первой. Решение. Возможный вариант программы: Program PRIM28; VAR A: ARRAY [1..5,1..5] of REAL; I, J, K, L: INTEGER; MAX, Q: REAL; BEGIN {Ввод данных } For I:=1 То 5 Do For J:=l То 5 Do Read (A[I,J]); {Отысканиемаксимального по модулю элемента в матрице } MAX:=Abs(A[l,l]); K:=l; L:=l; For I:=l To 5 Do For J:=1 To 5 Do Begin Q:=Abs(A[I,J]); If P < Q Then Begin MAX:=Q; K:=I; L:=J; End; End; WRITELN(‘Максимальный по модулюэлемент =’,A[K,L]:7:2); WRITELN(‘находится в строке’,K:2,’ в столбце’,L:2); {Перестановка строк} For I:=1 To 5 Do Begin Q:=A[K,I]; A[K,I]:=A[l,I]; A[l,I]:=Q; End; {Печать преобразованной матрицы} WRITELN(‘Матрица-результат’); For I:=l To5 Do Begin For J:=1 To 5 Do WRITE(A[I,J]:7:2); WRITELN; End; End. Пример 2.9. Подсчитать количество отрицательных элементов в каждой строке матрицы Х размерами 5 4. Результат получить в виде вектора. Решение. Программа PROGRAM PRIM29; VAR X: ARRAY [1..5,1..4] OF REAL; P: ARRAY [1..5] OF INTEGER; I, J, N: INTEGER; {Х – заданная матрица} {P – одномерный массив, значением элементов которого является количество отрицательных элементов в соответствующей строке матрицы Х} {N – количество отрицательных элементов в строке матрицы Х} BEGIN {Ввод матрицы Х} For I:=1 To 5 Do For J:=1 To 4 Do Read (X[I,J]); For I:=1 To 5 Do Begin {Блок определения количества отрицательных элементов в I-й строке матрицы} N:=0; For J:=l To 4 Do If X[I,J] < 0 Then N:=N+1; P[I]:=N; End; {Вывод} For I:=l To 5 Do WRITELN(‘В ’,I:2,’ строке ’, P[I]:2,’ отрицательных элементов’); End. Пример 2.10. В каждой строке матрицы удалить минимальный элемент строки. Решение. Программа PROGRAM PRIM210; VAR A: ARRAY [1..5,1..4] OF REAL; I, J, K: INTEGER; MIN: REAL; BEGIN {Ввод матрицы А} For I:=l To 5 Do For J:=l To 4 Do Read (A[I,J]); For I:=l To 5 Do Begin {Определение минимального элемента в I-й строке и его индекса К} MIN:=A[I,1]; K:=l; For j=2 To 4 Do If A[I,J] < MIN Then Begin MIN:=A[I,J]; K:= J End; {Удаление минимального элемента из I-й строки} If K < 4 Then For J:=k+l To 4 Do A[I,J-l]:=A[I,J]; End; {Вывод на экран преобразованной матрицы} For I:=1 To 5 Do Begin Fог J:=1 To 3 Do WRITE(A[I,J]:5:2); WRITELN; End; End.
Контрольные вопросы
1. Что такое массив? 2. Как осуществляется доступ к элементам массива? 3. Как осуществляется описание массивов на языке Турбо Паскаль? 4. Как выполняется ввод вектора, матрицы? 5. Как организовать вывод массива? 6. Как осуществить суммирование векторов и матриц? 7. Как выглядит алгоритм транспонирования матрицы? 8. Как выполнить умножение: а) матрицы на матрицу, б) матрицы на вектор? 9. Как выполнить удаление элементов массива? 10. Как добавить элементы в массив? 11. Как осуществить замены (перемещения) элементов внутри массива?
Задачи I уровня
Эти задачи предназначены для приобретения навыков работы с одномерными и двумерными массивами с использованием типовых алгоритмов. 1. Найти среднее значение элементов заданного массива размером 8. Преобразовать исходный массив, вычитая из каждого элемента среднее значение. 2. Для заданногомассива размером 10 определить индекс элемента, значение которогонаиболее близко к среднемузначениюэлементовмассива. 3. Решить уравнение ах = b для семи пар значений а и b, заданных в двух массивах. Результат поместить в массив X.
4. Найти минимальный среди положительных элементов заданного массива размером 10. 5. Вычислить сумму элементов одномерного массива, расположенных до первого отрицательного элемента. 6. Все положительные элементы массива увеличить в 2 раза, оставив остальные без изменения. 7. Поменять местами максимальный и первый отрицательный элементы массива размером 10. 8. Поменять местами минимальный и максимальный элементы массива размером 10. 9. Вычислить среднее значение элементов массива, предварительно отбросив минимальный и максимальный элементы. 10. Задана матрица размерами п т. Просуммировать положительные элементы каждой строки. Результат получить в виде вектора размером n. 11. Для матрицы размерами n m найти максимальный элемент каждой строки. Результат получить в виде вектора размером n. 12. В квадратной матрице размерами 5 5 переставить местами строку с максимальным элементом на главной диагонали и строку с заданным номером. 13. В квадратной матрице размерами 5 5 исключить строку и столбец, на пересечении которых расположен максимальный элемент главной диагонали. 14. Задана матрица размерами n n и число К (1 К n). Найти максимальный по модулю элемент в К -м столбце; строку, содержащую этот элемент, переставить с К -й строкой. 15. Задана матрица размерами n m. Определить номера строк, содержащих минимальный и максимальный элементы и поменятьих местами. 16. Задана матрица размерами n n. Сменить знаки у элементов, лежащих ниже главной диагонали. 17. Ввести массив чисел размерами М N (M и N - заданные числа). "Особым" элементом массива назовем элемент, который является наибольшим в столбце и одновременно наибольшим в строке. Определить количество "особых" элементов в введенном массиве, считая, что в каждой строке (и в каждом столбце) присутствует только один наибольший элемент. 18. N ребят образуют круг. Начиная отсчет по кругу от первого, в ходе считалки удаляется каждый К -й. После очередного удаления круг смыкается, а считалка начинается вновь с участника, следующего в круге за удаленным. Напечатать номера ребят в порядке их удаления из круга и номер единственного оставшегося. 19. Ввести массив чисел размерами М N (M и N - заданные числа).Сменить знаки у элементов, лежащих выше главной диагонали и имеющих четную сумму индексов. 20. Ввести массив чисел размерами М N (M и N - заданные числа). В элементах столбцов, не содержащих отрицательных элементов, сменять знаки.
Задачи II уровня 1. Дана целочисленная квадратная матрица А размерами N N, где N - заданное натуральное число. Столбец с индексом J (J =1,2,..,N) назовем отмеченным, если все элементы в этом столбце, расположенные на главной диагонали и ниже нее являются простыми числами и оканчиваются на цифру 7. Найти количество отмеченных столбцов в матрице А. 2. Ввести по 18 чисел в два одномерных массива. Переписать элементы массивов построчно в квадратную матрицу, расположив их по убыванию значений. Дополнительных массивов не использовать. Напечатать матрицу. 3. Ввести числовой двумерный массив размерами N N (N - заданное число от 6 до 20). Переставить элементы массива симметрично относительно побочной диагонали. Полученный массив вывести на экран. Побочная диагональ проходит через правый верхний и левый нижний углы таблицы. 4. Ввести числовую прямоугольную матрицу размерами M N (М и N заданы). Определить элементы, которые, являясь максимальными в столбцах, больше всех своих соседей слева в строке и меньше всех своих соседей справа в строке, указав значения найденных элементов и их индексы, или же сообщить, что таких элементов нет. Крайние столбцы не рассматривать. 5. В одномерный массив ввести N произвольных чисел (N - заданное число). Переместить его элементы таким образом, чтобы в конце массива были все отрицательные числа, сохранив при этом начальный порядок следования отдельно для отрицательных и отдельно для нулевых и положительных элементов. Дополнительный массив не использовать. 6. Ввести в массив 10 произвольных чисел. Выполнить перемещение чисел в массиве таким образом, чтобы в начале массива оказались все положительные числа, затем - все отрицательные, а в конце массива - нули, сохранив при этом взаимное расположение в массиве ненулевых чисел каждой из двух групп. Дополнительных массивов не использовать. 7. Двигаясь по спирали от центра по периметру введенной числовой квадратной матрицы, состоящей из N строк и столбцов (N - заданное число), обойти все элементы матрицы и распечатать их в порядке обхода. 8. На основе введенной числовой квадратной таблицы, состоящей из N строк и столбцов (N - заданное число), сформировать и напечатать массив, i -й элемент которого равен 1, если i -я строка матрицы образует строго возрастающую последовательность. В противном случае i -й элемент должен быть равен 0. 9. В введенной числовой таблице, имеющей N строк и М столбцов (М и N - заданные числа), переставить строки по возрастанию суммы положительных элементов в них. 10. В введенной числовой квадратной таблице, состоящей из N строк и столбцов (N -заданное число), определить такие К и L, для которых К -я строка совпадает с L -м столбцом (попарно совпадают все элементы строки и столбца), а также общее количество таких совпадений. 11. Переставить в конец одномерного массива, состоящего из N элементов, элементы, кратные заданному числу, и расположить их в порядке возрастания. 12. Нулевые элементы переставить в начало одномерного массива, а остальные расположить в порядке возрастания. 13. В введенной числовой матрице, состоящей из M строк и N столбцов, элементы строки, содержащей максимальное количество положительных элементов, расположить в порядке возрастания. 14. В введенной числовой матрице, состоящей из M строк и N столбцов, элементы всех строк расположить в порядке убывания. 15. Ввести целое число N. Сформировать и вывести на экран целочисленную квадратную матрицу (двухмерный массив) размерами N N. 1 2 3... N -2 N -1 N 2 3 4... N -1 N 0 3 4 5... N 0 0 ......................... N -1 N 0... 0 0 0 N 0 0... 0 0 0 16.Ввести целое число N. Сформировать и вывести на экран целочисленную квадратную матрицу (двухмерный массив) размерами N N. N 0 0... 0 0 N N -1 0... 0 0 N N -1 N -2... 0 0 ................. N N -1 N -2...2 0 N N -1 N -2... 2 1 17. В введенной числовой матрице, состоящей из M строк и N столбцов, элементы столбцов, содержащих хотя бы один отрицательный элемент, расположить в порядке убывания. 18. В введенной числовой матрице, состоящей из M строк и N столбцов, переставить строки в порядке убывания количества содержащихся в них положительных элементов. 19. В введенной числовой матрице, состоящей из M строк и N столбцов, переставить строки в порядке возрастания элементов последнего столбца. 20. В введенной числовой матрице, состоящей из M строк и N столбцов, строки матрицы, не содержащие нулевых элементов, расположить в порядке убывания произведений элементов строк. 21. В введенной числовой матрице, состоящей из M строк и N столбцов, элементы столбца, содержащего максимальное количество нулевых элементов, расположить в порядке убывания. 22. В введенной целочисленной матрице, состоящей из M строк и N столбцов, удалить строку и столбец, содержащие минимальный из наиболее часто встречающихся элементов. 23. Замените каждый элемент матрицы целых чисел размерами M N на сумму элементов его “креста”, т.е. тех элементов, которые находятся в одном с ним столбце и в одной строке. 24. Вычислить сумму элементов одномерного массива размером N, являющихся простыми числами. Простыми числами называются числа, которые не делятся нацело ни на какое число кроме 1 и самого себя, при этом 1 простым числом не является.
Строки
С помощью компьютера часто приходится обрабатывать не только числа, но и строки символов, например имена, фамилии, названия и т.д. Поэтому в Турбо Паскале имеется специальный тип String, облегчающий программирование операций над строками. Значение стандартного типа String – последовательность символов длиной от 1 до 255. Данные типа String, как и числовые данные, подразделяются на константы и переменные. Строковые константы – это последовательность символов, заключенная в апострофы. Мы уже использовали строковые константы при вводе и выводе информации, например ‘Введите размер массива’, ‘Сумма элементов матрицы А =’. Строковые константы могут быть описаны в разделе описания констант: Const С = ’Результаты вычислений’; St = ’Строка’; January: String[10] = ‘Январь’; {Типизированная константа} Описание строковых переменных имеет вид Var имя переменной: String[N]; Здесь N – целая константа или имя целой константы (1 N 255), указывающая максимальную длину строки (количество символов). Разрешается не указывать N, в этом случае длина строки принимается максимально возможной, а именно равной 255. Например: Var FIO: String[25]; Nazv: String; Как и в одномерных массивах, к отдельным символам строки можно обратиться с помощью индексов в квадратных скобках: FIO[5], Nazv[8]. Над строковыми данными определены операции: присваивание, сцепление и отношение. Присваивание последовательности символов строковым переменным осуществляется с помощью оператора присваивания. Ввод и вывод значений строковых переменных осуществляется без апострофов с помощью стандартных процедур Read, Readln, Write, Writeln. Если при присваивании или вводе длина строки превышает максимальную длину строковой переменной, то все лишние символы справа отбрасываются. Операция сцепление применяется для объединения нескольких строк в одну. Для обозначения операции сцепления в Турбо Паскале используется символ ‘+’. Например: Var St, St1, St2: String; Begin St1:=’ Турбо ‘; St2:=’Паскаль’; St:=St1+St2; Writeln(‘St=’,St); End. После выполнения этой программы получим St= Турбо Паскаль. Если длина объединенной строки превысит максимально допустимую длину N, то лишние символы справа отбрасываются. Произвольные пары строк могут сравниваться с помощью операций отношения: =, <>, <, >, <=, >=. Приоритет каждого из операторов отношения ниже приоритета оператора сцепления. Сравнение строк производится посимвольно слева направо до первого несовпадающего символа, и та строка считается большей, в которой первый несовпадающий символ имеет больший ASCII-код. Если такая пара не найдена, а строки совпадают до последнего символа более короткой строки, то короткая строка рассматривается как меньшая. Две строки равны только тогда, когда они одинаковой длины и состоят из идентичных символов. Все остальные действия над строками реализуются с помощью стандартных процедур и функций: LENGTH (St) - функция, возвращающая текущую длину строки St. COPY(St, I, COUNT) – функция, которая выделяет из строки St подстроку длиной COUNT, начиная с позиции I. Если I>Length(St), то результатом будет пробел. DELETE(St, I, COUNT) – процедура, которая удаляет из строки St подстроку длиной COUNT, начинающуюся с позиции I. Результатом является новая строка St без удаленной подстроки. Параметр St может быть только переменной. INSERT(St1, St2, I) – процедура, которая вставляет строку ST1 в строку St2, начиная с позиции I.
|
||||
Последнее изменение этой страницы: 2016-12-17; просмотров: 500; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.119.117.77 (0.015 с.) |