Опубликован: 02.02.2011 | Уровень: для всех | Доступ: свободно
Лекция 14:

Двумерные массивы: задачи поиска, замены и суммирования элементов двумерного массива

< Лекция 13 || Лекция 14: 1234 || Лекция 15 >

Лабораторная работа 13. Двумерные массивы: задачи поиска, замены и суммирования элементов двумерного массива

Цель работы: изучить понятия, особенности внутреннего представления способы генерации и вывода многомерных массивов, научиться выполнять объявление, инициализацию, генерацию и вывод двумерных массивов, использование алгоритмов поиска, замены и суммирования в двумерных массивах при решении задач на языке C++.

При выполнении лабораторной работы для каждого задания требуется написать программу на языке С++, которая получает на входе числовые данные (в зависимости от постановки задачи), выполняет генерацию и вывод двумерного массива указанного типа. В каждой задаче необходимо выполнить обработку двумерного массива. Для этого необходимо разработать алгоритм (поиска, замены или суммирования в двумерных массивах) и реализовать его в виде отдельной функции. Ввод данных осуществляется с клавиатуры с учетом требований к входным данным, содержащихся в постановке задачи. Ограничениями на входные данные является диапазон используемого числового типа данных в языке С++ и максимально допустимый размер объявляемого двумерного массива.

Теоретические сведения.

Ознакомьтесь с материалом лекции 13.

Задания к лабораторной работе.

Выполните приведенные ниже задания.

  1. Объявите двумерный целочисленный массив, в котором 10 строк по 7 элементов. Выполните генерацию массива случайными целыми числами количеством n x m (n <= 10, m <= 7) из промежутка [a; b). Выведите массив на экран в виде таблицы. Оформите генерацию и ввод массива с помощью функций.
  2. Объявите двумерный вещественный массив, в котором n x m элементов. Заполните его числами, полученными по закономерности: a_{ij}=\sum_{n=0}^i\frac{j}{n!}. Распечатайте его в виде таблицы с точностью до 4 знаков после запятой. Найдите в каждом столбце наибольший элемент. Распечатайте найденные элементы под соответствующим столбцом.
  3. Объявите двумерный целочисленный массив, в котором n x m элементов. Выполните генерацию массива случайными целыми числами из промежутка [a; b). Распечатайте массив в виде таблицы. Найдите суммы элементов массива по строкам. Распечатайте найденные суммы по образцу:
    Сумма элементов 0-й строки равна ...
    Сумма элементов 1-й строки равна ....
  4. Объявите двумерный вещественный массив, в котором n x m элементов. Заполните его числами, полученными по закономерности: a_{ij}=\prod_{i=0}^j\frac{n}{i+j+1}. Распечатайте его в виде таблицы с точностью до 3 знаков после запятой. Найдите в каждом столбце среднее арифметическое элементов. Распечатайте найденные средние арифметические под соответствующим столбцом с той же точностью.
  5. Объявите двумерный целочисленный массив, в котором n x m элементов. Выполните генерацию массива случайными целыми числами из промежутка [a; b). Замените в массиве максимальные элементы каждой строки произведением их цифр. Распечатайте массив в виде таблицы дважды: до и после замены.
  6. Объявите двумерный целочисленный массив, в котором n x n элементов. Выполните транспонирование полученной квадратной матрицы. Распечатайте массив в виде таблицы дважды: до и после транспонирования.

Указания к выполнению работы.

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

Следует реализовать каждое задание в соответствии с приведенными этапами:

  • изучить словесную постановку задачи, выделив при этом все виды данных;
  • сформулировать математическую постановку задачи;
  • выбрать метод решения задачи, если это необходимо;
  • разработать графическую схему алгоритма;
  • записать разработанный алгоритм на языке С++;
  • разработать контрольный тест к программе;
  • отладить программу;
  • представить отчет по работе.

Требования к отчету.

Отчет по лабораторной работе должен соответствовать следующей структуре.

  • Титульный лист.
  • Словесная постановка задачи. В этом подразделе проводится полное описание задачи. Описывается суть задачи, анализ входящих в нее физических величин, область их допустимых значений, единицы их измерения, возможные ограничения, анализ условий при которых задача имеет решение (не имеет решения), анализ ожидаемых результатов.
  • Математическая модель. В этом подразделе вводятся математические описания физических величин и математическое описание их взаимодействий. Цель подраздела – представить решаемую задачу в математической формулировке.
  • Алгоритм решения задачи. В подразделе описывается разработка структуры алгоритма, обосновывается абстракция данных, задача разбивается на подзадачи. Схема алгоритма выполняется по ЕСПД (ГОСТ 19.003-80 и ГОСТ 19.002-80).
  • Листинг программы. Подраздел должен содержать текст программы на языке программирования С++, реализованный в среде MS Visual Studio 2010.
  • Контрольный тест. Подраздел содержит наборы исходных данных и полученные в ходе выполнения программы результаты.
  • Выводы по лабораторной работе.
  • Ответы на контрольные вопросы.

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

  1. Почему в программе на С++ при объявлении двумерного массива необходимо, чтобы был известен размер по каждому измерению массива?
  2. Можно ли выполнить прямое присваивание двумерных массивов?
  3. Когда, с какой целью и почему возможно объявление безразмерных массивов? С одним безразмерным измерением?
  4. В чем отличие обращения к элементам двумерного массива с помощью индексированного имени и посредством арифметики с указателями?
  5. Эквивалентны ли для массива mas следующие обращения и почему: mas и &mas[0][0]?
  6. Возможно ли в двумерном массиве mas обращение к элементу &mas[0]? Почему?
  7. Приведите возможные обращения к элементу двумерного массива, аналогичные обращению mas[i][j].
  8. Какие ограничения распространяются на тип массива?
  9. Каким образом можно определить объем памяти, выделяемой под двумерный массив?
< Лекция 13 || Лекция 14: 1234 || Лекция 15 >
Денис Курбатов
Денис Курбатов
Владислав Нагорный
Владислав Нагорный

Подскажите, пожалуйста, планируете ли вы возобновление программ высшего образования? Если да, есть ли какие-то примерные сроки?

Спасибо!