С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

Подсчитать количество локальных минимумов заданной матрицы - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Строки. http://www.cyberforum.ru/cpp-beginners/thread319277.html
Здравствуйте. Помогите пожалуйста с задачей: ввести набор слов распечатать ее группами так чтобы слова каждой группы состояли из одинаковых букв Спасибо. буду очень, очень благодарен! На...
C++ Показать процесс сортировки массива Подскажите, какой код нужно добавить, чтобы в программе: 1) каждое случайное число было в кружочке; 2) показывался процесс сортировки масиива (как происходит перестановка). Вот программа: ... http://www.cyberforum.ru/cpp-beginners/thread319265.html
Массивы C++
Найдите сумму тех чисел, которые чётные и отрицательные.:cofee2:
Отсортировать по убыванию элементы массива с нечетными номерами методом обмена в прогрмамме С++ C++
Дан целочисленный массив A(n) с элементами, сгенерированными случайными числами в диапазоне (-20,20). ТРЕБУЕТСЯ: Отсортировать по убыванию элементы массива с нечетными номерами методом...
C++ ошибка сегментирования http://www.cyberforum.ru/cpp-beginners/thread319233.html
При запуске скомпилированной (gcc) программы выскакивает ошибка сегментирования, а при запуске ее же в дебагере (gdb) -- program exited normally. Как такое понимать?
C++ Очередь Всем привет! Вопрос: целесообразно ли перегружать для очереди операторы ввода/вывода и оператор , для произвольного доступа к елементам ? Спасибо. подробнее

Показать сообщение отдельно
taras atavin
3570 / 1754 / 91
Регистрация: 24.11.2009
Сообщений: 27,567
14.06.2011, 09:03
Ну тем более #include "math.h"
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
#include "iostream.h"
#include "stdlib.h"
#include "time.h"
#define n 10
#define m 10
int main ()//Точка входа в программу перед первой операцией этой функции
{// Начало тела функции
 int a[n][m]; // сам массив. На c/c++ многомерные массивы заменяются массивами массивов, здесь декларирован массив из n элементов, каждый из которых есть массив из m элементов типа int. На тех языках, которые поддерживают многомерные массивы, многомерный массив есть массив массивов. Учитывая такую синонимичность, можно считать наш массив представлением двумерного массива n на m элментов типа int
 int i, j; // Основные индексы для перебора элементов
 int i1, j1; // Дополниетльные индексы для перебора соседних элементов
 int i1min, i1max, j1min, j1max; // Крайние значения дополниетльных индексов для перебора соседних элементов
 int count; // Счтёчик минимумов
 int summ; // Сдесь будет накоплена сумма
 bool f; // Флаг. Если он true, то данный элмент - локальный минимуму
 srand(time(NULL)); // Инициируем генератор псевдослучайных чисел
 std::cout<<"рандомная матрица:"<<endl; // Вывод текста, endl - перевод строки
 for (i=0; i<n; ++i) // Цикл по i
 {// Начало тела цикла
  for (j=0; j<m; ++j) // Цикл по j
  {// Начало тела цикла
   a[i][j]=-100+rand()%201; // Пишем случайное число, отмасштабированное на диапазон (% - остаток, имеет диапазон от ноля до 201-1=200) и сдвинутое вычитанием в j-ый член i-го массива-члена массива a, то есть в элемент передставляемого им двумерного массива с индексами i,j
   std::cout<<a[i][j]<<" "; // Выводим этоn элемент и пробел
  }//Конец тела цикла
  std::cout<endl; // Перевод строки
 }//Конец тела цикла
 for (i=0, count=0, summ=0; i<n; ++i) // Цикл по i, перебираем элементы-кандидаты, минимумы ещё не найдены, сумму тоже сбрасываем в ноль
 {// Начало тела цикла
  if (i==0)// Выше нет элементов?
  {// Выше нет элементов
   i1min=i;
  }// Выше нет элементов
  else// Выше есть элементы?
  {// Выше есть элементы
   i1min=i-1;
  }// Выше есть элементы
  if (i==n)// Ниже нет элементов?
  {// Ниже нет элементов
   i1min=i;
  }// Ниже нет элементов
  else// Ниже есть элементы?
  {// Ниже есть элементы
   i1max=i+1;
  }// Ниже есть элементы    
  for (j=0; j<m; ++j) // Цикл по j, перебираем элементы-кандидаты
  {// Начало тела цикла
   if (j==0)// Левее нет элементов?
   {// Левее нет элементов
    j1min=j;
   }// Левее нет элементов
   else// Левее есть элементы?
   {// Левее есть элементы
    j1min=j-1;
   }// Левее есть элементы
   if (j==m)// Правее нет элементов?
   {// Правее нет элементов
    j1min=j;
   }// Правее нет элементов
   else// Правее есть элементы?
   {// Правее есть элементы
    j1max=j+1;
   }// Правее есть элементы
   for (i1=i1min, flag=true; i1<=i1max; ++i1) // Цикл по i1, перебираем элементы, соседние с i,j. По-умолчанию считаем, что это искомый минимум
   {//Начало тела цикла
    for (j1=j1min; j1<=j1max; ++j1) // Цикл по i1, перебираем элементы, соседние с i,j. По-умолчанию считаем, что это искомый минимум
    {//Начало тела цикла
     if (a[i][j]>a[i1][j1]) // Рядом есть меньший элемент?
     {// Рядом есть меньший элемент
      flag=false; // Значит это не минимум
     }// Рядом есть меньший элемент 
    }//Конец тела цикла
   }//Конец тела цикла
   if (i>0) // Данный элемент выше главной диагонали?
   {// Данный элемент выше главной диагонали
    summ+=abs(a[i][j]); // Инкпремент суммы на модель элемента
   }// Данный элемент выше главной диагонали
   if (flag) // эквивалентно if (flag!=false), true по определению !=false. В нашем случае несёт семантику if (данный элемент - локалтьный минимум)
   {//данный элемент - локалтьный минимум
    ++count; // Найден один минимум, инкремент их счётчика
   }//данный элемент - локалтьный минимум
  }//Конец тела цикла
 }//Конец тела цикла
 std::cout<count<<"локальных минимумов"<<endl; // Вывод текста, endl - перевод строки
 std::cout<"сумма модулей элементов над главной диагональю"<<summ<<endl; // Вывод текста, endl - перевод строки
}// Конец тела функции
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.