trains_hr.gif
 


В ПОМОЩЬ СТУДЕНТУ И ШКОЛЬНИКУ

 


Горбачев Л.И. Основы программирования в среде Turbo Pascal.

[НАЗАД]    [ДАЛЕЕ]

2. Программирование задач с использованием массивов.

   К типичным задачам по обработке массивов можно отнести следующие:

  • вывод массива;
  • ввод массива;
  • поиск заданного элемента;
  • поиск в массиве максимального и минимального элемента;
  • сортировка массива.

Пример: Пусть задан двумерный массив:
A= 2 1 5 < tr>
3 4 1 < tr>

Необходимо транспонировать данный массив (т.е. поменять местами строки и столбцы).
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 Trans1;
uses CRT;
var A : array[1..5, 1..7] of integer;
At : array[1..7, 1..5] of integer;
I, J : integer;
Begin
{ Ввод и транспонирование массива A }
Randomize;
ClrScr;
{ Ввод и распечатка массива A }
Write('Массив до транспонирования');
for I := 1 to 5 do
begin
WriteLn;
for J := 1 to 7 do
begin
A[I, J] := Round(random * 1000);
Write(A[I, J]:5); At[J, I] := A[I, J];
end
end;
WriteLn;
{ Распечатка массива At }
Write('Транспонированный массив');
for I := 1 to 7 do
begin
for J := 1 to 5 do Write(At[I, J]:5)
WriteLn;
end;
repeat until KeyPressed
End.

Пример: Дан массив M размерностью 10х10, содержащий целые числа. Вывести на дисплей сумму четных элементов этого массива.
program SumElem;
uses Crt;
const N = 2;
var M : array[1..N, 1..N] of integer;
I, J, Sum : integer;
Begin
Sum := 0;
Randomize;
ClrScr;
{ Ввод и распечатка массива M }
for I := 1 to N do
begin
WriteLn;
for J := 1 to N do
begin
M[I, J] := Round(random * 100);
Write(M[I, J]:5);
end
end;
WriteLn;
for I := 1 to N do
for J := 1 to N do
{ Odd() - Определение нечетного числа (odd - нечетный) }
if not Odd(M[i, J]) then Sum := Sum + M[I, J];
Write('Сумма четных чисел равна: ', Sum);
repeat until KeyPressed
End.

Пример: Дан целочисленный массив M размерностью 8х10. Вывести на дисплей наибольший и наименьший элементы этого массива, указав на пересечении каких строк и столбцов находятся эти элементы.
program MaxMin;
uses CRT;
const K = 8; L = 10; n = 100;
var M : array[1..K, 1..L] of integer;
Max, Min, I, J : integer;
Imax, Jmax, Imin, Jmin : integer;
Begin
Randomize;
ClrScr;
{ Ввод и распечатка массива M }
for I := 1 to K do
begin
WriteLn;
for J := 1 to L do
begin
M[I, J] := random * n;
if M[I,J] < n/2 then M[I,J] := -M[I,J];
Write(M[I, J]:5);
end
end;
WriteLn;
Max := M[1, 1]; Imax := 1; Jmax := 1;
Min := M[1, 1]; Imin := 1; Jmin := 1;
for I := 1 to K do
for J := 1 to L do
if M[i, J] > Max then
begin
Max := M[I, J]; Imax := I; Jmax := J;
end
else
if M[I, J] < Min then
begin
Min := M[I, J]; Imin := I; Jmin := J
end;
WriteLn(' Максимальный элемент M[', Imax,',', Jmax, '] =', Max);
WriteLn(' Минимальный элемент M[', Imin,',', Jmin, '] =', Min);
repeat until KeyPressed
End.

Пример: Составить программу сортировки одномерного массива по возрастанию значений его элементов. Под сортировкой понимают процесс перестановки элементов с целью упорядочивания их в соответствии с каким-либо критерием.
Алгоритм сортировки таков:

  • считаем первый элемент массива минимальным;
  • начиная со второго элемента, находим элемент, который по значению меньше минимального (в данном случае первого). Считаем его минимальным элементом;
  • совершаем перестановку найденного минимального элемента с первым (бывшим минимальным) элементом массива.
Итак, самый меньший элемент массива имеет первый порядковый номер. Теперь считаем второй элемент массива минимальным и, начиная с третьего элемента, ищем элемент массива, который по значению меньше минимального (второго). Считаем его минимальным элементом. Далее совершаем перестановку и т.д. Такую процедуру нужно выполнять N - 1 раз, где N - количество элементов массива.
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.

[НАЗАД]    [ДАЛЕЕ]


Главная
Новости
TurboPascal
Учебное пособие
Лекции
Исходники
Математика
Книги
Лекции
Шпоры
ЦТ и ЕГЭ
Физика

Книги

Шпоры
ЦТ и ЕГЭ

Литература

Сочинения

Краткие содержания

Другое
Мой родной край
Фотогалерея
Форум
Ссылки

Гостевая






 

                                        © Copyright(c) 2004 Amro Group. All rights reserved

 

Hosted by uCoz