Другие языки программирования и технологии

Подскажите как переделать что б оно считало суму отрицательньіх елементво основной матрицьі, а не отсортированой? C++

У меня получилось сделать что б оно считало по основнйо матрице, но пи етом оно не сортирует ее, вот в чем проблема. Подскажите, Как решить.
#include "stdafx.h"

#include <windows.h>

#include <conio.h>

#include <iostream>

#include "stdio.h"

using namespace std;

int main(){

setlocale(LC_ALL, "Russian");

int **mas, n, m, i, j, j1, temp, temp1, sum;

bool fl;

cout << "Введите количество строк матрицы: " << endl;

cin >> n;

if (n<0) cout << ("Ошибка") << endl;

else

cout << ("\nВведите количество столбцов матрицы: ") << endl;

cin >> m;

if (m<0) cout << ("Ошибка") << endl;

mas = new int*[n];

for (i = 0; i<n; i++)

mas[i] = new int[m];

cout << ("\nВведите элементы матрицы: ") << endl;

for (i = 0; i<n; i++)

for (j = 0; j<m; j++)

{

cout << "[" << i + 1 << "][" << j + 1 << "]= ";

cin >> mas[i][j];

}

cout << ("\nИсходная матрица") << endl;

for (i = 0; i<n; i++)

{

for (j = 0; j<m; j++)

{

cout.width(4);

cout << mas[i][j];

}

cout << endl;

}

for (j = 0; j<m - 1; j++)

for (j1 = 0; j1<m - 1 - j; j1++)

{

temp1 = temp = 0;

for (i = 0; i<n; i++)

{

if (mas[i][j1]<0 && abs(mas[i][j1]) % 2 == 1)

temp += abs(mas[i][j1]);

if (mas[i][j1 + 1]<0 && abs(mas[i][j1 + 1]) % 2 == 1)

temp1 += abs(mas[i][j1 + 1]);

}

if (temp>temp1)

for (i = 0; i<n; i++)

{

temp = mas[i][j1];

mas[i][j1] = mas[i][j1 + 1];

mas[i][j1 + 1] = temp;

}

}

cout << ("\nПолученная матрица") << endl;

for (i = 0; i<n; i++)

{

for (j = 0; j<m; j++)

{

cout.width(4);

cout << mas[i][j];

}

cout << endl;

}

cout << endl;

for (i = 0; i<m; i++)

{

sum = 0;

fl = true;

for (j = 0; j<n; j++)

{

sum += mas[j][i];

if (mas[j][i]<0)

fl = false;

}

cout << ("в столбце ") << i + 1;

if (!fl)

cout << (" есть орицательный элемент и сумма его элементов равна ") << sum << endl;

else

cout << (" нет отрицательного элемента") << endl;

}

cout << endl;

system("pause");

return 0;

}
Динамическое создание мы умеем делать, а ф-иями походу так и не научились пользоваться. .

Тяжеловато так смотреть твой листинг как бэ

АХахах MSVS 2012 при попытки скомпилировать то, что ты накодил, просто оплевалась с сообщение ошибок более 100... я заканчиваю. . .

интересно что такое тут =)
Guvanch Kullaev
Guvanch Kullaev
9 475
Лучший ответ
Дима Погожий VS2013, все работает (спецом скопировал сей код туда)
Разбей на функции.

Или примерно таким образом:

#include<iostream>
using namespace std;
int main()
{
setlocale(LC_ALL,"RUS");
int i, j, n, m, k, kol, min, max, imins, jmaxs;
cout<<"Введите размерность матрицы: "; cin>>n>>m;
int **x=new int *[n];
for(i=0; i<n; i++)
x[i]=new int [m];
int *jmax=new int[n]; int *imin=new int[m];
while(true)
{
system("cls");
cout<<"МЕНЮ: \n";
cout<<"1.Ввод матрицы. \n";
cout<<"2.Найти количество отрицательных элементов в тех строках, \n которые содержат хотя бы один нулевой элемент. \n";
cout<<"3.Найти номера строк и столбцов всех седловых точек матрицы. \n";
cout<<"0.Выход. \n";
int choise; cin>>choise;
switch(choise)
{
case 1:
system("cls");
cout<<"Вводите матрицу размером "<<n<<" на "<<m<<":\n";
for(i=0; i<n; i++)
for(j=0; j<m; j++)
cin>>x[i][j];
break;
case 2:
system("cls");
kol=0;
for(i=0; i<n; i++)
{
for(j=0; j<m; j++)
{
if(!(x[i][j]!=0))
{
for(int l=0; l<n; l++)
{

if(x[i][l]<0){kol++;}
}
}

}
}
cout<<"Количество отрицательных элементов в строках с нулевыми элементами: "<<kol<<endl;
system("pause");
break;
case 3:
system("cls");
for(i=0; i<n; ++i)
{
int min=x[i][0];
for(j=1; j<m; ++j)
if (min>x[i][j]) min=x[i][j];
imin[i]=min;
}
for(j=0; j<m; ++j)
{
int max=x[0][j];
for(i=1; i<n; ++i)
if(max<x[i][j]) max=x[i][j];
jmax[j]=max;
}
cout<<"Cедловые точки матрицы: ";
for(i=0; i<n; ++i)
{
for(j=0; j<m; ++j)
{
/*if(x[i][j]==imin[i] && x[i][j]==jmax[j])
{
printf(" (%d, %d)", i, j); //cout<<"i="<<i<<" j:="<<j<<"- >"<<x[min][max]<<endl;
} */
if(jmax[j]=imin[i])
{
cout<<"i="<<imin[i]<<"/tj:="<<jmax[j]<<"- >"<<x[i][j]<<endl;
system("pause");
}
}
}
system("pause");
break;
case 0:
return 0;
break;
}
}
for(i=0; i<n; i++) delete []x[n];
}