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

Программа магический квадрат. В чем ошибка? - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 18, средняя оценка - 5.00
Sychik
 Аватар для Sychik
0 / 0 / 0
Регистрация: 28.06.2010
Сообщений: 12
28.06.2010, 21:34     Программа магический квадрат. В чем ошибка? #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
#include <iostream> 
#include <conio.h> 
using namespace std; 
int main() 
{ 
setlocale(LC_ALL,"Russian"); 
float *A, *B; 
int m, k, i, N, j, v, s, r; 
cout << "Введите величину m, задающую размерность матрицы (m*m) = "; 
cin >> m; 
N=m*m; 
k=2*m+2; 
A=new float[N]; 
B=new float[k]; 
for(i=0;i<N;i++) 
{ 
    cout << "Введите значение A["<< i <<"] = "; 
    cin >> A[i]; 
} 
 
for (v=0;v<m;v++) 
{ 
s=0; 
for (i=0;i<m;i++) 
{ 
j=i+v*m; 
s=s+A[j]; 
} 
B[v]=s; 
} 
for (v=0;v<m;v++) 
{ 
s=0; 
for (i=0;i<m;i++) 
{ 
j=v+i*m; 
s=s+A[j]; 
} 
B[m+v]=s; 
} 
 
s=0; 
for (i=0;i<m;i++) 
{ 
j=i*(m+1); 
s=s+A[j]; 
} 
B[2*m]=s; 
 
s=0; 
for (i=1;i<(m+1);i++) 
{ 
j=(i)*(m-1); 
s=s+A[j]; 
} 
B[2*m+1]=s; 
r=0; 
for(i=0;i<(2*m+2);i++) 
{ 
if (B[i]=B[i+1]) 
r=r+1; 
else r=0; 
} 
if (r=(2*m+1)) 
cout << "Матрица является магическим квадратом. " <<endl; 
else 
cout << "Матрица не является магическим квадратом. " <<endl; 
for(i=0;i<(2*m+1);i++) 
{ 
cout << "B["<< i <<"] = "<< B[i] <<" "<<endl; 
} 
_getch(); 
return 0; 
}
Программа вроде как созданна без ошибок, но при работе с ней она называет любую матрицу магическим квадратом. В чем моя ошибка?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.06.2010, 21:34     Программа магический квадрат. В чем ошибка?
Посмотрите здесь:

Магический квадрат C++
Магический квадрат C++
Магический квадрат) C++
C++ Магический квадрат
Магический квадрат C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
PointsEqual
ниначмуроФ
 Аватар для PointsEqual
832 / 516 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
28.06.2010, 21:41     Программа магический квадрат. В чем ошибка? #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
48
49
50
51
52
53
54
55
56
57
58
#include <iostream>
#include <conio.h>
 
int main()
{
     unsigned short size=0;
     std::cout<<"vvedite razmernost kvadrata: ";
     std::cin>>size;
     if (!(size & 1)) {
         std::cout<<"razmernost kvadrata dolgna imet ne4etyu velichiny";
         getch();
         exit(0);
     }
     unsigned int max_size=size+(size-1);
     unsigned int**pMagic_square;
     pMagic_square=new unsigned int*[max_size];
     for (unsigned int i=0; i<max_size; i++)
     pMagic_square[i]=new unsigned int[max_size];
     unsigned int i;
     unsigned int j;
     for (i=0; i<max_size; i++)
     for (j=0; j<max_size; j++)
     pMagic_square[i][j]=0;
     unsigned int k=1;
     i=(max_size>>1);
     j=0;
     while (i<max_size){
         unsigned int i1=i;
         unsigned int j1=j;
         unsigned int gr=size>>1; //gr-расстояние от границы увеличенного массива
         while (j1<((j+(max_size>>1))+1)){
             pMagic_square[i1][j1]=k;
             if ((i1>(gr)) && (j1<(gr))) //left
             pMagic_square[i1][j1+size]=k;
             if ((i1>(size+gr)-1) && (j1>(gr)))
             pMagic_square[i1-size][j1]=k; //down
             if ((i1<(gr)) && (j1>(gr)))
             pMagic_square[i1+size][j1]=k; //up
             if ((i1>(gr)) && (j1>(size+gr)-1))
             pMagic_square[i1][j1-size]=k; //right
             i1--;
             j1++;
             k++;
         }
         i++;
         j++;
     }
     std::cout<<std::endl<<"Magic kvadrat gotov: "<<std::endl<<std::endl;
     for (i=(size-1)>>1; i<=max_size-(size>>1)-1; i++ ){
         for (j=(size-1)>>1; j<=max_size-(size>>1)-1; j++ ){
             printf("%d\t",pMagic_square[i][j]);
         }
         std::cout<<std::endl;
     }
     delete[] pMagic_square;
     getch();
     return 0;
}
Добавлено через 1 минуту
[программа строит магический квадрат]
Aaxenon
28.06.2010, 21:43
  #3

Не по теме:

а что за магический квадрат о.о

PointsEqual
ниначмуроФ
 Аватар для PointsEqual
832 / 516 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
28.06.2010, 21:47     Программа магический квадрат. В чем ошибка? #4
Маги́ческий, или волше́бный квадра́т — это квадратная таблица , заполненная n2 чисел таким образом, что сумма чисел в каждой строке, каждом столбце и на обеих диагоналях одинакова. Если в квадрате равны суммы чисел только в строках и столбцах, то он называется полумагическим. Нормальным называется магический квадрат, заполненный целыми числами от 1 до n2. Магический квадрат называется ассоциативным или симметричным, если сумма любых двух чисел, расположенных симметрично относительно центра квадрата, равна n2 + 1. (ВИКИ)
Sychik
 Аватар для Sychik
0 / 0 / 0
Регистрация: 28.06.2010
Сообщений: 12
28.06.2010, 21:49  [ТС]     Программа магический квадрат. В чем ошибка? #5
PointsEqual

Спасибо, но у меня определяет является матрица магическим квадратом или нет, а у Вас создает.
PointsEqual
ниначмуроФ
 Аватар для PointsEqual
832 / 516 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
28.06.2010, 22:26     Программа магический квадрат. В чем ошибка? #6
Sychik, ага, увидел уже после

Добавлено через 1 минуту
по определению, надо просто сравнить суммы строк ,столбцов., и диогоналей матрицы, и если сошлись - то - Magic

Добавлено через 17 минут
Sychik,

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
#include <iostream>
 
using namespace std;
 
int main()
{
    int ROWS = 3;
    int COLS =3;
 
    int **mas = new int*[ROWS];
    for (int i=0; i<ROWS; i++)
    mas[i] = new int[COLS];
 
    mas[0][0]=2;
    mas[0][1]=7;
    mas[0][2]=6;
 
    mas[1][0]=9;
    mas[1][1]=5;
    mas[1][2]=1;
 
    mas[2][0]=4;
    mas[2][1]=3;
    mas[2][2]=8;
 
 
    int sum_res=15; //ответ уже знал заранее,   здесь надо написать строку, которая считаетнужное число
    int sum=0;
 
 
    for (int i=0; i<ROWS; ++i){
        for (int j=0; j<COLS; ++j)
            sum+=mas[i][j];
        if (sum!=sum_res) exit(1);
        sum=0;
    }
 
    sum=0;
    //по столбцам
    for (int j=0; j<COLS; ++j){
        for (int i=0; i<ROWS; ++i)
            sum+=mas[i][j];
        if (sum!=sum_res) exit(1);
        sum=0;
    }
 
 
    cout<<"Square is magic";
 
 
    return 0;
}
- проверку по диогоналям сделаете?

Добавлено через 16 минут
Полный вариант

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
#include <iostream>
 
int main()
{
    int ROWS = 3;
    int COLS =3;
 
    int **mas = new int*[ROWS];
    for (int i=0; i<ROWS; i++)
    mas[i] = new int[COLS];
 
    mas[0][0]=2;
    mas[0][1]=7;
    mas[0][2]=6;
 
    mas[1][0]=9;
    mas[1][1]=5;
    mas[1][2]=1;
 
    mas[2][0]=4;
    mas[2][1]=3;
    mas[2][2]=8;
 
    int sum_res=0;
    for (int i=0; i<ROWS; ++i)
    sum_res+=mas[i][0];
    int sum=0;
 
    //по строкам
    for (int i=0; i<ROWS; ++i){
        for (int j=0; j<COLS; ++j)
            sum+=mas[i][j];
        if (sum!=sum_res) exit(1);
        sum=0;
    }
 
    //по столбцам
    for (int j=0; j<COLS; ++j){
        for (int i=0; i<ROWS; ++i)
            sum+=mas[i][j];
        if (sum!=sum_res) exit(1);
        sum=0;
    }
 
    //главная диог
    for (int i=0; i<COLS; ++i)
        sum+=mas[i][i];
        if (sum!=sum_res) exit(1);
        else
        sum=0;
 
    //побочная диог
    for (int i=0; i<COLS; ++i)
        sum+=mas[(COLS-1)-i][i];
        if (sum!=sum_res) exit(1);
        else
        sum=0;
 
    std::cout<<"Square is magic";
 
    return EXIT_SUCCESS;
}
*HellRaiser*
 Аватар для *HellRaiser*
28 / 28 / 2
Регистрация: 08.06.2010
Сообщений: 146
28.06.2010, 22:38     Программа магический квадрат. В чем ошибка? #7
PointsEqual, только я вот скомпилировать не могу, так как...
error: 'exit' was not declared in this scope
Не подскажете какой библиотеки не хватает?

Уже сам нашёл))
PointsEqual
ниначмуроФ
 Аватар для PointsEqual
832 / 516 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
28.06.2010, 22:42     Программа магический квадрат. В чем ошибка? #8
*HellRaiser*, хм, а какой компилятор?
Sychik
 Аватар для Sychik
0 / 0 / 0
Регистрация: 28.06.2010
Сообщений: 12
28.06.2010, 22:43  [ТС]     Программа магический квадрат. В чем ошибка? #9
PointsEqual, спасибо. У Вас не совсем то что мне надо, но думаю смогу применить.
*HellRaiser*
 Аватар для *HellRaiser*
28 / 28 / 2
Регистрация: 08.06.2010
Сообщений: 146
28.06.2010, 22:44     Программа магический квадрат. В чем ошибка? #10
Компилил MinGW-ом...не хватало windows.h
PointsEqual
ниначмуроФ
 Аватар для PointsEqual
832 / 516 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
28.06.2010, 22:46     Программа магический квадрат. В чем ошибка? #11
надоже, поидее <cstdlib> содержит exit
*HellRaiser*
 Аватар для *HellRaiser*
28 / 28 / 2
Регистрация: 08.06.2010
Сообщений: 146
28.06.2010, 22:48     Программа магический квадрат. В чем ошибка? #12
Да с ним тоже норм. Конешно <cstdlib> в данном случае лучше.
PointsEqual
ниначмуроФ
 Аватар для PointsEqual
832 / 516 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
28.06.2010, 22:50     Программа магический квадрат. В чем ошибка? #13
Sychik, почему не совсем то? как вы хотели?
Sychik
 Аватар для Sychik
0 / 0 / 0
Регистрация: 28.06.2010
Сообщений: 12
28.06.2010, 23:43  [ТС]     Программа магический квадрат. В чем ошибка? #14
Все равно не получается, программа продолжает каждый раз выдавать мне, что матрица является магическим квадратом, хотя это не так.
PointsEqual
ниначмуроФ
 Аватар для PointsEqual
832 / 516 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
28.06.2010, 23:45     Программа магический квадрат. В чем ошибка? #15
Цитата Сообщение от Sychik Посмотреть сообщение
Все равно не получается, программа продолжает каждый раз выдавать мне, что матрица является магическим квадратом, хотя это не так.
в моем коде?
Sychik
 Аватар для Sychik
0 / 0 / 0
Регистрация: 28.06.2010
Сообщений: 12
28.06.2010, 23:51  [ТС]     Программа магический квадрат. В чем ошибка? #16
Цитата Сообщение от PointsEqual Посмотреть сообщение
в моем коде?
Нет, я пытаюсь исправить свой код, используя Ваш.
PointsEqual
ниначмуроФ
 Аватар для PointsEqual
832 / 516 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
29.06.2010, 00:00     Программа магический квадрат. В чем ошибка? #17
А что это за 2 маассива A и B?
Sychik
 Аватар для Sychik
0 / 0 / 0
Регистрация: 28.06.2010
Сообщений: 12
29.06.2010, 00:29  [ТС]     Программа магический квадрат. В чем ошибка? #18
А - это элементы матрицы
В - сумма чисел в строках, столбцах, диагоналях.
PointsEqual
ниначмуроФ
 Аватар для PointsEqual
832 / 516 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
29.06.2010, 00:33     Программа магический квадрат. В чем ошибка? #19
Цитата Сообщение от Sychik Посмотреть сообщение
А - это элементы матрицы
матрица из одномерного массива?)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.06.2010, 00:40     Программа магический квадрат. В чем ошибка?
Еще ссылки по теме:

C++ Магический квадрат
Магический квадрат C++
Магический квадрат C++

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

Или воспользуйтесь поиском по форуму:
Sychik
 Аватар для Sychik
0 / 0 / 0
Регистрация: 28.06.2010
Сообщений: 12
29.06.2010, 00:40  [ТС]     Программа магический квадрат. В чем ошибка? #20
Цитата Сообщение от PointsEqual Посмотреть сообщение
матрица из одномерного массива?)
Ммм... а как это можно исправить?
Yandex
Объявления
29.06.2010, 00:40     Программа магический квадрат. В чем ошибка?
Ответ Создать тему
Опции темы

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