Работа с массивами

Автор работы: Пользователь скрыл имя, 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 файл

Пояснительная записка.docx

— 47.65 Кб (Скачать файл)

Содержание

 

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 ПОСТАНОВКА ЗАДАЧИ

    1.   Список контуров

 

Сформировать матрицу произвольных чисел размером  8*12.

По контурам, заданным координатами (номер строки и номер столбца), из элементов данной матрицы сформировать 4 одномерных массива

  1. 1.1-7.7-7.1-1.1
  2. 1.3-1.9-4.9-4.6-1.3
  3. 3.11-7.11-7.7-3.11
    1. Описание метода сортировки

Сортировка – процесс упорядочивания данных по возрастанию или убыванию.

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

    1. Условия дополнительной задачи

Обработать  массивы путем удаления группы, содержащей наибольшее число подряд идущих одинаковых элементов.

2 РАЗРАБОТКА ПРОЕКТОВ

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;

 


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


Рисунок 3 –  Блок- схема формирования массивов по контурам

Пояснения к  коду процедуры:

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.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Перечень использованной литературы

 

 

  1. Шпак Ю. А. Turbo Pascal 7.0 на примерах. ― К.: Издательство «Юниор», 2003. ‒ 496 с, ил.

 

 

 

 


Информация о работе Работа с массивами