| |||||||||||||||||||||||||||||||||||
|
2. Программирование задач с использованием массивов.К типичным задачам по обработке массивов можно отнести следующие:
Пример: Пусть задан двумерный массив:
Необходимо транспонировать данный массив (т.е. поменять местами строки и столбцы). program Trans; uses CRT; var A : array[1..2, 1..3] of integer; At : array[1..3, 1..2] of integer; I, J : integer; Begin ClrScr; { Ввод и транспонирование массива A } for I := 1 to 2 do for J := 1 to 3 do begin WriteLn('Введите элемент массива - A[', I,',', J,']'); ReadLn(A[I, J]); At[J, I] := A[I, J] end; { Распечатка массива At } Write('Транспонированный массив'); for I := 1 to 3 do begin for J := 1 to 2 do Write(At[I, J]:5); WriteLn; end; repeat until KeyPressed End. В этом примере инициализация (заполнение массива
данными) производилась вручную, с клавиатуры. В следующем примере задача
инициализации массива решается с помощью генерации случайного числа (random).
Все элементы массива - целые положительные числа из промежутка [0;
1000].
program SortMas; uses CRT; const Count = 10; type Mas = array[1..Count] of real; var M : Mas; I, J, Imin : integer; Min, R : real; Begin Randomize; ClrScr; { Ввод элементов маcсива M } for I := 1 to Count do M[I] := random * 10; { Распечатка элементов маcсива M до сортировки } Write(' Массив M до сортировки'); WriteLn; for I := 1 to Count do Write(M[I]:7:2); WriteLn; { Обработка массива M } for I := 1 to Count - 1 do begin Min := M[I]; Imin := I; (* Находим минимальный элемент *) for J := I + 1 to Count do begin if M[J] < Min then begin Min := M[J]; Imin := J; end; end; { Перестановка элементов массива } R := M[I]; M[I] := M[Imin]; M[Imin] := R; end; { Распечатка элементов маcсива M после сортировки } Write(' Массив M после сортировки'); WriteLn; for I := 1 to Count do Write(M[I]:7:2); repeat until KeyPressed; End. Пример: Программа сортировки двумерного массива по возрастанию значений элементов массива (способ перестановки). program SortMas2; uses CRT; const Rows = 5; Columns = 5; type Mas = array[1..Rows, 1..Columns] of real; var M : Mas; I, J, K, L, Temp, Imin, Jmin : integer; Min, R : real; Begin Randomize; ClrScr; { Заполнение и распечатка исходного массива } for I := 1 to Rows do begin WriteLn; for J := 1 to Columns do begin M[I, J] := random * 10; Write(M[I, J]:7:2); end; end; WriteLn; WriteLn; { Сортировка способом перестановки } for I := 1 to Rows do for J := 1 to Columns do begin Min := M[I, J]; Imin := I; Jmin := J; for K := I to Rows do begin { Установка указателя номера элемента в строке } if K = I then Temp := J else Temp := 1; for L := Temp to Columns do { Определение минимального элемента массива } if M[K, L] < Min then begin Min := M[K, L]; Imin := K; Jmin := L; end; end; { Перестановка элементов } R := M[I, J]; M[I, J] := M[Imin, Jmin]; M[Imin, Jmin] := R; end; { Распечатка отсортированного массива } for I := 1 to Rows do begin WriteLn; for J := 1 to Columns do Write(M[I, J]:7:2); end; repeat until KeyPressed End. Пример: Программа для нахождения средней температуры в течение недели. program TempWeek; uses CRT; var day : array[1..7] of string[11]; { названия дней недели } temp : array[1..7] of real; { температура } sum : real; { сумма температур за неделю } sredn : real; { средняя температура за неделю } i : integer; Begin ClrScr; day[1] := 'Понедельник'; day[2] := 'Вторник'; day[3] := 'Среда'; day[4] := 'Четверг'; day[5] := 'Пятница'; day[6] := 'Суббота'; day[7] := 'Воскресенье'; WriteLn('Укажите температуру за неделю'); for i := 1 to 7 do begin Write(day[i],' -> '); ReadLn(temp[i]); end; { вычисление средней температуры за неделю } sum := 0; for i:= 1 to 7 do sum := sum + temp[i]; sredn := sum / 7; WriteLn('Средняя температура за неделю: ', sredn:6:2); ReadLn End. Пример: Программа поиска элемента массива. Применен алгоритм простого перебора. Program Poisk; Uses CRT; Var mas : array[1..10] of integer; { Массив целых чисел } obrazec : integer; { Образец для поиска } sovpad : boolean; { Признак совпадения с образцом } i : integer; { Параметр цикла } Begin ClrScr; WriteLn('Поиск в массиве.'); Write('Введите 10 целых в одной строке через пробел '); Write('и нажмите Enter > '); for i := 1 to 10 do Read(mas[i]); { Ввод чисел в массив } Write('Введите образец для поиска (целое число) > '); ReadLn(obrazec); { Поиск простым перебором } sovpad := False; { Совпадений нет } i := 1; { Проверяем с первого элемента массива } repeat { Совпадение с образцом } if mas[i] = obrazec then sovpad := True else Inc(i); { Переход к следующему элементу } until (i > 10) or (sovpad); if sovpad then WriteLn('Совпадение с элементом номер ',i:2,'. Поиск успешен.') else WriteLn('Совпадения с образцом нет.'); ReadLn End. Пример: Пусть нужно сосчитать общее количество продукции, выпускаемой каждым заводом, и количество продукции каждого наименования, выпускаемой всеми заводами. Вычисляемые и исходные данные удобно объединить в одну таблицу. Program Tablo; Uses CRT; Const Izd = 4; Zav = 3; Var Prod : array[1..Zav + 1, 1..Izd + 1] of integer; i : integer; { Номер завода } j : integer; { Номер изделия } Begin ClrScr; WriteLn('Ввод исходных данных.'); for i := 1 to Zav do begin WriteLn('Завод N', i:2); for j := 1 to Izd do begin Write('Изделие N', j:2, ' -> '); ReadLn(Prod[i,j]); end; end; { Вычисляем общее количество изделий, выпускаемых каждым заводом } Prod[Zav + 1, Izd + 1] := 0; for i := 1 to Zav do begin { Общее количество изделий, произведенное i-м заводом } Prod[i, Izd + 1] := 0; for j := 1 to Izd do Prod[i, Izd + 1] := Prod[i, Izd + 1] + Prod[i,j]; Prod[Zav+1,Izd+1] := Prod[Zav+1, Izd+1] + Prod[i, Izd+1]; end; { Вычислим количество изделий одного наименования,выпущенных всеми заводами } for j := 1 to Izd do begin Prod[Zav + 1, j] := 0; for i := 1 to Zav do begin Prod[Zav + 1,j] := Prod[Zav + 1,j] + Prod[i,j]; end; end; { Вывод итогов таблицы } WriteLn(' 1 2 3 4 Всего'); for i := 1 to Zav + 1 do begin if i <= Zav then Write('Завод', i:2) else Write('Всего '); for j := 1 to Izd + 1 do Write(Prod[i,j]:5); WriteLn end; ReadLn End. |
| |||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||
© Copyright(c) 2004 Amro Group. All rights reserved |
|