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

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

Войти
Регистрация
Восстановить пароль
 
Lana937
1 / 1 / 0
Регистрация: 28.10.2010
Сообщений: 46
#1

программа не работает.. - C++

25.12.2010, 17:18. Просмотров 753. Ответов 10
Метки нет (Все метки)

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

сначала поставила по убыванию элементы, затем: Например матрица
9 8 7
6 5 4
3 2 1
нужно поменять 2 элемента 1 строки(т.е. 8 и 9) с элементами главной диагонали (т.е. 5 и 1)

то есть чтобы в итоге получилось
9 5 1
6 8 4
3 2 7
но последнее не выходит.
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
#include <iostream>  
#include <iomanip>   // для манипулятора setw()
using namespace std;   
const int m=3, n=3;
void output(int [m][n]); 
void qq(){cout<<"----------------------------------------------"<<endl;}; 
int main()
{
  setlocale (LC_ALL,".1251");  
  int j, i, k, bufer, z[m*n];
  int x[m][n]={{1,2,3},{4,5,6},{7,8,9}};
  cout<<"Исходный массив X "<<endl;
  output(x); 
 
  k=0; 
  for(i=0;i<m;i++)  
  {   for(j=0;j<n;j++) {z[k]=x[i][j]; k++;}  };
 
  for(i=0;i<(m*n);i++)
  {  for(j=0;j<(m*n);j++) {if(z[j]<z[j+1]){bufer=z[j];z[j]=z[j+1];z[j+1]=bufer;}}  }
 
  k=0;  
  for(i=0;i<m;i++) 
  {  for(j=0;j<n;j++) {x[i][j]=z[k];k++;}  };
  cout<<"Упорядоченный массив X"<<endl; 
  output(x); 
 
for(i=0;i<m;i++)
{  for(j=0;j<n;j++)  {bufer=x[i][i]; x[i][i]=x[1][j]; x[1][j]=bufer;}  };
cout<<"Новый массив X"<<endl;
output(x);
 
 system("PAUSE"); 
 return 0;
 
}
void output(int x[m][n]) 
{ int i,j; 
    for(i=0;i<m;i++)
    {for(j=0;j<n;j++){cout<<setw(5)<<x[i][j];};
        cout<<endl;} 
    
    qq(); 
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.12.2010, 17:18     программа не работает..
Посмотрите здесь:

не работает программа - C++
помогите написать програмку на C++,вот задание &quot;Ввести с клавиатуры, и занести в матрицу А n*m чисел, затем найти сумму всех элементов...

Не работает программа - C++
Написать программу, которая в заданной матрице заменяет на нули те элементы, которые кратны 1 элементу строки. На си #include&lt;stdio.h&gt;...

программа не работает - C++
Заданы матрицы А и В третьего порядка. Переменной S присвоить -1, если максимальный элемент матрицы А больше максимального элемента матрицы...

Не работает программа - C++
Здравствуйте, буквально вот второй день учу С++, учу по книге &quot;Джесс Либерти, Брэдли Джонс - С++ за 21 день&quot;. Вот код программы: ...

не работает программа :( - C++
Уважаемые программисты помогите разобраться с проблемным запуском программы и другими вопросами. Сори если вопросы через чур, тупые, но я в...

не работает программа - C++
вот условие: Даны действительные числа x,a , натуральное число n. Вычислить: ((...((x+a)^2+a)^2+...+a)^2+a {n скобок} {^2-квадрат} ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
kravam
быдлокодер
1691 / 878 / 44
Регистрация: 04.06.2008
Сообщений: 5,423
25.12.2010, 19:50     программа не работает.. #2
хз чё к чему ни хрена непонятно. Код не смотрел. Чё за задание-то? Про заполнение главной диагонали понятно- а со слов "сначала поставила "косноязычие сплошное. Изъясняйся яснее.
Lana937
1 / 1 / 0
Регистрация: 28.10.2010
Сообщений: 46
29.12.2010, 10:44  [ТС]     программа не работает.. #3
ну вообще задание:
"путем перестановки квадратной веществ. матрицы добиться того, чтобы максимальный элемент находился в левом верхнем углу, следующий по величине - в позиции (2,2), следующий - в позиции (3,3) и т.д., заполнив таким образом всю главную диагональ."

а это уж то как я работала, так сказать алгоритм:
"сначала поставила по убыванию элементы, затем: Например матрица
9 8 7
6 5 4
3 2 1
нужно поменять 2 элемента 1 строки(т.е. 8 и 9) с элементами главной диагонали (т.е. 5 и 1)

то есть чтобы в итоге получилось
9 5 1
6 8 4
3 2 7
но последнее не выходит."
=)

ну ладно))

если уж: "хз чё к чему ни хрена непонятно" то заранее спасибо=) помощи не нужно))
kravam
быдлокодер
1691 / 878 / 44
Регистрация: 04.06.2008
Сообщений: 5,423
29.12.2010, 18:44     программа не работает.. #4
Как хочешь. А вообще неправильно ты делаешь.
NNN777
299 / 157 / 19
Регистрация: 27.02.2010
Сообщений: 317
30.12.2010, 13:13     программа не работает.. #5
Не берусь судить ваш алгоритм, хотя мне он тоже показался неоптимальным, отвечу на ваш вопрос: "но последнее не выходит"
индексация массивов в С++ идет с 0, поэтому, когда вы пишите
C++
1
x[i][i]=x[1][j];
вы работаете с первой по индексу строкой, но по счету со второй.
Вместо
C++
1
2
for(i=0;i<m;i++) //проход по всем строкам не нужен, максимальные элементы собраны в 0-й строке
{  for(j=0;j<n;j++)  {bufer=x[i][i]; x[i][i]=x[1][j]; x[1][j]=bufer;}  };
сделайте такой цикл
C++
1
2
3
4
5
6
for(j=0;j<n;j++)  
{
    bufer=x[j][j]; 
    x[j][j]=x[0][j]; 
    x[0][j]=bufer;
}
Минич
66 / 66 / 3
Регистрация: 26.11.2010
Сообщений: 123
31.12.2010, 05:08     программа не работает.. #6
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 <iomanip>
using namespace std;
 
const int n = 3; // матрица квадратная
 
void output(double x[n][n])
{
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++)
            cout << setw(5) << x[i][j];
        cout << endl;
    }
    cout << "-------------------" << endl;
}
 
int main()
{
    setlocale (LC_ALL,"Russian");
    
    double x[n][n] = { {1.0, 2.0, 3.0}, // вещественная матрица
               {4.0, 5.0, 6.0},
               {7.0, 8.0, 9.0} };
    
    cout<<"Исходный массив X "<<endl;
    output(x);
    
    double  temp;
    int k;
    for (int i = 0; i < n; i++) {
        temp = x[0][1];
        k = 1;
        for (int j = 0; j < n*n; j++)
            if (temp < x[j/n][j%n] && (j/n != j%n || j/n >= i)) {
                temp = x[j/n][j%n];
                k = j;
            }
        x[k/n][k%n] = x[i][i];
        x[i][i] = temp;
    }
 
    cout << "Новый массив X" << endl;
    output(x);
    
    system("PAUSE");
    return 0; 
}
Lana937
1 / 1 / 0
Регистрация: 28.10.2010
Сообщений: 46
01.01.2011, 16:49  [ТС]     программа не работает.. #7
еще вопрос.. как более правильно найти номер первых из строк, не содержащих ни одного положительного элемента?
пробовала так:
C++
1
2
3
4
p=0;
for(i=0;i<m;i++)
{if x[i][0]<0;{p=j;}; 
cout<<"nomer j: "<<endl;
valeriikozlov
Эксперт C++
4669 / 2495 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
01.01.2011, 17:08     программа не работает.. #8
Цитата Сообщение от Lana937 Посмотреть сообщение
найти номер первых из строк
Если один номер, тогда так:
C++
1
2
3
4
5
6
7
8
9
10
11
for(i=0; i<m; i++)
       {
            for(j=0; j<n; j++)
                  if(x[i][j]>=0)
                      break;
            if(j==n)
            {
                  cout<<i;
                  break;
             }
      }
Lana937
1 / 1 / 0
Регистрация: 28.10.2010
Сообщений: 46
01.01.2011, 17:20  [ТС]     программа не работает.. #9
а что дает break ?
sandye51
программист С++
681 / 583 / 39
Регистрация: 19.12.2010
Сообщений: 2,016
01.01.2011, 17:28     программа не работает.. #10
либо так
C++
1
2
3
4
5
6
7
int* ptr_ = *find_if(matrix, matrix + n, [](const int* buffer)->bool
    {
        return all_of(buffer, buffer + n, [](const int& elem)->bool
            {
                return elem < 0;        
        }); 
            });
ptr_ - указатель на искомую строку;

Добавлено через 6 минут
Цитата Сообщение от Lana937 Посмотреть сообщение
а что дает break ?
досрочный выход из самого внутреннего цикла, т.к. нет смыла дальше в нем крутиться (в цикле)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.01.2011, 17:38     программа не работает..
Еще ссылки по теме:

не работает программа - C++
в си. Используя ограниченный тип для дней в месяце и месяцев в году, написать программу, которая переменной t присваивает значения true,...

Не работает программа - C++
Добрый вечер уважаемые форумчане, прошу вашей помощи. Определить, является ли целая квадратная матрица порядка n симметричной (относительно...

не работает программа - C++
#include &quot;stdafx.h&quot; #include &lt;stdio.h&gt; #include &lt;math.h&gt; int main() { int n,l,k; float s,eps,an,x; printf(&quot;Vvedite...

программа не работает - C++
задание: Определить входит ли введённая цифра в заданное натурально число. код выдаёт ошибки и я не могу понять как их исправить т.к....


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

Или воспользуйтесь поиском по форуму:
Lana937
1 / 1 / 0
Регистрация: 28.10.2010
Сообщений: 46
01.01.2011, 17:38  [ТС]     программа не работает.. #11
спасибо Вам) поняла))
Yandex
Объявления
01.01.2011, 17:38     программа не работает..
Ответ Создать тему
Опции темы

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