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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.10.2009, 15:43   #1
Smile.id
Пользователь
 
Регистрация: 19.01.2009
Сообщений: 17
По умолчанию Масив в С++

Есть квадратный масив, размерностью н (н вводится с клавиатуры). Нужно заполнить нижнюю четверть (между основной и второстепенной диагоналями, включая диагонали) натуральными числами по порядку, а все остальное нулями. Вопрос: подскажите саму зависимость, на которой можно построить циклы на заполнение натуральными числами. Или какойто другой способ....
Smile.id вне форума Ответить с цитированием
Старый 13.10.2009, 15:59   #2
MAKEDON
The First Person!
Форумчанин
 
Аватар для MAKEDON
 
Регистрация: 07.08.2007
Сообщений: 228
По умолчанию

ну, есть вариант заполнять треугольником снизу по строчкам. вот допустим сначала заполняем начиная со второго элемента, заканчивая предпоследним..будет как то так выглидить..

n=5

1 шаг
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 1 1 1 0

шаг 2

0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 1 0 0
0 1 1 1 0

с каждым шагом отступ от обоих сторон увеличивать на 1.
Программа обычно делает то что вы ей сказали сделать, а не то что бы вы хотели, чтобы она сделала.
MAKEDON вне форума Ответить с цитированием
Старый 13.10.2009, 16:07   #3
Smile.id
Пользователь
 
Регистрация: 19.01.2009
Сообщений: 17
По умолчанию

Нееее, вся фишка в том, что масив надо заполнить примерно таки образом:
0 0 0 0 0
0 0 0 0 0
0 0 1 0 0
0 2 3 4 0
5 6 7 8 9

Сейчас я могу сделать примерно так:
0 0 0 0 0 0 0
0 0 0 0 0 0 0
0 0 0 0 0 0 0
0 0 0 1 0 0 0
0 0 2 3 4 0 0
0 5 0 7 0 9 0
10 0 0 13 0 0 16

Тоисть заполнить две диагонали и столбик под 1. Может ето и не самый рациональный вариант, но пока я смог только до такого додуматся =)
Smile.id вне форума Ответить с цитированием
Старый 13.10.2009, 19:14   #4
Скарам
Дружите с Linq ;)
Форумчанин
 
Аватар для Скарам
 
Регистрация: 15.10.2008
Сообщений: 822
По умолчанию

задача решается и правильно заполняется,если n нечетно..этого нет в условии?..
Тогда задача решается довольно несложно.Делим на 2 n,вернув целую часть приравниваем к...
ну и потом делаем что-то вроде этого:
Код:
int i=1;int s4=0;
for(int j=k;j<n;j++)
{
for (int h=k-s4;h<k+s4;h++)
{   mas[j][h]=i;
     i++;
}
s4=s4+2;
}
Вот как-то так,писал тут,но принцип по-моему такой..
Ах,да,при создании массива обнули его,тогда нулями не надо заполнять будет.Массив создавать примерно так...если память не подводит:
Код:
int **mas = new  int*[n];
	for(int i=0;i<n;i++) mas[i]=new int[n];
Не давай организму поблажки, каждый день тренируй его в шашки..

Последний раз редактировалось Скарам; 13.10.2009 в 20:50. Причина: Индексы поправил
Скарам вне форума Ответить с цитированием
Старый 14.10.2009, 02:22   #5
Smile.id
Пользователь
 
Регистрация: 19.01.2009
Сообщений: 17
По умолчанию

Завтра выложу свой не до конца написаный код, может по нему легче будет разобратся.....Но масив можно считать сразу забитым нулями, а н я вычисляю по формуле н=2*а+1 (собственно а вводится с клавиатуры).
Smile.id вне форума Ответить с цитированием
Старый 14.10.2009, 08:47   #6
Скарам
Дружите с Linq ;)
Форумчанин
 
Аватар для Скарам
 
Регистрация: 15.10.2008
Сообщений: 822
По умолчанию

Цитата:
Завтра выложу свой не до конца написаный код, может по нему легче будет разобратся....
Да не стоит,вот 5 мин посидел,код,написанный мной немного поправил и всё заработало...
Код:
#include <iostream>
using namespace std;
//---------------------------------------------------------------------------
//Есть квадратный масив, размерностью н (н вводится с клавиатуры).
//Нужно заполнить нижнюю четверть (между основной и второстепенной диагоналями, включая диагонали) натуральными числами по порядку,
// а все остальное нулями. Вопрос: подскажите саму зависимость, на которой можно построить циклы
//на заполнение натуральными числами. Или какойто другой способ....  Если N НЕЧЕТНО.
#pragma argsused
int main(int argc, char* argv[])
{
	int n;
	cout<<"Vvedite N ";
	cin>>n;
	if(n%2==0)
	{
		n++;
		cout<<"Chislo preobrazovano v ne4etnoe\n";
	}
	int **mas = new  int*[n];
	for(int i=0;i<n;i++)mas[i]=new int[n];
	int k=(n-1)/2;//выясняем координаты точки пересечения двух дигоналей
	int i=1;int s4=0;
	for(int j=k;j<n;j++)
		{
			for (int h=k-s4;h<k+s4+1;h++)
				{
					  mas[j][h]=i;
					  i++;
				}
				s4=s4+1;
		}
	for (int j=0; j<n; j++)
	{
		for(int h=0;h<n;h++)
		{
		   cout<<mas[j][h]<<" ";
		}
		cout<<'\n';
	}
	cin>>" ";
	return 0;
}
Вот собственно и всё...поскольку вчера я писал код прямо в сообщении не уследил за индексом.
Не давай организму поблажки, каждый день тренируй его в шашки..
Скарам вне форума Ответить с цитированием
Старый 14.10.2009, 12:03   #7
Smile.id
Пользователь
 
Регистрация: 19.01.2009
Сообщений: 17
По умолчанию

Динамические масивы нельзя использовать =(
Smile.id вне форума Ответить с цитированием
Старый 14.10.2009, 13:03   #8
Скарам
Дружите с Linq ;)
Форумчанин
 
Аватар для Скарам
 
Регистрация: 15.10.2008
Сообщений: 822
По умолчанию

ну думаю,что объявление массива Вы сами в состоянии переделать,алгоритмы от этого не зависят.Сделайте массив побольше и всё,заполнение и вывод будут частичными,т.е. всё завязано на n ,поэтом объявление массива может быть и таким int mas[20][20];,удалите объявление динамического массива и всё..
Не давай организму поблажки, каждый день тренируй его в шашки..
Скарам вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
масив в WHERE memka PHP 4 03.04.2009 07:36
масив HENRY23 Общие вопросы Delphi 0 17.03.2009 22:30
масив на 1000 ел. ГРИГОРИЙ-кореш Помощь студентам 1 05.03.2009 19:15
Масив rizii Общие вопросы C/C++ 2 09.01.2009 13:30
маcсив nikleb Паскаль, Turbo Pascal, PascalABC.NET 3 19.04.2007 23:23