Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Министерство образования и науки Российской Федерации
Федеральное государственное бюджетное образовательное
учреждение высшего профессионального образования
Уфимский государственный авиационный технический университет
Кафедра экономической информатики
ИЗУЧЕНИЕ ИНТЕГРИРОВАННОЙ СРЕДЫ 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] |
Изучить работу с многомерными массивами и указателями:
Многомерные массивы - это массивы с более чем одним индексом. Многомерный массив представляет собой массив массивов, то есть массив, элементами которого служат массивы. Определение многомерного массива в общем случае должно содержать сведения о типе, размерности и количествах элементов каждой размерности. Чаще всего используются двумерные массивы. При описании многомерного массива необходимо указать 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;
}
Двумерным массивом называется совокупность данных, каждое значение которых, зависит от его положения в строке и в столбце.
Каждый элемент двумерного массива описывается как В[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();
}
Динамическим считается массив, который способен в любой момент изменять свой размер. Эта возможность обеспечивается за счет динамического выделения памяти под массив.
Идеология языка 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();
}
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. Выполните задание на перестановку или замену элементов массива в соответствии с указанным преподавателем вариантом приложения Б.
Отчет о проделанной работе должен содержать:
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. Составить программу, которая определяет, есть ли в некотором столбце массива хотя бы один элемент, равный нулю.