Разрезать прямоугольник на квадраты и вывести список с размерами сторон
На вход функции подается длина и ширина прямоугольника, нужно разрезать его на квадраты и вывести список с размерами сторон этих квадратов. Если исходная длина и ширина равны, вывести 0. Подскажите алгоритм пожалуйста.
Пример вход rect(5,3), выход [3,2,1,1]
![]()
Берем минимальный из двух размеров и выводим его. Затем уменьшаем максимальный размер на минимальный и начинаем сначала. Продолжаем пока один из размеров не станет равен нулю.
Неясно только, почему дано такое неестественное требование «если исходная длина и ширина равны, вывести 0». Логично было бы просто вывести длину — тогда бы этот случай подпадал под общий алгоритм.
Проблема решена за помощи итератора — рекурсивная функция def to_quadrats() при каждом запросе о последующее значение выдает его командой yield i (и затем приостановится и ждёт на последующий запрос).
Сам запрос о последующее и последующее значения итератора (пока он не исчерпается) реализуется функцией list() .
мы ищем самое большое значение (сторону квадрата), для которого его вторая степень (площадь квадрата) ещё не превышает текущую площадь — да, вместо area бы лучше было взять его квадратный корень.
После нахождения такого значения текущая площадь соответственно уменьшится, самое значение выдастся командой yield и цикл for прекращается командой break .
Дан прямоугольник размером 647 x 170 сколько квадратов со стороной 30 можно вырезать из него
Профиль
Группа: Участник
Сообщений: 148
Регистрация: 22.11.2005
Репутация: нет
Всего: нет
Профиль
Группа: Участник
Сообщений: 56
Регистрация: 28.1.2006
Где: Россия, Нижний Но вгород
Репутация: нет
Всего: нет
Профиль
Группа: Комодератор
Сообщений: 2072
Регистрация: 15.11.2004
Репутация: 2
Всего: 116
Профиль
Группа: Участник
Сообщений: 64
Регистрация: 14.6.2005
Где: Хабаровск
Репутация: нет
Всего: нет
Профиль
Группа: Участник
Сообщений: 32
Регистрация: 20.12.2005
Репутация: нет
Всего: нет
div это процедура которая делит одно число на другое и выписывает целое число
а
mod наоборот остаток
соответственно 543 div 130 и будет столько квадратов на сколько можно поделить
а
543 mod 130 будет оставшаяся часть прямоугольника
Профиль
Группа: Участник
Сообщений: 117
Регистрация: 9.11.2005
Где: 239
Репутация: нет
Всего: нет
div — деление без остатка (7 div 3 =2)
mod- остаток от деления (7 mod 3 =1)
ответ задачи следовательно
543 div 130 — на сколько можно поделить,
а 543 mod 130- сколько от прямоугольника останется;
Запрещается!
1. Обсуждать и делится взломанными компонентами или программным обеспечением
2. Публиковать ссылки на варез
3. Оффтопить
- Действия модераторов можно обсудить здесь
- С просьбами о написании курсовой, реферата и т.п. обращаться сюда
- Вопросы по реализации алгоритмов рассматриваются здесь
- 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) — крупнейшем в рунете сборнике материалов по Дельфи
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, THandle, Rrader, volvo877.
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Object Pascal: кроссплатформенные технологии | Следующая тема » |
[ Время генерации скрипта: 0.1149 ] [ Использовано запросов: 21 ] [ GZIP включён ]
Школе NET
Submit to our newsletter to receive exclusive stories delivered to you inbox!

Васян Коваль
Помогите с паскалем!)
Задание 1.
Дана масса в килограммах. Найти число полных тонн в ней.
Задание 2.
Дан прямоугольник с размерами 543*130 мм. Сколько квадратов со стороной 130 мм можно отрезать от него.
Задание 3.
С клавиатуры вводится четырехзначное число, необходимо получить новое число, приписав к нему слева цифру 9.
Задание 4.
Дано трехзначное число. В нем зачеркнули первую цифру слева и приписали ее вконце. Найти полученное число.
Задание 5.
Пешеход шел по пересеченной местности. Его скорость движения по равнине v1 км/ч, в гору — v2 км/ч и под гору — v3 км/ч. Время движения соответственно t1, t2 и t3 ч. Какой путь прошел пешеход?
Нужно выполнять в таком виде:
Лучший ответ:

Пармезан Черница
program p1;
var k,t:integer;
begin
write(‘кг = ‘);
readln(k);
t:=k div 1000;
writeln(‘В ‘,k,’ кг полных тонн ‘,t);
end.
Пример:
кг = 54937
В 54937 кг полных тонн 54
program p2;
var a,b,k:integer;
begin
a:=543;
b:=130;
k:=a div b;
writeln(‘Количество квадратов = ‘,k);
end.
Результат:
Количество квадратов = 4
program p3;
var a,b:integer;
begin
write(‘Введите четырехзначное число: ‘);
readln(a);
b:=9*10000 a;
writeln(‘Полученное число = ‘,b);
end.
Пример:
Введите четырехзначное число: 4937
Полученное число = 94937
program p4;
var a,b:integer;
begin
write(‘Введите трехзначное число: ‘);
readln(a);
b:=(a mod 100)*10 a div 100;
writeln(‘Полученное число = ‘,b);
end.
Пример:
Введите трехзначное число: 437
Полученное число = 374
program p5;
var v1,v2,v3,t1,t2,t3,s:real;
begin
write(‘v1, t1: ‘);
readln(v1,t1);
write(‘v2, t2: ‘);
readln(v2,t2);
write(‘v3, t3: ‘);
readln(v3,t3);
s:=v1*t1 v2*t2 v3*t3;
writeln(‘Пройденный путь = ‘,s:5:2, ‘ км ‘);
end.
Пример:
v1, t1: 5 2
v2, t2: 3 0.5
v3, t3: 4 1.5
Пройденный путь = 17.50 км