Форум программистов, компьютерный форум CyberForum.ru

Найти количество ненулевых элементов, расположенных в заштрихованной части матрицы - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Найти номер последней из строк, содержащих хотя бы один ненулевой элемент http://www.cyberforum.ru/cpp-beginners/thread1152782.html
#include "stdafx.h" #include <stdio.h> #include <stdlib.h> #include <conio.h> #include<iostream> using namespace std;
C++ Найти максимум и минимум в массиве и поменять их местами Привет всем, помогите разобраться в программе #include<iostream> #include<stdlib.h> #include<time.h> using namespace std; int zam(int *x,int y); http://www.cyberforum.ru/cpp-beginners/thread1152775.html
C++ Поиск простых чисел
Знаю, что тема избитая, но решил написать алгоритм поиска простых чисел. int j,i,k /*количество простых*/ ,nech,prime; bool a; k=1; nech=3; prime=2;// Одно простое число - 2, первое нечётное - 3 for(j=1;j<1000;j++){ // Смотрим 1000 нечётных чисел for(i=1;i<=k;i++){ // Смотрим столько раз, сколько простых чисел в массиве if(nech%prime==0){ // Если...
Почему переменной присваивается произвольное значение("мусор")? C++
Мой черновой вариант кода. Он очень черновой так что многое не суть важно, но переменной х я присваиваю значение 0. Если после приглашения ввести набор чисел, мы введем что вроде 11111111111111111111111111111111111111111111111111111, то после нажатие enter х получает произвольное значение. Вопрос почему? Проблема решается перестановкой объявления х. Но я хочу понять почему так происходит....
C++ Как рационально применять if http://www.cyberforum.ru/cpp-beginners/thread1152751.html
когда идет несколько условий подряд зависимых от первого условия (если первое исполнится другие не должны выполняться) каком случае меньше ресурсов PC будет использовано так: if(условие){} if(условие){} if(условие){} или так: if(условие){}
C++ Фрагментация RAM Почитал о программировании встроенных систем,там говорилось о фрагментации памяти. Например: Есть элемент типа int (4 байта) и массив типа char из 2х элементов (2 байта).Памяти у нас есть 6 кб. Размещаем там char. Схема размещения такова : -сh--- (где "-" - это свободные байты). После этого у нас образуются две дыры,в которые мы не можем поместить наше число (int) ? Борется ли с этим Ось ?... подробнее

Показать сообщение отдельно
soolitary
0 / 0 / 0
Регистрация: 23.10.2013
Сообщений: 11
21.04.2014, 14:49     Найти количество ненулевых элементов, расположенных в заштрихованной части матрицы
Хорошо, что Вы меня переспросили. На самом деле, код написанный выше делает не совсем то, что
Вы хотели. Я забыл про зеркальное отражение треугольников.

Сейчас, если запустить программу - получится проход по элементам вида
4х верхних левых треугольников с соответствующем смещением на половину матрицы.
х х х х х х
х х о х х о
х о о х о о
х х х х х х
х х о х х о
х о о х о о

Теперь:
1. чтобы пробежаться по верхнему левому треугольнику надо взять все элементы,
| индексы которых в сумме строго меньше порядка матрицы
| (i<k && j<k).
2. чтобы пробежаться по верхнему правому треугольнику
| надо сделать тоже самое со смещением на половину и
| с зеркальным отражением по горизонтали.
| ( i <k && (m-j)<k)
3. ((m-i)<k && j <k)
4. ((m-i)<k && (m-j)<k)
| , где m = (n-1), т.к. нумерация матрицы в Си начинается с 0,
| а k - середина целочисленного интервала (0,n).

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// a[i][j] - вещественная матрица, n - её порядок.
int  findThis (int n, double a[][])
{ int  i, j, c;
  int  k = (n+1)/2, m = (n-1);
 
  // Здесь проходим по всем элементам матрицы
  for(i=0, с=0; i<n; i++) // по строкам
   for(j=0; j<n; j++) // по столбцам
    // Я не знаю, как более красиво записать следующую строчку,\
       так что поправки приветствуются:
    if( ( (i<k)?(i):(m-i) + (j<k)?(j):(m-j) < n )  // Если элемент расположен в соотв. месте
        && ( a[i][j] != 0. ) )                     // и, если элемент не нулевой, 
     c++;                                          // тогда складываем его с общим количеством.
                
   return c; // количество ненулевых элементов возвращаем.
}
вот что получаем в итоге, с точки зрения обхода ячеек.

n=4
_ 0 1 2 3
0 х х х х
1 х о о х
2 х о о х
3 х х х х

n=5
_ 0 1 2 3 4
0 х х х х х
1 х х о х х
2 х о о о х
3 х х о х х
4 х х х х х

Успеха в изучении языка и программирования!
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru