Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Алгоритмизация и программирование на языке С++. Ч.1. Учебник
.pdf
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] << " ";
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
