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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.05.2011, 14:36   #1
AlexEv
 
Регистрация: 12.05.2011
Сообщений: 4
Смущение С++ Массивы статичные и динамические

Помогите с задачами.

1. Дано множество A из N точек с координатами (x,y). Найти пары различных точек этого множества с минимальным и максимальным расстоянием между ними и сами эти расстояния. (массивы статичные, координты точек вводятся пользователем).

2. Матрицу М(m, n) заполнить натуральными числами от 1 до m*n по спирали, начинающейся в левом верхнем углу и закрученной почасовой стрелке. (диамические массивы).

Заранее спасибо! Когдато делал что-то подобное, но в Паскале. Сейчас с работой полная каша в голове...
AlexEv вне форума Ответить с цитированием
Старый 12.05.2011, 17:33   #2
Mandrivnyk
Software Developer
Участник клуба
 
Аватар для Mandrivnyk
 
Регистрация: 01.03.2011
Сообщений: 1,098
По умолчанию

Вторая задача тут уже была.
Вот
Болтовня ничего не стоит. Покажите мне код. (c) Linus Torvalds
Помог ответ? -- Поставьте отзыв.
Выражения особой благодарности в рублевом эквиваленте отправлять сюда --> R269634919062
Mandrivnyk вне форума Ответить с цитированием
Старый 12.05.2011, 18:14   #3
Rififi
Старожил
 
Регистрация: 19.08.2009
Сообщений: 2,119
По умолчанию

AlexEv

1. Дано множество A из N точек с координатами (x,y). Найти пары различных точек этого множества с минимальным и максимальным расстоянием между ними и сами эти расстояния. (массивы статичные, координты точек вводятся пользователем).

Геометрия, школьный курс: набираешь в гоогле запрос "расстояние между точками", изучаешь ссылки, получаешь знание, как найти расстояние между двумя точками. Вооружившись полученным знанием вычисляешь множество расстояний всех со всеми. Из этого множества выбираешь минимум и максимум. Всё.
Rififi вне форума Ответить с цитированием
Старый 13.05.2011, 20:14   #4
AlexEv
 
Регистрация: 12.05.2011
Сообщений: 4
По умолчанию

Спасибо огромное Mandrivnyk, были проблемы с компилятором, но быстро решились (борланд с++), но есть другая проблема при размере матрицы m=n и если при этом m нечетное, в центре матрицы последний элемент массива либо равен 0, либо астронамическому числу.

Последний раз редактировалось AlexEv; 13.05.2011 в 20:17. Причина: Ошибка
AlexEv вне форума Ответить с цитированием
Старый 13.05.2011, 20:20   #5
AlexEv
 
Регистрация: 12.05.2011
Сообщений: 4
По умолчанию

Цитата:
Сообщение от Rififi Посмотреть сообщение
AlexEv

Геометрия, школьный курс: набираешь в гоогле запрос "расстояние между точками", изучаешь ссылки, получаешь знание, как найти расстояние между двумя точками. Вооружившись полученным знанием вычисляешь множество расстояний всех со всеми. Из этого множества выбираешь минимум и максимум. Всё.
Спасибо. Как определить расстояние между точками я и так знаю... Но "Болтовня ничего не стоит. Покажите мне код.", не в бровь, а в глаз.

Последний раз редактировалось AlexEv; 13.05.2011 в 20:23. Причина: ошибка
AlexEv вне форума Ответить с цитированием
Старый 14.05.2011, 00:08   #6
Rififi
Старожил
 
Регистрация: 19.08.2009
Сообщений: 2,119
По умолчанию

Цитата:
Сообщение от AlexEv Посмотреть сообщение
Спасибо. Как определить расстояние между точками я и так знаю... Но "Болтовня ничего не стоит. Покажите мне код.", не в бровь, а в глаз.
ну раз знаешь, всё остальное для тебя будет не проблема.
эта программа выводит расстояния между точками. тебе осталось только найти минимальное и максимальное.

Код:
#include <algorithm>
#include <functional>

#include <iostream>
#include <iomanip>

#include <math.h>

template <typename luLz, typename lulZ>
bool lulz(luLz lUlz, luLz LUlz, luLz LuLz, luLz LulZ, lulZ luulz)
{
	bool LUlZ = false;
	luLz Luulz;

	luLz LUulz = LUlz;
	--LUulz;

	luLz LuUlz = LulZ;
	--LuUlz;

	for (luLz LuuLz = LuUlz; LuuLz != LuLz || LuuLz == LuLz; --LuuLz, --LUulz)
	{
		if (luulz(*LuuLz, *LUulz))
		{
			if (LuuLz != LuLz)
			{
				LUlZ = true;
				Luulz = --LuuLz;
				++LuuLz;
				continue;
			}
			else
				return false;      
		}
		else
		{
			if (LUlZ)
			{
				luLz LuulZ;
				for (luLz luLZ = lUlz; luLZ != LUlz; ++luLZ)
				{
					if (luulz(*Luulz, *luLZ))
					{
						LuulZ = luLZ;
						break;
					}
				}

				luLz luulZ = ++LuulZ;    
				for (luLz luUlz = Luulz; luUlz != LulZ; ++luUlz, ++luulZ)
					*luUlz = *luulZ;

				return true;
			}

			for (luLz luuLz = lUlz; luuLz != LUlz; ++luuLz)
			{
				if (luulz(*LuuLz, *luuLz))
				{
					*LuuLz = *++luuLz;
					return true;           
				}
			}
		}
	}  

	return true;
}

typedef std::pair<int, int> P;

double d(P p1, P p2)
{
   return 0.f; // поскольку формулу ты знаешь, напишешь сам
}

bool eq(P p1, P p2)
{
	return (p1.first == p2.first) && (p1.second == p2.second);
}

int main()
{
	P a1[] = { std::make_pair(1,2), std::make_pair(1,3), std::make_pair(1,4), std::make_pair(2,5) };
	P a2[] = { std::make_pair(1,2), std::make_pair(1,3) };

	do
	{
		std::cout << "Distance between (" << a2[0].first << "," << a2[0].second <<
			") and (" << a2[1].first << "," << a2[1].second << ") is " <<
			std::setprecision(4) << d(a2[0], a2[1]) << std::endl;
	} while (lulz(a1, a1+_countof(a1), a2, a2+_countof(a2), &eq));

	return 0;
}
для приведенных данных пример работы:

Distance between (1,2) and (1,3) is 1
Distance between (1,2) and (1,4) is 2
Distance between (1,2) and (2,5) is 3.162
Distance between (1,3) and (1,4) is 1
Distance between (1,3) and (2,5) is 2.236
Distance between (1,4) and (2,5) is 1.414
Rififi вне форума Ответить с цитированием
Старый 15.05.2011, 07:11   #7
AlexEv
 
Регистрация: 12.05.2011
Сообщений: 4
По умолчанию

Ой-ёй, я ж новичек... Куда мне такие ужасы?
Сам решил вот так:

#include<iostream.h>
#include<stdlib.h>
#include<math.h>
#include<conio.h>
void main()
{
const N=4, V=18;//V=N*(N-1)/2*3 для работы со смешанным массивом C (опирался на теорию графов при выборе комбинаций)
int i,j,t;
double R, max,min, C[V], A[N][2];

for (i=0; i<N; i++)
{for (j=0; j<2; j++)
{cout << "\n vvedite koordinatu " << j <<" tochki " << i << " "; cin >> A[i][j];
}}

for (i=0; i<N; i++)
{cout << "\n Tochka "<< i <<" (";
for (j=0; j<2; j++)
{cout << A[i][j]<< " ";
} cout << ")";}

t=0;
for(j=0;j<N;j++)
{ for (i=j;i<N-1;i++)
{ R=sqrt(pow((A[j][0]-A[i+1][0]),2) + pow((A[j][1]-A[i+1][1]),2));
cout <<"\n Rasstoianie mejdu toshkami " <<j<< " i " << i+1 <<" = "<< R;
C[t]=R;
C[t+1]=j;
C[t+2]=i+1;
t=t+3; }}
cout <<"\n ";

max=C[0];
min=C[0];

for (i=0; i<V;i=i+3)
{if (max<C[i]) max = C[i];
if (min>C[i]) min = C[i];}
cout << "\n ";
for (i=0;i<V;i=i+3)
if (C[i]==max) cout << "\n Maximum v " << C[i] << " Mejdu tochkami " << C[i+1] << " i " << C[i+2];

for (i=0;i<V;i=i+3)
if (C[i]==min) cout << "\n Minimum v " << C[i] << " Mejdu tochkami " << C[i+1] << " i " << C[i+2];

getch();
}

Спасибо всем за отзывы. Пойду сдаваться...
AlexEv вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
динамические массивы Dimarik Visual C++ 10 27.05.2011 12:25
Динамические массивы в с++ Metallica Помощь студентам 0 23.11.2010 18:32
Динамические массивы и массивы варианты N@stya Помощь студентам 0 11.06.2010 21:09
Два класса должны использовать не статичные методы друг друга. Adis_ Общие вопросы C/C++ 4 21.05.2010 18:19