Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 5.00
Hevzy86
0 / 0 / 0
Регистрация: 24.07.2016
Сообщений: 22
#1

Программа по резке труб - C++

24.07.2016, 18:44. Просмотров 1846. Ответов 35
Метки нет (Все метки)

Всем доброе время суток, помогите, пожалуйста, решить задачу (друг попросил написать программу,а сам осилить не могу). Парень работает в фирме, которая изготавливает двери для лифтов.
Задача: Есть трубы(заготовки)длину которых мы знаем(обычно 288 дюймов), есть ширина реза пилы, которую мы тоже знаем (обычно 0,18 дюйма).Ему порезать несколько таких заготовок,чтобы сделать тележку(количество и длины получаемых труб мы можем вводить каждый раз разные). Он вводит:
1. длину заготовки
2. ширину реза пилы
3. сколько труб и какой длины ему нужно получить
Конкретный пример:
1.Длина заготовки 288 дюймов
2. Ширина реза пилы 0,18 дюйма
3.Длина труб и их количество :
40 дюймов -3 шт
45 дюймов - 5 шт
42 дюйма - 6 шт
70 дюймов - 3 шт
52,5 дюйма - 2 шт
14,5 дюйма - 3 шт
Нужно,чтобы программа просчитала сколько нужно будет таких заготовок и оптимальную последовательность (в каком порядке нужно резать трубы,чтобы получить минимальный отход с каждой заготовки).
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.07.2016, 18:44
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Программа по резке труб (C++):

Выяснить, имеет ли место пересечение кусков труб - C++
Задача БОГ. Помогите, пожалуйста) У меня уйма вопросов. ------------------------------------ 5. Задача о пересечении труб. Для...

Как подготовить файл к плотерной резке - CorelDRAW
Друзья, подскажите как из этого файла сделать векторное изображение для плотерной резки (изготовление трафарета). Опишите алгоритм, чтоб я...

посоветуйте хороший урок по резке дизайна в фотошопе - HTML, CSS
Здравствуйте. посоветуйте хороший урок по резке дизайна в фотошопе. и желательно как нарисовать менюв фотошопе. для того что бы после...

Алгоритм генерации труб - Алгоритмы
Всем привет! Создаю грушку похожую на эти: http://online-igra.com.ua/Truboprovod-na-vremya_uoH6Lqv ...

Приоритет труб на мнемосхеме - SCADA
На мнемосхеме пересекаются трубы с нефтью, газом, водой. Какую трубу сделать ниже, какую выше? смотрел ГОСТ 14202-69 "Трубопроводы...

Телескопическая стрела из набора труб - Механика
Вопрос по изготовлению телескопа. Например из квадратных труб. Т.е. 100х100 вставляем в 110х110х5(4), 110х110х5(4) в 120х120х5(4) т .д. В...

35
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6967 / 3258 / 327
Регистрация: 04.12.2011
Сообщений: 9,020
Записей в блоге: 5
27.07.2016, 22:21 #16
Цитата Сообщение от _Ivana Посмотреть сообщение
по поводу оптимальности, раз уж мы о ней так печемся вот допустим остаток 40 единиц. Что оптимальнее - 10+10+10+10 или 19+7+7+7? Второй вариант, говорите?
Извини _Ivana, но не понял ни шиша.
Остаток это что?
Сумма вроде 10+10+10+10 Это что?
Если остаток, это объём под порезку, а сумма, - вариант набора выходных деталей от порезки данного объёма, то все варианты равноценны, так как количество материала деталей, равно количеству исходного. И всё бы хорошо если бы знать, что всё сойдётся. Но жизнь как раз против и где-то в конце будет незаполненная заготовка. Вот почему (мне кажется, но я не уверен), выбор крупных деталей вначале, позволит наиболее плотно заполнять последние (особенно последнюю) заготовки. По аналогии того, что более мелкий материал имеет большую насыпную плотность (при равной физической). И это позволяет надеяться, что "выдавливание" отхода в последнюю заготовку будет статистически достаточно успешно. Доказать это не берусь.
0
_Ivana
3229 / 1857 / 157
Регистрация: 01.03.2013
Сообщений: 5,085
Записей в блоге: 5
27.07.2016, 22:28 #17
Цитата Сообщение от IGPIGP Посмотреть сообщение
Остаток это что?
Это остаток обрезков четырех труб после всех распилов. Например, нам требуется напилить в обще сумме 160 единиц и нужны 4 трубы по 50 единиц - будет 4 обрезка суммарной длиной 40 единиц (бредовое ограничение на ширину распила не учитываем - оно непринципиально). Вот, собственно, вся речь об оптимальности - как мы хотим распределить эти суммарные 40 единиц обрезков по 4 обрезкам, и какое их распределение считать предпочтительным и оптимальным.
0
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6967 / 3258 / 327
Регистрация: 04.12.2011
Сообщений: 9,020
Записей в блоге: 5
27.07.2016, 23:33 #18
Цитата Сообщение от _Ivana Посмотреть сообщение
как мы хотим распределить эти суммарные 40 единиц обрезков по 4 обрезкам
Всё должно быть в одном куске. В идеале.
Мне программка выдаёт практически полное заполнение всех заготовок кроме одной. Что и требуется.
0
vlisp
438 / 405 / 78
Регистрация: 10.08.2015
Сообщений: 1,361
Завершенные тесты: 1
28.07.2016, 00:11 #19
https://www.yandex.ua/yandsearch?rdr...t=1469653851.2
1
Hevzy86
0 / 0 / 0
Регистрация: 24.07.2016
Сообщений: 22
30.07.2016, 19:48  [ТС] #20
_Ivana,ну не то что халявщик, я не лентяй, просто знаний не хватает,как сделать(я пока только учусь,а программа нужна уже сейчас). Но все равно спасибо за помощь Я сегодня покопаюсь в алгоритме(постараюсь понять что к чему), разберу его и полноценно включусь в дискуссию

Добавлено через 5 минут
Доброе время суток, IGPIGP, программа работает(особенно мне понравилась скорость) я сегодня еще покопаюсь в коде (возможно будет пара вопросов по алгоритму) Спасибо за помощь

Добавлено через 8 минут
_Ivana, насчет вашего алгоритма: он интересен, но, как мне кажется,это метод простого перебора всех вариаций для каждой трубы, так? Если да,то он будет медленно работать(при добавлении каждой новой трубы количество вариантов,которых надо перебрать увеличивается в десятки раз, если я не ошибаюсь). Или там есть какая-то фишка?
0
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6967 / 3258 / 327
Регистрация: 04.12.2011
Сообщений: 9,020
Записей в блоге: 5
30.07.2016, 20:35 #21
Цитата Сообщение от Hevzy86 Посмотреть сообщение
IGPIGP, программа работает(особенно мне понравилась скорость)
То что у меня получилось работает медленно. И это моя вина так как не было времени . Но я не показывал ничего, так что это не мне спасибо.
0
_Ivana
3229 / 1857 / 157
Регистрация: 01.03.2013
Сообщений: 5,085
Записей в блоге: 5
30.07.2016, 21:25 #22
Цитата Сообщение от Hevzy86 Посмотреть сообщение
ну не то что халявщик, я не лентяй
Цитата Сообщение от Hevzy86 Посмотреть сообщение
как мне кажется,это метод простого перебора всех вариаций для каждой трубы, так? Если да,то он будет медленно работать(при добавлении каждой новой трубы количество вариантов,которых надо перебрать увеличивается в десятки раз
Предлагаю квест - вы пишете (с помощью форума, друзей или самостоятельно) ваш вариант программы, как будет готов - упоминаете меня в этой ветке, я набросаю реализацию своего алгоритма, и мы сравним результаты и скорость на разных объемах входных данных.
0
Hevzy86
0 / 0 / 0
Регистрация: 24.07.2016
Сообщений: 22
30.07.2016, 22:41  [ТС] #23
_Ivana, заманчивое предложение, если что-то путное сделаю, обязательно так и поступлю

Добавлено через 2 минуты
IGPIGP, да, точно Peoples, помог, за что ему спасибо, его вариант сейчас тестирую
0
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6967 / 3258 / 327
Регистрация: 04.12.2011
Сообщений: 9,020
Записей в блоге: 5
31.07.2016, 20:35 #24
Цитата Сообщение от _Ivana Посмотреть сообщение
Предлагаю квест
Можно ваще соревнование объявить. "Ударим трубопроводом, по бездорожью и разгильдяйству!"
Программу писать тяжело. Я посидел, погрыз карандаш и быстро нашёл вариант порезки тестового набора от ТС:
1-я заготовка:
3х14,5
2х40
1х45
2х52,5
_______273,5
2-я заготовка:
1х40
4х42
1х700
_______278,0
3-я заготовка:
3х45
2х700
_______275,0
4-я заготовка:
2х42
1х45
_______129,0 (остаток 159,0)

Кто лучше разрежет?
0
_Ivana
3229 / 1857 / 157
Регистрация: 01.03.2013
Сообщений: 5,085
Записей в блоге: 5
31.07.2016, 22:09 #25
Цитата Сообщение от IGPIGP Посмотреть сообщение
Кто лучше разрежет?
Ну вот так режет мой кот на коленке (ширину распила специально не учитывал, но ее учесть раз плюнуть - у вас она тоже явно не учтена, хотя может для этого вы и оставляли сопли обрезков с каждой трубы)
Код
1-я заготовка:
4 * 42
3 * 40
Итого 288, остаток 0

2-я заготовка:
1 * 70
2 * 52.5
2 * 42
2 * 14.5
Итого 288, остаток 0

3-я заготовка:
2 * 70
3 * 45
Итого 275, остаток 13

4-я заготовка:
2 * 45
1 * 14.5
Итого 104.5, остаток 183.5
Compilation time: 0.32 sec, absolute running time: 0.14 sec, cpu time: 0 sec
0
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6967 / 3258 / 327
Регистрация: 04.12.2011
Сообщений: 9,020
Записей в блоге: 5
31.07.2016, 22:16 #26
Цитата Сообщение от _Ivana Посмотреть сообщение
хотя может для этого вы и оставляли сопли обрезков с каждой трубы
Это не я. Это программа. Если бы я, действительно, стал карандаш кушать, то уже многовато бы съел.
Толщину реза надо учесть не потому, что кто-то там на мехножовке будет материться. Им там не впревой. А потому, что иначе не сравнить нам наши карандаши.
0
_Ivana
3229 / 1857 / 157
Регистрация: 01.03.2013
Сообщений: 5,085
Записей в блоге: 5
31.07.2016, 22:27 #27
Я думал вы и вправду карандашом на бумажке решили прикинуть Щас учту ширину распила, каминг сун

Обещанный каминг сун Что скажете?
Код
1-я заготовка:
2 * 70
2 * 52.5
1 * 42
Итого (с учетом ширины разреза) 287.9, остаток 0.1

2-я заготовка:
3 * 45
1 * 42
2 * 40
2 * 14.5
Итого (с учетом ширины разреза) 287.44, остаток 0.56

3-я заготовка:
1 * 70
2 * 45
3 * 42
Итого (с учетом ширины разреза) 287.08, остаток 0.92

4-я заготовка:
1 * 42
1 * 40
1 * 14.5
Итого (с учетом ширины разреза) 97.04, остаток 190.96
Compilation time: 0.32 sec, absolute running time: 0.13 sec, cpu time: 0 sec
1
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6967 / 3258 / 327
Регистрация: 04.12.2011
Сообщений: 9,020
Записей в блоге: 5
31.07.2016, 22:40 #28
Цитата Сообщение от _Ivana Посмотреть сообщение
Обещанный каминг сун
Это просто ал би бэк... Как минимум. Я бы даже сказал, - туби континьед. Методом обрезания.
Просто отличный результат.
0
_Ivana
3229 / 1857 / 157
Регистрация: 01.03.2013
Сообщений: 5,085
Записей в блоге: 5
31.07.2016, 22:47 #29
Мне тоже так кажется Мы еще не сравнивали время наших вариантов, но мне мой кот с болгаркой нравится

Хотя я при описании алгоритма предупреждал, что он не гарантирует минимум последнего обрезка - в этом можно убедиться, если сравнить приведенные выше результаты для нулевой ширины разреза: последний обрезок меньше, чем при ненулевой ширине разреза. Это связано с жадностью кота - очень он уж любит каждую очередную трубу наиболее оптимальным образом распиливать. Но зато весьма быстро это делает, можем закинуть побольше деталей . А эпизодическая неоптимальность имхо заказчика должна устроить.
0
Hevzy86
0 / 0 / 0
Регистрация: 24.07.2016
Сообщений: 22
31.07.2016, 23:07  [ТС] #30
ельный просмотр
Доброе время суток, товарищи, мой друг предложил вариант перебора всех вариантов последовательностей( в примере 13 деталей) работает оч. медленно(минут 20-25 у меня), и я сам не понимаю до конца логику его работы(не пойму как тут рекурсия работает)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
// _solution.cpp : Defines the entry point for the console application.
//
 
#include "stdafx.h"
#include <conio.h>
#include <windows.h>
#include "iostream"
#include <cstdlib>
const unsigned long long n = 13;
using namespace  std;
unsigned long long total = 0;
int used[n], a[n];
 
void generate( unsigned long long x) 
{
  int i;
  if(x == n)
  {     total++; 
    //cout<<"x= "<< x << endl;
  }
  else
    for(i = 0; i < n; ++i)
      if(!used[i]) {
       // cout<<"used[i]= "<< used[i] << endl;
        used[i] = 1;
        a[x] = i + 1;
        generate(x + 1);
        used[i] = 0;
      }
}
 
int main() {
 
  for(int i = 0; i < n; ++i)
    used[i] = 0;
 
  generate(0);
  
  printf("done - %llu", total);
  Beep (659.26,200);
          Beep (659.26,200);
          Sleep (200);
          Beep (659.26,200);
          Sleep (100);
          Beep (523.26,200);
          Beep (659.26,200);
          Sleep(200);
          Beep (783.98,200);
          Sleep(400);
          Beep (391.99,200);
  getch();
  
    return 1;
}
0
31.07.2016, 23:07
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.07.2016, 23:07
Привет! Вот еще темы с ответами:

Описать информацию о количестве обсадных труб скважины - Delphi
Имеется задание: Объявить в Delphi класс, позволяющий объекту хранить информацию о количестве обсадных труб скважины. Предусмотреть в...

Определить давление и температуру после соединения труб - Термодинамика и МКТ
Доброго дня. Я программист. Помогите, пожалуйста, решить 2 наверное несложные задачки из школьного курса. Формулы крутятся в голове, но...

Как реализовать угловой градиент для труб - Photoshop
Здравствуйте! в фотошопе разбираюсь довольно хорошо, но вот возникла проблема, которую я не в силах решить самостоятельно, сколько не...

Выборка данных из списка изделий из труб по длине трубы - C#
Привет, друзья, помогите с задачей пожалуйста У меня есть несколько моделей изделий из труб, каждая из которых имеет свою длину и труба ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
30
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru