Форум программистов, компьютерный форум, киберфорум
QBasic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
 Аватар для Lepsev
66 / 14 / 1
Регистрация: 16.12.2009
Сообщений: 253

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

26.12.2011, 22:54. Показов 1439. Ответов 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
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
26.12.2011, 22:54
Ответы с готовыми решениями:

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

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

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

2
 Аватар для Фаер
792 / 398 / 260
Регистрация: 09.12.2011
Сообщений: 786
Записей в блоге: 53
27.12.2011, 16:57
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
Платежеспособный зверь
 Аватар для кот Бегемот
8966 / 4389 / 1655
Регистрация: 28.10.2009
Сообщений: 11,647
27.12.2011, 20:33
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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
27.12.2011, 20:33
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru