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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.12.2012, 22:24   #1
Yakoff
Пользователь
 
Регистрация: 28.05.2011
Сообщений: 21
По умолчанию Вычисление нормы матрицы.

Язык Си

В общем, дело такое:
написал код, считаю, что все верно, но программа выдает не то значение, которое надо.

// Норма матрицы - число, являющееся максимальным элементом из сумм элементов k-го столбца матрицы, где каждый элемент матрицы взят по модулю//

До момента a[i][j]=abs(a[i][j]); все понятно, дальше ступор. Подскажите, пожалуйста.

Код:
#include<stdio.h>
#include<conio.h>
#include<math.h>
#define m 20
#define n 20
 
int main()
{
int i,j,p,k,s,max;
int a[m][n];
int b[n];
printf("Vvedi razmer matricy ");
scanf("%d%d",&p,&k);
s=k;
for (i=0;i<p;i++)
    {
        for (j=0;j<k;j++)
            {
            printf ("a[%d][%d]:",i,j);
            scanf ("%d", &a[i][j]);
            a[i][j]=abs(a[i][j]);
            }
    }
for (j=0;j<k;j++)
    {
    for (i=0;i<p;i++)
        {
        for (s=0;s<p;s++)
        { 
        b[s]=0;
        b[s]+=a[j][i];
        }
        }
    }
for (s=0;s<p;s++)
{
max=b[s];
if (b[s+1]>max) max=b[s+1];
}
printf("Norma=%d",max);
getch();
}
Yakoff вне форума Ответить с цитированием
Старый 02.12.2012, 22:43   #2
Yakoff
Пользователь
 
Регистрация: 28.05.2011
Сообщений: 21
По умолчанию

Код немного исправил. Теперь осталась одна проблема: как посчитать суммы элементов по столбцам отдельно? Сейчас считает сумму вообще всех элементов.

Код:

#include<stdio.h>
#include<conio.h>
#include<math.h>
#define m 20
#define n 20

int main()
{
int i,j,p,k,s,max;
int a[m][n];
int b[n];
printf("Vvedi razmer matricy ");
scanf("%d%d",&p,&k);
for (s=0;s<p;s++)
{ b[s]=0; }
for (i=0;i<p;i++)
	{
		for (j=0;j<k;j++)
			{
            printf ("a[%d][%d]:",i,j);
            scanf ("%d", &a[i][j]);
			a[i][j]=abs(a[i][j]);
			}
	}
for (s=0;s<p;s++)
{
for (j=0;j<k;j++)
	{
	for (i=0;i<p;i++)
		{
		b[s]+=a[j][i];
		}
		}
	}
for (s=0;s<p;s++)
{
max=b[s];
if (b[s+1]>max) max=b[s+1];
}
printf("Norma=%d",max);
getch();
}
Yakoff вне форума Ответить с цитированием
Старый 02.12.2012, 23:03   #3
Sweta
Форумчанин
 
Регистрация: 22.11.2007
Сообщений: 664
По умолчанию

У Вас количество строк и столбцов разное?
Неприятности приходят и уходят, а жизнь продолжается!
Sweta вне форума Ответить с цитированием
Старый 02.12.2012, 23:09   #4
Yakoff
Пользователь
 
Регистрация: 28.05.2011
Сообщений: 21
По умолчанию

Да, разное. Матрица прямоугольная.
Yakoff вне форума Ответить с цитированием
Старый 02.12.2012, 23:26   #5
Sweta
Форумчанин
 
Регистрация: 22.11.2007
Сообщений: 664
По умолчанию

Код:
for (i=0;i<p;i++)           //перебор строк
	{
		for (j=0;j<k;j++) //перебор столбцов
			{
            printf ("a[%d][%d]:",i,j);
            scanf ("%d", &a[i][j]);
			a[i][j]=abs(a[i][j]);
			}
	}
т.е у Вас массив b должен содержать k єлементов.
//for (s=0;s<p;s++) //то лишнее
//{
for (j=0;j<k;j++)    //изменяем строки
	{
	for (i=0;i<p;i++) //изменяем столбцы
		{
		b[i]+=a[i][j]; считаем сумму столбца
		}
		}
//	} лишнее
max=b[0];
for (i=1;i<p;i++)
{
//max=b[s];

if (b[i]>max) max=b[i];
}
только определитесь, какая переменная столбцы, а какая строки
Неприятности приходят и уходят, а жизнь продолжается!
Sweta вне форума Ответить с цитированием
Старый 02.12.2012, 23:52   #6
Yakoff
Пользователь
 
Регистрация: 28.05.2011
Сообщений: 21
По умолчанию

Угумс. Исправил и даже отчасти согласен, но теперь программа не хочет мне выдавать ответ.
Точнее, выдает, но -89675 и так далее

Код:
#include<stdio.h>
#include<conio.h>
#include<math.h>
#define m 20
#define n 20

int main()
{
int i,j,p,k,max;
int a[m][n];
int b[n];
printf("Vvedi razmer matricy ");
scanf_s("%d%d",&p,&k);
for (i=0;i<p;i++)
	{
		for (j=0;j<k;j++)
			{
            printf ("a[%d][%d]:",i,j);
            scanf ("%d", &a[i][j]);
			a[i][j]=abs(a[i][j]);
			}
	}
for (j=0;j<k;j++)
	{
	for (i=0;i<p;i++)
	{
	b[i]+=a[i][j];
	}
}
max=b[0];
for (i=0;i<p;i++)
{
if (b[i]>max) max=b[i];
}
printf("Norma=%d",max);
getch();
}
Yakoff вне форума Ответить с цитированием
Старый 03.12.2012, 00:04   #7
MihalNik
МегаМодератор
СуперМодератор
 
Регистрация: 27.11.2012
Сообщений: 5,714
По умолчанию

Инициализация? Или сложены большие значения?
Благими намерениями устлана дорога на programmersforum.ru

Последний раз редактировалось MihalNik; 03.12.2012 в 00:07.
MihalNik вне форума Ответить с цитированием
Старый 03.12.2012, 00:12   #8
Yakoff
Пользователь
 
Регистрация: 28.05.2011
Сообщений: 21
По умолчанию

Инициализация, скорее всего. Ибо даже при сложении больших значений ответ должен быть положительным.
Yakoff вне форума Ответить с цитированием
Старый 03.12.2012, 00:12   #9
Sweta
Форумчанин
 
Регистрация: 22.11.2007
Сообщений: 664
По умолчанию

Если у Вас р -это количество строк, а k- количество столбцов, то


Код:
for (j=0;j<k;j++)    
	{
	for (i=0;i<p;i++)
	{
	b[j]+=a[i][j];
	}
}
max=b[0];
for (i=0;i<k;i++)
{
if (b[i]>max) max=b[i];
}
Неприятности приходят и уходят, а жизнь продолжается!
Sweta вне форума Ответить с цитированием
Старый 03.12.2012, 00:24   #10
Yakoff
Пользователь
 
Регистрация: 28.05.2011
Сообщений: 21
По умолчанию

У меня количество элементов в массиве b должно совпадать с количеством столбцов. Значит и b и j прогоняются по одному счетчику.

Код:
for (j=0;j<k;j++)
	{
	for (i=0;i<p;i++)
	{
	b[j]+=a[i][j];
	}
}
max=b[0];
for (j=0;j<k;j++)
{
if (b[j]>max) max=b[j];
}
printf("Norma=%d",max);
getch();
}
Yakoff вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
даны три квадратные матрицы третьего порядка.вывести на экран ту из них,норма которой наименьшая. в качестве нормы матрицы взять м ayoka Паскаль, Turbo Pascal, PascalABC.NET 0 16.05.2012 18:28
вычисление матрицы в VBA Лесёк Помощь студентам 0 27.02.2011 19:51
Вычисление нормы матрицы Monomah Общие вопросы C/C++ 2 05.12.2010 17:27
С++, найти ошибку в вычислении бесконечной нормы матрицы OffyGhost Помощь студентам 2 09.03.2010 14:18