Одномерный массив

Автор: Пользователь скрыл имя, 06 Марта 2013 в 01:19, реферат

Описание работы

Предположим, что программа работает с большим количеством однотипных данных. Скажем около ста разных целых чисел нужно обработать, выполнив над ними те или иные вычисления. Как вы себе представляете 100 переменных в программе? И для каждой переменной нужно написать одно и тоже выражение вычисления значения? Это очень неэффективно.

Работа содержит 1 файл

массив2.doc

— 49.00 Кб (Скачать)

Предположим, что программа  работает с большим количеством  однотипных данных. Скажем около ста  разных целых чисел нужно обработать, выполнив над ними те или иные вычисления. Как вы себе представляете 100 переменных в программе? И для каждой переменной нужно написать одно и тоже выражение вычисления значения? Это очень неэффективно.

Есть более простое решение. Это использование такой структуры (типа) данных как массив. Массив представляет собой последовательность ячеек памяти, в которых хранятся однотипные данные. При этом существует всего одно имя переменной связанной с массивом, а обращение к конкретной ячейке происходит по ее индексу (номеру) в массиве.

 

Нужно четко понимать, что индекс ячейки массива не является ее содержимым. Содержимым являются хранимые в ячейках данные, а индексы только указывают на них.

 

Массив  – однородная совокупность элементов

Индекс массива

Номер элемента массива  называется индексом. Индекс – это значение порядкового типа, определенного, как тип индекса данного массива. Очень часто это целочисленный тип ( integer , word или byte ), но может быть и логический и символьный. 

В языке Паскаль  тип массива задается с использованием специального слова array (англ. – массив), и его объявление в программе выглядит следующим образом:

Type < имя _ типа >= array [ I ] of T;

где I – тип  индекса массива, T – тип его  элементов.

Можно описывать сразу  переменные типа массив, т.е. в разделе  описания переменных:

Var a,b: array [ I ] of T;

 

 

 

 

 Результате вычисления может оказаться за пределами интервала допустимых значений индекса, то есть будет произведена попытка обратиться к элементу, которого не существует. Эта типичная ошибка называется «выход за пределы массива».

Пример  программы с ошибкой массива  Паскаля

Program primer _ error ;  
Type  
vector=array [1..80] of word;  
var  
   n: integer;  
   a: vector;  
begin  
   n:=45;  
   a[n*2]:=25;  
end .

Хотя данная программа полностью соответствует  синтаксису языка, и транслятор «пропустит»  ее, на стадии выполнения произойдет ошибка выхода за пределы массива Паскаля. При n =45 выражение n *2=90, компьютер сделает попытку обратиться к элементу массива a [90], но такого элемента нет, поскольку описан массив размерностью 80.

 

 

 

Пример  фрагмента программы ввода массива  Паскаля

Var  
   A : array [1..10] of integer ;  
   I : byte ; {переменная I вводится как индекс массива}  
Begin  
   For i:=1 to 10 do  
      Readln (a[i]); { ввод i- го элемента производится с клавиатуры }

Рассмотрим  теперь случай, когда массив Паскаля  заполняется автоматически случайными числами, для этого будем использовать функцию random ( N ).

 

 

 

 

 

Пример  фрагмента программы заполнения массива Паскаля случайными числами

Var  
   A: array [1..10] of integer;  
   I : byte ; {переменная I вводится как индекс массива}  
Begin  
   For i :=1 to 10 do  
      A [ i ]:= random (10); { i -му элементу массива присваивается «случайное» целое число в диапазоне от 0 до 10}

Вывод массива  в Паскале осуществляется также  поэлементно, в цикле, где параметром выступает индекс массива, принимая последовательно все значения от первого до последнего.

Пример  фрагмента программы вывода массива  Паскаля

Var  
   A: array [1..10] of integer;  
   I : byte ; {переменная I вводится как индекс массива}  
Begin  
   For i :=1 to 10 do  
      Write ( a [ i ],’ ‘); {вывод массива осуществляется в строку, после каждого элемента печатается пробел}

 

Пример  программы вывода массива Паскаля  в столбик

Var  
   A: array [1..10] of integer;  
   I : byte ; {переменная I вводится как индекс массива}  
Begin  
   For i:=1 to 10 do  
      Writeln (‘a[‘, i,’]=’, a[i]); { вывод элементов массива в столбик }

На экране мы увидим, к примеру, следующие значения:

a [1]=2  
a [2]=4  
a [3]=1 и т.д. 

 

 

 

 

 

 

 

 

 

 

 

 

Найти произведение элементов одномерного массива, состоящего из n элементов. Элементы вводятся с клавиатуры.

Program proisveden;

Var a: array[1..100] of integer; 

     i, n, p: integer;

Begin 

Write (‘Сколько элементов? ’);  Readln (n); 

p:=1; 

For i:=1 to n do 

    begin 

      write (‘введите число’); readln (a[i]); 

      p:=p*a[i]; 

    end; 

    writeln(‘произведение элементов равно:  ‘,p);

End.

 

 

 

 

 

 

 

 

 

 

 

Задача

 Пусть известно, что в автопарке, имеющем 18 машин марки КАМАЗ,  каждый из КАМАЗов перевез за день определенный объем груза. Определить суммарный объем перевозок грузов за день.

При решении задачи будем использовать тип массива KAMAZ для описания всех КАМАЗов автопарка; переменную Р[i] для описания объема груза, перевезенной i-ой машиной за день (i меняется от 1 до 18).

Program pr1;

Type KAMAZ =array[1..18] of real;

Var i:integer;     

P:KAMAZ;     

 S:real;

Begin

S:=0;

For i:=1 to 18 do

Begin

Writeln (‘Введите объем перевозок ', i, ‘-й машины, т');

Readln (p[i]);

S:=S+p[i];

End;

Writeln (‘Суммарный объем перевозок S=',S:8:2,' т');

End. 

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

Аналогично реализуется  и алгоритм нахождения произведения элементов массива (с заменой  начального значения суммы S:=0 на начальное  значение произведения S:=1, и с заменой операции сложения элементов массива «+» на операцию умножения «*»).

Задача2

 

Известна среднемесячная зарплата всех 16 сотрудников одного отдела. Найти величину наибольшей среднемесячной зарплаты в отделе.

Для описания списка зарплат сотрудников воспользуемся типом массива ZARPL, для задания зарплаты каждого из сотрудников - переменной SOTR.

Program pr2;

Type ZARPL=array[1..16] of real;

Var i:integer;      

sotr:ZARPL;      

 Max: real;

Begin

For i:=1 to 16 do

Begin

Writeln (‘Введите зарплату ', i,' -го сотрудника, руб.');

Readln(sotr[i]);

End;

Max:=sotr[1];

For i:=2 to 16 do if max<sotr[i] then max:=sotr[i];

Writeln(‘Наибольшая зарплата =',max:10:2,' руб.'); End. 

 В данной  программе реализован следующий  алгоритм. В начальный момент предполагается, что наибольшей является зарплата первого из сотрудников. Далее величина этой зарплаты сравнивается с зарплатами остальных сотрудников, и, если найдется зарплата, большая, чем предполагаемый максимум,   то переменной Мах присваивается это значение.

Аналогично может  быть найден и наименьший элемент  в массиве. Для этого достаточно заменить в изложенной программе  условие max<sotr[i] на условие min>sotr[i], где i меняется от 1 до 1 до 16, min - переменная типа REAL.

 

 

 

 

 

 

 

 

 

 

 

 

Вычисление суммы положительных элементов массива.

Program summa;

Var a:array[1..10] of integer;

S,i:integer;

Begin

For i=1 to 10 do

Begin

Write (‘введите’, i, ‘ ый элемент’);

Read (a[i]);

End;

S:=0

For i=1 to 10 do

If a[i]>0 then

S:=s+a[i];

Writeln(S);

End.

 

 

4. Задан массив А, состоящий из n чисел. Найти среднее арифметическое его элементов. Элементы вводятся с клавиатуры.

Program srednee;

Var a: array[1..10] of  real; 

     i, n: integer; 

       s,sred: real;

Begin  

s:=0; 

For i:=1 to n do 

    begin 

      write (‘введите число’); readln (a[i]); 

      s:=s+a[i]; 

    end; 

  sred:=s/n;     

 writeln(‘среднее арифметическое  элементов: ‘,s);

End.

 

10. В заданном одномерном  массиве, состоящем из n  целых чисел, подсчитать количество нулей.

Program  kolv0;

Var a: array[1..100] of integer; 

     i, n, k: integer;

Begin 

Write (‘n=’); Readln (n); 

For i:=1 to n do 

   begin 

      Write(‘a[‘,i,’]=’); readln (a[i]); 

      if a[i]=0 then k:=k+1; 

   end; 

Writeln(‘количество 0 равно  ’, k);

end.

 

 

 

 

 

Задача 1.

Сформировать одномерный массив из 10 элементов. Напечатать элементы массива в прямом и обратном порядке.

{Для получения случайных чисел воспользуемся следующей функцией: 
 
Формирует случайное число от 0 до X целого или вещественного типа  
X - параметр, указывающий диапазон значений случайного числа.  
  

 

 

uses crt; 
  var i, n:integer; 
      a:array[1..10] of integer; 
begin 
  clrscr; 
   
  write(' размер =' );readln(n); 
  for i:=1 to n do 
    begin 
{Получаем случайные числа в пределах от 1 до 45.} 
      a[i]:=random(46))+1; 
{Выводим элементы массива на экран.} 
      write(a[i], ' ' ); 
    end; 
{Полученный массив печатаем в обратном порядке.} 
  for i:=n downto 1 do 
    write(a[i],' '); 
  readkey; 
end.


Информация о работе Одномерный массив