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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.12.2010, 18:36   #1
YourLastSong
Пользователь
 
Регистрация: 12.12.2010
Сообщений: 75
По умолчанию Задача на координаты

Здравствуйте, господа.

Никак не могу понять, с чего начать данную задачу.

Даны натуральные числа x1, y1, ..., xn, yn. Числа xi, yi рассматриваются как координаты i точки (i = 1, ..., n). Обозначим через rij расстояние от i точки до j. Получить на экране заданные точки и соединить отрезком i точку с j в том случае, если выполняется по крайней мере одно условие:

1). rij имеет наибольшее значение из ri1, ri2, ..., rin.

2). rji имеет наибольшее значение из rj1, rj2, ..., rjn.

Если кто-то выделит хотя бы некоторое время на что, чтобы понять, как именно её делать, буду очень признателен.

Заранее благодарю за возможные ответы.
YourLastSong вне форума Ответить с цитированием
Старый 20.12.2010, 19:34   #2
sinj
программирователь
Пользователь
 
Аватар для sinj
 
Регистрация: 15.02.2009
Сообщений: 72
По умолчанию

Добрый день!

Давайте попробуем рассмотреть Вашу задачу с теории графов:
1. Ограничить количество точек до дискретного значения, пусть даже и вводимого с клавиатуры.
2. Построить таблицу (массив) по (количеству строк)=(количеству столбцов)=(количеству точек). На пересечении например первой строки и первого столбца необходимо нанести расстояние от точки 1 до точки 1 (будет 0), на пересечении первой строки и второго столбца должно быть расстояние от первой до второй точки соответственно. Если кол-во точек вводится с клавиатуры, то массив будет динамическим. Таким образом в строке номер 1 будут прописаны расстояния до всех прочих точек из точки 1.
3. Так до конца и не понял условия задачи, но если суть задачи просто в построении отрезков, то необходимо построить аналогичный по размеру массив (удобно булевого типа) и в клетках, которые соответсвуют пересечению нужных строк и столбцов (точка из .. и точка в...) отмечать true, а прочие false.

Пример:
первый массив
_12345
10xxxx
2x0xxx
3xx0xx
4xxx0x
5xxxx0

второй массив
_12345
10xtxt
2x0xxx
3tx0xx
4xxx0x
5txxx0
smile

Последний раз редактировалось sinj; 20.12.2010 в 20:05.
sinj вне форума Ответить с цитированием
Старый 20.12.2010, 20:04   #3
YourLastSong
Пользователь
 
Регистрация: 12.12.2010
Сообщений: 75
По умолчанию

Спасибо. Можете привести пример на этой задаче? Просто мне по этому поводу много задач надо сделать. Если не сложно, очень прошу.
YourLastSong вне форума Ответить с цитированием
Старый 20.12.2010, 20:07   #4
sinj
программирователь
Пользователь
 
Аватар для sinj
 
Регистрация: 15.02.2009
Сообщений: 72
По умолчанию

Цитата:
Сообщение от YourLastSong Посмотреть сообщение
Спасибо. Можете привести пример на этой задаче? Просто мне по этому поводу много задач надо сделать. Если не сложно, очень прошу.
Псевдокодом напишу. Разберетесь?
smile
sinj вне форума Ответить с цитированием
Старый 20.12.2010, 20:09   #5
YourLastSong
Пользователь
 
Регистрация: 12.12.2010
Сообщений: 75
По умолчанию

Да, попробую.
YourLastSong вне форума Ответить с цитированием
Старый 20.12.2010, 23:24   #6
YourLastSong
Пользователь
 
Регистрация: 12.12.2010
Сообщений: 75
По умолчанию

Если у кого-нибудь есть возможность помочь, прошу, очень надо.
YourLastSong вне форума Ответить с цитированием
Старый 20.12.2010, 23:35   #7
sinj
программирователь
Пользователь
 
Аватар для sinj
 
Регистрация: 15.02.2009
Сообщений: 72
По умолчанию

не мучайся)) Держи на c++ с пояснениями.
Код:
#include "cstdio"

int main()
{
	int a_fi[5][5]={
	{0,1,3,5,6},
	{1,0,2,6,1},
	{3,2,0,7,2},
	{5,6,7,0,8},
	{6,1,2,8,0}};
	//массив будет 5х5 (значит всего 5 точек). автозаполнение пробуй сам написать;
	
	bool a_se[5][5]={false};
	//этот массив булевского типа. Найденные линии будем в него помещать;
	
	int var_fi=0;
	//переменная для поиска. Т.к. числа натуральные, то начальное значение = 0;
	
	int var_se=0,var_th=0;
	//переменные для запоминания точек, между которыми самое длинное расстояние;
	
	for (int i=0;i<5;i++)
	{
		for (int j=0;j<5;j++)
		{
			if (var_fi<a_fi[i][j]) {var_fi=a_fi[i][j];var_se=i;var_th=j;};
		};
	a_se[var_se][var_th]=true;
	a_se[var_th][var_se]=true;
	var_fi=0;
	};
	//эта функция делает горизонтальный поиск
	
	for (int j=0;j<5;j++)
	{
		for (int i=0;i<5;i++)
		{
			if (var_fi<a_fi[i][j]) {var_fi=a_fi[i][j];var_se=i;var_th=j;};
		};
	a_se[var_se][var_th]=true;
	a_se[var_th][var_se]=true;
	var_fi=0;
	};
	//эта функция делает вертикальный поиск;
	
	for (int i=0;i<5;i++)
	{
		for (int j=0;j<5;j++)
		{
			printf("%s ",(a_se[i][j])?"-":"x");
		};
	printf("\n");
	};
	//эта функция выводит на экран изображение;
	//где крестик, там нет линии. Где дефис-там линия;
	
	return 0;
}
smile
sinj вне форума Ответить с цитированием
Старый 20.12.2010, 23:59   #8
YourLastSong
Пользователь
 
Регистрация: 12.12.2010
Сообщений: 75
По умолчанию

Код:
#include "stdafx.h"
#include "cstdio"
#include <iostream>
#include <stdlib.h>
#include <malloc.h>

using namespace std;

void main()
{
	int *a_fi, n;
	
	bool a_se[5][5]={false};
	
	int var_fi=0;
	
	int var_se=0,var_th=0;

	cout << "n = ";
	cin >> n;

	a_fi = (int *) malloc (n * n * sizeof (int));

	for (int i=0;i<n;i++)
	{
		for (int j=0;j<n;j++)
		{
			a_se[i][j] = random (9);
		};
	};
	
	for (int i=0;i<n;i++)
	{
		for (int j=0;j<n;j++)
		{
			if (var_fi<a_fi[i][j]) {var_fi=a_fi[i][j];var_se=i;var_th=j;};
		};
	a_se[var_se][var_th]=true;
	a_se[var_th][var_se]=true;
	var_fi=0;
	};
	
	for (int j=0;j<n;j++)
	{
		for (int i=0;i<n;i++)
		{
			if (var_fi<a_fi[i][j]) {var_fi=a_fi[i][j];var_se=i;var_th=j;};
		};
	a_se[var_se][var_th]=true;
	a_se[var_th][var_se]=true;
	var_fi=0;
	};
	
	for (int i=0;i<n;i++)
	{
		for (int j=0;j<n;j++)
		{
			printf("%s ",(a_se[i][j])?"-":"x");
		};
	printf("\n");
	};
	
	system ("PAUSE");
}
Большое спасибо.

Попробовал сделать динамический массив.

Однако как только я сделал динамический массив, выдаётся сообщение "subscript requires array or pointer type", а в случае random выдаётся "identifier not found". Почему?
YourLastSong вне форума Ответить с цитированием
Старый 21.12.2010, 00:02   #9
sinj
программирователь
Пользователь
 
Аватар для sinj
 
Регистрация: 15.02.2009
Сообщений: 72
По умолчанию

Слушай, ну вот тебе заготовка программы. Массив динамический посмотри в интернете. Куча примеров. Просто сейчас уже времени нет объяснять. К тому же. если по учебе, то неплохо и самому разобраться , пригодится потом.
smile
sinj вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача на координаты. (Pascal/Delhpi) Wild_klas Помощь студентам 1 14.11.2010 16:20
Координаты A_Orlov Паскаль, Turbo Pascal, PascalABC.NET 0 09.06.2010 20:17
Координаты х у Onek Помощь студентам 4 17.05.2010 16:37
Координаты ОУ? Fainder Общие вопросы Delphi 9 15.10.2007 20:59
координаты Aram Общие вопросы C/C++ 5 08.06.2007 20:03