Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
mlr_progr_1sem.doc
Скачиваний:
7
Добавлен:
03.11.2018
Размер:
1.72 Mб
Скачать

Двумерные массивы

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

Вот пример объявления двумерного массива:

int nArray[2][3];

int nArray[0][0] – 1-й элемент 1-й строки;

int nArray[0][1] – 2-й элемент 1-й строки;

int nArray[0][2] – последний элемент 1-й строки;

int nArray[1][0] – 1-й элемент 2-й строки;

int nArray[1][1] – 2-й элемент 2-й строки;

int nArray[1][2] – последний элемент 2й, последней, строки;

Двумерный массив nArray рассматривается как массив массивов. Элементами главного массива nArray являются два одномерных массива nArray[0] и nArray[1], каждый из которых состоит из трех элементов типа int.

В листинге 22 приведен пример программы, печатающей на экране содержимое массива nArray.

Листинг 22

/*Печать содержимого двумерного массива*/

#include <stdio.h>

void main( void )

{

// Пример начальной инициализации массива при его объявлении

int nArray[2][3] = {{1,2,3},

{4,5,6}};

// Печать содержимого массива

printf( "Massiv nArray[2][3]"

"\nnArray[0][0] = %d"

"\nnArray[0][1] = %d"

"\nnArray[0][2] = %d"

"\nnArray[1][0] = %d"

"\nnArray[1][1] = %d"

"\nnArray[1][2] = %d\n",

nArray[0][0], nArray[0][1], nArray[0][2],

nArray[1][0], nArray[1][1], nArray[1][2] );

}

Алгоритмы

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

Существует множество определений термина «алгоритм». Некоторые более понятны некоторые – менее. Мы начнем с простых жизненных примеров.

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

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

В данном лабораторном практикуме вы уже сталкивались с алгоритмами в лабораторной работе №1 когда изучали последовательности действий при установке пакетов Turbo C и Visual C++ 6.0. Последовательности действий необходимые для создания проекта, написания программного кода, компиляции и запуска программы и т.д. также являются алгоритмами.

В рамках лабораторной работы №2 вы сталкивались с алгоритмами в ходе решения каждой из трех задач. Перед написанием программного кода вы волей-неволей планировали последовательность своих действий. Сначала объявить переменные. Затем ввести исходные данные. Если при компиляции возникла ошибка, то проверить правильность подключения библиотеки и т.д. Такое планирование опять таки можно рассматривать как алгоритм.

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

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

Для записи алгоритмов мы будем пользоваться двумя формами: словесной и в виде блок-схем (правила оформления блок-схем вы можете найти в ГОСТ 19.701).

Рассмотрим алгоритм решения следующей задачи.

Дана действительная квадратная матрица порядка n. Определить количество положительных элементов матрицы расположенных на главной диагонали.

Алгоритм решения этой задачи приведен на рис. 14

Рис. 14.

Представленная форма записи называется блок-схемой или схемой алгоритма.

Ниже представлен этот же алгоритм в виде словесного описания.

АЛГОРИТМ 1

Исходные данные:

n — порядок матрицы;

А[n×n] — действительная матрица.

Выходные данные:

nCounter — количество положительных элементов матрицы расположенных на главной диагонали.

Вспомогательные переменные:

i, j — переменные для организации циклов.

Шаг 1. [Установить nCounter]. nCounter = 0. (Обнулить счетчик элементов).

Шаг 2. [Цикл по i]. Выполнить шаг 3 при i = 0,…,n – 1 и после этого завершить алгоритм.

Шаг 3. [Цикл по j]. Выполнить шаги от 4 до 6 при j = 0,…,n – 1.

Шаг 4. [Сравнить i, j]. Если i = j то перейти к шагу 5, иначе к шагу 3. (Проверяем, находится ли элемент на главной диагонали).

Шаг 5. [Сравнить А[i,j], 0]. Если А[i,j] >= 0 то перейти к шагу 6, иначе к шагу 3. (Проверяем, является ли элемент положительным).

Шаг 6. [Установить nCounter]. nCounter = nCounter + 1. (Увеличиваем счетчик положительных элементов).

В приведенном словесном алгоритме в квадратных скобках указаны типы действий, в круглых — комментарии к действиям, а между ними — суть этих действий.

Как видно, каждая из форм записи обладает своими достоинствами и недостатками. В дальнейшем мы будем пользоваться обеими формами.

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]