Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Else begin

Begin

Var

Type

Begin

Var

End.

Begin

Var

Begin

Var

End.

Begin

Var

Базовые операции обработки одномерных массивов

End.

Begin

Var

Type

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

Begin

Var

Type

Begin

Var

Type

Var

Type

Примеры описания одномерных массивов

vector=array[1..10] of real;

population=array[2000..2050] of integer;

v:vector;

p:population;

Обращение к элементу: v[1], v[7], p[2011]

month=(jan, feb, mar, apr, may, jun);

temperature=array[month] of integer;

m:month;

t:temperature;

t[jan]:=-30;

t[apr]:=8;

for m:=jan to jun do t[m]=

KodSymb=array[char] of integer;

k:kodsymb;

k[‘a’]:=1;

k[‘b’]:=2;

Единственная допустимая операция – присваивание.

massiv=array[1..3] of real;

a, b:massiv;

a:=b;…

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

1. Ввод-вывод.

Program ArrInputOutput;

const n=10;

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

i:integer; {текущий элемент}

k:integer; {кол-во элементов массива}

writeln(‘Введите количество элементов массива <=’,n);

writeln(‘Введите ’, k,’ элементов массива через пробел’);

for i:=1 to k do read(a[i]);

writeln(‘Выведение массива’);

for i:=1 to k do write(a[i],’ ‘);

readln;

2. Инициализация элементов массива

Используя оператор цикла.

for i:=1 to k do a[i]:=sqr(i);

Инициализация другим массивом

a, b: array[1..10] of real;

a:=b;

Инициализация массива константой в ВР

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

3. Поиск максимального и минимального элементов

program ArrMaxMin;

const n=16;

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

i, max, min:integer;

{ввод массива}

max:=a[1];

min:=a[1];

for i:=2 to n begin

if a[i]>max then max:=a[i];

if a[i]<min then min:=a[i];

end;

writeln(‘max=’,max,’min=’,min);

readln;

4. Поиск в неупорядоченном массиве (линейный поиск). Перебор всех элементов.

program search;

a:array[1..n] of <type>;

Найти a[i]=x, где х – ключ поиска, условие окончания a[i]=x or i=n

i:=1;

while (i < = n) and a[i]<>x do i:=i+1;

if i=n then writeln(‘элемент не найден);

Линейный поиск с барьером: в конце массива дописывают барьер «х». Это позволяет избавиться от проверки i < = n.

a[n]:x;

i:=1;

while a[i] <> x do i:=i+1;

if I = n then writeln(‘элемент не найден);

5. Поиск в упорядоченном массиве (поиск деление пополам, бинарный поиск)

a[1]…….. ………a[16]
+ x> a[8]
  -- a[12]
    a[10]          

 

Вариант 1

left:=1; { праваяграница }

right:=n; { леваяграница }

found:=false; {флаг - найдено}

while (left < = right) and not found do

m:=(legt+right) div 2; { середина }

if a[m]=x then found:=true

else if a[m] < x then legt:=m+1

else right:=m-1;

end;

Исследуется не больше чем элементов, что намного эффективнее по сравнению с линейным поиском.

Вариант 2

left:=1; { праваяграница }

right:=n; { леваяграница }

while (left < = right) do begin

if a[m] < x then left:=m+1

else right:=m;

if a[right]=x then found:=true else found:=false;

Пример. Вычисление полинома по схеме Горнера.

 

 

Коэффициенты a и b будет хранить в массиве

Схема Горнера (выносим х за скобки последовательно)

 

Разложение Горнера позволяет вычислить полином используя циклический алгоритм.

p:=a[0];

for i:=1 to n do p:=p * x + a[i]

т.е. p=(…(a[0] * x + a[1]) * x + a[2]) * x + … + a[n-1]) * x + a[n];

program polinom;

const hb=30;

vector=array[0..b] of real;

i, j, k:integer;

n,p,q: real;

a, b: vector;

{ формируем массив a и b из вводимых чисел n }

j:=0;

i:=0;

for i:=1 to hd do begin

read(n);

if n<0 then begin

b[k]:=n;

k:=k+1;

end;

a[j]:=n;

j:=j+1;

end;

end;

for i:=0 to h-1 do

a[j+i]:=b[i];

for i:=0 to j-I do b[k+1]:=a[i];

p:=a[0];

q:=b[0];

read(x);

for i:=1 to hb do begin

p:=p * x + a [i];

q:=q * x + b[i];

end;

writeln(‘q=’,q,’p=’,p);

end;

Пример. Вычисление скалярного произведение векторов

Program vector;

<== предыдущая лекция | следующая лекция ==>
Составные типы данных. Одномерные массивы | Сортировка массивов
Поделиться с друзьями:


Дата добавления: 2014-01-07; Просмотров: 337; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.018 сек.