Лабораторная работа 4


Программирование с использованием массивов

Теоретический материал Справочник по процедурам и функциям



Цель работы: научиться правильно описывать различные массивы, уметь инициализировать массивы, распечатывать содержимое массива; научится решать задачи на использование массивов.

Общие сведения:

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

Примеры:

Пример1: Дан двумерный массив. В каждой строке все его элементы, не равные нулю, переписать (сохраняя порядок) в начало строки, а нулевые элементы - в конец массива. Новый массив не заводить.

Этапы решения задачи:
1. Суть одного из алгоритмов решения данной задачи состоит в том чтобы "просматривать" массив построчно и находить в каждой строке пару (0:число), а затем менять их местами между собой и так до тех пор пока в строке таких пар не окажется.
2. Напишем программу на псевдо паскале:
program example1; 
var 
V:array[1..100,1..100] of integer; 
   m,n, i,j, c: integer; 
     flag: boolean; 
begin 
     <ввод размерности массива m*n> 
     <заполнение ячеек массива> 
for i:=1 to m do 
      repeat 
         flag:= true; 
            for j:=1 to n-1 do 
              if (v[i,j]=0) and (v[i,j+1]<>0) then begin 
                <поменять их местами> 
                  flag:= false; 
                end; 
             until flag; 
         <Печать массива> 
      readln; 
   end. 


3.Составим блок схему алгоритма

Детализируем блок "Упорядочиваем 1-ю строку"

Блок схема алгоритма целиком:

4.Приведем программу на языке Паскаль:

program example1; 
  var 
    V:array[1..100,1..100] of integer; 
      m,n, i,j, c: integer; 
         flag: boolean; 
begin 
       write('Введите размерность массива m-n> '); readln(m,n); 
         for i:= 1 to m do 
            for j:= 1 to n do begin 
               write('V[',i,',',j,']= '); readln(V[i,j]); 
  end; 
    for i:=1 to m do 
      repeat 
          flag:= true; 
              for j:=1 to n-1 do 
           if (v[i,j]=0) and (v[i,j+1]<>0) then begin 
         c:=v[i,j]; v[i,j]:=v[i,j+1]; v[i,j+1]:=c; 
      flag:= false; 
  end; 
     until flag; 
      for i:= 1 to m do begin 
         for j:= 1 to n do write(V[i,j]:2);
         writeln
     end; 
  readln; 
end.

Контрольные вопросы

  1. Каким образом определяются переменные типа массив (одномерный и двумерный)?
  2. Как осуществляется доступ к отдельному элементу одномерного и двумерного массива?
  3. Каким образом выводятся элементы массива на экран?
  4. Приведите пример фрагмента программы, который выводит на экран двумерный массив в виде матрицы.
  5. Сколько чисел можно записать в шестимерный массив X : Array[0..1, 0..1, 0..1, 0..1, 0..1, 0..1] of Integer?
    Задания
  1. Даны целые числа а1, а2, а3. Получить целочисленную матрицу [bij]i,j=1,2,3, для которой bij=ai-3aj.
  2. Получить [aij]i=1,…10; j=1,…12 - целочисленную матрицу, для которой aij=i+2j.
  3. Дано натуральное число n. Получить действительную матрицу [aij]i, j=1,…n, для которой aij= .
    Дана действительная квадратная матрица порядка n. Найти наибольшее из значений элементов, расположенных в заштрихованной части матрицы.
    а)   б)   в)   г)

  4. Дана квадратная вещественная матрица размерности n. Найти количество нулевых элементов, стоящих: выше главной диагонали; ниже главной диагонали; выше и ниже побочной.
  5. Дана вещественная матрица размерности n * m. По матрице получить логический вектор, присвоив его k-ому элементу значение True , если выполнено указанное условие и значение False иначе: - все элементы k столбца нулевые; - элементы k строки матрицы упорядочены по убыванию; - k строка массива симметрична.
  6. Дана вещественная матрица размерности n * m. Сформировать вектор b, в котором элементы вычисляются как: - произведение элементов соответствующих строк; - среднее арифметическое соответствующих столбцов; - разность наибольших и наименьших элементов соответствующих строк; - значения первых отрицательных элементов в столбце.
  7. Дан двухмерный массив A[1..m,1..n]. Написать программу построения одномерного массива B[1..m], элементы которого соответственно равны а) суммам элементов строк, б) произведениям элементов строк, в) наименьшим средних арифметических элементов строк.
  8. Расположить элементы данного массива в обратном порядке (первый элемент меняется с последним, второй - с предпоследним и т.д. до середины; если массив содержит нечетное количество элементов, то средний остается без изменения).
  9. В данном массиве поменять местами элементы, стоящие на нечетных местах, с элементами, стоящими на четных местах.
Задачи повышенной сложности
  1. В массиве А[1..N,1..N] определить номера строки и столбца какой-нибудь седловой точки. Некоторый элемент массива называется седловой точкой, если он является одновременно наименьшим в своей строке и наибольшим в своем столбце.
  2. Массив А[1..5,1..7] содержит вещественные числа. Требуется ввести целое число K и вычислить сумму элементов А[I,J], для которых I+J=К. Прежде, однако следует убедиться, что значение К позволяет найти решение, в противном случае нужно напечатать сообщение об ошибке.
  3. Дан массив A[1..N,1..N]. Составить программу, которая прибавила бы каждому элементу данной строки элемент, принадлежащий этой строке и главной диагонали.
  4. Дана матрица NxM. Переставляя ее строки и столбцы, переместить наибольший элемент в верхний левый угол. Определить можно ли таким же образом поместить минимальный элемент в нижний правый угол.
  5. Заполнить двухмерный массив Т[1..n,1..n] последовательными целыми числами от 1 до n 52 0, расположенными по спирали, начиная с левого верхнего угла и продвигаясь по часовой стрелке:
      
      1   2   3   4   5   6 
      20   21   22   23   24   7 
      19   32   33   34   25   8 
      18   31   36   35   26   9 
      30   29   28   27   10 
      15   14   13   12   11 

  • Элемент двухмерного массива называется локальным минимумом, если он строго меньше всех имеющихся у него соседей. Подсчитать количество локальных минимумов заданной матрицы размером NxN найти максимум среди всех локальных минимумов.

  • Назад
    На главную
        Учебник по языку Pascal          Лабораторные работы по программированию          Справочник



    2016-06-29 21:36:22 Денис

    прошу помочь с написанием программ по массивам




    Оставить комментарий:
    Ваше Имя:
    Email:
    Антибот:  
    Ваш комментарий: