49850

Операции с одномерными массивами в Delphi

Курсовая

Информатика, кибернетика и программирование

Бурное развитие вычислительной техники, потребность в эффективных средствах разработки программного обеспечения привели к появлению систем программирования, ориентированных на так называемую быструю разработку, среди которых можно выделить Borland Delphi и Microsoft Visual Basic. В основе систем быстрой разработки (RAD-систем, Rapid Application Development — среда быстрой разработки приложений)

Русский

2014-01-16

929.12 KB

37 чел.

Оглавление:

Введение    3

Программа №1   5

Блок-схема   5

Код программы  6

Тестовый пример  7

Программа №2   8

Блок-схема   9

Код программы  10

 Тестовый пример  12

Программа №3   13

Блок-схема   14

Код программы  15

Тестовые примеры  18

Список литературы   20


Введение.

Развитие современного общества предполагает широкое использование компьютерных и информационных технологий, на основе которых создаются разнообразные информационные системы. Обычно получаемая в них информация анализируется человеком, который будет играть определяющую роль. Такие информационные системы являются автоматизированными, так как в их функционировании принимает участие человек.

Компьютерные программы получают результаты, обрабатывая данные. Легкость, с которой выполняется этот процесс, зависит от того, насколько точно типы данных соответствуют реальной задаче. Следовательно, очень важно, чтобы в языке была предусмотрена поддержка соответствующего разнообразия типов и структур данных.

В последнее время резко возрос интерес к программированию. Это связано с развитием и внедрением в повседневную жизнь информационно-коммуникационных технологий. Если человек имеет дело с компьютером, то рано или поздно у него возникает желание, а иногда и необходимость, программировать.

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

Бурное развитие вычислительной техники, потребность в эффективных средствах разработки программного обеспечения привели к появлению систем программирования, ориентированных на так называемую "быструю разработку", среди которых можно выделить Borland Delphi и Microsoft Visual Basic. В основе систем быстрой разработки (RAD-систем, Rapid Application Development — среда быстрой разработки приложений) лежит технология визуального проектирования и событийного программирования, суть которой заключается в том, что среда разработки берет на себя большую часть рутинной работы, оставляя программисту работу по конструированию диалоговых окон и функций обработки событий.

Delphi — это среда быстрой разработки, в которой в качестве языка программирования используется язык Delphi. Язык Delphi — строго типизированный объектно-ориентированный язык, в основе которого  Object Pascal.

В данной курсовой работе я бы хотел рассмотреть 1 из элементов  Delphi – одномерный массив и некоторые способы его сортировки.

Массив - это множество однотипных элементов, объединённых общим именем и занимающих в компьютере определённую область памяти. Количество элементов в массиве всегда конечно. В общем случае массив - это структурированный тип данных, состоящий из фиксированного числа элементов, имеющих один и тот же тип. Название регулярный тип (или ряды) массивы получили за то, что в них объединены однотипные (логически однородные) элементы, упорядоченные (урегулированные) по индексам, определяющим положение каждого элемента в массиве. В качестве элементов массива можно использовать любой тип данных, поэтому вполне правомерно существование массивов записей, массивов указателей, массивов строк, массивов и т.д.Элементами массива могут быть данные любого типа, включая структурированные.Тип элементов массива называется базовым. Особенностью языка Паскаль является то, что число элементов массива фиксируется при описании и в процессе выполнения программы не меняется. Элементы, образующие массив, упорядочены таким образом, что каждому элементу соответствует совокупность номеров (индексов), определяющих его местоположение в общей последовательности. Доступ к каждому отдельному элементу осуществляется путем индексирования элементов массива. Индексы представляют собой выражения любого скалярного типа (чаще целого), кроме вещественного. Тип индекса определяет границы изменения значений индекса. Для описания массива предназначено словосочетание array of (массив из).

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

Существует много различных методов сортировки массивов, которые делятся на 3 типа: медленные, быстрые и самые быстрые. К медленным относятся такие методы сортировки как: пузырьковая, шейкер-сортировка (улучшенная пузырьковая),  сортировка методом выбора и сортировка методом вставок. К быстрым алгоритмам сортировки относятся такие сортировки как: сортировка методом Шелла, сортировка методом прочесывания. К самым быстрым относятся: сортировка слиянием, быстрая сортировка(quicksort).

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

Рассмотрим различные операции над массивами на примере 3 программ для обработки данных в одномерных массивах.

Программа №1:

1.      Дан массив целых чисел из n элементов, заполненный случайным образом числами из промежутка [-100,100]. Найти сумму элементов, значения которых  состоят из одной цифры.

2.      Найти количество тех  элементов,  значения которых положительны и кратны 3                                                                           и 5.

3.      Найти номер последней пары соседних элементов с одинаковыми знаками, произведение которых  меньше заданного числа.

Блок схема:


Код программы:

procedure TForm1.Button1Click(Sender: TObject);

var

A:array[0..100000] of integer;

i, N, N2,sum, max:integer;

x3,x5:real;

begin

N:=strtoint(edit1.Text);

i:=0;

sum:=0;

N2:=0;

max:=strtoint(edit4.text);

listbox1.Clear;

listbox2.Clear;

listbox3.Clear;

repeat

 A[i]:=(random(200)-100);

 x3:=frac(A[i]/3);

 x5:=frac(A[i]/5);

//////////////////////////////// 1 ///////////////////////////////

 if ((A[i]>-10) and (A[i]<10))

 then

   begin

   listbox2.Items.add('Элемент № '+inttostr(i+1)+'= re' +inttostr(A[i]));

   sum:=sum+A[i];

   end;

//////////////////////////////// 2 //////////////////////////////

 if (A[i]>0) and (x3=0) and (x5=0)

   then

     begin

      listbox3.Items.add('Элемент № '+inttostr(i+1)+'= ' +inttostr(A[i]));

      N2:=N2+1;

     end;

/////////////////////////////// 3 //////////////////////////////

 if (i>2) and (A[i]*A[i-1]>0) and (A[i]*A[i-1]<max)

 then

   begin

     Listbox4.clear;

     listbox4.Items.add('Пара: №'+ inttostr(i)+ ' и ' +inttostr(i+1) );

   end;

 listbox1.Items.add('Элемент № '+inttostr(i+1)+'= ' +inttostr(A[i]));

 i:=i+1;

until i>N-1;

 edit2.text:=inttostr(sum);

 edit3.Text:=inttostr(N2);

end;

end.


Программа №2

1.      Заменить предпоследний элемент массива  на максимальный по модулю.

2.      Умножить все нечетные элементы массива, кратные 3, на его номер.

3.      Из элементов массива P сформировать массив M той же размерности по правилу: первый  и последний элементы  равны нулю, каждый четвертый элемент по формуле Mi=4*abs(Pi ), а все остальные по формуле Mi=-Pi*(i+1).


Блок-схема:

Код программы:

procedure TForm1.Button2Click(Sender: TObject);

begin

memo1.clear;

memo2.clear;

memo3.Clear;

memo4.Clear;

i:=1;

max:=0;

n:=strtoint(edit1.Text);

repeat

 P[i]:=(random(200)-100);

 memo1.lines.add (inttostr(i) +' ' + inttostr(P[i]));

 if max<ABS(P[i])

   then

     max:=ABS(P[i]);

 i:=i+1;

until i>n;

button1.Enabled:=(true);

button4.Enabled:=(true);

button5.Enabled:=(true);

end;

procedure TForm1.Button3Click(Sender: TObject);

begin

close;

end;

procedure TForm1.Button1Click(Sender: TObject);

begin

i:=1;

P[n-1]:=max;

repeat

memo2.lines.add (inttostr(i) +' ' + inttostr(P[i]));

i:=i+1;

until i>n;

end;

procedure TForm1.Button4Click(Sender: TObject);

begin

i:=1;

repeat

 if (frac(i/2)<>0) and (frac(i/3)=0)

   then

     begin

       P[i]:=P[i]*i;

       memo3.lines.add (inttostr(i) +'        ' + inttostr(P[i]));

     end

   else

    memo3.lines.add (inttostr(i) +' ' + inttostr(P[i]));

 i:=i+1;

until i>n;

end;

procedure TForm1.Button5Click(Sender: TObject);

begin

i:=1;

repeat

//////////////////////////////////////////////////////////////////

if (i=1) or (i=n)

 then

   M[i]:=0

 else

   if (frac(i/4)=0)

     then

       M[i]:=4*ABS(P[i])

     else

       M[i]:=P[i]*(i+1);

//////////////////////////////////////////////////////////////////

 memo4.lines.add (inttostr(i) +' ' + inttostr(M[i]));

 i:=i+1;

until i>n;

end;

end.


Программа №3

1.      Дан массив целых чисел из n элементов, заполненный случайным образом числами из промежутка [-60,60]. Удалить из него все элементы, в которых последняя цифра нечетная.

2.      Вставить элемент со значением К после всех нечетных элементов, начинающихся на цифру К.

3.      Поменять местами три  последних отрицательных элемента с тремя первыми отрицательными элементами, сохраняя порядок их следования.


Блок схема:

Код для 1 и 3 части задания:

procedure TForm1.Button2Click(Sender: TObject);

var

i,j:integer;

begin

p:=0;

i:=0;

//n:=120-1;

while i<=n-1 do

 begin

   if (frac(A[i]/2) = 0)

     then i:=i+1

     else

      begin

       for j:=i to n-1 do

         a[j]:=a[j+1];

         n:=n-1;

       end;

 end;

for i:=0 to n-1 do

 begin

   listbox2.Items.Add(inttostr(i+1)+ '  ' + inttostr(a[i])) ;

 end;

end;

var

zn:array [0..5] of integer;

adr:array [0..5] of integer;

lC,rC,i,adr1,adr2:integer;

procedure TForm1.Button4Click(Sender: TObject);

begin

listbox4.Clear;

lc:=5;

rc:=2;

adr1:=0;

adr2:=3;

n:=strtoint(edit2.Text);

for i:=0 to n do

begin

if (lc>2) and (A[i]<0) then

 begin

  adr[adr1]:=i;

  zn[lc]:=A[i];

  lc:=lc-1;

  adr1:=adr1+1;

 end;

end;///konec For

for i:=high(A) downto low(A) do

begin

if (rc>-1) and (A[i]<0) then

 begin

  zn[rc]:=A[i];

  adr[adr2]:=i;

  rc:=rc-1;

  adr2:=adr2+1;

 end;

end;///konec For

for i:=0 to 5 do

begin

 A[adr[i]]:=zn[i];

end;

for i:=0 to n-1 do

begin

listbox4.items.add(inttostr(a[i]));

 end;

end;

end.

Код для 2 части задания:

function poiskK(a:real):real;

begin

 while ABS(a)>=10 do

  begin

   a:=a/10;

  end;

 poiskK:=ABS(int(a));

end;

procedure TForm1.Button1Click(Sender: TObject);

var

i,bA,eA,tmp:integer;

begin

randomize;

memo1.clear;

memo2.clear;

bA:=strtoint(edit3.Text);

eA:=strtoint(edit4.Text);

if bA>eA then

 begin

  tmp:=eA;

  eA:=bA;

  bA:=tmp;

 end;

n:=strtoint(edit1.Text);

setlength (A,n);

for i:=0 to n-1 do

 begin

 A[i]:=random(eA-bA)+(bA);

 memo1.Lines.Add(inttostr(i+1)+'   '+ inttostr(a[i]));

 end;

end;

procedure TForm1.Button2Click(Sender: TObject);

var

i,j:integer;

B:array of integer;

begin

memo2.Clear;

i:=0;

j:=0;

k:=strtoint(edit2.Text);

while i <=n-1 do

begin

setlength(B,j+2);

if (frac(A[i]/2) <> 0) and (poiskK(A[i])=k)

 then

  begin

   B[j]:=A[i];

   memo2.Lines.add(inttostr(j)+'    '+ inttostr(B[j]));

   j:=j+1;

   B[j]:=k;

   memo2.Lines.add(inttostr(j)+'________'+ inttostr(B[j]));

  end

 else

   begin

   B[j]:=A[i];

   memo2.lines.add(inttostr(j)+'    '+ inttostr(B[j]));

  end;

j:=j+1;

i:=i+1;

end;

end;

end.


Список литературы:

Джулиан Бакнелл «Фундаментальные алгоритмы и структуры данных в Delphi»


 

А также другие работы, которые могут Вас заинтересовать

65128. Перечеканка привозных монет в Крымском улусе в XIII веке 140 KB
  Кроме того это позволяет дать в последующем ответы на некоторые вопросы метрологии – ведь вес и проба серебра в монете-заготовке должны были соответствовать установленным в Крымском Улусе нормам следовательно на определенном этапе Крым начал использовать для своей монеты общепринятую в регионе весовую норму.
65130. Уточнение датировки крымского дирхема токты 704 г. Нумизматика и Фалеристика 60 KB
  При разборке новых поступлений в собственную коллекцию а также при осмотре монет из коллекций моих друзей приходится постоянно уточнять выпускные сведения некоторых монет. Причиной неудовлетворительного состояния в правильной атрибуции крымских монет Золотой Орды...
65132. К ВОПРОСУ О ПРИНЦИПАХ КЛАССИФИКАЦИИ МОНЕТ ЗОЛОТОЙ ОРДЫ 27 KB
  Большинство работ классифицируют джучидские монеты на основе хронологического и географического принципа классификации уточнение дат правления отдельных ханов количества и географического положения центров чеканки...
65134. КОМПЛЕКС МОНЕТ ТОКТАМЫША ИЗ СТАРОГО КРЫМА 66 KB
  Автором осмотрен комплекс монет, происходящих по словам владельцев из случайной находки на поле в районе Старого Крыма. Всего осмотрено 134 экземпляра. Хорошее состояние всех монет и почти полное отсутствие патины позволяют предположить...
65135. НАХОДКИ МЕДНЫХ МОНЕТ С ОБОЗНАЧЕНИЕМ МОНЕТНОГО ДВОРА «ШЕХР АЛ-ДЖЕДИД» НА УКРАИНЕЕ 32.5 KB
  Именно локализация находок таких монет в свое время позволили С.Яниной правильно локализовать местоположение золотоордынского города имевшего намонетах название как: ал Махруса Янги Шехрили ал Махруса Шехр ал Джедид.