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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.07.2014, 16:29   #1
monsterkill
 
Регистрация: 30.07.2014
Сообщений: 4
По умолчанию Составить вес (С++ или др.) Помощь в определении общего способа решения

Добрый день. Есть задачи для экзамена по профилю "Математическое и программное обеспечение вычислительных машин, комплексов и компьютерных сетей".
Помогите определить, какого рода эти задачи, какими способами решаются.

Не знаю, с какой стороны подступиться. Каюсь, математика безвозвратно забыта. Вероятно предполагается написать ответ в виде кода, решающего эту задачу при заданных переменных. Код осилю сам, дайте хотя бы направление, куда идти)). (но если кто-то добрый напишет готовое решение, не откажусь).

Текст задач:
Цитата:
2. Составить вес. Даны натуральные числа а1, ... , а10. Предположим, что имеются 10
гирь ве сом а1, ... , а10. Обозначим через ck - число способов, которыми можно составить вес k, т.е. ck - это число решений уравнения
a1x1 + ... + a10x10 = k ,
где xi может принимать значение 0 или 1 (i = 1, ... , 10).
Получить c0, ... , c10.
Цитата:
3. Выплатить сдачу. Даны натуральные числа а1, ... , а6. Предположим, что имеются 6 видов монет достоинством а1, ..., а6. Обозначим через bk число способов, которыми можно выплатить сумму k, т. е. bk - это число решений уравнения
a1x1 + ... + a10x10 = k ,
где xi может принимать целые неотрицательные значения.
Получить b1, ... , b20.
Цитата:
4. Даны действительные числа x1, ... , x15, y1, ... , y15, r1, ... , r15. Выяснить, есть ли точка, принадлежащая всем кругам c1, ... , c15, где ci имеет центр с координатами xi, yi и радиус ri ( i= 1, ... , 15).
.. и подобные.
Спасибо.
monsterkill вне форума Ответить с цитированием
Старый 30.07.2014, 17:01   #2
challengerr
Участник клуба
 
Аватар для challengerr
 
Регистрация: 30.07.2008
Сообщений: 1,601
По умолчанию

1. псевдокод
Код:
a[10]; n=0;
main(k)
{
for(xo=0;x0<2; x0++)
f(k,0+a0*x0,0);
}
f(k,s,i)
{
if (i==10) return;
for(xi=0;xi<2;xi++){
if (s+ai*xi == k) n++;
f(k, s+xi*ai,++i);}
}
Пусть задан круг с координатами центра (x1, y1) и радиусом r1 и круг с координатами центра (x2, y2) и радиусом r2. Расстояние между центрами вычисляется в декартовой прямоугольной системе координат как квадратный корень из выражения [ (x2-x1)^2 + (y2-y1)^2 ]. Если это расстояние равно r1 +r2, то имеется одна точка пересечения кругов. Если это расстояние больше r1+r2, то значит круги не пересекаются, а значит, если есть хоть один из наборов двух таких кругов, то значит точки, принадлежащей всем кругам нет.
Описание круга делается в виде структуры:
Код:
strict circle
{
float x;
float y;
float r;
};
Описание массива из 15 кругов делается объявлением
Код:
strict circle circle_set[15];
Рассматриваем все пары составленные из двух кругов
Код:
for(i=0;i<15;i++)
for(j=i+1;j<15;j++)
{
R=sqrt(pow((circle_set[j].x - circle_set[i].x),2) + pow((circle_set[j].y - circle_set[i].y), 2));
if (R < (circle_set[j].r + circle_set[i].r));
else
exit(); //нашлась точка, которая не принадлежит одной из пар кругов
}
"SPACE.THE FINAL FRONTIER.This's a voyage of starship Enterprise. It's 5-year mission to explore strange new worlds,to seek out new life and civilizations,to boldly go where no man has gone before"

Последний раз редактировалось Stilet; 06.08.2014 в 17:39.
challengerr вне форума Ответить с цитированием
Старый 06.08.2014, 12:49   #3
monsterkill
 
Регистрация: 30.07.2014
Сообщений: 4
По умолчанию

Цитата:
Сообщение от challengerr Посмотреть сообщение
1. псевдокод
Код:
a[10]; n=0;
main(k)
{
for(xo=0;x0<2; x0++)
f(k,0+a0*x0,0);
}
f(k,s,i)
{
if (i==10) return;
for(xi=0;xi<2;xi++){
if (s+ai*xi == k) n++;
f(k, s+xi*ai,++i);}
}
Спасибо за лаконичный код.
Верно ли я понял, что (1.) сначала мы заходим в глубь рекурсии, складывая ai*xi при xi =0. Двигаясь вверх, мы обходим случаи xi=1.
2. Что вы имели ввиду под "return"? Это аварийный выход из цикла, или здесь следует описать движение на выходе из рекурсии, например
Код:
if (i==10) {--i; break;} //или что-то вроде
?
3. вместо if (i==10) должно быть if (i==9)? т.к а0*x0 мы уже прошли, верно?
4. n - это количество решений?
5.
Цитата:
Сообщение от monsterkill Посмотреть сообщение
Получить c0, ... , c10.
Требуется получить набор xi для каждого решения?

Цитата:
Сообщение от challengerr Посмотреть сообщение
Пусть задан круг...
А для такого случая как быть?


Последний раз редактировалось Stilet; 06.08.2014 в 17:41.
monsterkill вне форума Ответить с цитированием
Старый 06.08.2014, 15:09   #4
challengerr
Участник клуба
 
Аватар для challengerr
 
Регистрация: 30.07.2008
Сообщений: 1,601
По умолчанию

Цитата:
Сообщение от monsterkill Посмотреть сообщение
Спасибо за лаконичный код.
Верно ли я понял, что (1.) сначала мы заходим в глубь рекурсии, складывая ai*xi при xi =0. Двигаясь вверх, мы обходим случаи xi=1.
2. Что вы имели ввиду под "return"? Это аварийный выход из цикла, или здесь следует описать движение на выходе из рекурсии, например
Код:
if (i==10) {--i; break;} //или что-то вроде
?
3. вместо if (i==10) должно быть if (i==9)? т.к а0*x0 мы уже прошли, верно?
4. n - это количество решений?
5.

Требуется получить набор xi для каждого решения?
n это количество способов, которым можно составить вес. xi принимает значения {0,1} поэтому в цикле делается перебор значений от 0 до 1. Return при i равном 10 для остановки рекурсии, так как иначе будет срыв стека из-за ухода на бесконечность.

Цитата:
Сообщение от monsterkill Посмотреть сообщение
А для такого случая как быть?

Если обозначить круги за a, b, c, то приведенный код подобный случай отрабатывает правильно, так как на рассмотрении круга a и b r дает равенство, поэтому происходит выход.
"SPACE.THE FINAL FRONTIER.This's a voyage of starship Enterprise. It's 5-year mission to explore strange new worlds,to seek out new life and civilizations,to boldly go where no man has gone before"

Последний раз редактировалось Stilet; 06.08.2014 в 17:43.
challengerr вне форума Ответить с цитированием
Старый 06.08.2014, 15:51   #5
monsterkill
 
Регистрация: 30.07.2014
Сообщений: 4
По умолчанию

Цитата:
Сообщение от challengerr Посмотреть сообщение
Если обозначить круги за a, b, c, то приведенный код подобный случай отрабатывает правильно, так как на рассмотрении круга a и b r дает равенство, поэтому происходит выход.
Верно. Неудачная картинка. Вот:

Цитата:
Сообщение от challengerr Посмотреть сообщение
Return при i равном 10 для остановки рекурсии, так как иначе будет срыв стека из-за ухода на бесконечность.
Простите, не пойму, когда же мы переходим к xi=1.
Получается, вызывая f в цикле for, мы увеличиваем i, пока i !=10.
xi так и остаётся = 0 для каждого ai. Или я не совсем понимаю работу Return?

Последний раз редактировалось Stilet; 06.08.2014 в 17:44.
monsterkill вне форума Ответить с цитированием
Старый 06.08.2014, 16:43   #6
challengerr
Участник клуба
 
Аватар для challengerr
 
Регистрация: 30.07.2008
Сообщений: 1,601
По умолчанию

Цитата:
Сообщение от monsterkill Посмотреть сообщение
Простите, не пойму, когда же мы переходим к xi=1.
Получается, вызывая f в цикле for, мы увеличиваем i, пока i !=10.
xi так и остаётся = 0 для каждого ai. Или я не совсем понимаю работу Return?
При возврате по рекурсии xi становится 1.

Цитата:
Сообщение от monsterkill Посмотреть сообщение
Верно. Неудачная картинка. Вот:
Значит мой алгоритм для решения является неправильным.
"SPACE.THE FINAL FRONTIER.This's a voyage of starship Enterprise. It's 5-year mission to explore strange new worlds,to seek out new life and civilizations,to boldly go where no man has gone before"

Последний раз редактировалось Stilet; 06.08.2014 в 17:46.
challengerr вне форума Ответить с цитированием
Старый 10.08.2014, 12:21   #7
challengerr
Участник клуба
 
Аватар для challengerr
 
Регистрация: 30.07.2008
Сообщений: 1,601
По умолчанию

В 3 задаче нужно тогда проверять области пересечения окружностей на пересечение полным попарным перебором. Область пересечения находится решением системы уравнений. Возьмите учебник по аналитической геометрии, например Ильина, Позняка.
"SPACE.THE FINAL FRONTIER.This's a voyage of starship Enterprise. It's 5-year mission to explore strange new worlds,to seek out new life and civilizations,to boldly go where no man has gone before"
challengerr вне форума Ответить с цитированием
Старый 11.08.2014, 16:37   #8
monsterkill
 
Регистрация: 30.07.2014
Сообщений: 4
По умолчанию

Пришло такое решение.
После того, как мы определили, что круги 1 и 2, пересекаются,
1) находим точки пересечения А и В.
2) Для любого круга Z, который пересекается с 1 и 2, необходимо проверить пересечение с кругами 3 и 4 (центры А и В , радиусы = AB).
Если это условие выполняется, значит этот круг имеет общие точки с областью пересечения кругов 1 и 2
3) Идём дальше, теперь применяем пункты (1) и (2) для пар 1 и Z, 2 и Z, 1 и 2 и следующего круга.
4) и т.д



Попробую реализовать в коде.
monsterkill вне форума Ответить с цитированием
Старый 11.08.2014, 17:05   #9
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Дык
Код:
t = точки пересечения(0, 1);
for (int i = 1; i < n; i++) 
  for (int j = i+1; j < n; j++) 
{ temp = точки пересечения(i, j); if (temp.first != t.first && temp.second != b.first) return false;
return true;
Осталась написать точки пересечения и радоваться, не?
Poma][a вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
составить программу для нахождения наибольшего общего и наименьшего общего кратного двух натуральных чисел НОК(A,B)=A*B/НОД(A,B) sisaw Помощь студентам 0 06.05.2014 20:36
Составить программы решения задач Катя369919407 Паскаль, Turbo Pascal, PascalABC.NET 13 20.01.2012 01:05
Используя процедуры общего назначения, составить программы для решения задач с заданным вариантом условия Васильева Зинаида Помощь студентам 1 19.11.2010 02:39
Нужна помощь составить формулу или ВБА для дат KOSTIK1 Microsoft Office Excel 7 05.01.2010 11:19
нахождение наибольшего общего делителя и наименьшего общего кратного made in russia Помощь студентам 2 21.12.2008 23:36