Массивы в языках Pascal и Basic

Автор работы: Пользователь скрыл имя, 17 Июня 2011 в 20:57, реферат

Описание

С понятием "массив" приходится сталкиваться при решении научно-технических и экономических задач обработки совокупностей большого количества значений.

Массив - это множество однотипных элементов, объединённых общим именем и занимающих вкомпьютере определённую область памяти.

Работа состоит из  1 файл

Документ Microsoft Word (2).doc

— 133.50 Кб (Скачать документ)

{procedure vvod_sl - сюда  подставить приведенные выше  процедуры}

{procedure print}

Var a:mas; n:byte;

Begin

      randomize;

      vvod_sl(n, a); print(n, a);

      writeln('Сумма  минимального и максимального  элементов', a[Min(n, a)] + a[Max(n, a)]);

      writeln('Количество  отрицательных элементов, стоящих  на чётных местах: ', K(n, a));

      V(n, a);

      print(n, a)

End.  

При решении  практических задач часто приходится иметь дело с различными таблицами  данных, математическим эквивалентом которых служат матрицы. Такой способ организации данных, при котором каждый элемент определяется номером строки и номером столбца, на пересечении которых он расположен, называется двумерным массивом или таблицей.

Например, данные о планетах Солнечной системы представлены следующей таблицей:

Планета Расст. до Солнца Относ. обьем Относ. масса
Меркурий 57.9 0.06 0.05
Венера 108.2 0.92 0.81
Земля 149.6 1.00 1.00
Марс 227.9 0.15 0.11
Юпитер 978.3 1345.00 318.40
Сатурн 1429.3 767.00 95.20

Их можно занести  в память компьютера, используя понятие двумерного массива. Положение элемента в массиве определяется двумя индексами. Они показывают номер строки и номер столбца. Индексы разделяются запятой. Например: A[7, 6], D[56, 47].

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

Program Vvod2;

Var I, J : Integer;

     A : Array [1..20, 1..20] Of Integer;

Begin

  FOR I := 1 TO 3 DO

   FOR J := 1 TO 2 DO A[I, J] := 456 + I

 End.

элементы массива  примут значения A[1, 1] = 457; A[1, 2] = 457; A[2, 1] = 458; A[2, 2] = 458; A[3, 1] = 459; A[3, 2] = 459.

При описании массива  задается требуемый объем памяти под двумерный массив, указываются  имя массива и в квадратных скобках диапазоны изменения индексов.

При выполнении инженерных и математических расчетов часто используются переменные более  чем с двумя индексами. При  решении задач на ЭВМ такие  переменные представляются как компоненты соответственно трех-, четырехмерных  массивов и т.д.

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

Задача 6. Заполнить матрицу порядка n по следующему образцу:

1     2    3  ... n-2 n-1  n

2     1    2  ... n-3 n-2 n-1

3     2    1  ... n-4 n-3 n-2

...  ...  ... ... ... ... ...

n-1  n-2  n-3 ...  2   1   2

n    n-1  n-2 ...  3   2   1

Program Massiv12;

  Var I, J, K, N : Integer;

      A : Array [1..10, 1..10] Of Integer;

  Begin

   Write('Введите порядок матрицы: '); ReadLn(N);

    For I := 1 To N Do

     For J := I To N Do

      Begin

       A[I, J] := J - I + 1; A[J, I] := A[I, J];

      End;

     For I := 1 To N Do

      Begin

       WriteLn;

       For J := 1 To N Do Write(A[I, J]:4);

      End

  End.

Задача 7. Дана целочисленная квадратная матрица. Найти в каждой строке наибольший элемент и поменять его местами с элементом главной диагонали.

Program Obmen;

Var N, I, J, Max,Ind, Vsp : Integer;A : Array [1..15, 1..15] Of Integer;

 Begin

  WRITE('Введите  количество элементов в массиве: '); READLN(N);

FOR I := 1 TO N DO

  FOR J := 1 TO N DO

  Begin

   WRITE('A[', I, ',', J, '] '); READLN(A[I, J])

  End;

FOR I := 1 TO N DO

 Begin

  Max := A[I, 1]; Ind := 1;

   FOR J := 2 TO N DO

      IF A[I, J] > Max THEN

       Begin

        Max := A[I, J]; Ind := J

       End;

   Vsp := A[I, I]; A[I, I] := A[I, Ind]; A[I, Ind] := Vsp

  End;

     FOR I := 1 TO N DO

      Begin

       WriteLn;

       FOR J := 1 TO N Do Write(A[I, J] : 3);

      End; WriteLn

End.

Задача 8. Задана прямоугольная целочисленная таблица размером m×n. Указать столбец (назвать его номер), где минимальное количество элементов, кратных сумме индексов.

type mas2=array[1..20, 1..20] of integer; 

{Формирование  массива заданного размера с  помощью датчика псевдослучайных  чисел}

procedure create(var m, n: byte; var a: mas2);

var i, j: byte;

begin

     write('Введите размеры таблицы: '); readln(m, n);

     for i:=1 to m do

         for j:= 1 to n do

             a[i, j]:= -20+random(41);

end; 

{вывод таблицы  на экран}

procedure print(const m, n: byte; const a: mas2);

var i, j: byte;

begin

      for i:=1 to m do

      begin

        writeln;

        for j:=1 to n do

           write(a[i, j]:5);

      end;

      writeln

end; 

{Поиск нужного  столбца; результат - в переменной k и, далее, - значение функции}

function solution(const m, n: byte; const a: mas2): byte;

var i, j, k, ke, mke: byte;

begin

    k:=1; mke:=m;

    for j:=1 to n do

    begin

      ke:=0;

      for i:=1 to m do

        if abs(a[i, j]) mod (i+j) = 0 then ke:=ke+1;

      if ke<mke then begin mke:=ke; k:=j end

    end;

    solution := k;

end; 

var m, n: byte; a: mas2; 

begin

    randomize;

    create(m, n, a);

    print(m, n, a);

    writeln('Ответ: ', solution(m, n, a))

end. 
 

Задания на определение условия задачи по теме "Массивы"  

Контрольные вопросы и задания

  1. Что такое  массив?
  2. Почему массив является структурированным типом данных?
  3. Что такое размерность массива? Существуют ли ограничения на размерность массива?
  4. Какого типа могут быть элементы массива?
  5. Какого типа могут быть индексы элементов массива?
  6. Какие простые типы данных относятся к порядковым?
  7. Какими способами может быть заполнен массив? Приведите примеры.
  8. Как определить минимальный объём памяти, отводимой под массив?
  9. Какие действия выполняют обычно над элементами массива?
  10. Может ли массив быть элементом массива?
  11. В каком случае массивы совместны по присваиванию?
  12. Пусть элементами массива A (a[1], a[2], a[3], a[4]) являются соответственно x, -x, x2, -x2. Чему будет равно значение выражения
  13.   a[-a[a[3]-2]]+a[-a[a[3]]]

    при x=2?

  1. Можно ли выполнять обход двумерного массива, организовав внешний цикл по столбцам, а внутренний — по строкам?
  2. Точно и однозначно сформулировать условие задачи, решение которой приведено в данной программе:
  3. Program Kr_N_4;
  4. Const NMax = 50;
  5. Type  Mass = Array[1..NMax,0..NMax-1] Of Real;
  6. Var   A : Mass; I, J, N : 0..NMax; C : Real;
  7. Begin   Write('Количество элементов массива N=? '); ReadLn(N);
  8.  For I := 1 To N Do
  9.   For J := 0 To N-1 Do
  10.    Begin Write('A[',I,',',J,']= '); Readln(A[I,J])End;
  11.  For I := 1 To N Do
  12.   For J := 0 To N-1 Do
  13.    Begin C := A[I,J]; 
  14.     A[I,J] := A[N-I+1,J];
  15.     A[N-I+1,J] := C
  16.    End;
  17.  For I := 1 To N Do
  18.  Begin For J := 0 To N-1 Do
  19.    Write(A[I,J]:5:2,' ');
  20.        WriteLn
  21.  End
  22. End.
  23. Целесообразно ли использовать ли вложенные циклы, если совершается обход только главной диагонали квадратной матрицы? одной строки матрицы? одного столбца матрицы?

Информация о работе Массивы в языках Pascal и Basic