Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.89/18: Рейтинг темы: голосов - 18, средняя оценка - 4.89
0 / 0 / 0
Регистрация: 28.06.2010
Сообщений: 12
1

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

28.06.2010, 21:34. Показов 3554. Ответов 24
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
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; 
}
Программа вроде как созданна без ошибок, но при работе с ней она называет любую матрицу магическим квадратом. В чем моя ошибка?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.06.2010, 21:34
Ответы с готовыми решениями:

Задача. Магический/Не магический квадрат
Проверить, является ли заданная целочисленная матрица A(N, N) &quot;магическим квадратом&quot; (это значит,...

Программа "Магический квадрат"
Написать программу &quot;Магический квадрат&quot; в Lazarus!!!!!!. Задача: разместить в клетках квадрата со...

Магический квадрат (латинский квадрат)
Напишите в С++ программу составления магического квадрата (латинского квадрата) 200-го порядка

Магический квадрат
Дана матрица 3x3. Определить является ли матрица магическим квадратом. Кто может помочь решить ?...

24
ниначмуроФ
851 / 535 / 110
Регистрация: 12.10.2009
Сообщений: 1,913
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 минуту
[программа строит магический квадрат]
2
Aaxenon
28.06.2010, 21:43
  #3

Не по теме:

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

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

Спасибо, но у меня определяет является матрица магическим квадратом или нет, а у Вас создает.
0
ниначмуроФ
851 / 535 / 110
Регистрация: 12.10.2009
Сообщений: 1,913
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;
}
2
29 / 29 / 4
Регистрация: 08.06.2010
Сообщений: 146
28.06.2010, 22:38 7
PointsEqual, только я вот скомпилировать не могу, так как...
error: 'exit' was not declared in this scope
Не подскажете какой библиотеки не хватает?

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

Магический квадрат
Здравствуйте. Подскажите пожалуйста алгоритм, с помощью которого можно &quot;построить&quot; магический...

Магический квадрат
дана целая квадратная матрица n-порядка. Определить, являеться ли она магическим квадратом, т.е....

Магический квадрат
можно составить магический квадрат с первых 36 простых чисел? (сумма элементов которой в каждой...

Магический квадрат
Добрый День!!! Помогите Пожалуйста написать программу: Определить является ли целочисленная...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru