Помощь - Поиск - Пользователи - Календарь
Полная версия: Прямоугольник - колличество квадратов в нем
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
darkdrive
Помогите пожалуйста с решением:
1)Заданы размеры прямоугольника (вводятся 2 целых числа), Найти и напечатать покрытие этого прямоугольника наименьшим колличеством квадратов(список длинн сторон)

Задается целое число(вводится с клавиатуры), вывести по одной цифре(с повторами), из которых состоит это число
Malice
1 - такая реализация пойдет ? smile.gif
procedure kw (x,y:integer);
begin
if x=y then writeln (x,'x',x) else
begin
if x<y then begin
writeln (x,'x',x); kw (x,y-x);
end else begin
writeln (y,'x',y); kw (x-y,y);
end;
end;
end;

2- задача на div и mod, в факе есть куча примеров наверняка.
darkdrive
Можно по подробнее, дело в том что я в паскале никогда не работал, пишу на php,vb. С синтаксисом слабо знаком, попросили помочь с задачами, запустить эту так и не смог. Можно полноценно работающую программу, с вводом сторон с клавиатуры??
Malice
Цитата(darkdrive @ 19.12.2007 0:08) *

Можно по подробнее, дело в том что я в паскале никогда не работал, пишу на php,vb. С синтаксисом слабо знаком, попросили помочь с задачами, запустить эту так и не смог. Можно полноценно работающую программу, с вводом сторон с клавиатуры??

То, что было +:
var x,y:integer;
begin
write ('X='); readln (x);
write ('Y='); readln (y);
kw(x,y);
end.
darkdrive
угу, пасиб, работает, а если добавить условие - заполнить квадратами одинакого размера? smile.gif)))
Lapp
Цитата(darkdrive @ 19.12.2007 1:34) *

угу, пасиб, работает, а если добавить условие - заполнить квадратами одинакого размера? smile.gif)))

Тогда просто ищешь наибольший общий делитель - это и есть сторона крадрата.
darkdrive
а реализацию на паскале можно?? )
Michael_Rybak
Цитата
а реализацию на паскале можно??

конечно можно. не стесняйся, пиши.
darkdrive
ну я серьезно, надо решить задачу, помогите плизз, хотяб формулу математическую... лучше конечно пример
andriano
Пока ничего серьезного с твоей стороны не вижу.
ПОМОЧЬ можно только человеку, который сам что-то делает.
Можно, конечно, что-то сделать ВМЕСТО человека, но вряд ли это следует считать помощью.
Lapp
Цитата(darkdrive @ 20.12.2007 23:29) *

хотяб формулу математическую...

Тут, мне кажется, можно помочь. Формулы, тут, правда, нету.

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

Примеры:
1. 30х10. 30 делится на 10. Ответ: квадрат 10х10

2. 40х24. 40 не делится на 24. Проверяем, начиная с 12:
12 - 40 не делится
11 - оба не делятся
10 - 24 не делится
9 - оба не дел
8 - оба делятся.
Ответ: 8х8
darkdrive
Да, но ведь квадраты не обезательно должны быть целыми числами, ну например,
прямоугольник 2,6 на 9,1
Квадраты понятное дело будут 1,3 если посмотреть внимательно... но прямоугольник может быть сколь угодно большим, ну например 13654,4564327 на 167654,4675632
И что тогда...
Но все равно, всем спасибо за ответы.
klem4
ты бы хоть читал что пишешь ...

Цитата(darkdrive)
1)Заданы размеры прямоугольника (вводятся 2 целых числа),
darkdrive
мда, пардон.... просто изначально задача была с целыми числами, и разных размеров квадраты...
А потом дали похожую на ту...


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

....
e:=false; n:=0;
repeat
inc (n);
if frac(y/(x/n))<0.0001 {сколько надо} then
begin
writeln (n, ' x ',round(y/(x/n)),'(', (x/n):0:5,')'); e:=true;
end;
until e;
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.