вторник, 22 января 2013 г.

задачі

 Одним з способом реалізації статичних масивів з одним типом елементів є наступний (в Фортрані порядок індексів протилежний такому в Сі [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 (з покажчиками) і при відсутності додаткових засобів контролю - загроза виходу за межі масиву і пошкодження даних



Максимальний елемент в масиві і його індекс

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
begin min := a[i]; minind := i; end;   writeln('Минимальный элемент: ',min); writeln('Индекс минимального элемента: ',minind); end.
 
 алгоритм обчислення середньорічної температури.
 
 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.

Комментариев нет:

Отправить комментарий