Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Алгоритмизация и программирование на языке С++. Ч.1. Учебник

.pdf
Скачиваний:
0
Добавлен:
07.09.2026
Размер:
2 Мб
Скачать
8. Массивы
oat Arr2[3][3]
{ {–1.0, 2.0, 6.0}, { 1.0, –2.0, 3.0}, { 1.0, 2.0, –3.0} };
cout << "Исходный массив:" << endl; for(int i=0; i<3; i++)
{
for(int j=0; j<3; j++) { cout.setf(ios::xed);
cout.width(6); cout.precision(2); cout << *(*(Arr2 + i) + j) << " "; } cout << "\n"; }
131
Рис. 8.19. Сумма всех элементов массива
Результат будет таким же, как и при использовании двух индексов.
Найдем количество положительных элементов, располо­женных в заданной строке матрицы.
// Количество положительных в заданной строке const int n=3; const int m=4;
int Arr2[n][m] { { 1, –2, 3, 4}, { 1, –2, 3, –4},
132
АЛГОРИТМИЗАЦИЯ ИПРОГРАММИРОВАНИЕ НАЯЗЫКЕ С++
{ 1, 2, 3, 0} };
for(int i=0; i<n; i++)
{
for(int j=0; j<m; j++)
{ cout.width(3); cout << Arr2[i][j] << " "; }
cout << endl; // переход на новую строку
}
cout << "Ведите номер строки (от 1 до 3)" << endl; int k=0, L; cin >> L; if ( (L>0) & (L<=3) ) { L=L-1; for(int j=0; j<m; j++) if (Arr2[L][j]>0 ) k=k+1; cout << " Ответ – " << k <<endl;
} else
cout << "Ввод не верен" << endl;
Результат приведен на рис. 8.20.
Рис. 8.20. Количество положительных элементов
в заданной строке
8. Массивы
Теперь найдем среднее арифметическое значение элемен­тов заданного столбца.
oat Arr2[3][3]
{ {–1.0, 2.0, 6.0}, { 1.0, –2.0, 3.0}, { 1.0, 2.0, –3.0} };
cout << "Исходный массив:" << endl; for(int i=0; i<3; i++)
{
for(int j=0; j<3; j++) { cout.setf(ios::xed);
cout.width(6); cout.precision(2); cout << Arr2[i][j] ; } cout << "\n"; }
int k=0, C=2; double Sr=0.0; for(int i=0; i<3; i++) Sr=Sr+Arr2[i][C]; cout << Sr << endl; Sr=Sr/3; cout << " Среднее в " << C+1 << " столбце " << Sr <<endl;
Результат приведен на рис. 8.21.
133
Рис. 8.21. Среднее значение элементов столбца
134
АЛГОРИТМИЗАЦИЯ ИПРОГРАММИРОВАНИЕ НАЯЗЫКЕ С++
В следующем примере покажем, как находить минималь­ное значение (и его номер) на главной диагонали квадратной матрицы.
const int n=4; const int m=4;
int Arr2[n][m] { { 1, –2, 3, 4}, { 1, –2, 3, –4}, { 1, 2, 3, 0}, { 1, 2, 3, 0}, };
for(int i=0; i<n; i++)
{
for(int j=0; j<m; j++)
{ cout.width(3); cout << Arr2[i][j] << " "; }
cout << endl; // переход на новую строку
}
int Min, iMin;
Min=Arr2[0][0]; iMin=0; for(int i=1; i<n; i++)
{ if ( Min>Arr2[i][i])
{ Min=Arr2[i][i]; iMin=i;}
cout << i << " Min " << Min << endl; } cout << " Min " << Min << " in " << iMin << "\n";
char q=getchar(); char q1=getchar();
}
Результат приведен на рис. 8.22.
8. Массивы
Рис. 8.22. Минимум главной диагонали
Теперь найдем количество четных значений в целочис­ленном массиве на побочной диагонали.
const int n=4; const int m=4;
int Arr2[n][m] { { 1, –2, 3, 4}, { 1, –2, 3, –4}, { 1, 2, 3, 0}, { 1, 2, 3, 3}, };
for(int i=0; i<n; i++)
{
for(int j=0; j<m; j++)
{ cout.width(3); cout << Arr2[i][j] << " "; } cout << endl; // }
int Chet=0; for(int i=0; i<n; i++)
{
if ( Arr2[i][n-i-1]%2 ==0)
{ Chet++; cout <<"["<<i<<"]"<<" ["<<(n-i-1)<<"]" << " "<<Arr2[i][n-i-1]<< endl; }
135
136
АЛГОРИТМИЗАЦИЯ ИПРОГРАММИРОВАНИЕ НАЯЗЫКЕ С++
}
cout << " Четных " << Chet << "\n";
Результат приведен на рис. 8.23.
Рис. 8.23. Количество нечетных значений
на побочной диагонали
Теперь рассмотрим пример обработки матрицы по стро­кам. Сформируем массив из сумм элементов с нечетными значениями каждой строки целочисленного двумерного мас­сива. Вот текст программы, решающей такую задачу.
int Arr7[3][3] { { 1, 1, 3}, { 2, 2, 3}, { 1, 2, 3} };
cout << "Исходный массив:" << endl; for(int i=0; i<3; i++)
{
for(int j=0; j<3; j++)
{ cout.width(3); cout << Arr7[i][j]; } cout << "\n"; }
8. Массивы
int SummLine[3]; for(int i=0; i<3; i=i+1)
{
int Summ7=0.0; for(int j=0; j<3; j++) if ( Arr7[i][j]%2 == 1) Summ7=Summ7+Arr7[i][j]; SummLine[i] = Summ7;
}
cout << " Результат " << endl; for(int i=0; i<3; i++)
{
for(int j=0; j<3; j++)
{ cout.width(3); cout << Arr7[i][j]; }
cout << " += " << SummLine[i] << endl;
}
Результат приведен на рис. 8.24.
137
Рис. 8.24. Сумма нечетных элементов в строках
Рассмотрим и такую задачу. Для каждого столбца веще­ственной матрицы найти количество элементов, у которых количество десятых долей (первая цифра после запятой, от-
138
АЛГОРИТМИЗАЦИЯ ИПРОГРАММИРОВАНИЕ НАЯЗЫКЕ С++
деляющей дробную часть числа) есть четное число. Вот воз­можный текст программы.
oat Arr8[3][3] { {1.23, 2.34, 3.15}, {1.46, 2.34, 3.345}, {0.80, 2.04, 3.555}
}; int Chet[3] {0,0,0};
for(int i=0; i<3; i++)
{
for(int j=0; j<3; j++) {cout.setf(ios::xed);
cout.width(6); cout.precision(3); cout << Arr8[i][j] << " "; } cout << endl;
} cout << endl; int it1, it2;
for(int j=0; j<3; j++)
{
for(int i=0; i<3; i++)
{
it2=(int)(Arr8[i][j]*10); it1=(int)Arr8[i][j]*10;
// cout << Arr8[i][j] << " " << it2 << " " << it1 << endl;
if ( (it2-it1)%2 == 0) Chet[j] = Chet[j] +1;
} }
for(int j=0; j<3; j++)
cout << " " << Chet[j] << " ";
Результат приведен на рис. 8.25.
8. Массивы
Рис. 8.25. Количество элементов с четным значением десятых
в столбцах
139
Теперь покажем, как удалять строки в матрице. Напом­ним, что мы будем определять массив статически, и после уда­ления элементов память, выделенная им, просто не использу­ется. При этом размер массива формально уменьшится.
Если задана таблица
{1.0, 1.0, 1.0} {2.0, 2.0, 2.0} {3.0, 3.0, 3.0},
то удаление 2-й строки (с индексом 1) даст такой результат:
{1.0, 1.0, 1.0} {3.0, 3.0, 3.0}.
Далее приведен фрагмент программы, реализующий этот алгоритм.
oat Arr9[3][3] {
{1.0, 1.0, 1.0}, {2.0, 2.0, 2.0}, {3.0, 3.0, 3.0} };
for(int i=0; i<3; i++)
{
for(int j=0; j<3; j++) {cout.setf(ios::xed);
cout.width(6); cout.precision(3);
140
АЛГОРИТМИЗАЦИЯ ИПРОГРАММИРОВАНИЕ НАЯЗЫКЕ С++
cout << Arr9[i][j] << " "; } cout << endl; }
Результат приведен на рис. 8.26.
Рис. 8.26. Удаление строки
Теперь добавим элементы в матрицу. Программа, приве­денная далее, добавляет столбец в двухмерный массив. Значе­ния, добавляемые в качестве L-го столбца, заданы в виде одно­мерного массива.
const int n=3; const int m=4;
char Arr10[n][m] {
{'a', 'b', 'c', 'Z'}, {'a', 'b', 'c', 'Z'}, {'a', 'b', 'c', 'Z'}
};
char Ins10[n]={'A', 'B', 'C'};
for(int i=0; i<n; i++)
{
for(int j=0; j<m; j++)
{ cout.width(2); cout << Arr10[i][j] << " ";
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]