Упорядочение массива. Обработка матриц 


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



ЗНАЕТЕ ЛИ ВЫ?

Упорядочение массива. Обработка матриц



 

ПОСТАНОВКА ЗАДАЧИ: Расположить элементы массива в порядке возрастания.

Из множества сортировок рассмотрим поиск MIN и перестановку.

Исходный массив: 3 2 -5 2 0 8 4

Конечный массив: -5 0 2 2 3 4 8

 

Program SortirowkaMassiva; uses crt;

 

...

 

procedure Sort;

var min: real;

Begin

for i:=1 to n do

Begin

min:=a[i]; k:=i;

for j:=i to n do

if a[j]

a[k]:=a[i];

a[i]:=min

End

end;

 

Begin

ClrScr;

Input;

ClrScr;

write('Исходный массив: '); Print; writeln;

Sort;

write('Конечный массив: '); Print;

readkey;

End.

 

З А Д А Н И Я:

 

1. Набрать и исполнить программу.

 

2. Отсортировать исходный массив по убыванию элементов.

 

3. Отсортировать исходный массив по возрастанию и убыванию элементов.

 

4. Отсортировать массив латинских букв.

 

 

ПРАКТИЧЕСКОЕ ЗАНЯТИЕ № 42

 

О Б Р А Б О Т К А М А Т Р И Ц

ВВОД И ВЫВОД МАТРИЦ

В Паскале двумерные массивы называют матрицами.

TYPE MATRICA=ARRAY[1..N,1..M] OF REAL; - определение типа

двумерного массива, где N -число строк, М -столбцов.

 

ПОСТАНОВКА ЗАДАЧИ: Заполнить матрицу и вывести ее на экран.

 

Заполнение матрицы может производиться также как и одномерного массива, только с помощью вложенных циклов.

 

Program Wwod_Wywod_Mat; uses crt;

const n=3;

var a: array[1..n,1..n] of integer;

i,j: integer;

Begin { ввод матрицы по строкам }

ClrScr;

for i:=1 to n do

for j:=1 to n do

Begin

write('a[',i,',',j,']=');readln(a[i,j])

end;

{ вывод матрицы по строкам вывод в указанном месте}

for i:=1 to n do for i:=1 to n do

Begin begin

for j:=1 to n do write(a[i,j],' '); gotoxy(10,5+i);

writeln { перевод курсора на новую строку } for j:=1 to n do write(a[i,j]:3);

end; end;

readkey; readkey;

End. End.

 

Можно задать постоянную матрицу:

 

const a: array[1..3,1..3] of integer=((1,2,3),

(4,5,6),

(7,8,9));

 

З А Д А Н И Я:

 

1. Набрать и исполнить программу.

2. Описать процедуры ввода и вывода матриц.

3. Задать постоянную матрицу.

4. Вывести на экран матрицу по столбцам.

5. Вывести матрицу в указанное место экрана.

 

 

ПРАКТИЧЕСКОЕ ЗАНЯТИЕ № 43

 

О Б Р А Б О Т К А М А Т Р И Ц

СУММА ЭЛЕМЕНТОВ МАТРИЦЫ

 

ПОСТАНОВКА ЗАДАЧИ: Для двумерного массива B размером N х M необходимо

вычислить сумму всех элементов матрицы.

 

Program Summa_Mat; uses crt;

 

...

 

procedure Sum;

Begin

s:=0;

for i:=1 to n do

for j:=1 to m do

s:=s+b[i,j]

end;

 

Begin

ClrScr;

Input_Mat; { если массив вводится с клавиатуры }

ClrScr;

Print_Mat; writeln;

Sum;

write('Сумма элементов матрицы равна ',s);

readkey;

End.

 

З А Д А Н И Я:

 

1. Набрать и исполнить программу.

 

2. Ввести дробные и отрицательные числа.

 

ПРАКТИЧЕСКОЕ ЗАНЯТИЕ № 44

 

О Б Р А Б О Т К А М А Т Р И Ц

ВЫЧИСЛЕНИЕ СЛЕДА МАТРИЦЫ

СЛЕД МАТРИЦЫ - сумма диагональных элементов матрицы N х N.

 

ПОСТАНОВКА ЗАДАЧИ: Для матрицы В размером N х N надо вычислить

сумму диагональных элементов B[i,i].

 

...

 

procedure Sled_Mat; { главная диагональ }

Begin

s:=0;

for i:=1 to n do s:=s+b[i,i]

end;

 

...

ВЫЧИСЛЕНИЕ СУММЫ ЭЛЕМЕНТОВ СТРОК МАТРИЦЫ

 

ПОСТАНОВКА ЗАДАЧИ: Вычислить сумму элементов каждой строки матрицы В

размером N х M. Результат получить в виде вектора D.

...

 

procedure Sum_Strok_Mat;

Begin

for i:=1 to n do

Begin

s:=0;

for j:=1 to m do

s:=s+b[i,j];

d[i]:=s

End

end;

 

...

...

 

З А Д А Н И Я:

 

1. Набрать и исполнить программу.

2. Получить сумму элементов побочной диагонали.

3. Напечатать вектор суммы строк вертикально справа от матрицы.

4. Получить вектор суммы столбцов матрицы.

 

Приложение:

Процедуры обработки матриц:

 

Сумма указанной строки:

S:=0; i:=3;

For J:=1 to m do S:=S+b[i,j];

 

Транспонирование квадратной матрицы:

For i:=1 to n-1 do

For j:=1 to n do

Begin

P:= a[i,j];

a[i,j]:=a[j,i];

a[j,i]:=p;

end;

 

Удаление строки из матрицы:

n:=n-1;

For i:=1 to n do

For j:=1 to m do b[i,j]:=b[i+1,j];

 

Включение строки в матицу:

i:=n;

while i>=k do

begin

for j:=1 to m do b[i+1,j]:=b[i,j];

i:=i-1;

end;

for j:=1 to m do b[k,j]:=c[j];

n:=n+1;

 

Перестановка строк матрицы:

For k:=1 to k do c[k]:=a[i,k];

For k:=1 to k do a[i,k]:=a[j,k];

For k:=1 to k do a[j,k]:=c[k];

 

Поиск минимального элемента матрицы:

Min:= a[1,1]; k;=1; L:=1;

For i:=1 to n do

For j:=1 to m do

IF min>a[i,j] then begin min:=a[i,j]; k:=i; l:=j; end;

 

Сложение строк матрицы:

For j:=1 to m do

a[k,j]:=a[k,j]+a[l,j]*b;

 

З А Д А Н И Я:

  1. Изменить значения указанной строки.
  2. Найти минимальные значения в каждой строке.
  3. Найти максимальные значения в каждом столбце.

 

ПРАКТИЧЕСКОЕ ЗАНЯТИЕ № 45

ПОДГОТОВКА К КОНТРОЛЬНОЙ РАБОТЕ

ПОСТАНОВКА ЗАДАЧИ:

1. ПОВТОРИТЬ ТЕМУ "МАССИВЫ (ВЕКТОРА И МАТРИЦЫ)".

2. В КОНТРОЛЬНОЙ РАБОТЕ 2 ЗАДАНИЯ:

ОБРАБОТКА ОДНОМЕРНОГО МАССИВА (ВЕКТОРА);

а) 1 -я обработка; б) 2 -я обработка.

3. ПРОГРАММА ДОЛЖНА ИМЕТЬ БЛОЧНУЮ СТРУКТУРУ.

ПРИМЕР ЗАДАНИЯ: Заполнить одномерный числовой массив и выбрать из него отрицательные элементы. Найти среднее арифметическое отрицательных элементов массива. Отрицательные элементы отсортировать по возрастанию.

 

ПРИМЕР РЕШЕНИЯ:

Program Vektor; uses crt;

type mas=array[1..40] of integer;

var i, k, s, n, p, q: integer;

a, d: mas;

procedure Input;

Begin

randomize; p:=-10; q:=10; for i:=1 to n do a[i]:=random(q-p+1)+p;

end;

procedure Print (y: mas; x: integer);

Begin

for i:=1 to x do write(y[i],' '); writeln; writeln;

end;

procedure Vybor;

Begin

k:=0; for i:=1 to n do if a[i]

end;

function Sredn_Arifm: real;

Begin

s:=0;

if k<>0 then begin for i:=1 to k do s:=s+d[i]; Sredn_Arifm:=s/k; end

else Sredn_Arifm:=0

end;

procedure Sort;

var l,j,min: integer;

Begin

k:=0; l:=0;

for i:=1 to k-1 do begin

min:=d[i];

for j:=i+1 to k do

if d[j]

min:=d[j]; l:=j;

d[l]:=d[i]; d[i]:=min

End

End

end;

 

 

Begin

ClrScr;

write('Число элементов(<40): '); readln(n); clrscr; Input;

write('Исходный массив A: '); Print(a,n); vybor;

write('Mассив D: '); Print(d,k);

writeln('Среднее арифметическое отрицательных элементов массива равно ',Sredn_Arifm);

if Sredn_Arifm=0 then writeln('Нет отрицательных элементов');

Sort;

if Sredn_Arifm<>0 then

Begin

write('Отсортированный массив по возрастанию: ');

Print(d,k)

end;

readkey;

End.

ПРАКТИЧЕСКОЕ ЗАНЯТИЕ № 46

ЗАПИСИ

При работе с массивами существует один существенный недостаток – элементы в массиве одного типа. На практике часто требуется обрабатывать данные с элементами разного типа. Если одновременно вести работу с несколькими массивами разного типа, то программа получается очень громоздкой и требуется много времени для отладки такой программы.

В Паскале предусмотрена возможность описывать сложные типы и работать с ними.

ЗАПИСЬ – упорядоченное множество значений, называемых полями записи, которые могут иметь разные типы.

ЗАПИСЬ – структура данных, построенная из компонент, имеющих в общем случае разные типы данных.

Тип записи

TYPE NAME=RECORD

поле_1: тип;

поле_2: тип;

……..

поле_N:тип;

END;

VAR NAMREC: NAME;

Record – служебное слово – запись,

NAME – имя типа записи,

Поле_N – поле записи указанного типа, в качестве поля может быть запись,

NAMREC – имя записи – переменная определенного TYPE типа;

Имена полей не должны совпадать,

Если полей одного типа несколько, то их имена перечисляются через запятую:

Record x,y: real; end;

 

Доступ к элементу записи производится с помощью компонентных переменных, имеющих форму R.T, где R – переменная типа записи, Т – имя поля.

Если полей много, то обращение можно произвести с помощью оператора над записью или оператора присоединения WITH имя_записи DO

Задача

Для группы учащихся, имеющих итоговые оценки по 5 предметам вычислить средний балл и упорядочить список группы по убыванию среднего балла.

 

Нарисуем таблицу с указанием имен полей, их типов.

Затем приступим к описанию переменных и написанию программы.

 

Табель успеваемости

 

Фамилия Fam: string[15] Матем Mat: byte Русский Rus: byte Физика Fiz: byte Химия Xim: byte История Ist: byte Средн балл Sb:real
  Иванов Петров Сидоров             3.8 3.4

 

Program Sr_Ball; uses crt;

type grup=record

fam:string[15];

mat,rus,xim,fiz:byte;

sb:real;

end;

var tbl:array[1..20] of grup;

y:grup;

i,j,k,m:integer;

x:real;

Begin

clrscr;

write('Количество учащихся в группе: '); readln(m);

writeln;

for i:=1 to m do

with tbl[i] do

Begin

write('fam[',i,']='); readln(fam);

write('mat='); readln(mat);

write('rus='); readln(rus);

write('xim='); readln(xim);

write('fiz='); readln(fiz);

end;

for i:=1 to m do with tbl[i] do sb:=(mat+rus+xim+fiz)/4;

for i:=1 to m do

Begin

k:=i; x:=tbl[i].sb;

for j:=i to m do

if tbl[j].sb>x then begin k:=j; x:=tbl[j].sb end;

y:=tbl[k];

tbl[k]:=tbl[i];

tbl[i]:=y;

end;

clrscr;

writeln('Пн | Фамилия | Mat | Rus | Xim | Fiz ');

writeln('---------------------------------------------');

for i:=1 to m do

with tbl[i] do

writeln(i:2,' |',fam:15,' | ',mat:2,' | ',rus:2,' | ',xim:2,' | ',fiz:2);

readln; clrscr; writeln('Пн | Фамилия | Sredn ball ');

for i:=1 to m do with tbl[i] do writeln(i:2,' |',fam:15,' |',sb:3:1); readkey;

End.

ПРАКТИЧЕСКОЕ ЗАНЯТИЕ № 47. ФАЙЛЫ

Файл – форма хранения информации вне среды.

Файл удобен:

- данные из файла можно использовать в нескольких программах;

- файл сохраняется после окончания работы программы;

- данные часто не убираются в ОЗУ (игры);

- с файлами можно выполнять множество полезных манипуляций.

Типы файлов:

1) Последовательные – чтение/запись от начала к концу.

2) Файлы прямого доступа – доступ к записи по адресу.

3) Индексированные файлы – доступ к записи по адресу и по ключу.

Порядок работы с файлами.

  1. Объявить файл (var f: file of тип или var f: text для текстового файла).
  2. Связать файловую переменную с конкретным файлом на устройстве.
  3. Открыть файловую переменную для записи или чтения.
  4. Закрыть файловую переменную для записи или чтения.

По организации работы с данными различают три вида файлов: типизированные, текстовые и нетипизированные.

 



Поделиться:


Последнее изменение этой страницы: 2016-08-12; просмотров: 95; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

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