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

Аватара пользователя
colds0ul@vk

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

Сообщение colds0ul@vk »

Написать программу, которая проверяет, является ли введенная с клавиатуры

квадратная матрица "магическим" квадратом.



"Магическим" квадратом называется матрица, у которой сумма чисел в каждом

горизонтальном ряду, в каждом вертикальном и по каждой из диагоналей одна

и та же. Надеюсь, что люди умные тут сидят, сколько сам пытался написать ничего не выходит...
Аватара пользователя
colds0ul@vk

Re: C/C++ - Магический квадрат

Сообщение colds0ul@vk »

Предлагаете за вас всё написать? Где ваш код?
Аватара пользователя
Iska

Re: C/C++ - Магический квадрат

Сообщение Iska »

LehaMechanic,

Код:

Код: Выделить всё

#include <stdio.h>
void main()
{
const int Height = 2;
const int Weight = 2;
int matrix[Height][Weight]= { {0, 0}, {0, 0} };  
int sumINSTR = 0;            //сумма в строках
int sumINSTB = 0;            //сумма в столбцах
int DYAG1 = 0;               //cумма в одной  диагонали.
int DYAG2 = 0;               //сумма в другой диагонали.
//Суммируем с строках
for(int i = 0;i<Height;i++){
    for(int j = 0;j<Weight;j++){
    sumINSTR+=matrix[i][j];
    }
}
//Суммируем в столбцах
for(int t = 0;t<Weight;t++){
    for(int j = 0;j<Height;j++){
    sumINSTB+=matrix[t][j];
    }
}
//Если матрица не квадратная возможен выход за буфер по строке
//Суммируем в одной диагонали
for(int p = 0, j = 0; p<Weight; p++,j++){
    DYAG1+=matrix[p][j];
}
//Если матрица не квадратная возможен выход за буфер по строке
//Суммируем в другой диагонали
for(int g = 0, k = Weight-1; k>=0; g++,k--){
    DYAG2+=matrix[g][k];
}
//Выводим суммы----------------
printf("%d",sumINSTR);printf("\n");
printf("%d",sumINSTB);printf("\n");
printf("%d",DYAG1);printf("\n");
printf("%d",DYAG2);printf("\n");
//-----------------------------
int CONTROL = sumINSTR;
//Проверка 
if((sumINSTB==CONTROL)&&(DYAG1==CONTROL)&&(DYAG2==CONTROL)){
printf("Magic Matrix\n");
}
return;
}

вот
Аватара пользователя
LehaMechanic

Re: C/C++ - Магический квадрат

Сообщение LehaMechanic »

LehaMechanic,

Код:

Код: Выделить всё

#include <stdio.h>
void main()
{
const int Height = 2;
const int Weight = 2;
int matrix[Height][Weight]= { {0, 0}, {0, 0} };  
int sumINSTR = 0;            //сумма в строках
int sumINSTB = 0;            //сумма в столбцах
int DYAG1 = 0;               //cумма в одной  диагонали.
int DYAG2 = 0;               //сумма в другой диагонали.
//Суммируем с строках
for(int i = 0;i<Height;i++){
    for(int j = 0;j<Weight;j++){
    sumINSTR+=matrix[i][j];
    }
}
//Суммируем в столбцах
for(int t = 0;t<Weight;t++){
    for(int j = 0;j<Height;j++){
    sumINSTB+=matrix[t][j];
    }
}
//Если матрица не квадратная возможен выход за буфер по строке
//Суммируем в одной диагонали
for(int p = 0, j = 0; p<Weight; p++,j++){
    DYAG1+=matrix[p][j];
}
//Если матрица не квадратная возможен выход за буфер по строке
//Суммируем в другой диагонали
for(int g = 0, k = Weight-1; k>=0; g++,k--){
    DYAG2+=matrix[g][k];
}
//Выводим суммы----------------
printf("%d",sumINSTR);printf("\n");
printf("%d",sumINSTB);printf("\n");
printf("%d",DYAG1);printf("\n");
printf("%d",DYAG2);printf("\n");
//-----------------------------
int CONTROL = sumINSTR;
//Проверка 
if((sumINSTB==CONTROL)&&(DYAG1==CONTROL)&&(DYAG2==CONTROL)){
printf("Magic Matrix\n");
}
return;
}

вот
Аватара пользователя
LehaMechanic

Re: C/C++ - Магический квадрат

Сообщение LehaMechanic »

Цитата colds0ul@vk:



//Если матрица не квадратная возможен выход за буфер по строке
C/C++ - Магический квадрат




Проверку на то, какую матрицу нам подсунули, надо осуществлять первым же делом, и если она не квадратная – выводить сообщение типа "Ну что вы мне тут подсовываете!" и завершать работу программы.
Аватара пользователя
mwz

Re: C/C++ - Магический квадрат

Сообщение mwz »

Цитата mwz:



Проверку на то, какую матрицу нам подсунули, надо осуществлять первым же делом,
C/C++ - Магический квадрат




А вот это и не обязательно, --- корректность данных запросто вызывающая/серверная часть кода может обеспечить...
Аватара пользователя
Tau_0

Re: C/C++ - Магический квадрат

Сообщение Tau_0 »

Tau_0, обязательно. Иначе и быть не должно.
Аватара пользователя
Iska

Re: C/C++ - Магический квадрат

Сообщение Iska »

Цитата Tau_0:



вызывающая/серверная часть кода может обеспечить
C/C++ - Магический квадрат




А может и не обеспечить. Изображение

Почему и предпочитал всегда закладывать проверки на допустимость всех данных, какие возможно: "лучше перебдеть чем недобдеть". Как, впрочем, и инициализацию массивов в случаях, когда их можно не декларировать заранее а создавать по ходу дела.
Аватара пользователя
Iska

Re: C/C++ - Магический квадрат

Сообщение Iska »

Цитата mwz:



А может и не обеспечить.
C/C++ - Магический квадрат





Цитата Iska:



обязательно. Иначе и быть не должно.
C/C++ - Магический квадрат




Это вы мне фортранщику, который десять лет занимался проекционно-сеточными методами пишете ...???... Я не только сам кодировал, но и смотрел/разбирал исходные тексты больших промышленных программных комплексов, --- как америкосы это делают...



Как правило за ВСЁ отвечает вызывающий модуль/программа, которая и генерирует данные. Хотя в зависимости от алгоритма порою и вниз задачу спустить можно



В силу специфики задач (разреженные симметричные положительно определённые квадратные матрицы) для хранения матриц использовались ленточные и профильные схемы (одномерный масств + массивы указателей), а не двухмерные массивы.



ЗЫ Зачем что-то долго в крутить в цикле на неверных данных..???...



ЗЗЫ Про студенческие программки я не говорю --- приказали проверять (мусора наплодить), --- приказ следует выполнять...
Аватара пользователя
Tau_0

Re: C/C++ - Магический квадрат

Сообщение Tau_0 »

Цитата Tau_0:



приказали проверять (мусора наплодить), --- приказ следует выполнять..
C/C++ - Магический квадрат




(и остальное)



Ага. Изображение

Но "если бы директором был я", то за такие отвлечённые комментарии в тексте курсовой одного балла студент точно не досчитался бы. В обоих случаях: и если вызывающий модуль выполняет эту проверку, в т.ч. если матрица даётся преподавателем гарантированно квадратная (что означает, что работа выполнена вообще бездумно), и если не выполняет (а тогда какого хрена не учёл, зная из этих слизанных комментариев, что возможен нештатный вылет программы). Изображение
Ответить

Вернуться в «Программирование и базы данных»