Партнерка на США и Канаду по недвижимости, выплаты в крипто
- 30% recurring commission
- Выплаты в USDT
- Вывод каждую неделю
- Комиссия до 5 лет за каждого referral
Решение
Для решения этой задачи необходимо описать пять переменных для целых чисел и еще одну — для их суммы. Обозначим первые как A1,A2,A3,A4 и A5,а их сумму — S. Тогда можно составить такую программу, используя функцию нахождения суммы пяти чисел:
PROGRAM Epl;
VAR A1,A2,A3,A4,A5,S: INTEGER;
FUNCTION SUM(Xl, X2,X3,X4,X5: INTEGER): INTEGER;
BEGIN
SUM:=Xl+X2+X3+X4+X5:
END;
BEGIN
WRITELN( ‘введите пять целых чисел’);
READLN(A1,A2,A3,A4,A5); {вводим пять целых чисел}
S:=SUM(A1,A2,A3,A4,A5);{находим их сумму}
WRITELN(‘иx сумма равна ‘,S); {вывод результата на экран}
READLN;
END.
Пример
Найти сумму 30 целых чисел.
Решение
Если будем решать эту задачу по аналогии с первой, то необходимо будет описать 30 переменных для всех целых чисел. А это не очень удобно. Поэтому используем для решения этой задачи одномерный массив.
Одномерный массив — это фиксированное количество элементов одного и того же типа, объединенных одним именем, где каждый элемент имеет свой номер. Например, введем 30 целых чисел от 25 до 54 и объединим их общим именем А.
№ A
1 | 25 |
2 | 26 |
3 | 27 |
… | … |
29 | 53 |
30 | 54 |
Имя A — Это общее имя для всех элементов. Элементы массива — это целые числа, их 30.Опишем в разделе типов свой тип — одномерный массив, состоящий из 30 целых чисел.
TYPE MYARRAY =ARRAY [1..30] OF INTEGER.
Напомним, что раздел описания типов начинается со служебного слова TYPE, после этого идет имя нового типа и его описание. Между именем типа и его описанием ставится знак "равно" (в разделе переменных между именем переменной и ее описанием ставится двоеточие). Тогда:
MYARRAY — это имя нового типа; ARRAY — служебное слово (в переводе с английского означает “массив”, “набор”);
[1..30] — в квадратных скобках указывается номер первого элемента, затем, после двух точек, номер последнего элемента массива, первый элемент имеет номер 1, а последний — номер 30; OF — служебное слово (в переводе с английского - “из”);INTEGER всех элементов массива. Таким образом, одномерный массив описывается следующим обратом:
ARRAY2[N1..N2] OF <тип элементов>;
где N1 номер первого элемента, N2 номер последнего элемента, в качестве типа элементов может использоваться любой тип данных, кроме файлового.
Так как каждый элемент имеет свой номер, то к каждому элементу можно обращаться непосредственно. Для того, чтобы обратиться к I—му элементу этого массива, необходимо записать:
A[I| — сначала имя массива, а в квадратных скобках указывается номер элемента, к которому обращаемся, — I. Например, обращение к первому элементу массива A — А[1], к пятому — А[5].
Пример
Составить программу нахождения суммы элементов массива.
Решение
Опишем две процедуры (формирования и вывода массива) и функцию нахождения суммы элементов, которые будем использовать в основной части. Заметим, что заполнение и вывод массива можно осуществить только поэлементно. то есть можно сначала присвоить значение первому элементу, - затем второму и так далее, то же самое и с выводом на экран — выводим первый, второй, третий и, так далее, до последнего. Будем вводить значения •элементов массива с клавиатуры.
PROGRAM EXPL;
CONST N=30: {и - это количество элемента массива}
TYPE MYARRAY=ARRAY[1..N] OF INTEGER;
VAR А: MYARRAY;
S: INTEGER;
{S - значение этой переменной будет равно сумме всех элементов массива}
PROCEDURE INIT(VAR M: MYARRAY),
VAR I: INTEGER; {I — эmo переменная для работы с элементами массива}
BEGIN
WRITELN(‘введите ‘,N,’чисел’);
FOR I:=1 ТO N DO {ввод массива с клавиатуры }
READLN(M[I]); {чтение i-го элемента}
END;
PROCEDURE PRINT(M: MYARRAY);
VAR I: INTEGER;
BEGIN
FOR I:=1 TO N DO {вывод массива }
WRITE(M[I]:3); {вывод I-го элемента}
WRITELN;
END;
FUNCTION SUM(M:MYARRAY): INTEGER;
VAR I, SUM: INTEGER;
BEGIN
SUM:=0;{начальное значение суммы}
FOR I:=1 TO N DO {ее нахождение}
SUM:=SUM+M[I];{к уже найденной сумме первых (I-1) элементов прибавляем i-й}
END;
BEGIN
INIT (А); {обращение к процедуре формирования}
PRINT(A); {вывод массива}
S:=SUM(A); {нахождение суммы элементов}
WRITELN(‘их сумма равна ‘,S); {вывод результата}
READLN;
END.
Способы заполнения одномерных массивов
• Первый способ задания одномерного массива - это задание с клавиатуры (он был рассмотрен в примере выше — процедура INIT).
• Второй способ задания — что задание с помощью генератора случайных чисел, этот способ более удобен, когда много элементов и массиве.
Составим программу заполнения и распечатки одномерного массива, с помощью генератора случайных чисел. Процедура вывода уже составлена ранее, а процедуру формирования напишем новую.
PROGRAM HH;
CONST N=30;{N — это количество элементов массива}
TYPE MYARRAY = ARRAY[1..N] OF INTEGER;
VAR A: MYARRAY;
PROCEDURE INIT2(VAR M: MYARRAY);
{процедура заполнения (инициализации) массива случайными числами}
VAR I, A,B: INTEGER;
BEGIN
WRITELN(‘Введите границы диапазона A и B, причем A<B’)
READ(A, B);
FOR I:=1 TO N DO
M[I]: =RANDOM(B-A)+A;
{RANDOM выбирает случайное число из отрезка от 0 до B-A, тогда массив будет заполняться случайными числами от A до B}
END;
PROCEDURE PRINT(M:MYARRAY);
BEGIN{процедура вывода (распечатки) массива}
…
END;
BEGIN
RANDOMIZE; {включение генератора случайных чисел}
INIT2(A); {обращение к процедуре заполнения массива}
PRINT(A); {обращение к процедуре выводи заполненного массива}
READLN;
END.
• Третий способ задания — это чтение чисел из файла. Можно заранее создать типизированный файл одномерных массивов (например, по тридцать элементов), а затем считывать из него сразу целый массив и работать с ним. Но мы воспользуемся текстовым файлом, так как его создавать намного удобнее. Пусть в файле записано несколько строк, а в каждой из них по 30 целых чисел. Тогда вся программа может быть такой:
PROGRAM JJ;
CONST N=30; {N — это количество элементов массива}
TYPE MYARRAY = ARRAY[1..N] OF INTEGER;
VAR A: MYARRAY;
F: TEXT;
PROCEDURE INIT3(VAR M:MYARRAY);
{процедура заполнения (инициализации) массива}
VAR I: INTEGER;
BEGIN
FOR I:=1 TO N DO
READ(F, M[I]) {чтение из файла очередного числа}
END;
PROCEDURE PRINT(M:MYARRAY);{процедура вывода (распечатки) массива}
BEGIN
…
END;
BEGIN
{связываем файловую переменную с конкретным внешним файлом}
ASSIGN(F,’...’);
RESET(F); {открытием его для чтения}
WHILE NOT EOF(F) DO
BEGIN
INIT3(A){считываем очередную строку и обращаемся к процедуре заполнения массива}
PRINT(A); {обращение к процедуре вывода}
READLN(F);
END;
READLN;
END.
Работа с элементами массива (разбор на примерах)
При работе с элементами массивов можно выделить несколько видов задач.
• Нахождение суммы (или произведения) элементов. Такая задача была рассмотрена выше. Могут быть различные модификации — найти сумму элементов с заданным свойством.
Пример
Найти сумму элементов кратных заданному числу.
Решение
Воспользуемся функцией SUM из программы EXPL, но будем суммировать не все элементы, а только те, которые удовлетворяют данному условию, то есть только те, которые делятся нацело на заданное число (остаток равен 0).
FUNCTION SUM(M. MYARRAY): INTEGER;
VAR I, S, K: INTEGER;
BEGIN
WRITELN(‘введите число ‘); READLN(K);
S;=0; {начальное значение суммы}
FOR I:=1 TO N DO {нахождение суммы}
IF M[I] МOD K =0 THEN S:=S+M[I];{если элемент кратен K, то прибавляем его к сумме}
SUM:=S;
END;
Все остальное можно оставить без изменения.
Нахождение номеров элементов с заданным свойством
Пример найти номера четных элементов.
•Решение
Для нахождения необходимо просмотреть весь массив, и если просматриваемый элемент является четным, то выводить его номер. Опишем процедуру, которой передается данный массив и выводятся нужные номера.
PROCEDURE SOLVE(M:MYARRAY);
VAR I: INTEGER;
BEGIN
FOR I:=1TO N Do IF M[I] Mod 2 =0 THEN WRITELN(I: 5);
END;
Нахождение количества элементов с заданным свойством
Пример
Найти количество положительных и отрицательных элементов в данном массиве.
•Решение
Опишем процедуру, в которой будем использовать три параметра: массив и два счетчика, один для элементов, больших нуля, а второй — для элементов меньших нуля, элементы, равные нулю, учитывать не будем.
PROCEDURE QUANTITY(M: MYARRAY; VAR K1, K2: INTEGER);
VAR I: INTEGER;
BEGIN
Kl:=0; K2:=0; {начальные значения}
{просматриваем все элементы массива}
FOR I:= TO N DO
If M[I]>0 THEN INC(Kl)
ELSE IF M[I]<0 THEN INC(K2);
END;
· Есть ли в заданном массиве элементы с данным свойством, или найти первый (последний) элемент, отвечающий заданным условиям
Для решения таких задач удобнее использовать циклы с условиями и составлять функции, результат которых имеет логический тип.
•Пример
Есть ли отрицательный элемент в массиве?
Решение
Начинаем с первого элемента (I=1). Пока не просмотрен последний (I<=N), и не найден отрицательный (M[I]|>=0), будем переходить к следующему (INC(I)). Таким образом, мы закончим просмотр в одном из двух случаев: первый — просмотрели все элементы и не нашли отрицательный, тогда I>N, второй — нашли нужный, при этом I<=N. Опишем функцию, значение которой истина (True), если такой элемент есть, и ложь (False), если его нет.
FUNCTION CONTROL (M: MYARRAY): BOOLEAN;
VAR I: INTEGER;
BEGIN
I:=1;
WHILE (I<=N) AND (M[I]>0) DO INC(I);
CONTROL :=(I< =N)
END;
• Пример
Найти номер последнего, отрицательного элемента массива.
Решение
Последний отрицательный — это первый отрицательный элемент, если начать просмотр с конца. Если очередной элемент не является отрицательным, то нужно уменьшать значение текущего индекса, пока он не станет меньше номера первого элемента или не будет найден отрицательный элемент. Таким образом, можно модифицировать предыдущую функцию. Но поскольку надо найти номер элемента, тип результата будем целым.
Договоримся, что если такого элемента нет, то значение функции будет равно 0.
FUNCTION CONTROL1(M: MYARRAY): INTEGER;
VAR I: INTEGER;
BEGIN
I:=N;
WHILE (I>=1) AND (M[I]>0) DO DEC(I);
IF I<1 THEN CONTROL1:= 0 ELSE CONTROL1:=I;
END;
Пример
Найти максимальный элемент массива и его номер.
Решение
Сначала запишем в переменную MAX любой из элементов массива, а лучше первый, потом будем сравнивать его со всеми элементами, начиная со второго, если текущий окажется больше, то его и его индекс будем запоминать в переменных MAX и J.
PROCEDURE MAXIMUM(M: MYARRAY; VAR MAX, J: INTEGER);
VAR I: INTEGER;
BEGIN
MAX:=M[1]; {начальное значение}
{просматриваем все элементы массива, начиная со второго}
FOR I:=2 TO N DO
If M[I]>MAX THEN BEGIN MAX:=M[I];J:=I END;
WRITELN(‘максимум=’,MAX,’его индекс в массиве=’,J)
END;
Задачи для самостоятельного решения:
1. В одномерном массиве вещественных чисел определить количество, сумму и произведение чисел, которые меньше заданного значения.
2. В одномерном массиве чисел положительные элементы уменьшить вдвое, а отрицательные заменить на значения их индексов.
3. Найти общее количество нулевых элементов массива.
4. Найти номер наименьшего положительного элемента массива.
5. Показать лучами на экране расположение двадцати домов микрорайона и школы. Стереть экран. Показать лучами ближайший и самый удаленный дома.
6. N окружностей заданы координатами центра и радиусами. Вывести на экран только те, которые полностью умещаются на экране.
7. На экране случайным образом строятся N точек. После этого экран очищается и на него выводятся только те точки, которые лежат выше прямой, проходящей через точки с координатами X1,Y1 и X2,Y2.
8. На экране случайным образом строятся N точек. После чего экран очищается и выводятся только те точки, которые лежат в кольце с центром в точке X, Y радиусами R1,R2.
9. Образовать и вывести массив B из неотрицательных элементов массива A. Массив B вывести на экран.
10. Образовать массив B, выведя в него сначала отрицательные, потом положительные элементы массива A.
11. Вставить K-тым новый элемент в массив A.
12. Удалить из массива элемент под номером K.
13. В массиве X найти сумму и количество элементов между первым и последним нулевыми элементами.
14. Задан одномерный массив целых чисел и число Q. Переставить элементы массива так, чтобы слева были расположены элементы меньшие Q. а справа большие.
15. Рост учеников 8-го класса лежит в диапазоне от 140 до 170 см. Рост мальчиков закодирован отрицательными числами. Определить средний по классу рост мальчиков и девочек.
16. Температура в апреле месяце изменялась от –10 градусов до +10. Определить среднюю температуру теплых дней (когда температура была >0 градусов).
Сортировка массива
Для решения многих задач удобно сначала упорядочить данные по определенному признаку. Процесс упорядочения заданного множества объектов по заданному признаку называется сортировкой. Данные можно отсортировать:
· По возрастанию - каждый следующий элемент больше предыдущего:
a[1]< a[2]<…<a[n];
· По неубыванию - каждый следующий элемент не меньше предыдущего:
a[1]<= a[2]<=…<a[n];
· По убыванию - каждый следующий элемент меньше предыдущего:
a[1]> a[2]>…>a[n];
· По невозрастанию - каждый следующий элемент не больше предыдущего:
a[1]>= a[2]>=…>=a[n];
Задача
Составить программу сортировки элементов массива a, состоящего из n элементов, в порядке их возрастания.
Существует довольно много различных методов сортировки, отличающихся друг от друга степенью эффективности, под которой понимается количество сравнений и количество обменов, произведенных в процессе сортировки. Рассмотрим два из них.
Сортировка методом простого выбора
Эта сортировка обычно применяется для массивов, не содержащих повторяющихся элементов. Для достижения поставленной цели можно действовать следующим образом:
1) выбрать максимальный элемент массива;
2) поменять его местами с последним элементом(после этого самый большой элемент будет стоять на своем месте);
3) повторить п. п.1-2 с оставшимися n-1 элементами, то есть рассмотреть часть массива, начиная с первого элемента до предпоследнего, найти в ней максимальный элемент и поменять его местами с предпоследним (n-1)-м элементом массива, затем оставшимися n-2 элементами и так далее, пока не останется один самый маленький элемент, уже стоящий на своем месте.
Всего потребуется n-1 раз выполнить эту следовательностьдействий. В процессе сортировки будет увеличиваться отсортированная часть массива, а неотсортированная, соответственно, уменьшаться.
Для программной реализации этого процесса необходимо организовать цикл по I-длине рассматриваемой части массива, которая изменяется от n о 2. В качестве начального значения максимума разумно взять значение последнего элемента рассматриваемой части.
Теперь можем записать алгоритм сортировки:
FOR I:=N DOWNTO 2 DO
BEGIN
{найти максимальный элемент из a[1],…,a[i]; запомнить его индекс в переменной k ; если I<>k поменять местами a[i] и a[k]}
END;
Опишем этот алгоритм подробнее в виде процедуры:
PROCEDURE SORTING1(VAR A:ARRAY);
{поскольку в процессе работы процедуры массив изменится, формальный параметр a описывается как параметр-переменная}
VAR I, J,K:INTEGER;
M:INTEGER;{значение максимального элемента рассматриваемой части массива}
BEGIN
FOR I:=10 DOWNTO 2 DO
{цикл по длине рассматриваемой части массива}
BEGIN
{поиск максимального элемента и его номера в текущей части массива}
K:=I;M:=A[I];{начальное значение максимального элемента и его индекса }
FOR J:=2 TO I-1 DO
IF A[J]>M THEN BEGIN K:=J;
M:=A[K]
END;
IF K<>I THEN BEGIN
A[K]:=A[I];
A[I]:=M
END
END
END;
Сортировка методом простого обмена
Сортировка методом простого обмена может быть применена для любого массива. Этот метод заключается в последовательных просмотрах массива от начала к концу и обмене местами соседних элементов, расположенных “неправильно”, то есть таких, что i<j, а a[i]>a[j].
Опишем его подробнее. Просмотрим весь массив. Начинаем с первой пары элементов(a[1]и a[2]), если первый элемент этой пары больше второго, то меняем их местами, иначе оставим без изменения. Затем берем вторую пару элементов(a[2]и a[3]), если a[2]>a[3], то меняем их местами и так далее. На первом шаге будут просмотрены все пары элементов массива a[i ] и a[i+1] для I от 1 до n-1. В результате максимальный элемент переместиться в конец массива. Поскольку самый большой элемент находится на своем месте, в дальнейшем будем просматривать массив без него, то есть до n-1 элемента. Повторим предыдущие действия для n-1 элементов, в результате второй по величине элемент встанет на свое место. Подобные действия будем продолжать до тех пор, пока у нас не останется всего два элемента. В этом случае останется упорядочить эти два элемента, после чего массив окажется отсортированным. Этот метод также называют методом “пузырька” (самые крупные “пузырьки” первыми всплывают на “поверхность”).
Опишем процедуру “пузырьковой” сортировки.
PROCEDURE SORTING2(VAR A:ARRAY);
VAR K, I,T:INTEGER;
{K-номер просмотра(изменяется от 1 до n-1), I-номер рассматриваемой пары, T-промежуточная переменная для перестановки местами элементов}
BEGIN
FOR K:=1 TO N-1 DO{цикл по номеру просмотра}
FOR I:=1 TO N-K DO
IF A[I]>A[I+1] THEN {перестановка элементов}
BEGIN
T:=A[I];
A[I]:=A[I+1];
A[I+1]:=T
END
END;
Задачи для самостоятельного решения
1. Отсортировать четные элементы массива с помощью простого выбора.
2. Отсортировать отрицательные элементы массива с помощью простого выбора.
3. Задана таблица, содержащая сведения об учениках – фамилия, имя, год, месяц и день рождения. Составить программу, упорядочивающую эту таблицу по возрасту.
Двумерные массивы
Описание
Массивы, положение элементов в которых описывается двумя индексами, называются двумерными. Их можно представить в виде прямоугольной таблицы или матрицы.
Рассмотрим матрицу A размерностью 3*3, то есть в ней будет три строки, а в каждой строке по три элемента:
a11 a12 a13
A=a21 a22 a23
a31 a32 a33
Каждый элемент имеет свой номер, как у одномерных массивов, но сейчас номер уже состоит из двух чисел — номера строки, в которой находится элемент, и номера столбца. Таким образом, номер элемента определяется пересечением строки и столбца. Например, a12 — это элемент, стоящий в первой строке и во втором столбце.
Существует несколько способов объявления двумерного массива.
Способ 1. В Паскале двумерный массив можно описать как одномерный, элементами которого являются одномерные массивы. Например, для матрицы A, приведенной выше:
CONST N =3; M=3;
TYPE OMARRAY=ARRAY[l..M] OF <тип элементов>;
DMARRAY=ARRAY[1..N] OMARRAY;
Var:V OMARRAY;A:DMARRAY;
.В данном случае переменная V объявлена как одномерный массив из трех элементов вещественного типа. Переменная A описана как двумерный массив из трех строк, в каждую из которых включено по три элемента.
Способ 2. Описание массива A можно сократить, исключив определение типа OMARRAY в определении типа DMARRAY
CONST N=2; M=3;
TYPE DMARRAY =ARRAY[l..N] OF ARRAY [1..M] OF<тип элементов>;
VAR A: DMARRAY.
Способ З. Еще более краткое описание массива А можно получить, указывая имя массива и диапазоны изменения индексов для каждой размерности массива:
CONST N=3; M=3;
TYPE DMARRAY = ARRAY[l..N, l..M] Of <тип элементов>;
VAR A: DMARRAY.
Если указанный тип используется для определения одного массива в программе, то удобно объявление массива в разделе описания переменных:
VAR A: ARRAY[l..N, l..M] OF<тип элементов >.
Рассмотренные выше методы решения задач обработки одномерных массивов могут применяться для обработки двумерных массивов. Поскольку положение элемента в двумерном массиве описывается двумя индексами (первый — номер строки, второй — номер столбца), программы большинства матричных задач строятся на основе вложенных циклов. Обычно внешний цикл работает по номеру строки матрицы, а внутренний цикл — по столбцам матрицы, то есть здесь выбирается нужный элемент из выбранной уже строки. Для задания значений элементам массива могут быть использованы операторы присваивания и операторы ввода данных.
Пример
В приведенном ниже примере осуществляется ввод и вывод двумерного массива A размерностью10*15. Формирование и вывод массива описаны в виде двух процедур, которые вызываются последовательно из основной программы. Надо заметить, что формирование двумерного массива можно осуществлять всеми тремя способами, описанными для одномерных массивов, то есть: ввод с клавиатуры, через генератор случайных чисел или с помощью файла. Пусть в нашем примере элементы задаются генератором случайных чисел.
PROGRAM EX45;
CONST N=10; M=15;
TYPE DMARRAY = ARRAY[l..N, l..M] OF INTEGER;
VAR A: DMARRAY;
PROCEDURE INIT(VAR X: DMARRAY);
{процедура формирования массива}
VAR I, J: INTEGER;
BEGIN
FOR I:=l TO N DO
FOR J:= 1 TO M DO
X[I, J]:= -25+Random (51);
END;
PROCEDURE PRINT(X: DMARRAY);
{процедура вывода массива на экран}
VAR I, J: INTEGER;
BEGIN
FOR I:=1 TO N DO BEGIN
{вывод I-oй строки массива}
BEGIN
FOR J:=l TO M DO WRITE(X[I, J]:5);
WRITELN; {переход на начало следующей строки}
END;
END;
Begin {основная программа}
INIT(А);{вызов процедуры формирования массива}
WRITELN (‘Maccuв A:’);
PRINT(A); {вызов процедуры вывода}
READLN;
End.
При решении задач с двумерными массивами можно выделить несколько видов задач.
Найти сумму элементов
Можно найти сумму всех элементов, можно только некоторых, которые удовлетворяют данному условию. Но мы рассмотрим более сложный пример.
•Пример
Сформировать одномерный массив, каждый элемент которого равен сумме отрицательных элементов соответствующей строки заданной целочисленной матрицы.
Решение
Опишем одномерный массив, размерность которого равна количеству строк в двумерном массиве.
CONST N=10;M=15;
TYPE OMARRAY=ARRAY [l..N] OF INTEGER;
DMARRAY=ARRAY[1..N, l..M] OF INTEGER;
VAR B: OMARRAY; A: DMARRAY;
Формирование одномерного массива по заданному правилу опишем в виде процедуры. Ей будем передавать два параметра — двумерный массив и одномерный, который является результатом. В теле процедуры будут использоваться вложенные циклы. Внешний цикл в ней определяет номер строки, который совпадает с номером элемента одномерного массива. Здесь же задаются начальные значения элементов одномерного массива, равные 0. Во внутреннем цикле анализируется каждый элемент выбранной строки, и если он отрицательный, то добавляется к сумме всех предыдущих отрицательных элементов выбранной строки матрицы.
PROCEDURE SUM(X: DMARRAY ; VAR Y: OMARRAY);
VAR I, J: INTEGER;
BEGIN
FOR I:=l TO N DO BEGIN
Y[I]:=0; {задание начальных значений элементов массива суммы}
FOR J:=l TO M{накопление суммы отрицательных}
IF X[I, J]<0 THEN Y[I]:=Y[I]+X[I, J];
END;
End;
В основной программе обращаемся к процедуре SUM(A, B) и остается только вывести на экран одномерный массив B, в котором записаны суммы отрицательных элементов каждой строки.
Нахождение количества элементов с данным свойством
Задачи на нахождение номеров элементов с заданными свойствами и на нахождение количества таких элементов во всем массиве останутся практически такими же. В них только добавится второй цикл или вывод двух индексов вместо одного.
Пример
Найти максимальный элемент массива и его индексы.
Решение
Так как элементы могут повторяться, то договоримся, что будем запоминать только индексы первого максимального элемента. Опишем процедуру, которой передается массив, и ее результатом является значение максимального элемента и индексы первой встречи такого значения.
PROCEDURE MAXIMUM(X: DMARRAY; VAR MAX, MAXI, MAXJ: INTEGER);
Var I, J: INTEGER;
BEGIN
{начальные значения}
MAX:=X[l, l]; MAXI:=l; MAXJ:=l;
FOR I:=l TO N DO
FOR J:=l TO M DO
IF X[I, J]>MAX THEN{присвоение новых значений}
BEGIN
MAX:=X[I, J];
MAXI:=I; MAXY:=J;
END;
END;
Пример
Найти количество отрицательных элементов в каждой строке.
•Решение
Рассмотрим несколько способов решения этой задачи.
Способ 1 — количество элементов каждой строки хранить в одномерном массиве соответствующей размерности. Тогда можно описать такую процедуру:
PROCEDURE Ql(X: DMARRAY; VAR Y: OMARRAY );
VAR I, J: INTEGER;
BEGIN
FOR I:=l TO N DO
BEGIN
Y[I]:=0;
FOR J:==l TO M DO
IF X[I, J]<0 THEN INC(Y[I]);
END;
END;
Способ 2 — использовать счетчик, находить количество элементов строки и выводить значение на экран. Тогда:
PROCEDURE Q2(X: DMARRAY);
Var I, J, K: INTEGER;
BEGIN
FOR I:=1 TO N DO
BEGIN
K:=0;
FOR J:=1 TO M DO
IF X[I, J]<0 THEN INC(K);
WRITELN(I,’ - ’,K);
{вывод номера строки и количества заданных элементов}
END;
END;
Определить, отвечает ли заданный массив некоторым требованиям
Пример
Определить, есть ли в данном массиве элемент, равный 0.
Решение
Опишем логическую функцию, значение которой равно истине, если такой элемент есть, и ложь - в противном случае. Самый простой способ – это просматривать элементы, и если найден искомый, то присвоить функции значение TRUE, иначе – FALSE.
FUNCTION CHECK1(X:DMARRAY):BOOLEAN;
VAR I, J:INTEGER;T:BOOLEAN;
BEGIN
T:=TRUE;{предполагаем, что искомого элемента в массиве нет}
I:=1;
WHILE T AND(I<=N) DO
BEGIN
J:=1;
WHILE(J<=M)AND(X[I, J]<>0) DO INC(J);
T:=(J=M+1); {определяем, найден ли искомый элемент, если просмотрена вся строка, то значение J=M+1 и T=TRUE, иначе элемент не найден и T:=FALSE}
INC(I);
END;
CHECK1:=NOT T;{T=FALSE, если элемент в массиве есть, поэтому значению функции присваиваем NOT T}
END;
Пример
Заполнить двумерный массив размером N*N нулями и единицами. Подсчитать число единиц, лежащих выше главной диагонали.
Решение
Для индексов элементов, лежащих на главной диагонали номер строки совпадает с номером столбца, а для тех, которые выше, номер столбца больше номера строки. Поэтому получаем:
…
CONST N=5;
VAR X:ARRAY[1..N,1..N] OF INTEGER;I, J,K:INTEGER;
…
FUNCTION CHET(X):INTEGER;
VAR I, J,K:INTEGER;
BEGIN
K:=0;
FOR J:=1 TO N DO
FOR I:=1 TO N DO
IF (X[I, J]=1)AND(I>=J)THEN INC (K);
CHET:=K;
END.
Пример
Заполнить массив размером N*M в виде “змейки”.
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
16 | 15 | 14 | 13 | 12 | 11 | 10 | 9 |
17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 |
32 | 31 | 30 | 29 | 28 | 27 | 26 | 25 |
33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 |
48 | 47 | 46 | 45 | 44 | 43 | 42 | 41 |
Решение
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 |


