Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.04.2013, 18:52   #1
Daniel_28
 
Регистрация: 08.06.2012
Сообщений: 3
Восклицание Проверка на "магическй квадрат", используя функции (Си; Visual Studio)

Добрый день.
Помогите пожалуйста исправить код проверки квадратной матрицы на соответствие "магическому квадрату".
1. Функция суммирования по строкам (да и по столбцам) должна просуммировать каждую строку (каждый столбец) в отдельности и, в случае совпадения результатов, вернуть значение. В случае несовпадения - завершить выполнение всей программы (например, выдать сообщение "совпадений нет").
2. На данный момент программа перестаёт работать (выдаёт ошибку) после выполнения 1 функции суммирования.

Код:
#include <stdio.h>
#include <iostream>
#define m 4
#define n 4
void vvod(int a[m][n]);
void vivod(int a[m][n]);
int sumstr(int a[m][n]);
int sumstb(int a[m][n]);
int diag1(int a[m][n]);
int diag2(int a[m][n]);


void main()
{
	setlocale (LC_ALL, "Russian");
	int b[m][n];
	vvod(b);
	vivod(b);
	printf("Сумма по строкам: %d",sumstr(b));printf("\n");
	printf("Сумма по столбцам: %d",sumstb(b));printf("\n");
	printf("Главная диагональ: %d",diag1(b));printf("\n");
	printf("Побочная диагональ: %d",diag2(b));printf("\n");
	int CONTROL = sumstr(b);
	if((sumstb(b)==CONTROL)&&(diag1(b)==CONTROL)&&(diag2(b)==CONTROL))
	{
		printf("Magic Matrix\n");
	}
	else
		printf("No Magic\n");
}

//Функция ввода
void vvod(int a[m][n])
{
	int i,j;
	printf ("Введите массив A:\n");
	for (i=0;i<m;i++)
		for (j=0;j<n;j++)
		{
			printf("A[%d][%d]=",i,j);
			scanf("%d",&a[i][j]);
		}
}

//Функция вывода
void vivod(int a[m][n])
{
	int i,j;
	printf("\nВаш массив А:\n");
	for (i=0; i<m; i++)
	{
		for (j=0; j<n; j++)
			printf("%3d", a[i][j]);
		printf("\n");
	}
}

//Суммируем строки
int sumstr(int a[m][n])
{
	int str=0;
	for(int i = 0;i<m;i++)
	{
		for(int j = 0;j<n;j++)
		{
			str+=a[i][j];
		}
	}
	return str;
}

//Суммируем столбцы
int sumstb(int a[m][n])
{
	int stb;
	for(int t = 0;t<n;t++)
	{
		for(int j = 0;j<m;j++)
		{
			stb+=a[t][j];
		}
	}
	return stb;
}

//Суммируем главную диагональ
int diag1(int a[m][n])
{
	int d1;
	for(int p = 0, j = 0; p<n; p++,j++)
	{
		d1+=a[p][j];
	}
	return d1;
}

//Суммируем побочную диагональ
int diag2(int a[m][n])
{
	int d2;
	for(int g = 0, k = n-1; k>=0; g++,k--)
	{
		d2+=a[g][k];
	}
	return d2;
}
Daniel_28 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Rad Studio XE2. The name "C:\" contains an invalid character ":" AleksKr C++ Builder 4 05.12.2012 15:17
Игра "Лабиринт",Visual Studio 2008,C++ Shamanch1K Фриланс 5 03.03.2011 10:56
Visual Basic, использование операторов "for..next" и "if.. end if" Dieza Помощь студентам 0 27.10.2010 20:46
Как на щет "ломаных" компонентов к Visual Studio и вообще ПО..? Premium Свободное общение 6 07.10.2010 22:10