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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.10.2010, 20:29   #1
AvengerAndrew
Пользователь
 
Регистрация: 26.09.2010
Сообщений: 21
По умолчанию задание через массив по С++...

Заполнить прямоугольную матрицу натуральными числами по диагонале...
AvengerAndrew вне форума Ответить с цитированием
Старый 17.10.2010, 20:31   #2
AvengerAndrew
Пользователь
 
Регистрация: 26.09.2010
Сообщений: 21
По умолчанию

я слабо представляю как заполнить матрицу по горизонтале или вертикале... ну а по диагонале...
AvengerAndrew вне форума Ответить с цитированием
Старый 17.10.2010, 20:34   #3
DM_bite
Участник клуба
 
Аватар для DM_bite
 
Регистрация: 29.07.2008
Сообщений: 1,091
По умолчанию

А что там заполнять? (i==j), где i-индекс строки, j-индекс столбца.
Очень сложная задача...
Кто бы ты ни был - не думай о себе слишком (с)

Последний раз редактировалось DM_bite; 17.10.2010 в 20:36.
DM_bite вне форума Ответить с цитированием
Старый 17.10.2010, 21:15   #4
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

DM_bite обратите внимание, что матрица по условию прямоугольная. насколько мне известно, диагональ есть только у квадратных матриц.
AvengerAndrew вам сюда: http://www.google.com/search?hl=ru&&...сскому&spell=1
rrrFer вне форума Ответить с цитированием
Старый 17.10.2010, 21:47   #5
DM_bite
Участник клуба
 
Аватар для DM_bite
 
Регистрация: 29.07.2008
Сообщений: 1,091
По умолчанию

Цитата:
Сообщение от rrrFer Посмотреть сообщение
DM_bite обратите внимание, что матрица по условию прямоугольная. насколько мне известно, диагональ есть только у квадратных матриц.
Это по-умолчанию.
Кто бы ты ни был - не думай о себе слишком (с)
DM_bite вне форума Ответить с цитированием
Старый 17.10.2010, 21:59   #6
kaljan775
:D
Форумчанин
 
Аватар для kaljan775
 
Регистрация: 26.09.2010
Сообщений: 570
По умолчанию

Автор, вы правильно переписали условие задачи?

ну. если он будет использовать i==j выйдет наискосок
10000
01000
00100
00010
00001
если он хочет заполнить прямоугольник,
тут надо спросить, что за прямоугольник :D потому что может выйти так
111000000000
000111000000
000000111000
000000000111
что, в принципе, наискосок :D
Пишу ПО, создаю сайты, делаю курсовые работы, за деньги
C#, .NET, MS SQL, AngularJS, HTML, jQuery
kaljan775 вне форума Ответить с цитированием
Старый 23.10.2010, 09:17   #7
AvengerAndrew
Пользователь
 
Регистрация: 26.09.2010
Сообщений: 21
По умолчанию

должно заполнить так:
1 2 4 7
3 5 8 10
6 9 11 12
AvengerAndrew вне форума Ответить с цитированием
Старый 23.10.2010, 10:08   #8
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

Цитата:
я слабо представляю как заполнить матрицу по горизонтале или вертикале... ну а по диагонале...
Цитата:
должно заполнить так:
1 2 4 7
3 5 8 10
6 9 11 12
Представил же, опиши что конкретно не получается.
rrrFer вне форума Ответить с цитированием
Старый 23.10.2010, 13:12   #9
Xeonc
Форумчанин
 
Регистрация: 20.10.2010
Сообщений: 143
По умолчанию

Результат 3-ех часового выдумывания алгоритма
Код:
#include "stdafx.h"
#include <stdio.h>
#include <iostream>
#include <stdio.h>
#include <conio.h>

using namespace std;
int main () 
{
	const int e = 3;
	const int f = 4;
	int arr[e][f];

	//Алгоритм автоматической записи
	//Переменная а - при каждой записи в массив будет увеличиваться на +1
	int a = 1;
	//Две переменные отвечающие за размерности матрицы. i - строки, j - столбцы
	int i = 0;
	int j = 0;
	//Специальная переменная счетчик-детектор, для определения какой элемент массива записывать в каждой новой итеррации цикла
	int d = 0;
	//Бесконечный цикл автоматической записи, выход из цикла предусмотрен ниже
	for(;;)
	{
		//Проверяем, не выходит ли количество столбцов за рамки ограничения, т.к. у нас стобцов f, а начинаются с нуля. Соответственно счетчик должен быть не больше трех
		if(d>f-1)
		{
			//Проверка - не выходим ли мы за границы массива, если вышли - переходим на следующую диагональ
			if((i+1>e-1)||(j-1<0))
			{
				//Столбцов больше f быть не может, т.е. максимальный порядковый номер - f-1, соответственно строку надо поднять на +1, для заполнения верхних диагоналей
				j = f-1;
				i = d-j;
				arr[i][j] = a;
				a++;
				d++;
				//Механизм выхода из массива, в случае если понадобится изменить размер массива, механизм тоже надо перенастроить
				if((i==e-1)&&(j==f-1))
					break;
			}
			//Заполняем матрицу по диагонали, для этого вычитаем порядковые номер столбца и плюсуем строку
			else
			{
				i++;
				j--;
				arr[i][j] = a;
				a++;
			}
		}
		//Тоже проверка на границы массива, пока еще порядковый номер строки может быть равен нулю
		else if((i+1>e-1)||(j-1<0))
		{
			i = 0;
			j = d;
			arr[i][j] = a;
			a++;
			d++;					
		}
		//Заполняем матрицу по диагонали, для этого вычитаем порядковые номер столбца и плюсуем строку
		else
		{
			i++;
			j--;
			arr[i][j] = a;
			a++;			

		}

	}

	//Выводим матрицу на экран
	for(int x = 0; x<e;x++)
	{
		for(int y = 0; y<f;y++)
			cout<<arr[x][y]<<" ";
		cout<<endl;
	}
	_getch();
}

Закоментировал как мог, чтобы принцип работы был максимально понятен. Если останутся вопросы - обращайся в icq. Бтв, если кто-то из гуру напишет другой вариант - было бы очень интересно посмотреть.

ninjaedit: Переделал слегка, чтобы можно было конфигурировать под разную длину, через константы e и f.

Кому алгоритм понравился > поднимите репутацию. Спасиба:>
451 -870-7(три)6. Выполняю работы на заказ, гарант честности - ВМ аттестат с 60+ БЛ без претензий

Последний раз редактировалось Xeonc; 23.10.2010 в 13:33.
Xeonc вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
создание тэста через массив mc_al Помощь студентам 0 18.06.2010 09:56
Динамически не через массив Alex Cones Общие вопросы Delphi 2 17.05.2009 17:25
Откоректируйте задание на двумерный массив Toxass Паскаль, Turbo Pascal, PascalABC.NET 20 16.12.2008 18:56