Одним
з способом реалізації статичних масивів з одним типом елементів є
наступний (в Фортрані порядок індексів протилежний такому в Сі [4]):
Під масив виділяється безперервний блок пам'яті об'ємом S * m1 * m2 * m3 ... mn, де S - розмір одного елемента, а m1 ... mn - розміри діапазонів індексів (тобто кількість значень, які може приймати відповідний індекс).
При зверненні до елементу масиву A [i1, i2, i3, ..., in] адресу відповідного елемента обчислюється як B + S * ((... (i1p * m1 + i2p) * m2 + ... + i (n-1) p) * mn -1 + inp), де B - база (адреса початку блоку пам'яті масиву), ikp - значення k-го індексу, наведене до цілого з нульовим початковим зміщенням.
Таким чином, адреса елемента із заданим набором індексів обчислюється так, що час доступу до всіх елементів масиву однаково.
Перший елемент масиву, в залежності від мови програмування, може мати різний індекс. Розрізняють три основних різновиди масивів: з відліком від нуля (zero-based), з відліком від одиниці (one-based) і з відліком від специфічного значення заданого програмістом (n-based). Відлік індексу елемента масивів з нуля більш характерний для низькорівневих мов програмування, проте цей метод був використаний в мовах більш високого рівня мовою програмування Сі.
Більш складні типи масивів - динамічні і гетерогенні - реалізуються складніше.Переваги
легкість обчислення адреси елемента за його індексом (оскільки елементи масиву розташовуються один за іншим)
однаковий час доступу до всіх елементів
малий розмір елементів: вони складаються тільки з інформаційного поля
Недоліки
для статичного масиву - відсутність динаміки, неможливість видалення або додавання елемента без зсуву інших
для динамічного і / або гетерогенного масиву - більш низьке (у порівнянні зі звичайним статичним) швидкодія і додаткові накладні витрати на підтримку динамічних властивостей і / або гетерогенності.
при роботі з масивом в стилі C (з покажчиками) і при відсутності додаткових засобів контролю - загроза виходу за межі масиву і пошкодження даних
Максимальний елемент в масиві і його індекс
Під масив виділяється безперервний блок пам'яті об'ємом S * m1 * m2 * m3 ... mn, де S - розмір одного елемента, а m1 ... mn - розміри діапазонів індексів (тобто кількість значень, які може приймати відповідний індекс).
При зверненні до елементу масиву A [i1, i2, i3, ..., in] адресу відповідного елемента обчислюється як B + S * ((... (i1p * m1 + i2p) * m2 + ... + i (n-1) p) * mn -1 + inp), де B - база (адреса початку блоку пам'яті масиву), ikp - значення k-го індексу, наведене до цілого з нульовим початковим зміщенням.
Таким чином, адреса елемента із заданим набором індексів обчислюється так, що час доступу до всіх елементів масиву однаково.
Перший елемент масиву, в залежності від мови програмування, може мати різний індекс. Розрізняють три основних різновиди масивів: з відліком від нуля (zero-based), з відліком від одиниці (one-based) і з відліком від специфічного значення заданого програмістом (n-based). Відлік індексу елемента масивів з нуля більш характерний для низькорівневих мов програмування, проте цей метод був використаний в мовах більш високого рівня мовою програмування Сі.
Більш складні типи масивів - динамічні і гетерогенні - реалізуються складніше.Переваги
легкість обчислення адреси елемента за його індексом (оскільки елементи масиву розташовуються один за іншим)
однаковий час доступу до всіх елементів
малий розмір елементів: вони складаються тільки з інформаційного поля
Недоліки
для статичного масиву - відсутність динаміки, неможливість видалення або додавання елемента без зсуву інших
для динамічного і / або гетерогенного масиву - більш низьке (у порівнянні зі звичайним статичним) швидкодія і додаткові накладні витрати на підтримку динамічних властивостей і / або гетерогенності.
при роботі з масивом в стилі C (з покажчиками) і при відсутності додаткових засобів контролю - загроза виходу за межі масиву і пошкодження даних
Максимальний елемент в масиві і його індекс
const Sz = 100; var a: array [1..Sz] of real; N: integer; min: real; minind: integer; begin N := 20; for var i:=1 to N do a[i] := Random(100); writeln('Элементы массива: '); for var i:=1 to N do write(a[i],' '); writeln; min := a[1]; minind := 1; for var i:=2 to N do if a[i]then
алгоритм обчислення середньорічної температури.
Program Temperature; var T: array [1 .. 12] of real; I: integer; Tsred: real; begin {Цикл введення} for I: = l to 12 do begin write ('T [', 1:2, '] ='); readln (T [I]) end; {Цикл підсумовування} Tsred: = 0; for I: = l to 12 do Tsred: = Tsred + T [I]; {Обчислення середнього} Tsred: = Tsred/12; writeln ('Середньорічна температура =', Tsred: 6:2, 'градусів') end.
Комментариев нет:
Отправить комментарий