Консультация № 115365
22.12.2007, 13:27
0.00 руб.
0 1 1
Уважаемые эксперты !!!
Огромная просьба помочь мне в двумерных массивах :(. Нужно написать программы на С++
++++++++++
Элемент матрицы называется локальным минимумом. если он строго меньше всех имеющихся у него соседей.
1) Подсчитать количество локальных минимумов заданной матрицы размером 10 на 10
2) Найти сумму модулей элементов. располложенных выше главной диагонали.

Обсуждение

Неизвестный
23.12.2007, 19:58
общий
это ответ
Здравствуйте, Терентьев Сергей Викторович!

Решения зачач в приложении к ответу (скомбинированы в одной программе). В объявлениях функций использованы шаблоны (для универсальности). Если вы их еще не проходили, удалите строку template < class T > и замените везде тип Т на int. удачи вам!

Приложение:
#include <ctime>#include <cstdlib>#include <iostream>#include <iomanip>using namespace std;template <class T> inline T abs(T& val) { return T>0 ? T : -T; }template <class T> bool IsLocalMin(T a[10][10],int i,int j) { int z,k; for (z = i-1; z <= i+1; ++z) for (k = j-1; k <= j+1; ++k) { if (z >=0 && k >=0 && z <10 && k <10 && !(z == i && k ==j)) if (a[i][j] >= a[z][k]) return false; } return true; }template <class T> int GetLocalMinCount(T a[10][10]) { int i,j,count = 0; for (i=0; i <10; ++i) for (j=0; j <10; ++j) if (IsLocalMin(a,i,j)) count++; return count; }template <class T> T GetSumAboveDiagonal(T a[10][10]) { int i,j; T nsum = 0; for (i=0; i <10; ++i) for (j = i + 1; j < 10; ++j) nsum += abs(a[i][j]); return nsum; }void main(){ srand((unsigned)time(0)); int i,j; int a[10][10]; for (i=0; i <10; ++i) for (j=0; j <10; ++j) a[i][j] = rand() %100/* - 50*/; cout << "Source matrix:" << endl; for (i=0; i <10; ++i) { for (j=0; j <10; ++j) cout << setw(4) << a[i][j] /*<< ((j == 9) ? endl : " ")*/; cout << endl; } cout << "Local minimums: " << GetLocalMinCount(a) << endl; cout << "Sum of elements‘ modules above main diagonal: " << GetSumAboveDiagonal(a) <<endl;}
Форма ответа