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

Найдите ошибку в задаче: "дана матрица, если выполняется условие, то следует исполнить преобразование.." - C++

Восстановить пароль Регистрация
 
sonyaka
 Аватар для sonyaka
0 / 0 / 0
Регистрация: 18.12.2010
Сообщений: 7
05.01.2011, 22:27     Найдите ошибку в задаче: "дана матрица, если выполняется условие, то следует исполнить преобразование.." #1
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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
// labar4.cpp : main project file.
 
#include "stdafx.h"
#include <iostream>
#include <math.h>
#include <string.h>
#include <fstream>
#include <clocale>
using namespace std;
const int N=8;
ofstream fout;
ifstream fin;
 
bool yslovie(int n,int a[N][N])
// проверяет область 1-2, что существует четный столбец, где каждый элемент  нулевой.
 {
    int j,i; bool GoodStlb; bool GoodElem;int imax;
    i=0;
    GoodStlb=false;
    imax=n/2;
    while (!GoodStlb && i<imax)
    {
        j=i;
        GoodElem=1;              
        while ((GoodElem)&&(j<n-i))
        {
            if (a[i][j]==0)
                GoodElem=false;
            j++;
        }
        GoodStlb=GoodElem;
        i+=2;
    }
return GoodStlb;
}
 
void preobraz3(int n,int a[N][N])
//отражает относительно центра области 3-4
{
    int c; 
    for (int i=0; i<n/2; i++)
    { 
        for (int j=n-i-1; j<n; j++)
        {
            c=a[i][j];
            a[i][j]=a[n-i][j];
            a[n-i][j]=c;
        }
    }
}
void preobraz3i(int n,int a[N][N])
//отражает относительно центра области 3-4
{
    int c; 
    for (int i=0; i<n/2; i++)
    { 
        for (int j=n-i-1; j<n; j++)
        {
            c=a[i][j];
            a[i][j]=a[n-i][j];
            a[n-i][j]=c;
        }
    }
}
 
void vivod(int a[N][N], int n)// вывод матрицы
{
    for(int i=0; i<n;i++)
    {
      for(int j=0;j<n;j++)
        {
            if(j!=(n-1))
              fout << a[i][j] << " ";
            else 
              fout << a[i][j] << endl;
        }
    }
  fout << endl;
}
 
int main()
{
    int n;int a[N][N];
    setlocale( LC_ALL,"Russian");
    fin.open("input.txt");
    fin >> n;
    for(int i=0;i<N;i++)
    {
    for(int j=0;j<N;j++)
    fin >> a[i][j];
    }
    fout.open("output.txt");
    fout << "Исходная матрица" << endl;
        vivod(a,n);
        char choise = '0';
        system("cls");
            while (choise != '3')
    {       system("cls");
            cout << "Работа с матрицей" << "\n\n";
            cout << "1.Вывод матрицы на экран" << "\n";
            cout << "2.Преобразование матрицы при условии" << "\n";
            cout << "3.Выход из меню" << "\n";
 
        cin >> choise;
        switch (choise)
        {
            case '1':
                cout<<" Вывод матрицы на экран "<<endl;
                 for(int i=0;i<N;i++)
                    {
                       for(int j=0;j<N;j++)
                          {
                            if(j!=(n-1))
                            cout << a[i][j];
                            else
                            cout << a[i][j] << endl;
                           }
                     }
                        cout<<endl;    
                cin.get();cin.get();
                break;
            case '2':
                if (n%2==0)
            {
                if (yslovie(n,a))
                {
                preobraz3(n,a);
                }
            }
                else 
                    if (yslovie(n,a))
                         preobraz3i(n,a);
                fout << "Результат" << endl;
                vivod(a,n);
 
                break;
            case '3':
                return 1;
                break;
                
    
        }
    }
    return 1;

Вот код понять не могу, в чем ошибка!!!
Задание выглядит так дана матрица, если выполняется условие, то следует исполнить преобразование...матрицу вводить и выводить из файла

Добавлено через 1 минуту
сама матрица выглядит так
0 0 0 0 0 0 0 0
8 1 1 1 2 2 2 3
8 8 1 1 2 2 3 3
8 8 8 1 2 3 3 3
7 7 7 7 4 4 4 4
7 7 7 6 5 4 4 4
7 7 6 6 5 5 4 4
7 6 6 6 5 5 5 4
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.01.2011, 22:27     Найдите ошибку в задаче: "дана матрица, если выполняется условие, то следует исполнить преобразование.."
Посмотрите здесь:

Почему условие "a && b == 0" не выполняется? C++
Программа, выводящая значение "истина", если выполняется заданное условие: все из чисел x, y, z являются положительными C++
warning C4244: =: преобразование "double" в "float", возможна потеря данных C++
C++ необъявленный идентификатор,преобразование "int" в "float"
C++ Дана строка, в котором есть слово "да" или слово "нет". Если в нем есть слово "нет", то удалить его
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
05.01.2011, 23:40     Найдите ошибку в задаче: "дана матрица, если выполняется условие, то следует исполнить преобразование.." #2
sonyaka, Что именно не нравится в Вашей программе?
Как делается преобразование матрицы?
sonyaka
 Аватар для sonyaka
0 / 0 / 0
Регистрация: 18.12.2010
Сообщений: 7
06.01.2011, 06:12  [ТС]     Найдите ошибку в задаче: "дана матрица, если выполняется условие, то следует исполнить преобразование.." #3
не вызывается второе условие, а это перестановка секторов 3 и 4(((
т.е. матрица должна выглядить так
0 0 0 0 0 0 0 4
8 1 1 1 2 2 4 4
8 8 1 1 2 4 4 4
8 8 8 1 4 4 4 4
7 7 7 7 3 3 3 3
7 7 7 6 5 3 3 3
7 7 6 6 5 5 3 3
7 6 6 6 5 5 5 3

причем одну из областей надо или сузить или расширить!(
Вот с этим у меня и проблемы
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
06.01.2011, 07:49     Найдите ошибку в задаче: "дана матрица, если выполняется условие, то следует исполнить преобразование.." #4
Цитата Сообщение от sonyaka Посмотреть сообщение
не вызывается второе условие,
Второе условие вызывается и выполняется. Это можете увидеть по результатам в файле output.txt.
После преобразования состояние матрицы записывается именно туда.
А вот про само условие для преобразования и способы преобразований матрицы напишите поподробнее. Пока если честно не очень понятно.
sonyaka
 Аватар для sonyaka
0 / 0 / 0
Регистрация: 18.12.2010
Сообщений: 7
06.01.2011, 16:43  [ТС]     Найдите ошибку в задаче: "дана матрица, если выполняется условие, то следует исполнить преобразование.." #5
1 1 1 1 2 2 2 2
8 1 1 1 2 2 2 3
8 8 1 1 2 2 3 3
8 8 8 1 2 3 3 3
7 7 7 7 4 4 4 4
7 7 7 6 5 4 4 4
7 7 6 6 5 5 4 4
7 6 6 6 5 5 5 4

цифрами обозначены сектора матрицы, то есть наполнена она может быть любыми другими.
Условие состоит в том, чтобы проверить есть ли нечетная строка в секторе 1-2 с нулевыми элементами.
После выполняется преобразование. Меняются местами сектора 3 и 4, но суть в том, что они разного размера, и тут надо или уменьшать один, или увеличивать другой...с этим тож проблема

Надеюсь, теперь стало понятней))
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
06.01.2011, 23:10     Найдите ошибку в задаче: "дана матрица, если выполняется условие, то следует исполнить преобразование.." #6
Условие состоит в том, чтобы проверить есть ли нечетная строка в секторе 1-2 с нулевыми элементами.
С этим понятно. А если нет нечетной строки с нулевыми элементами, то матрицу не трогаем? Так?
И еще: если общее количество строк в матрице нечетное, то как выглядит матрица? (лучше сами покажите этот вариант, а то мои фантазии могут не совпадать с Вашими).
sonyaka
 Аватар для sonyaka
0 / 0 / 0
Регистрация: 18.12.2010
Сообщений: 7
07.01.2011, 13:22  [ТС]     Найдите ошибку в задаче: "дана матрица, если выполняется условие, то следует исполнить преобразование.." #7
не надо рассматривать нечетную матрицу))) у нас же размер константа)
по идее, если условие не выполняется, то матрицу просто выводим на экран)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.01.2011, 14:32     Найдите ошибку в задаче: "дана матрица, если выполняется условие, то следует исполнить преобразование.."
Еще ссылки по теме:

Warning C4244: =: преобразование "double" в "float", возможна потеря данных C++
Warning C4244: инициализация: преобразование "__int64" в "int", возможна потеря данных C++
C++ Задать условие: "Если компьютер только что загрузился, то"

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

Или воспользуйтесь поиском по форуму:
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
07.01.2011, 14:32     Найдите ошибку в задаче: "дана матрица, если выполняется условие, то следует исполнить преобразование.." #8
Вот код, почитайте там мои коментарии.
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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
#include "stdafx.h"
#include <iostream>
#include <math.h>
#include <string.h>
#include <fstream>
#include <clocale>
using namespace std;
const int N=8;
ofstream fout;
ifstream fin;
 
bool yslovie(int n,int a[N][N])
// проверяет область 1-2, что существует четный столбец, где каждый элемент  нулевой.
 {
        int j,i; bool GoodStlb; bool GoodElem;int imax;
        i=0;
        GoodStlb=false;
        imax=n/2;
        while (!GoodStlb && i<imax)
        {
                j=i;
                GoodElem=true;              
                while ((GoodElem)&&(j<n-i))
                {
                        if (a[i][j]==0)
                                GoodElem=false;
                        j++;
                }
                GoodStlb=!GoodElem;
                i+=2;
        }
return GoodStlb;
}
 
void preobraz3(int n,int a[N][N])
//отражает относительно центра области 3-4
{
        int c, temp=a[N/2-1][N-1]; 
        for (int i=0; i<n/2; i++)
        { 
                for (int j=n-i-1; j<n; j++)
                {
                        c=a[i][j];
                        a[i][j]=a[n-i-1][j];
                        a[n-i-1][j]=c;
                }
                a[n-i-1][n-i-1]=temp;
        }
}
/*void preobraz3i(int n,int a[N][N]) // и эта функция вообще не нужна
//отражает относительно центра области 3-4
{
        int c; 
        for (int i=0; i<n/2; i++)
        { 
                for (int j=n-i-1; j<n; j++)
                {
                        c=a[i][j];
                        a[i][j]=a[n-i][j];
                        a[n-i][j]=c;
                }
        }
}*/ 
 
void vivod(int a[N][N], int n)// вывод матрицы
{
        for(int i=0; i<n;i++)
        {
          for(int j=0;j<n;j++)
                {
                        if(j!=(n-1))
                          fout << a[i][j] << " ";
                        else 
                          fout << a[i][j] << endl;
                }
        }
  fout << endl;
}
 
int main()
{
        int n;int a[N][N];
        setlocale( LC_ALL,"Russian");
        fin.open("input.txt");
        fin >> n;
        for(int i=0;i<N;i++)
        {
        for(int j=0;j<N;j++)
        fin >> a[i][j];
        }
    fout.open("output.txt");
        fout << "Исходная матрица" << endl;
        vivod(a,n);
                char choise = '0';
                system("cls");
            while (choise != '3')
    {           system("cls");
                        cout << "Работа с матрицей" << "\n\n";
                        cout << "1.Вывод матрицы на экран" << "\n";
                        cout << "2.Преобразование матрицы при условии" << "\n";
                        cout << "3.Выход из меню" << "\n";
 
                cin >> choise;
                switch (choise)
                {
                        case '1':
                                cout<<" Вывод матрицы на экран "<<endl;
                 for(int i=0;i<N;i++)
                    {
                       for(int j=0;j<N;j++)
                                                  {
                                                        if(j!=(n-1))
                            cout << a[i][j];
                                                        else
                                                        cout << a[i][j] << endl;
                                                   }
                     }
                        cout<<endl;    
                                cin.get();cin.get();
                                break;
                        case '2':
                                if (n%2==0)
                        {
                                if (yslovie(n,a))
                                {
                                preobraz3(n,a);
                                }
                        }
                          /*      else 
                                        if (yslovie(n,a))
                                                 preobraz3i(n,a);*/ // тогда этот кусок кода вообще не нужен
                                fout << "Результат" << endl;
                                vivod(a,n);
 
                                break;
                        case '3':
                                return 1;
                                break;
                                
        
                }
        }
 
        return 1;
}
Yandex
Объявления
07.01.2011, 14:32     Найдите ошибку в задаче: "дана матрица, если выполняется условие, то следует исполнить преобразование.."
Ответ Создать тему
Опции темы

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