Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

05.01.2011, 22:27. Просмотров 478. Ответов 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
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
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.01.2011, 22:27
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Найдите ошибку в задаче: "дана матрица, если выполняется условие, то следует исполнить преобразование.." (C++):

Вставить пробел после каждого символа "." "," "!" или "?", если за этими символами не следует пробел - C++
Вставить пробел после каждого символа &quot;.&quot; &quot;,&quot; &quot;!&quot; или &quot;?&quot;, если за этими символами не следует пробел (т. е. следует любой символ, кроме...

Программа, выводящая значение "истина", если выполняется заданное условие: все из чисел x, y, z являются положительными - C++
Написать программу, выводящую значение истина если выполняется заданное условие. Указанные в варианте переменные ввести с клавиатуры ...

Вывести решения уравнения, если их число конечно, "NO", если решений нет, и "INF", если их бесконечно много - C++
Задача с условным оператором. Решить в целых числах уравнение ax + b = 0. Входные данные Вводятся 2 целых числа: a и b. ...

Дана строка, в котором есть слово "да" или слово "нет". Если в нем есть слово "нет", то удалить его - C++
Дана строка, в котором есть слово &quot;да&quot; или слово &quot;нет&quot;. Если в нем есть слово &quot;нет&quot;, то удалить его или получить строку в слова &quot;да&quot; и...

Есть ли в C++ условие типа "Если моё окно неактивно"? - C++
День всем добрый. Хотел апгрейдить программу и решил, что лучше будет, если программа запустит функцию только тогда, когда окно...

Задать условие: "Если компьютер только что загрузился, то" - C++
Всем ещё раз привет:) Есть ли функция, которая отвечает за загрузку компьютера? Например: if(компьютер только что загрузился) { ...

7
valeriikozlov
Эксперт С++
4672 / 2498 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
05.01.2011, 23:40 #2
sonyaka, Что именно не нравится в Вашей программе?
Как делается преобразование матрицы?
0
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

причем одну из областей надо или сузить или расширить!(
Вот с этим у меня и проблемы
0
valeriikozlov
Эксперт С++
4672 / 2498 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
06.01.2011, 07:49 #4
Цитата Сообщение от sonyaka Посмотреть сообщение
не вызывается второе условие,
Второе условие вызывается и выполняется. Это можете увидеть по результатам в файле output.txt.
После преобразования состояние матрицы записывается именно туда.
А вот про само условие для преобразования и способы преобразований матрицы напишите поподробнее. Пока если честно не очень понятно.
0
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, но суть в том, что они разного размера, и тут надо или уменьшать один, или увеличивать другой...с этим тож проблема

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

После каждого знака препинания (".", ",", ";") вставить в строку пробел, если там его нет - C++
Выполните задания с использованием библиотечного класса string. Даны строка S. Необходимо после каждого знака препинания (&quot;.&quot;, &quot;,&quot;,...

Дана точка на плоскости с координатами (х, у). Составить программу, которая выдает одно из сообщений "Да", "Нет", "На - C++

В зависимости от времени года "весна", "лето", "осень", "зима" определить погоду "тепло", "жарко", "холодно", "очень холодно" - C++
В зависимости от времени года &quot;весна&quot;, &quot;лето&quot;, &quot;осень&quot;, &quot;зима&quot; определить погоду &quot;тепло&quot;, &quot;жарко&quot;, &quot;холодно&quot;, &quot;очень холодно&quot;. Я так...

Почему условие "a && b == 0" не выполняется? - C++
решил вспомнить c++, начал что то писать и непонятка void __fastcall TForm1::Button1Click(TObject *Sender) { int a=0,b=0,s=0; ...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

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