![]() КАТЕГОРИИ: Архитектура-(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. Поиск в упорядоченном массиве (поиск деление пополам, бинарный поиск)
Вариант 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; Просмотров: 360; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |