Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Магический квадрат

Ответить
Настройки темы
C/C++ - Магический квадрат

Новый участник


Сообщения: 2
Благодарности: 0

Профиль | Сайт | Отправить PM | Цитировать


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

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

Отправлено: 20:35, 03-09-2014

 

Забанен


Сообщения: 5828
Благодарности: 1242

Профиль | Цитировать


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

Отправлено: 20:56, 03-09-2014 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 2
Благодарности: 0

Профиль | Сайт | Отправить PM | Цитировать


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;
}
вот

Отправлено: 21:00, 03-09-2014 | #3


Забанен


Сообщения: 5828
Благодарности: 1242

Профиль | Цитировать


Код: Выделить весь код
//Суммируем с строках
for(int i = 0;i<Height;i++){
    for(int j = 0;j<Weight;j++){
    sumINSTR+=matrix[i][j];
Что вы здесь сделали? Вы этим суммируете все элементы матрицы, проходя по ним последовательно от первого до последнего, разве нет? А надо отдельно просуммировать первую строку, отдельно вторую и т.д.

Та же самая фигня у вас и для столбцов.

Отправлено: 21:33, 03-09-2014 | #4

mwz mwz вне форума

Аватара для mwz

Ушел из жизни


Сообщения: 8595
Благодарности: 2127

Профиль | Сайт | Отправить PM | Цитировать


Цитата colds0ul@vk:
//Если матрица не квадратная возможен выход за буфер по строке »
Проверку на то, какую матрицу нам подсунули, надо осуществлять первым же делом, и если она не квадратная – выводить сообщение типа "Ну что вы мне тут подсовываете!" и завершать работу программы.

-------
Mikhail Zhilin


Отправлено: 15:57, 04-09-2014 | #5


Аватара для Tau_0

Ветеран


Сообщения: 6211
Благодарности: 1393

Профиль | Отправить PM | Цитировать


Цитата mwz:
Проверку на то, какую матрицу нам подсунули, надо осуществлять первым же делом, »
А вот это и не обязательно, --- корректность данных запросто вызывающая/серверная часть кода может обеспечить...

Отправлено: 16:58, 04-09-2014 | #6


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Tau_0, обязательно. Иначе и быть не должно.

Отправлено: 18:21, 04-09-2014 | #7

mwz mwz вне форума

Аватара для mwz

Ушел из жизни


Сообщения: 8595
Благодарности: 2127

Профиль | Сайт | Отправить PM | Цитировать


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

-------
Mikhail Zhilin


Отправлено: 19:13, 04-09-2014 | #8


Аватара для Tau_0

Ветеран


Сообщения: 6211
Благодарности: 1393

Профиль | Отправить PM | Цитировать


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

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

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

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

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

Отправлено: 20:53, 04-09-2014 | #9

mwz mwz вне форума

Аватара для mwz

Ушел из жизни


Сообщения: 8595
Благодарности: 2127

Профиль | Сайт | Отправить PM | Цитировать


Цитата Tau_0:
приказали проверять (мусора наплодить), --- приказ следует выполнять.. »
(и остальное)

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

-------
Mikhail Zhilin


Отправлено: 00:27, 05-09-2014 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Магический квадрат

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Разное - [решено] Квадрат Малевича Тинранище Microsoft Windows 7 17 23-06-2013 22:44
.NET - классы Circle (окружность), Square (квадрат) и Triangle (треугольник), производные от Tomogochi Программирование и базы данных 1 19-06-2011 12:42
Интерфейс - [решено] Черный квадрат Малевича вместо значка ярлыка на рабочем столе S.M.A.X. Microsoft Windows Vista 15 08-09-2010 16:01
Вместо любой картинки у меня белый квадрат с красным крестом внутри! Tigina Программное обеспечение Windows 1 16-05-2008 22:12
При печати на струйном принтере вместо картинки черный квадрат Alexis72 Программное обеспечение Windows 0 18-10-2007 10:01




 
Переход