66 / 14 / 1
Регистрация: 16.12.2009
Сообщений: 253
1

Определить, какое количество рулонов каждого типа потребуется для оклейки комнаты

26.12.2011, 22:54. Показов 1254. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Нужно подправить задачку, вот условие:

В распоряжении ремонтной бригады имеются обои шириной q мм. в рулонах длинной по s и t метров.
Определить, какое количество рулонов каждого типа потребуется для оклейки комнаты размером a*b и высотой h, чтобы неизрасходованный остаток был минимальным? (расклеиваемые полосы вырезаются из целого куска).

Вот сам код:
PureBasic
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
55
56
57
58
59
60
61
62
63
64
65
66
CLS
PRINT "Задача о раскройке обоев для оклейки комнаты с заданными размерами."
10 PRINT "Введите длину комнаты,м :"; : INPUT a
IF a <= 0 THEN PRINT "Ошибка! Введено недопустимое значение!"
IF a <= 0 THEN GOTO 10
20 PRINT "Введите ширину комнаты,м :"; : INPUT b
IF b <= 0 THEN PRINT "Ошибка! Введено недопустимое значение!"
IF b <= 0 THEN GOTO 20
30 PRINT "Введите высоту комнаты,м :"; : INPUT h
IF h <= 0 THEN PRINT "Ошибка! Введено недопустимое значение!"
IF h <= 0 THEN GOTO 30
40 PRINT "Введите ширину обоев,мм :"; : INPUT q
IF q <= 0 THEN PRINT "Ошибка! Введено недопустимое значение!"
IF q <= 0 THEN GOTO 40
q = q / 1000' Перевод милиметров в метры
50 PRINT "Введите длину рулона 1 типа,м :"; : INPUT s
IF s <= 0 THEN PRINT "Ошибка! Введено недопустимое значение!"
IF s <= 0 THEN GOTO 50
60 PRINT "Введите длину рулона 2 типа,м :"; : INPUT t
IF t <= 0 THEN PRINT "Ошибка! Введено недопустимое значение!"
IF t <= 0 THEN GOTO 60
per = 2 * a + 2 * b'Периметр комнаты
' Подсчет количества полос обоев в комнате
pol% = per / q
IF (pol% * q) < per THEN
  pol% = pol% + 1
END IF
' Количество полос в первом рулоне
s1% = INT(s / h)
' Количество полос во втором рулоне
s2% = INT(t / h)
 
minost = pol% * h' Начальное значение остатка обоев (большое число)
mini% = 0' Начальное значение полос из рулонов 1 типа
FOR i% = 0 TO pol% STEP 1' Сколько полос взять из рулонов первого типа
  rul% = INT(i% / s1%)' Количество целых рулонов
  ost = (s * rul%) - (s1% * h) * rul%' Остаток от целых рулонов
  IF i% > (rul% * s1%) THEN
    ost = ost + s - h * (i% - rul% * s1%)' Плюс остаток в неполном рулоне
  END IF
 
  j% = pol% - i%' Сколько полос взять из рулона второго типа
  rul% = INT(j% / s2%)' Количество целых рулонов
  ost = ost + (t * rul%) - (s2% * h) * rul%' Плюс остаток от целых рулонов
  IF j% > (rul% * s2%) THEN
    ost = ost + t - h * (j% - rul% * s2%)' Плюс остаток в неполном рулоне
  END IF
  IF ost < minost THEN
    minost = ost
    mini% = i%
  END IF
NEXT i%
PRINT "Получилось: "; mini%; " полос из 1 типа"
PRINT "     и      "; pol% - mini%; " полос из 2 типа"
PRINT " Обрезки: "; minost; " м"
n1% = INT(mini% / s1%)
IF (n1% * s1%) < mini% THEN
  n1% = n1% + 1
END IF
 
n2% = INT((pol% - mini%) / s2%)
IF (n2% * s2%) < (pol% - mini%) THEN
  n2% = n2% + 1
END IF
PRINT n1%; " рулонов 1 типа"
PRINT n2%; " рулонов 2 типа"
А проблемы таковы:
1) не всегда программа правильно делает расчёт по заданным числам
2)при работе с десятичными или большими числами программа "долго думает". Может возможно оптимизировать код?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.12.2011, 22:54
Ответы с готовыми решениями:

Определить, какое количество целых полос потребуется для оклейки помещения
Помогите, пожалуйста, с задачкой! Помещение площадью ахb оклеивается обоями одинакового цвета,...

Определить, какое количество целых полос потребуется для оклейки помещения
помогите решить задачу...Помещение площадью ахb оклеивается обоями одинакового цвета, но разной...

Определить, сколько рулонов обоев нужно для оклейки комнаты
ПЛОЩАДЬ КОМНАТЫ 40 КВАДРАТОВ ОДИН РУЛОН ОБОЕВ НА 1,5 КВАДРАТА СКОЛЬКО РУЛОНОВ обоев НАДО BEGIN ...

Сколько нужно рулонов обоев для оклейки комнаты
Сколько нужно рулонов обоев для оклейки комнаты длиной m метров, шириной n метров и высотой h...

2
792 / 398 / 260
Регистрация: 09.12.2011
Сообщений: 786
Записей в блоге: 29
27.12.2011, 16:57 2
PureBasic
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
cls
1 input "Shirina oboev mm:"; q
if q<=0 then print "Mistake!": goto 1
q=q/1000
2 input "Dlina rulona 1 m:"; s
if s<=0 then print "Mistake!": goto 2
3 input "Dlina rulona 2 m:"; t
if t<=0 then print "Mistake!": goto 3
4 input "Dlina, shirina, visota komnati m:"; a,b,h
if a<=0 or b<=0 or h<=0 then print "Mistake!": goto 4
'вводим данные
p=2*(a+b): polos=p/q: obr=int(polos+1)-polos' находим периметр, сколько полос потребуется и размер обрезков по ширине
if obr>0 then polos=int(polos+1)
dlin=polos*h' находим необходимую длину обоев
 
color 4
if s>t then rul1=int(dlin/s): goto 5 else rul2=int(dlin/t): goto 6' находим тип обоев, рулоны которого длиннее
if dlin/s-int(dlin/s)>0 then rul1=rul1+1: goto 5
if dlin/t-int(dlin/t)>0 then rul2=rul2+1' находим необходимое кол-во рулонов
 
while obr1<0 and obr2<0
5 obr1=rul1*s+s-dlin: rul1=rul1+1
6 obr2=rul2*t+t-dlin: rul2=rul2+1
7 if obr1>obr2 then rul1=rul1-1:rul2=rul2+1 else rul2=rul2-1: rul1=rul1+1
wend
' находим оптимальное кол-во рулонов  
color 4: print "rul1:"; rul1: print "rul2:"; rul2
obrez=(rul1*s+rul2*t)-dlin: print "obrez:"; obrez+obr' находим обрезки
end
1
Платежеспособный зверь
8818 / 4245 / 1618
Регистрация: 28.10.2009
Сообщений: 11,386
27.12.2011, 20:33 3
PureBasic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
INPUT "vvedite shirinu oboev, mm ", q
INPUT "vvedite s ", s
INPUT "vvedite t ", t
INPUT "vvedite a ", a
INPUT "vvedite b ", b
INPUT "vvedite h ", h
n = (2 * a + 2 * b) / (q / 1000)
IF n > INT(n) THEN n = n + 1
l = n * h
ss = l / s
IF ss > INT(ss) THEN ss = ss + 1
min = l
FOR i = 0 TO ss
j = 0
r = 0
DO
j = j + 1
r = i * s + j * t
LOOP UNTIL r >= l
IF r - l < min THEN min = r - l: ks = i: kt = j
NEXT
PRINT "min="; min; "metrov "; "kol-vo s="; ks; "kol-vo t="; kt
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.12.2011, 20:33
Помогаю со студенческими работами здесь

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

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

Определить количество плиток, которое потребуется для оклейки бассейна
Бригада отделочников получила заказ: обклеить Бассайн размеров N x M x H кафельной плиткой размером...

Сколько нужно рулонов обоев для оклейки комнаты длиной m метров, шириной n метров и высотой h метров?
1. Одна задача - одна тема. Тем более что картинку вы не вложили. 2.Сколько нужно рулонов обоев...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru