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

Матрица 8х8 как подправить? - C++

Восстановить пароль Регистрация
 
gulllak
44 / 0 / 0
Регистрация: 09.10.2012
Сообщений: 66
24.01.2013, 17:07     Матрица 8х8 как подправить? #1
Вот мое задание:
1.Для данной матрицы размером 8x8, найти такие k, что k-ая строка матрицы совпадает с k-ым столбцом.
2.Найти сумму элементов в тех строках, которые содержат хотя бы один отрицательный элемент.
Собственно написал программу, но вот не пойму почему вот такие ошибки при ее выполнении:
1) при вводе всех положительных элементов программа не работает
2) При вводе элемента с отрицательным знаком в любой строчке, программа начинает работать, но считает суммы элементов во всех строчках где даже нет отрицательных элементов.
Помогите пожалуйста исправить, я уже не знаю как.(
Вот мой код:
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
#include <iostream>
#include <math.h>
using namespace std;
 
int main(){
setlocale(0, "rus");
    
const int W=8,H=8;
int kol=0,n,j,k,sum[8]={0};
    bool PROV=false;
int** m=new int*[W];   // создаем массив m
  // массив для хранения сумм
 
    for(int i=0;i<W;i++)  // к каждой созданной ячейке m  мы добавляем новые ячейки(по сути получаем массив массива)
        m[i]=new int[W];
    
 
    for(int i=0;i<W;i++)
       for(int f=0;f<H; f++)
       {
          cin>>m[i][f];
 
          sum[i]+=m[i][f];
          if(m[i][f]<0)PROV=true;
          if(f==H-1 && !PROV)sum[i]=-666;
 
       }
 
 for(j=0;j<W;j++)
    if(sum[j]!=-666)cout<<j+1<<" строка имеет отрицательный элемент, сумма этой строки "<<sum[j]<<endl;
          
 
    for(int n=0;n<W; n++)
      { 
          for(j=0;j<W;j++)
          {
          if(m[j][n]==m[n][j])
              kol++;
          }
          
          if(kol==W)
          {cout<<endl<<"Одинаковыми являются "<<n+1<< " столбец и строка."<<endl; kol=0;}
          else kol=0;
    }
    system("pause");
 
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.01.2013, 17:07     Матрица 8х8 как подправить?
Посмотрите здесь:

нужно подправить C++
C++ На шахматной доске 8х8 расположены три фигуры
C++ Подправить стек
Создать класс матрицы реальных чисел (от 1х1 до 8х8) C++
C++ Как подправить программу, что бы она проверяла является ли строчка полиндромом без пробелов
C++ Подправить программу
подправить C++
подправить немного C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
lemegeton
 Аватар для lemegeton
2909 / 1338 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
24.01.2013, 18:52     Матрица 8х8 как подправить? #2
Ну, во-первых, задача определена только для равных сторон, поэтому нет смысла разносить размер матрицы на две переменные.
Во-вторых, ну Б-же мой, двадцать первый век, копипаст уже давно придуман, да и экономить размер исходного кода больше не надо. Давайте же осмысленные названия переменным, через эти W, H, x, kol, PROV не продраться. Счетчики можно не трогать, это да.

Короче, причесал маленько. Запустите несколько (десятков?) раз, чтобы получить хотя бы одну совпадающую пару столбец-строка.
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
#include <cstdlib>
#include <ctime>
#include <iomanip>
#include <iostream>
 
int main(int argc, char **argv) {
  srand(time(0));
  
  int size = 8;
  
  int **matrix = new int*[size];
  for (int i = 0; i < size; ++i) {
    matrix[i] = new int[size];
    for (int j = 0; j < size; ++j) {
      matrix[i][j] = -rand() % 2; // это вместо ручного ввода
      std::cout << std::setw(3) << matrix[i][j];
    }
    std::cout << std::endl;
  }
  
  // поиск совпадающих строки и столбца
  for (int i = 0; i < size; ++i) {
    for (int j = 0; j < size; ++j) {
      bool areEqual = true;
      for (int k = 0; k < size; ++k) {
        if (matrix[i][k] != matrix[k][j]) {
          areEqual = false;
          break;
        }
      }
      if (areEqual) {
        std::cout << "Row " << i << " equals to column " << j << "." <<
          std::endl;
      }
    }
  }
 
  // поиск сумм строк с хотя бы одним отрицательным элементом
  for (int i = 0; i < size; ++i) {
    int sum = 0;
    bool hasNegativeValue = false;
    for (int j = 0; j < size; ++j) {
      sum += matrix[i][j];
      if (matrix[i][j] < 0)
        hasNegativeValue = true;
    }
    if (hasNegativeValue) {
      std::cout << "Row " << i << " has a negative value and sum of " <<
        sum << "." << std::endl;
    }
  }
  
 
  for (int i = 0; i < size; ++i)
    delete [] matrix[i];
  delete [] matrix;
 
  std::cin.get();
  return 0;
};
Yandex
Объявления
24.01.2013, 18:52     Матрица 8х8 как подправить?
Ответ Создать тему
Опции темы

Текущее время: 01:48. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru