Будь умным!


У вас вопросы?
У нас ответы:) SamZan.net

Программирование Уфа 2012 Составитель- Е

Работа добавлена на сайт samzan.net:


Министерство образования и науки Российской Федерации

Федеральное государственное бюджетное образовательное

учреждение высшего профессионального образования

Уфимский государственный авиационный технический университет

Кафедра экономической информатики

ИЗУЧЕНИЕ ИНТЕГРИРОВАННОЙ СРЕДЫ BORLAND C++.

МНОГОМЕРНЫЕ МАССИВЫ

МЕТОДИЧЕСКИЕ УКАЗАНИЯ

к лабораторным работам по курсу «Программирование»

Уфа 2012

Составитель: Е.И. Филосова

ББК

УДК 519.682

Методические указания к лабораторным работам по курсу «Программирование» для студентов направления 080500 «БИЗНЕС ИНФОРМАТИКА» / Уфимский государственный авиационный технический университет; Составитель Е.И. Филосова, Уфа, 2012

В методических указаниях представлена лабораторная работа №5 по изучению раздела «Многомерные массивы» дисциплины «Программирование». Представлены примеры, контрольные вопросы и задания для самостоятельной работы. Методические указания могут быть так же использованы в курсовом и дипломном проектировании.

Ил. 1, табл. 0

Рецензенты: доц.

 доц.

© Уфимский государственный авиационный технический университет, 2012


Содержание

[1]
Цель работы 

[2] 1. Общие положения

[2.1] 1.1 Многомерные массивы

[2.2] 1.2 Работа с двумерным массивом

[2.3] 1.3  Динамические массивы

[3] 2. Содержание работы

[4] 3. Требования к отчету

[5] 4. Контрольные вопросы

[6]
Приложение А

[7] Варианты заданий по теме «Многомерные массивы»

[8] Приложение Б

[9] Варианты заданий по теме «Замена и перестановка элементов матриц»

[10]  


Цель работы 

Изучить работу с многомерными массивами и указателями:

  •  описание многомерного массива;
  •  основные алгоритмы работы с двумерными массивами;
  •  динамические многомерные массивы.

1. Общие положения

1.1 Многомерные массивы

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

int t[3][4];  - описывается двумерный массив, из 3 строк и 4 столбцов.

Элементы массива:

t[0][0] t[0][1] t[0][2] t[0][3]

t[1][0] t[1][1] t[1][2] t[1][3]

t[2][0] t[2][1] t[2][2] t[2][3]

При выполнении этой команды под массив резервируется место. Элементы массива располагаются в памяти один за другим:

int temp [3] [15] [10]; - резервируется место под 3-х мерный массив.

В памяти многомерные массивы представляются как одномерный массив, каждый из элементов которого, в свою очередь, представляет собой массив. Рассмотрим на примере двумерного массива: int a[3][2]={4, l, 5,7,2, 9} как он представляется в памяти:

a[0][0]

заносится значение 4

a[0][1]

заносится значение 1

a[1][0]

заносится значение 5

a[1][1]

заносится значение 7

a[2][0]

заносится значение 2

a[2][1]

заносится значение 9

Второй способ инициализации при описании массива

int а[3][2]={ {4,1}, {5, 7}, {2, 9} };

Обращение к элементу массива производится через индексы.

cout << а[0][0]; - выдаст значение 4.

cout << a[1][1]; - выдаст знaчение 7.

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

#include <iostream.h>

#include <conio.h>

main () {

int a[3] [2]={{1,2}, {3,4}, {5,6} };

int i,j;

for (i=0; i<=2; i++)

 for(j=0; j<=1; j++)

cout <<"\n a["<< i <<"," << j <<"] ="<< a[i][j];

getch();

return 0;

}

Для того, чтобы убрать из программы явные значения размера и массива, можно воспользоваться директивой define

#include <iostream.h>

#include <conio.h>

#define I 3

#define J 2

main() {

  int a[I][J]={ {1,2},  {3,4},  {5,6} };

 int i, j;

  for ( i=0 ;  i< I;  i++)

     for( j=0; j< J;  j++)

     cout <<"\n a["<< i <<"," << j << "] ="<< a[i][j];

getch();

return 0;

}

1.2 Работа с двумерным массивом

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

Каждый элемент двумерного массива описывается как В[i , j], где:

В – имя массива

i -  номер строки

j – номер столбца

Если число строк двумерного массива равняется числу столбцов, то матрицы данного типа называются квадратными. Элементы квадратной матрицы вида B[1,1], B[2,2], B[3,3]… составляют главную диагональ. Элементы главной диагонали можно записать так: В[i,i], т.е. индексы строки и столбца совпадают. Например, заполнение нулями главной диагонали матрицы:

 for (i=0; i<n; i++) a[i][j]=0;

Побочная диагональ квадратной матрицы проходит из правого верхнего угла в левый нижний. Элементы вспомогательной диагонали можно записать так: В[i,n-i-1], где n – размер массива. Например, заполнение нулями элементов выше вспомогательной диагонали:

for (i=0; i<n-1; i++)

for (j=0; j<n-i-1; j++)

      a[i][j]=0;

Заполнение нулями элементов по периметру массива:

for (i=0; i<n; i++) {

        a[i][0]=0;

        a[i][n-1]=0;

        a[0][i]=0;

        a[n-1][i]=0;

};

Особое значение при работе с квадратными массивами занимает задача «транспонирования», т.е переворачивания массива относительно главной диагонали. Для выполнения этой задачи нужно поменять местами элементы A[i,j] и A[j,i]. Для перестановки двух элементов в массиве необходимо воспользоваться вспомогательной переменной:

Temp=A[2][5]

A[2][5]=A[5][2];

A[5][2]=Temp;

Для переворачивания всего массива используется двойной цикл

for (i=0; i<n; i++)

   for (j=i; j<n; j++) {

      temp=a[i][j];

      a[i][j]=a[j][i];

      a[j][i]=temp;

   };

Пример. Вводится квадратная матрица с максимальным размером 10 на 10. Программа заменяет все отрицательные числа их модулями.

#include <iostream.h>

#include <conio.h>

void main() {

int a[10][10];

int n,i,j;

cout<<"\n Введите количество строк и столбцов";

cin>>n;

for (i=0; i<n; i++){

  cout <<"\nVvedi "<< i<<" stroky";

  for (j=0; j< n; j++)

    cin>> a[i][j];                           // Ввод элементов  матрицы

}

for (i=0; i< n; i++)

for (j=0; j< n; j++)

 if (a[i][j] < 0) a[i][j]=-a[i][j];

// Вывод матрицы

cout <<"\n";

for (i=0; i< n; i++) {

 for (j=0; j< n; j++)

 cout<< a[i][j]<<"  ";

 cout<<"\n";

}

getch();

}

1.3  Динамические массивы

Динамическим считается массив, который способен в любой момент изменять свой размер. Эта возможность обеспечивается за счет динамического выделения памяти под массив.

Идеология языка C++ предполагает, что каждый объект создаётся (объявляется) именно в том месте, где он нужен, и является работоспособным сразу после создания. Для этого каждый класс имеет определённый набор конструкторов — функций, которые должны автоматически запускаться при создании объекта (экземпляра данного класса) и инициализировать его члены.

При создании динамического массива необходимо указать его имя (указатель) и размерность. Например, для двумерного массива:

 int n=10, m=10;

          int** a=new int* [n];

          for (int i=0; i<n; i++)

                a[i]=new int[m];

Будет выделен фрагмент динамической памяти 8х10x10=800 байт и адрес начала этого фрагмента помещен в a.

Освобождение памяти выполняется следующей операцией (квадратные скобки обязательны)

 delete[] a;

Пример. Дана целочисленная матрица, состоящая из NxM элементов. Заполнить ее с клавиатуры. Вывести индексы четных элементов второй строки.

Начнем решение задачи с составления алгоритма.

Словесный алгоритм решения задачи следующий:

1. Запрос количества строк и столбцов в матрице.

2. Ввод матрицы a, состоящей из NхМ целых чисел.

3. Просматриваются в цикле все элементы второй строки массива (с номером 1) с целью четные (т.е. остаток от деления на 2 равен 0: a[1,j]%2==0). В случае, если в матрице найдено выполнение указанного соотношения, на экран выдается номер строки 1 и столбца j, для которого выполняется рассматриваемое соотношение.

На рисунке 1 дана детальная блок-схема алгоритма. 

Программа, реализующая данный алгоритм, представлена ниже:

#include<iostream.h>

#include <conio.h>

main () {

int N, temp;

int i, k;

cout << "\n Введите количество строк ";

cin >> N;

cout << "\n Введите количество столбцов ";

cin >> M;

int** a=new int* [N];

for (int i=0; i<N; i++)

    a[i]=new int[M];

// Ввод матрицы

for (i=0; i<N; i++){

   cout <<"\nVvedi "<< i<<" stroky";

   for (j=0; j< M; j++)

    cin>> a[i][j];

}

for (i=0; i< M; i++)

    if  (a[1][i]%2==0)    cout<<”1,“<<j<<”\n”;

delete[] a;

 getch();

}

2. Содержание работы

 1. Составьте и отладьте программу решения следующей задачи: Задан целочисленный массив из 3 строк и 4 столбцов. Найти сумму всех элементов данного массива. Указание: Используйте фрагмент программы следующего вида:

s=0;

for (i=0; i<3; i++)

for (j=0; j<4; j++)

      s=s+a[i][j];

2. Дополните полученную программу. Найдите сумму элементов второй строки данного массива (она имеет индекс 1).

Вид возможного решения:

s1=0;

for (j=0; j<4; j++)

s1=s1+a[1][j];

3. Организуйте вывод на экран исходного массива.

4. Выполните задание из указанного преподавателем варианта приложения А.

5. Составьте и отладьте программу решения следующей задачи:

Задан целочисленный массив А размерности NхM. Переставьте местами первую и последнюю строку данного массива.

Для создания массива используйте динамическое выделения памяти. При задании массива использовать датчик случайных чисел (не забудьте подключить библиотеку <time.h>):

randomize(),

cout << "\n Введите N ";

cin >> N;

cout << "\n Введите M ";

 cin >> M;

int** a=new int* [N];

for (int i=0; i<N; i++)

   a[i]=new int[M];

for (i=0; i<N; i++) {

  for (j=0; j<M; j++) {

      a[i][ j]=rand()%100;

      cout<<a[i][j]<<”   “;

  }

 cout<<”|n”;

}

Для перестановки местами первой (с индексом 0) и последней (с индексом 4) строки используйте цикл следующего вида:

for (i=0; i<N; i++){

c=a[0][i];

a[0][i]=a[4][i];

a[4][i]=c;

}

В завершении программы выведите на экран полученный в результате преобразований массив.

6. Выполните задание на перестановку или замену элементов массива в соответствии с указанным преподавателем вариантом приложения Б.

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

Отчет о проделанной работе должен содержать:

  •  название работы, ее цель;
  •  номер и условие своего варианта для выполнения задания;
  •  блок-схемы и тексты программ;
  •  полученные результаты выполнения программы;
  •  ответы на контрольные вопросы из пункта 3 по указанию преподавателя.

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

  1.  Что понимают под многомерным массивом данных?
  2.  Какой массив называется двумерным? Как описываются двумерные массивы?
  3.  Как убрать из программы явное описание размерности массива?
  4.  Как создать двумерный динамический массив?
  5.  Как освобождается память, занятая под динамические структуры?


Приложение А

Варианты заданий по теме «Многомерные массивы»

1.   Дана действительная матрица размера 3х4. Определить, сколько раз встречается число 5 во второй строке данной матрицы.

2.    Дана целочисленная матрица размера 5x3. Найти произведение элементов последней строки данной матрицы.

3.   Дана целочисленная матрица размера 4х4. Определить, сколько раз встречается число 7 в первом столбце данной матрицы.

4. Задана действительная квадратная матрица размера 4х4. Найти сумму элементов главной диагонали данной матрицы.

5. Задана действительная квадратная матрица размера 4х4. Определить, сколько раз встречается число 0 среди элементов главной диагонали данной матрицы.

6.  Задана действительная квадратная матрица размера 4х4. Найти наибольший элемент главной диагонали данной матрицы.

7. Известно количество сделанных столов тремя фабриками за два квартала. Определить максимальное количество выпущенных столов.

8. Известна заработная плата, полученная 5 сотрудниками отдела в течение года. Определить максимальную заработную плату.

9. Известна заработная плата, полученная 10 сотрудниками отдела в течение года. Определить среднемесячную зарплату по отделу.

10. Известны результаты сдачи трех экзаменов десятью студентами. Найти средний балл каждого студента и общий средний балл.

11. Известно количество сделанных столов тремя фабриками за два квартала. Определить, какая фабрика выпустила максимальное количество столов.

12. Известны результаты сдачи двух экзаменов десятью студентами. Определить количество студентов, сдавших экзамены без троек.

13. Дана действительная матрица размера 3x4. Найти сумму элементов последнего столбца данной матрицы.

14. Дана целочисленная матрица размера 4x3. Найти произведение элементов первого столбца данной матрицы.

15. Дана действительная матрица размера 3x4. Найти минимальное значение в первой строке данной матрицы.

16. Задана целочисленная квадратная матрица размера 3х3. Найти наименьший элемент главной диагонали данной матрицы.

17.    Дана целочисленная матрица размера 4x4. Найти минимальное значение во втором столбце данной матрицы.

18.  Дана действительная матрица размера 4x3. Найти максимальное значение в третьей строке данной матрицы.

19.  Дана и действительная матрица размера 3x5. Найти сумму   элементов второй строки данной матрицы.

20.  Дана целочисленная матрица размера 3x5. Найти максимальное значение в четвертом столбце данной матрицы.

21. Найти произведение элементов главной диагонали заданной целочисленной матрицы размера 5х5. Вывесит на экран исходный массив и произведение.

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

23. В массиве хранятся сведения о количестве осадков, выпавших за пять лет по месяцам. Определить количество лет, в которые количество осадков превышало среднегодовое.

24. Дан двумерный массив размера 3x4. Найти максимальный элемент во второй строке. Вывести на экран максимальный элемент и номера его строки и столбца.

25. Фирма имеет 5 магазинов. Информация о доходе каждого магазина за каждый месяц хранится в двухмерном массиве (первого магазина – в первой строке, второго – во второй и т.д.). Составить программу для расчета среднемесячного дохода третьего магазина.

26. Фирма имеет 6 магазинов. Информация о доходе каждого магазина за каждый год хранится в двухмерном массиве (в первом столбце за январь, во втором – за февраль и т.д.). Верно ли, что общий доход фирмы в сентябре превысил 50000 руб?

27. В поезде 5 вагонов, в каждом из которых 10 мест. Информация о проданных билетах хранится в двухмерном массиве, номера строк которого соответствуют номерам вагонов, а номера столбцов – номерам мест. Если билет на то или иное место продан, то соответствующий элемент массива имеет значение 1, в противном случае – 0. Составить программу, определяющую, имеются ли свободные места в третьем вагоне поезда.

28. Дан двухмерный массив из двух строк и десяти столбцов. В его первой строке записано количество мячей, забитых футбольной командой в той или иной игре, во второй – количество пропущенных мячей в этой же игре.  Определить количество ничьих данной команды.

29. Дан двухмерный массив из двух строк и двенадцати столбцов. В его первой строке записано количество мячей, забитых футбольной командой в той или иной игре, во второй – количество пропущенных мячей в этой же игре.  Определить количество выигрышей и количество проигрышей данной команды.   

30. В двухмерном массиве хранится информация о количестве студентов в той или иной группе каждого курса института с  первого по пятый (в первом столбце – информация о группах первого курса, во втором – второго и т.д.). На каждом курсе имеется 6 групп. Определить среднее число студентов в одной группе на третьем курсе.  

Приложение Б

Варианты заданий по теме «Замена и перестановка элементов матриц»

1.    Дана целочисленная матрица размера NxM. Поменять местами 1 и 2 столбцы.

2.    Дана целочисленная матрица размера NxM.Переставить местами 1 и 2 строку матрицы.

3.   Дана целочисленная матрица размера NxM. Переставить местами 3 и 4 столбец.

4.    Дана целочисленная матрица размера NxM. Поменять местами первый и  последний из столбцов.

5.    Дана целочисленная матрица размера NxM. Переставить местами 1 и 5 строку.

6.    Дана целочисленная матрица размера NxM. Заменить в данной матрице  все элементы второй строки числом 10.

7.    Дана целочисленная матрица размера NxM. Переставить местами 1 и 4 столбец.

8.      Дана целочисленная матрица размера NxM. Заменить в данной матрице  все положительные элементы первого столбца числом 1.

9.      Дана целочисленная матрица размера NxM. Переставить местами 1 и 3 строку.

10.  Дана целочисленная матрица размера NxM. Заменить в данной матрице  все элементы второй строки числом 10.

11.      В целочисленной матрице чисел размером NxM поменять местами 2 и 4 столбцы.

12.      Дана целочисленная матрица размера NxM. Переставить местами 4 и 5 строку.

13.      Дана целочисленная матрица размера NxM. Заменить в данной матрице  все элементы второго столбца числом 100.

14.      Дана целочисленная матрица размера NxM. Переставить местами 5 и 6 столбец.

15.      Дана целочисленная матрица размера NxM. Заменить в данной матрице  все элементы первой строки числом 7.

16.      Дана целочисленная матрица размера NxM. Переставить местами 2 и 3 строку.

17.    Дана целочисленная матрица размера NxM. Заменить в данной матрице  все элементы второго столбца числом 5.

18.    Дана целочисленная матрица размера NxM. Переставить местами 2 и 3 столбец.

19.  Дана целочисленная матрица размера NxM. Заменить в данной матрице  все положительные элементы первой строки числом -3.

20. Дана целочисленная матрица размера NxM. Переставить местами 2 и 4 строку.

21. Дана целочисленная матрица размера NxM. Заменить в данной матрице  все элементы главной диагонали числом 7.

22. Дана целочисленная матрица размера NxM. Заменить в данной матрице  все элементы выше побочной диагонали числом 1.

23. Дана целочисленная матрица размера NxM. Заменить в данной матрице  все элементы выше главной диагонали числом 2.

24. Дана целочисленная матрица размера NxM. Заменить в данной матрице  все элементы побочной диагонали числом 0.

25. Дана целочисленная матрица размера NxM. Заменить в данной матрице  все элементы ниже главной диагонали числом 4.

26. Дана целочисленная матрица размера NxM. Заменить в данной матрице  все элементы ниже побочной диагонали числом 5.

27. Дана целочисленная матрица размера NxM. Заменить в данной матрице  все элементы первой и последней строки числом 6.

28. Дана целочисленная матрица размера NxM. Заменить в данной матрице  все элементы первого и последнего столбца числом 5.

29. Дана целочисленная матрица размера NxM. Во втором столбце имеются элементы, равные 10. Определить номер строки, в которой расположен самый нижний из таких элементов.

30. Дана целочисленная матрица размера NxM. Составить программу, которая определяет, есть ли в некотором столбце массива хотя бы один элемент, равный нулю.

 




1. тематическая обработка результатов геодезических измерений.html
2. Екологічні проблеми міського середовища і містобудування.html
3.  НЕЙРОГУМОРАЛЬНАЯ РЕГУЛЯЦИЯ МЕНСТРУАЛЬНОГО ЦИКЛА
4. Правовые аспекты экологической экспертизы проектов в Российской Федерации
5. ми и т. д. Таким образом под кооперированием понимают установление связей м-у различными предприятиями для с
6. реферату- Білети з географіїРозділ- Географія Білети з географії Білет 1
7. 2. Общественное мнение как социальный феномен и его функционирование в системе властных отношений
8. Лекция номер 2 рынки различаются по экономическому направлениюпоэтому можно представить структуру рынка в
9. Тамбовский государственный университет имени Г
10. економічними та іншими факторами виробництва технікоорганізаційним рівнем виробництва науковотехнічний
11. Понятие система органов местного самоуправления
12. ИСТОРИЯ МИРОВЫХ ЦИВИЛИЗАЦИЙ
13. Лекция 6 Случаи приобретения опыта не объясняемые теорией ассоциативного научения
14. Время инвентаризации имущества организации по строке баланса Дебиторская задолженность
15. тема со стороны пр
16. Тема урока Формирование универсальных учебных действий на лексическом материале по теме- School dys
17. Тема 19 Теория управленческих решений
18. Лабораторная работа 52
19. РЕФЕРАТ по дисциплине ~~Введение в инженерное образование~ ~~ГИДРОЭЛЕКТРОСТАНЦИИ~ Студ
20. тема 2 Періодизація розвитку української культури та загальна характеристика періодів