Автор работы: Пользователь скрыл имя, 28 Мая 2012 в 12:14, курсовая работа
Сформировать матрицу произвольных чисел размером 8*12.
По контурам, заданным координатами (номер строки и номер столбца), из элементов данной матрицы сформировать 4 одномерных массива.
1 ПОСТАНОВКА ЗАДАЧИ 3
1.1 Список контуров 3
1.2 Описание метода сортировки 3
1.3 Условия дополнительной задачи 3
2 РАЗРАБОТКА ПРОЕКТОВ 3
2.1 Сортировка массивов 3
2.2 Обработка массива 5
2.3 Формирование массивов по контурам 9
3 ЛИСТИНГ ПРОГРАММНОГО КОДА ЗАДАЧИ 11
ПЕРЕЧЕНЬ ИСПОЛЬЗОВАННОЙ ЛИТЕРАТУРЫ……………………………..17
Содержание
1 ПОСТАНОВКА ЗАДАЧИ 3
1.1 Список контуров 3
1.2 Описание метода сортировки 3
1.3 Условия дополнительной задачи 3
2 РАЗРАБОТКА ПРОЕКТОВ 3
2.1 Сортировка массивов 3
2.2 Обработка массива 5
2.3 Формирование массивов по контурам 9
3 ЛИСТИНГ ПРОГРАММНОГО КОДА ЗАДАЧИ 11
ПЕРЕЧЕНЬ ИСПОЛЬЗОВАННОЙ ЛИТЕРАТУРЫ……………………………..17
Сформировать матрицу
По контурам, заданным координатами (номер строки и номер столбца), из элементов данной матрицы сформировать 4 одномерных массива
Сортировка – процесс
Модифицированный метод
Обработать массивы путем удаления группы, содержащей наибольшее число подряд идущих одинаковых элементов.
2.1 Сортировка массивов
В программе была создана процедура sort (var ma:u; var n:byte), в которой осуществляется сортировка по убыванию модифицированным методом простого выбора (рис. 1).
Рисунок 1 – Блок – схема процедуры сортировки
Код процедуры:
procedure sort( var ma:u; var n:byte);
var i,j,max,n_max,l:integer;
begin
max:=-11;
for i:=1 to n do
begin
for j:=i to n do
if ma[j]>max then
begin
max:=ma[j];
n_max:=j;
end ;
l:=ma[i];
ma[i]:=max;
ma[n_max]:=l;
max:=-11;
end;
for i:=1 to n do
write(ma[i]:4);
end;
Пояснения к коду процедуры:
max:=-11 – запись в переменную минимального числа;
for i:=1 to n do – цикл для установки позиции элемента;
for j:=i to n do – цикл для просмотра элементов;
if ma[j]>max then – условие поиска максимального элемента массива;
max:=ma[j] – запись элемента массива большего, чем установленное число;
n_max:=j – запись номера позиции максимального элемента в массиве ;
l:=ma[i] – запись первого элемента ;
ma[i]:=max – запись максимально элемента на 1 позицию в массиве;
ma[n_max]:=l –запись первого элемента массива на место максимального;
max:=-11 – запись в переменную минимального числа;
for i:=1 to n do–цикл для установки позиции элемента;
write(ma[i]:4) – вывод элемента.
2.2 Обработка массива
Обработать массивы, удалив группу, содержащую наибольшее число подряд идущих одинаковых элементов (рис. 2).
Код процедуры:
procedure obr(var ma:u;var n:byte);
var i,k,kol,n_i,j,o:integer;
begin
k:=1;
kol:=0;
for i:=2 to n do
begin
if ma[i]=ma[i-1] then
k:=k+1 else k:=1;
if k>kol then
begin
kol:=k;
n_i:=(i+1)-k;
end;
end;
if kol=1 then writeln('нет совпадающих')
else
writeln('количество=',kol,' номер=',n_i);
j:=1;
o:=n_i;
if kol>1 then
while j <= kol do
begin
for i:=o to n do
ma[i]:=ma[i+1];
n:=n-1;
j:=j+1;
end;
for i:=1 to n do
write(ma[i]:4);
end;
Пояснения к коду процедуры:
k:=1 – запись в переменную числа 1;
kol:=0 – запись в переменную числа 0 (обнуление массива kol);
for i:=2 to n do – цикл сравнения по всем элементам;
if ma[i]=ma[i-1] – если подряд идущие элементы равны;
k:=k+1 – счетчик количества подряд идущих одинаковых элементов;
if k>kol then – сравнение текущей длины группы с максимальной;
kol:=k – замена максимальной длины группы на текущую;
n_i:=(i+1)-k – запись начального индекса максимальной по длине группы, содержащей наибольшее число подряд идущих одинаковых элементов;
writeln('количество=',kol,' номер=',n_i) – вывод количества элементов в группе, содержащей наибольшее число подряд идущих одинаковых элементов ('количество=',kol,) и начального индекса максимальной по длине группы, содержащей наибольшее число подряд идущих одинаковых элементов ('номер=',n_i);
j:=1 – запись в переменную числа 1;
o:=n_i – присвоение переменной о значения начального индекса максимальной по длине группы, содержащей наибольшее число подряд идущих одинаковых элементов;
while j <= kol do – цикл для установки позиции элемента;
for i:=o to n do – цикл для просмотра элементов;
ma[i]:=ma[i+1] – запись следующего элемента массива;
n:=n-1‒ уменьшение длины массива;
j:=j+1‒ увеличение параметра цикла;
write(ma[i]:4) – вывод обработанной матрицы (удалена группа, содержащая наибольшее число подряд идущих одинаковых элементов).
Рисунок 2 – Блок – схема процедуры обработки
2.3
Формирование массивов по
Массивы формируются таким обозом, чтобы все значения исходной матрицы, окруженные конкретным контуром, были включены в соответствующий массив.
Код:
k1:=0;
k2:=0;
k3:=0;
k4:=0;
for i:=1 to n do
for j:=1 to m do
begin
if (i>=1) and (i<=7) and (j>=1) and (j<=7) and (i>=j) then
begin
k1:=k1+1;
a[k1]:=mas[i,j];
end
else
if (i>=1) and (i<=4) and (j>=3) and (j<=6) and (i+1<j) or
(i>=1) and (i<=4) and (j>=6) and (j<=9) then
begin
k2:=k2+1;
b[k2]:=mas[i,j];
end
else
if (i>=3) and (i<=7) and (j>=7) and (j<=11) and (i+j>=14) then
begin
k3:=k3+1;
c[k3]:=mas[i,j];
end
else
begin
k4:=k4+1;
d[k4]:=mas[i,j];
end;
end;
Пояснения к коду процедуры:
for i:=1 to n do ‒ цикл установки позиции элемента;
for j:=1 to m do – цикл просмотра;
if (i>=1) and (i<=7) and (j>=1) and (j<=7) and (i>=j) then – условие на вхождение элемента массива в указанный контур;
k1:=k1+1 ‒ счетчик элементов, вошедших в контур;
a[k1]:=mas[i,j] ‒ запись в одномерный массив всех элементов, входящих в контур.
По такой же аналогии формируются массивы оставшихся 2 контуров и межконтурного пространства.
3 ЛИСТИНГ ПРОГРАММНОГО КОДА ЗАДАЧИ
program kursavoi;
uses crt;
const n=8;
m=12;
type u= array[1..100] of integer;
u1= array [1..n,1..m] of integer;
var mas:u1;
a,b,c,d:u;
f:text;
i,j,k1,k2,k3,k4:byte;
procedure svet(ma:u1);
const n=8;
m=12;
var i,j:byte;
begin
for i:=1 to n do
begin
for j:=1 to m do
begin
if (i>=1) and (i<=7) and (j>=1) and (j<=7) and (i>=j) then
textcolor(13)
else
if (i>=1)and (i<=4) and (j>=3) and (j<=6) and (i+1<j) or
(i>=1)and (i<=4) and (j>=6) and (j<=9) then
textcolor(12)
else
if (i>=3)and (i<=7) and (j>=7) and (j<=11) and (i+j>=14) then
textcolor(11)
else
textcolor(15);
write(ma[i,j]:4);
textcolor(15);
end;
writeln;
end;
end;
procedure sort( var ma:u; var n:byte);
var i,j,max,n_max,l,k:integer;
begin
max:=-11;
for i:=1 to n do
begin
for j:=i to n do
if ma[j]>max then
begin
max:=ma[j];
n_max:=j;
end;
l:=ma[i];
ma[i]:=max;
ma[n_max]:=l;
max:=-11;
end;
for i:=1 to n do
write(ma[i]:4);
writeln;
end;
procedure obr(var ma:u;var n:byte);
var i,k,kol,n_i,j,o:integer;
begin
k:=1;
kol:=0;
for i:=2 to n do
begin
if ma[i]=ma[i-1] then
k:=k+1 else k:=1;
if k>kol then
begin
kol:=k;
n_i:=(i+1)-k;
end;
end;
if kol=1 then writeln('нет совпадающих')
else
writeln('количество=',kol,' номер=',n_i);
j:=1;
o:=n_i;
if kol>1 then
while j <= kol do
begin
for i:=o to n do
ma[i]:=ma[i+1];
n:=n-1;
j:=j+1;
end;
for i:=1 to n do
write(ma[i]:4);
end;
procedure vivod(ma:u; n:byte);
var i:byte;
begin
for i:=1 to n do
write(ma[i]:4);
writeln;
end;
begin
clrscr;
randomize;
assign(f,'e:/Gulya/t.txt');
rewrite(f);
for i:=1 to n do
for j:= 1 to m do
begin
mas[i,j]:=random(20)-10;
writeln(f,mas[i,j]);
end;
close(f);
assign(f,'e:/Gulya/t.txt');
reset(f);
for i:=1 to n do
for j:= 1 to m do
readln(f,mas[i,j]);
svet(mas);
close(f);
k1:=0;
k2:=0;
k3:=0;
k4:=0;
for i:=1 to n do
for j:=1 to m do
begin
if (i>=1) and (i<=7) and (j>=1) and (j<=7) and (i>=j) then
begin
k1:=k1+1;
a[k1]:=mas[i,j];
end
else
if (i>=1) and (i<=4) and (j>=3) and (j<=6) and (i+1<j) or
(i>=1) and (i<=4) and (j>=6) and (j<=9) then
begin
k2:=k2+1;
b[k2]:=mas[i,j];
end
else
if (i>=3) and (i<=7) and (j>=7) and (j<=11) and (i+j>=14) then
begin
k3:=k3+1;
c[k3]:=mas[i,j];
end
else
begin
k4:=k4+1;
d[k4]:=mas[i,j];
end;
end;
writeln;
writeln('Массив А');
vivod(a,k1);
writeln('Массив В');
vivod(b,k2);
writeln('Массив С');
vivod(c,k3);
writeln('Массив D');
vivod(d,k4);
writeln;
readkey;
writeln('Обработка массива А');
obr(a,k1);
writeln;
writeln;
writeln('Обработка массива B');
obr(b,k2);
writeln;
writeln;
writeln('Обработка массива C');
obr(c,k3);
writeln;
writeln;
writeln('Обработка массива D');
obr(d,k4);
writeln;
writeln;
readkey;
writeln('Отсортированный массив A');
sort(a,k1);
writeln;
writeln('Отсортированный массив B');
sort(b,k2);
writeln;
writeln('Отсортированный массив C');
sort(c,k3);
writeln;
writeln('Отсортированный массив D');
sort(d,k4);
writeln;
k1:=0;
k2:=0;
k3:=0;
k4:=0;
for j:=1 to m do
for i:=1 to n do
begin
if (i>=1) and (i<=7) and (j>=1) and (j<=7) and (i>=j) then
begin
k1:=k1+1;
mas[i,j]:=a[k1];
end
else
if (i>=1)and (i<=4) and (j>=3) and (j<=6) and (i+1<j) or
(i>=1) and (i<=4) and (j>=6) and (j<=9) then
begin
k2:=k2+1;
mas[i,j]:=b[k2];
end
else
if (i>=3) and (i<=7) and (j>=7) and (j<=11) and (i+j>=14) then
begin
k3:=k3+1;
mas[i,j]:=c[k3];
end
end;
for i:=1 to n do
for j:=1 to m do
begin
if not (((i>=1) and (i<=7) and (j>=1) and (j<=7) and (i>=j)) or
((i>=1) and (i<=4) and (j>=3) and (j<=6) and (i+1<j) or
(i>=1) and (i<=4) and (j>=6) and (j<=9)) or
((i>=3) and (i<=7)and (j>=7) and (j<=11) and (i+j>=14))) then
begin
k4:=k4+1;
mas[i,j]:=d[k4];
end;
end;
svet(mas);
readkey;
end.