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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.04.2012, 07:35   #1
Prin53
Пользователь
 
Регистрация: 21.02.2012
Сообщений: 59
По умолчанию Матрица.

Заменить нулевые элементы на сумму прилежащих ему элементов.
Код:
#include <iostream>
using namespace std;

int main()
{
	int A[10] [10],n,m;
	cout<<"Enter n and m\n";
	cin>>n>>m;
	for(int j=0; j<n; j++)
	{
		for(int i=0; i<n; i++)
		{
			A[i] [j]  = rand()%10-5;
			cout<<A[i][j]<<" ";
		}
		cout<<"\n";
	}
	 for (int i=0;i<n;i++)
    {
         for (int j=0;j<m;j++)
         {
             if (A[i][j] == 0)
             {
                if ((i > 1 ) && (i < n) && (1 < j) && (j < m))
                    A[i][j]=A[i+1][j]+A[i-1][j]+A[i][j+1]+A[i][j-1]+A[i-1][j-1]+A[i-1][j+1]+A[i+1][j-1]+A[i+1][j+1];
                else
                    if ((i == 1) &&  ((j > 1) && (j < m)))
                        A[i][j]=A[i][j-1]+A[i][j+1]+A[i+1][j-1]+A[i+1][j+1]+A[i+1][j];
                    else
                        if ((i == n) && ((1 < j) && (j < m)))
                            A[i][j]=A[i][j-1]+A[i][j+1]+A[i-1][j]+A[i-1][j-1]+A[i-1][j+1];
                        else
                            if ((j == 1) &&  ((i > 1 ) && (i < n)))
                                A[i][j]=A[i-1][j]+A[i+1][j]+A[i+1][j+1]+A[i-1][j+1]+A[i][j+1];
                            else
                                if ((j == m) && ((i > 1 ) && (i < n)))
                                    A[i][j]=A[i-1][j]+A[i+1][j]+A[i-1][j-1]+A[i][j-1]+A[i+1][j-1];
                                else
                                    if ((j == 1) && (i == 1))
                                        A[i][j]=A[i+1][j]+A[i][j+1]+A[i+1][j+1];
                                    else
                                        if ((j == 1) && (i == n))
                                            A[i][j]=A[i][j+1]+A[i-1][j]+A[i-1][j+1];
                                        else
                                            if ((j == m) && (i == 1))
                                                A[i][j]=A[i][j-1]+A[i+1][j]+A[i+1][j-1];
                                            else
                                                if ((j == m) && (i == n))
                                                    A[i][j]=A[i-1][j]+A[i][j-1]+A[i-1][j-1];
             }
         }
    }
cout<<"\n";
for(j=0; j<n; j++)
	{
		for(i=0; i<n; i++)
		{
			cout<<A[i][j]<<" ";
		}
		cout<<"\n";
	}
return 0;
}
Что в коде не так?
Prin53 вне форума Ответить с цитированием
Старый 11.04.2012, 10:37   #2
Granus
С++
Форумчанин
 
Аватар для Granus
 
Регистрация: 22.09.2008
Сообщений: 791
По умолчанию

1) Вот это условие неверное (i == n), индексация массива от 0 до n-1, и цикл у Вас так же выполняется, значения n просто никогда не будет
2) Вообще весь код внутри if (A[i][j] == 0) ужасный. Вот более-менее нормальный вариант:
Код:
if (i > 0) {A[i][j] += A[i - 1][j];}
if (i < n - 1) {A[i][j] += A[i + 1][j];}
if (j > 0) {A[i][j] += A[i][j - 1];}
if (j < n -1) {A[i][j] += A[i][j + 1];}
Форматируйте код, будьте людьми.
Granus вне форума Ответить с цитированием
Старый 11.04.2012, 13:13   #3
Prin53
Пользователь
 
Регистрация: 21.02.2012
Сообщений: 59
По умолчанию

спасибо, а если просто окружить матрицу нулями и считать по одной формуле?
Prin53 вне форума Ответить с цитированием
Старый 11.04.2012, 13:50   #4
Granus
С++
Форумчанин
 
Аватар для Granus
 
Регистрация: 22.09.2008
Сообщений: 791
По умолчанию

Цитата:
а если просто окружить матрицу нулями и считать по одной формуле?
В принципе никто не запрещает, но если матрица будет больших размеров, вы потратите много дополнительной ненужной памяти. И чем вас четыре условия не устраивают?)
Форматируйте код, будьте людьми.
Granus вне форума Ответить с цитированием
Старый 11.04.2012, 15:05   #5
Prin53
Пользователь
 
Регистрация: 21.02.2012
Сообщений: 59
По умолчанию

Сделал как вы сказали. Думаю, и правда, лучший вариант. Еще раз спасибо.
Prin53 вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Паскаль. Матрица NxN -> текстовый файл -> Матрица NxN - найти max по диагоналям -> типизированный файл Лунатик13 Помощь студентам 1 20.02.2012 15:54
матрица 92Edik Паскаль, Turbo Pascal, PascalABC.NET 0 26.05.2011 09:32
Непонятки с DirectX (матрица поворота, камера, матрица проекции) ROD Общие вопросы C/C++ 2 17.09.2010 17:00
С++ матрица Айдар Помощь студентам 2 15.04.2010 08:44
TurboPascal: граф, матрица смежности и матрица инцидентности. ulala Помощь студентам 0 02.12.2009 10:11