Тема 9. Массивы в языке Pascal 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Тема 9. Массивы в языке Pascal



Примеры решаемых задач

Пример 1. Составить программу, которая сформирует случайным образом массив из 20 целых чисел и:

а) выведет его в одну строку на экране;

б) выведет элементы массива, стоящие на четных местах и вычислит их сумму;

в) вычислит количество нечетных элементов;

г) упорядочит элементы массива по убыванию.

Программа:

Program М1;

Uses Crt;

Type     Numbers = Array [1..20 ] Of Integer; {}

Var A: Numbers;

I, J, S, K, P: Integer;

Begin

Clrscr;

Randomize; { инициализируем датчик случайных чисел }

For I:= 1 To 20 Do { заполняем массив А случайными числами от 0 до 99}

A [ I ]:= Random (100);

{ Задача (а) }

Writeln (‘Получили массив:’); { выводим полученный массив на экран }

For I:= 1 To 20 Do

Write (A [ I ]: 3);

Writeln; { переводим курсор в следующую строку экрана }

{ Задача (б) }

Writeln (‘Элементы на четных местах: ’);

S:= 0; { Обнулили сумму }

For I:= 1 To 20 Do

If I mod 2 = 0 { Если у элемента четный НОМЕР }

 Then Begin

Write (A [ I ]: 3); { то выводим его }

S:= S + A [ I ]  { и накапливаем сумму }

End;

Writeln; { переводим курсор в следующую строку экрана }

Writeln (‘ Их сумма ’, S); { выводим значение суммы }

{ Задача (в) }

K:= 0; { Обнулили счетчик нечетных элементов в массиве }

For I:= 1 To 20 Do

If A [ I ] mod 2 <> 0 { Если ЭЛЕМЕНТ нечетный }

 Then K:= K + 1; { то увеличиваем значение счетчика }

Writeln (‘ Количество нечетных элементов ’, К);

{ выводим значение счетчика }

{ Задача (г) }

{ Сортируем массив А по убыванию }

For I:= 1 To 19 Do

For J:= I + 1 To 20 Do

If A[ J ] > A[ I ] Then

Begin

P:= A[ I ]; {меняем местами i-ый и j-ый элементы массива А}

A[ I ]:= A[ J ]; { для этого используем переменную p }

A[ J ]:= P 

End;

Writeln (‘Получили массив:’); {выводим упорядоченный массив на экран}

For I:= 1 To 20 Do

Write (A [ I ]: 3);

Readln

End.

Пример 2. Составить программу, которая сформирует случайным образом двумерный массив N x N целых чисел и:

а) выведет его на экран в виде матрицы;

б) выведет элементы массива, стоящие над главной диагональю;

в) вычислит суму элементов, стоящих на побочной диагонали;

г) вычислит суммы столбцов.

 

Пояснение:

Если элемент M [i, j] двумерного массива M размера n x n расположен на главной диагонали, то i = j (номер строки равен номеру столбца).

Если элемент M [i, j] двумерного массива M размера n x n расположен на побочной диагонали, то i + j = n + 1 (сумма его индексов равна n + 1).

Программа:

Program М2;

Uses Crt;

Type     Numbers = Array [1..20, 1..20 ] Of Integer;

{ Тип - двумерный массив 20 х 20 }

Var A: Numbers;

    N, I, J, S: Integer;

Begin

Clrscr;

Write (‘Введите количество строк и столбцов ’);

Readln(N);

Randomize; { инициализируем датчик случайных чисел }

For I:= 1 To N Do { Организуем цикл по строкам }

For J:= 1 T N Do { Организуем цикл по столбцам }

A [ I,J]:= Random (100); { заполняем массив А случайными числами }

{ Задача (а) }

Writeln (‘Получили массив:’); { выводим массив на экран }

For I:= 1 To N Do

Begin

For J:= 1 To N Do

Write (A [I, J]: 3); {выводим все элементы i-ой строки в одну строку на экране}

Writeln { переводим на экране курсор на следующую строку}

End;

{ Задача (б) }

Writeln (‘Элементы над главной диагональю:’);

For I:= 1 To N Do

Begin

For J:= 1 To N Do

If J >= I { Eсли элемент на главной диагонали или над ней, }

Then Write (A [I, J]: 3) { то выводим его}

Else Write(‘  ‘:3); { иначе выводим три пробела }

Writeln { переводим на экране курсор на следующую строку}

End;

{ Задача (в) }

S:= 0;

For I:= 1 To N Do

For J:= 1 To N Do

If J + I = N + 1 { Eсли элемент на побочной диагонали }

Then S:= S + A [I, J]; { то накапливаем сумму }

Writeln (‘Сумма элементов побочной диагонали ’, S);

{ Задача (г) }

For J:= 1 To N Do { организуем цикл по столбцам }

Begin

S:= 0; { обнуляем сумму для каждого столбца }

For I:= 1 To N Do { цикл по строкам }

S:= S + A [I, J]; { накапливаем сумму элементов столбца }

Writeln (‘ Сумма элементов ’, J, ‘ столбца ’, S) { выводим на экран значение суммы }

End;

Readln

End.


 

Тема 11. Подпрограммы в языке Pascal

Примеры решаемых задач

Пример 1. Составить программу, которая вычислит значение выражения

am + bn +(a - b) m + n.

Вычисление степени числа оформить в виде подпрограммы.

Пояснение. Составим и сравним две программы: с использованием процедуры и функции вычисления степени числа.

Программа:

program calc_proc;

uses crt;

var a, b, m, n, s1, s2, s3, s: integer;

procedure stepen (x, y: integer; var z: integer);

{процедура возводит число x в степень y, результат записывает в z }

{т.е. в процедуре описано правило вычисления z = xy }

var i: integer; { локальная переменная для организации цикла }

begin

z:= 1;

for i:= 1 to y do z:= z * x

end;

begin

clrscr;

write(‘Введите a, b, m, n ’);

readln(a, b, m, n);

{ три раза вызываем процедуру stepen для вычисления трех слагаемых }

stepen(a, m, s1); { вычислили s1 как am }

stepen(b, n, s2); { вычислили s2 как bn }

stepen(a-b, m+n, s3); { вычислили s3 как (a-b)m+n }

s:= s1 + s2 + s3; { вычислили сумму трех слагаемых }

writeln(‘Значение выражения ’, s);

readln

end.

program calc_func;

uses crt;

var a, b, m, n, s: integer;

function stepen (x, y: integer): integer;

{ функция возводит число x в степень y }

{ т.е. описано правило вычисления stepen = xy }

var i,z: integer; {локальные переменные:
i для организации цикла, z для вычисления произведения }

begin

z:= 1;

for i:= 1 to y do z:= z * x;

stepen:= z { присвоили имени функции вычисленное значение }

end;

begin

clrscr;

write(‘Введите a, b, m, n ’);

readln(a, b, m, n);

{ три раза вызываем функцию stepen для вычисления трех слагаемых }

s:= stepen(a, m) + stepen(b, n) + stepen(a-b, m+n, s3);

writeln(‘Значение выражения ’, s);

readln

end.

Тема 12. Тип данных запись (Record)

Примеры решаемых задач

Пример 1. Составить программу, которая обрабатывает информацию о студентах (фамилия, номер группы, рейтинг):

а) вводит такую информацию;

б) выводит список студентов заданной группы;

в) выводит список студентов в порядке убывания рейтинга.

Пояснение: Для хранения данных будем использовать массив записей с информацией о студентах. (При решении этой задачи можно и не использовать тип запись, а написать программу, обрабатывающую три массива. Без использования типа Record трудно обойтись при обработке файлов – см. следующую тему.)

Программа:

Program Record_Student;

Uses Crt;

Const N = 100; { N - максимальное количество студентов }

Type Stud = Record {данные об одном студенте–запись из трех полей:}

Name: String; { фамилия}

Group: Integer; { номер группы}

Rating: Real   { рейтинг }

End;

Students = Array [1..N] Of Stud; { данные обо всех студентах - }

                                                   { это массив записей }

Var St: Students;   { список студентов – массив записей }

K, M, L, Gr: Integer;

Pst: Stud; { промежуточная переменная, необходимая для того, }

{чтобы менять местами два элемента массива при его сортировке}

Begin

ClrScr;

{ а) Ввод данных о студентах }

Write (‘Сколько студентов ’);

Readln (M);

For K:= 1 To M Do

With St [K] Do { вводим все поля записи St[K] }

Begin

Write (‘Введите фамилию ’,K,’ студента ‘);

Readln (Name);

Write (‘Введите номер его группы ‘);

Readln (Group);

Write (‘Введите его рейтинг ‘);

Readln (Rating)

End;

{ б) Вывод списка заданной группы }

Write (‘Список какой группы требуется ’);

Readln (Gr);

Writeln(‘Список группы № ‘,Gr);

For K:= 1 To M Do { просматриваем весь список }

With St [K] Do

If Group = Gr     { если номер группы студента равен требуемому}

Then Writeln (Name:20);  { то печатаем его фамилию }

{ в) Сортировка студентов по их рейтингу }

For K:= 1 To M – 1 Do

For L:= K + 1 To M Do

If St[L]. Rating > St[K]. Rating

Then Begin

Pst:= St[L];

St[L]:=St[K];

St[K]:=Pst

End;

{ вывод отсортированного списка}

Writeln (‘Список студентов в порядке убывания рейтинга:’);

For K:= 1 To M Do

Writeln (Name:20, Group:5, Rating:7:2);

Readln

End.



Поделиться:


Последнее изменение этой страницы: 2021-04-05; просмотров: 73; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.218.196.182 (0.021 с.)