Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Прямоугольник - колличество квадратов в нем

Автор: darkdrive 19.12.2007 2:56

Помогите пожалуйста с решением:
1)Заданы размеры прямоугольника (вводятся 2 целых числа), Найти и напечатать покрытие этого прямоугольника наименьшим колличеством квадратов(список длинн сторон)

Задается целое число(вводится с клавиатуры), вывести по одной цифре(с повторами), из которых состоит это число

Автор: Malice 19.12.2007 3:49

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 19.12.2007 4:08

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

Автор: Malice 19.12.2007 4:16

Цитата(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 19.12.2007 5:34

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

Автор: Lapp 19.12.2007 5:45

Цитата(darkdrive @ 19.12.2007 1:34) *

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

Тогда просто ищешь наибольший общий делитель - это и есть сторона крадрата.

Автор: darkdrive 19.12.2007 20:37

а реализацию на паскале можно?? )

Автор: Michael_Rybak 20.12.2007 1:30

Цитата
а реализацию на паскале можно??

конечно можно. не стесняйся, пиши.

Автор: darkdrive 21.12.2007 3:29

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

Автор: andriano 21.12.2007 3:40

Пока ничего серьезного с твоей стороны не вижу.
ПОМОЧЬ можно только человеку, который сам что-то делает.
Можно, конечно, что-то сделать ВМЕСТО человека, но вряд ли это следует считать помощью.

Автор: Lapp 21.12.2007 12:03

Цитата(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 21.12.2007 17:05

Да, но ведь квадраты не обезательно должны быть целыми числами, ну например,
прямоугольник 2,6 на 9,1
Квадраты понятное дело будут 1,3 если посмотреть внимательно... но прямоугольник может быть сколь угодно большим, ну например 13654,4564327 на 167654,4675632
И что тогда...
Но все равно, всем спасибо за ответы.

Автор: klem4 21.12.2007 20:00

ты бы хоть читал что пишешь ...

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

Автор: darkdrive 22.12.2007 3:11

мда, пардон.... просто изначально задача была с целыми числами, и разных размеров квадраты...
А потом дали похожую на ту...


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

Автор: Malice 22.12.2007 4:26

Все равно перебором, примерно так:

....
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;