|
|||||||||||
АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Операції з масивамиМасиви, як цілісні структури, можуть брати участь тільки в операціях "дорівнює" / "не дорівнює" і в операторах присвоювання. При цьому відповідні масиви повинні бути ідентичні за структурою (мати однакові типи індексів і типи компонентів). Всі інші дії виконуються тільки з елементами масивів відповідно до їх типу. При цьому обробка елементів масивів виконується в циклах. Базові операції обробки векторів (одновимірних масивів). Такими базовими операціями є: § введення-виведення масиву
§ ініціалізація масиву (присвоєння початкових значень)
§ пошук заданого елемента for i:= 1 to n do if a [i] mod 7 = 0 then WriteLn (a[i]); § пошук максимального (мінімального) елемента max:= a [1]; for i:= 2 to n do if a [i] > max then max:= a [i]; § перестановка елементів t:= a [i]; a [i]:= a [j]; a [j]:= t; § вставка та видалення елементів Базові операції обробки матриць (двовимірних масивів). В оперативній пам’яті матриця також зберігається як безперервна послідовність елементів. Базовими операціями обробки двовимірних масивів є: § введення-виведення матриці
§ ініціалізація матриці
§ пошук заданого елемента for i:= 1 to n do for j:= 1 to m do if a [i, j] mod 7 then WriteLn (a[i, j]); § підсумовування елементів матриці for i:= 1 to n do for j:= 1 to m do s:= s + a [i, j]; § підсумовування діагональних елементів матриці for i:= 1 to n do s:= s+ a [i, i]; § транспонування матриці for i:= 1 to n do for j:= 1 to m do b[ i, j]:= a [j, i]; § перестановка n-го і m-го рядків for j:= 1 to m do begin t:= a [n, j]; a [n, j]:= a [m, j]; a [m, j]:= t; end; § видалення рядка (на місце рядка / стовпця, що видаляється, потрібно записати елементи наступного рядка /стовпця і циклічно повторити цю операцію до кінця матриці) for i:= k to n-1 do { Видалення к-го рядка } for j:= 1 to m do a [i, j]:= a [i+1, j]; § включення рядка у матрицю for i:= n downto k do { Включення к-го рядка } for j:= 1 to m do a [i+1, j]:= a [i, j]; for j:= 1 to m do ReadLn (a [k, j]); § множення матриці на матрицю for i:= 1 to n do for j:= 1 to m do begin c[i, j]:=0; for k:= 1 to n do c[i, j]:= c[i, j] + a [i, k]* b [k, j]; end; Базові операції обробки масивів зручно реалізовувати у вигляді процедур, які надалі можуть використовуватися у більш складних задачах. Арифметика покажчиків. При організації доступу до елементів масиву за покажчиком використовуються наступні операції роботи з покажчиками: § операція інкремента (++) – значення покажчика збільшується на кількість байт, що визначається типом, на який він вказує; § операція декремента (--) – значення покажчика зменшується на кількість байт, що визначається типом, на який він вказує; § додавання цілого числа (+) - задає логічне зміщення на кількість байт, яка необхідна для розміщення заданого числа об’єктів, на які посилається покажчик; § скорочене додавання цілого числа (+=) - задає фізичне зміщення на кількість байт, яка необхідна для розміщення заданого числа об’єктів, на які посилається покажчик; § скорочене віднімання цілого числа (-=) - задає фізичне зміщення на кількість байт, яка необхідна для розміщення заданого числа об’єктів, на які посилається покажчик; § віднімання цілого числа (-) - задає логічне зміщення на кількість байт, яка необхідна для розміщення заданого числа об’єктів, на які посилається покажчик; § віднімання покажчиків - визначення значення різниці номерів елементів масиву, на які вказують покажчики, Наприклад, float m[7], n,*mPtr1,*mPtr2; mPtr1 = &m[0]; mPtr2 = m; mPtr1 += 5; // зміщення вперед на 4 об’єкта (дійсних числа) mPtr1 --; // перехід до попереднього елемента масиву mPtr2 ++; // перехід до наступного елемента масиву cout<<*(mPtr2+3)<<“\n”; // покажчик-зміщення вперед на 5 об’єктів (дійсних чисел) cout<<*(mPtr1-2)<<“\n”; // покажчик-зміщення назад на 3 об’єкта (дійсних числа) mPtr1 -= 1; // зміщення назад на 1 об’єкт (дійснех число) n = mPtr1 - mPtr2; // відстань (у елементах) між елементами масиву, на які вказують покажчики mPtr1 і mPtr2 Сортування масиву. Розрізняють декілька алгоритмів сортування елементів масиву: - сортування вибором, - сортування вставками - сортування обміном (бульбашкове сортування), тощо. Сортування вибором: відшукуються максимальний (мінімальний) елемент і переноситься в початок масиву; потім ця операція застосовується до всіх елементів, крім першого і т.ін. Сортування вставками: якщо перші k елементів масиву вже впорядковані, наприклад, по зростанню, то береться (k+1)-й елемент і розміщається серед перших k елементів так, щоб упорядкованими виявилися вже k+1 перших елементів; цей алгоритм застосовується при k від 1 до n -1. Сортування обміном: послідовно порівнюються пари сусідніх елементів x k u x k+1 (k = 1, 2, 3,..., n -1) і якщо x k >/< x k+1, то вони переставляються; тим самим найбільший (найменший) елемент виявиться на своєму місці наприкінці масиву; потім цей метод застосовується до всіх елементів, крім останнього, і т.ін. Приклад. Сформувати вектор В, що складається з максимальних елементів рядків матриці А (10 х 3): Const n=10; m=3; Var a: array [1..n, 1..m] of real; b: array [1..n] of real; i, j: integer; max: real; Begin for i:= 1 to n do for j:= 1 to m do ReadLn (a [i, j]); for i:= 1 to n do begin max:= a [i, 1]; for j:= 2 to m do if a [i, j] > max then max:= a [i, j]; b [i]:= max; end; for i:= 1 to n do Write (b [i], ‘ ‘); ReadLn; End.
Поиск по сайту: |
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.006 сек.) |