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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
gulllak
44 / 0 / 0
Регистрация: 09.10.2012
Сообщений: 66
#1

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

24.01.2013, 17:07. Просмотров 398. Ответов 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++
C++ На шахматной доске 8х8 расположены три фигуры
Подправить прогу( C++
Создать класс матрицы реальных чисел (от 1х1 до 8х8) C++
Подправить код C++
C++ Как подправить программу, что бы она проверяла является ли строчка полиндромом без пробелов
C++ Подправить программу
подправить C++
Стековый калькулятор, как подправить код? C++
C++ Выводит немного не то что надо ,как подправить код
Подправить код C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
lemegeton
 Аватар для lemegeton
2915 / 1344 / 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 как подправить?
Ответ Создать тему
Опции темы

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