Страница 1 из 1

Матрица на С

Добавлено: 13 ноя 2008, 01:06
Ролли
В общем нужна помощь.
Задание: Среди диагоналей квадратной матрицы, параллельных главной диагонали и расположенных выше нее, найти такую, сумма модулей элементов которой минимальна по сравнению с другими диагоналями.

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

#include <stdio.h>
#include <math.h>
#define MAX 30

int main()
{
	int sum,min;
	int mt[MAX][MAX];
	int n,r,k,
		i,j;
	
		printf ("\nDimension of squarte matrix:"); // Ввод порядка матрицы
		scanf("%d",&n);
		
		printf("elements of matrix [%d][%d]:\n",n,n);// Ввод элементов матрицы
		for (i=0; i<n; i++)
		{
			for(j=0; j<n; j++)
			{
				printf ("\nmt[%d,%d]=",(i+1),(j+1));
				scanf("%d",&r);
				mt[i][j]=r;
			}
		}
	
		for (i=0; i<n;i++)						//Представление матрицы в стандартном виде 
        {
            for (j=0;j<n;j++)
            {
                printf("%d   ",mt[i][j]);
            }
                printf("\n");
				printf("\n");
        }
			
	printf("sum ofthe elements higher than main diagonal:\n ");
	sum=0;
	
			
			[B]for(i=0;i<n-1;i++)
			
				for(j=1;j<n-1;j++)
				{ 
					sum+=abs(mt[i][j]);
					i++;
					min=sum;
							
					if (sum <min)	
						min=sum;
					else min=sum;
				}
				printf("%d\n", min);[/B]
		
				
			return 0;

}			
Проблема с выделенным фрагментом. Считаеться только 1 диагональ идущая за главной. А надо просчитать все и выбрать минимальную! Кто знает как это сделать, раскажите пожалуйста!

Re: Матрица на С

Добавлено: 13 ноя 2008, 19:21
Albor
Ролли писал(а):

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

[B]                  min=sum;[/B]
 
[B]                  if (sum <min)    [/B]
[B]                      min=sum;[/B]
[B]                  else min=sum;[/B]
 

Данный участок кода абсурден на 100%. Неужели этого не видно? Переменная i наращивается во вложенном цикле. После отработки вложенного цикла i уже не удовлетворяет условию первого цикла и он прекращает свою работу.

Re: Матрица на С

Добавлено: 13 ноя 2008, 20:25
Ролли
Ну, а как сделать, чтобы программа работала?

Re: Матрица на С

Добавлено: 14 ноя 2008, 06:52
Albor
Подумать, сложного ничего нет. У меня нет желания этим заниматься, а на ошибки я указал.

Re: Матрица на С

Добавлено: 21 ноя 2008, 14:44
Ролли

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

#include <stdio.h>
#include "conio.h"
#include <math.h>
#define MAX 30

int main()
{
	int sum=0;
	int min;
	int mt[MAX][MAX];
	int n,r,k,i,j;
	
		printf ("\nDimension of squarte matrix:"); // ввод порядка матрицы
		scanf("%d",&n);
		
		printf("elements of matrix [%d][%d]:\n",n,n);// ввод элементов матрицы
		for (i=0; i<n; i++)
		{
			for(j=0; j<n; j++)
			{
				printf ("\nmt[%d,%d]=",(i+1),(j+1));
				scanf("%d",&r);
				mt[i][j]=r;
			}
		}
	
		for (i=0; i<n;i++)	//представление матрицы в стандартном виде
        {
            for (j=0;j<n;j++)
            {
                printf("%d   ",mt[i][j]);
            }
			printf("\n");
			printf("\n");
        }

	for (k=1; k < (n-1); k++) {
		j = k;
		for (i=0; i<n-k; i++) {
			sum+=abs(mt[i][j]);
			j++;
		}
		if (k == 1)
			min = sum;
		else if (sum < min)
			min = sum;
		sum = 0;
		
	}
      printf("%d", min);   
return 0;
}

В общем теперь код правельно находит минимальную диагональ, но надо еще ее вывести. Помогите организовать цикл, который выведет эту диагональ.