Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Помощь студентам


Ответ
 
Опции темы Опции просмотра
Старый 27.11.2009, 10:37   #11 (permalink)
MrSTEP
一步一步地会到目的
 
Аватар для MrSTEP
 
Регистрация: 09.05.2009
Адрес: Черноземье
Сообщений: 10,939
Записей в дневнике: 10
Сказал(а) спасибо: 140
Поблагодарили 80 раз(а) в 33 сообщениях
Репутация: 28362
По умолчанию

Ну этот вариант конечно тоже имеет право на жизнь всю жизнь было, сколько людей - столько мнений. ну а твой вариант проверки расположения м.прямоугольников относительно б.квадрата не имеет конкурентов
MrSTEP вне форума   Ответить с цитированием

Старый 27.11.2009, 10:37
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Вы не единственный, кто создавал топик на эту тему

Справочники, мануалы и прочая литература по теме форума
Удаление старой термопасты

Старый 01.12.2009, 06:57   #12 (permalink)
Dram
Экономичный вид памяти
 
Аватар для Dram
 
Регистрация: 19.02.2008
Сообщений: 2,632
Записей в дневнике: 1
Сказал(а) спасибо: 6
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 2794
По умолчанию

Цитата:
Сообщение от Vladimir_S Посмотреть сообщение
Да ну, зачем так сложно? Всё гораздо проще! Ладно, попробую расписать алгоритм. Координаты большого квадрата - 0, 0 (левый нижний угол), 1000, 1000 (правый верхний угол). Пусть есть два малых прямоугольника a и b. Будем, для определенности, подразумевать, что фигура a находится в общем случае левее фигуры b. Обозначим координаты правых верхних углов x1a, y1a, x1b, y1b. Для левых нижних углов будет, соответственно, x2a, y2a, x2b, y2b. Далее, считаем, что все 8 чисел как-то заданы, надо лишь проверить, что малые фигуры во-первых, не вылезают за рамки большого квадрата и во-вторых, не накладываются. Выполнению первого условия соответствует:
x1a <= 1000
x2a >= 0
y1a <= 1000
y2a >= 0

x1b <= 1000
x2b >= 0
y1b <= 1000
y2b >= 0


Для начала должны быть проверены все 8 указанных соотношений - если хоть одно нарушено, то нужно выдать сообщение об ошибке (пересечение границ б.к.).

Теперь о наложениях. Будем считать, что предыдущие 8 условий выполнены, т.е. выхода за рамки б.к. нет. Тогда если выполняется условие
x1a <= x2b
т.е. правая вертикальная сторона фигуры a находится левее левой вертикальной стороны фигуры b, то всё в порядке - наложений нет.
Если же указанное условие не выполнено, т.е.
x1a > x2b
то наложений не будет только если малые фигуры "разведены" по вертикали, т.е. либо
y2a >= y1b
либо
y2b >= y1a
Если какое-либо из двух условий выполнено, то - порядок, а если результат отрицательный, то следует выдать сообщение об ошибке (наложение).
Всё!
Vladimir_S
Похоже это решение не подойдет т.к условия нам дали эмм не то что бы не понятные. Но походу и не правльные. Воощем есть еще чило N это количество запросов т.е сколько раз нам надо вырезать квадрат. Но тогда я не вижу смысла делать проверку пересечения сторон..или..?
Dram вне форума   Ответить с цитированием
Старый 01.12.2009, 09:45   #13 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от Dram Посмотреть сообщение
Vladimir_S
Похоже это решение не подойдет т.к условия нам дали эмм не то что бы не понятные. Но походу и не правльные. Воощем есть еще чило N это количество запросов т.е сколько раз нам надо вырезать квадрат. Но тогда я не вижу смысла делать проверку пересечения сторон..или..?
Dram, я, конечно, могу по мере сил помочь с РЕШЕНИЕМ задачи... Но вот догадываться о правильной ФОРМУЛИРОВКЕ - это уже явно вне моей компетенции. Вы уж попробуйте уточнить условие, а дальше, я думаю, разберемся.
Vladimir_S вне форума   Ответить с цитированием
Старый 01.12.2009, 14:21   #14 (permalink)
Dram
Экономичный вид памяти
 
Аватар для Dram
 
Регистрация: 19.02.2008
Сообщений: 2,632
Записей в дневнике: 1
Сказал(а) спасибо: 6
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 2794
По умолчанию

да я сам. толком условия не понял.А пытаюсь спросить все молчат как портизаны. Ну тогда будем продолжать по старым условиям. Владимир можете написать в паскале как пропишутся условия того что прямоугольники не выходят за пределы большого?
Dram вне форума   Ответить с цитированием
Старый 01.12.2009, 14:42   #15 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от Dram Посмотреть сообщение
да я сам. толком условия не понял.А пытаюсь спросить все молчат как портизаны. Ну тогда будем продолжать по старым условиям. Владимир можете написать в паскале как пропишутся условия того что прямоугольники не выходят за пределы большого?
Конечно. Пусть введены переменные x1a, x2a, y1a, y2a, x1b, x2b, y1b и y2b, как расписано выше. Введем еще переменную b типа BOOLEAN. Пусть значение переменной b=TRUE означает, что малые фигуры не выходят за рамки большой, а значение b=FALSE наоборот, что выходят. Тогда:

IF
(x1a <= 1000) AND (x2a >= 0) AND (y1a <= 1000) AND (y2a >= 0) AND
(x1b <= 1000) AND (x2b >= 0) AND (y1b <= 1000) AND (y2b >= 0)
THEN b:=TRUE ELSE b:=FALSE;
Vladimir_S вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Старый 01.12.2009, 15:52   #16 (permalink)
Dram
Экономичный вид памяти
 
Аватар для Dram
 
Регистрация: 19.02.2008
Сообщений: 2,632
Записей в дневнике: 1
Сказал(а) спасибо: 6
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 2794
По умолчанию

вот кажись узнал полностью условия. дан квадрат 1000на1000 в нем. нужно вырезать прямоугольники определенного размера определенное количество раз. размер прямоугольников(лев нижний и правый верхний угол) и их количество задается с клавиатуры. и прога должна выдавать, получится вырезать или нет. А можно сразу прогу? а то уже сроки поджимают.

А если писать без ошибок и попробовать самостоятельно подумать? Все же это вы учитесь, а не мы. Ваш модератор.
Dram вне форума   Ответить с цитированием
Старый 01.12.2009, 22:02   #17 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от Dram Посмотреть сообщение
вот кажись узнал полностью условия. дан квадрат 1000на1000 в нем. нужно вырезать прямоугольники. определенного размера,определенное количество раз. размер прямоугольников(лев нижний и правый верхний угол) и их количество задается с клафиатуры. и прога далжна выдовать пелучится вырезать или нет. А можно сразу прогу? а то уже сроки поджимают.
Можно. Хотя, по-моему, проще самому написать, чем в чужой разбираться. Ну как угодно:

Код:
CONST
 Nmax=10; {Max number of rectangles}
VAR
 i,j,N:INTEGER;
 b:BOOLEAN;
 X1,Y1,X2,Y2:ARRAY[1..Nmax] of INTEGER;
BEGIN
 Write('Number of rectangles = ');
 ReadLn(N);
 b:=TRUE;
 i:=0;
 REPEAT
  INC(i);
  REPEAT
   Write('Right Top X of rectangle N',i,' = ');
   ReadLn(X1[i]);
   Write('Right Top Y of rectangle N',i,' = ');
   ReadLn(Y1[i]);
   Write('Left Bottom X of rectangle N',i,' = ');
   ReadLn(X2[i]);
   Write('Left Bottom Y of rectangle N',i,' = ');
   ReadLn(Y2[i]);
   IF (X1[i]<=X2[i]) OR (Y1[i]<=Y2[i]) THEN
    Writeln ('Wrong values!');
  UNTIL (X1[i]>X2[i]) AND (Y1[i]>Y2[i]);
  IF (X1[i]>1000) OR (Y1[i]>1000) OR (X2[i]<0) OR (Y2[i]<0)
   THEN
    BEGIN
     b:=FALSE;
     WriteLn('Figure N',i,' is out of range!');
    END;
  IF b THEN
   BEGIN
    FOR j:=1 TO i-1 DO
     IF ((X1[i]>X2[j]) AND (X2[i]<X1[j]))
        AND
        (((Y1[i]>Y2[j]) AND (Y2[i]<Y1[j])) OR
         ((Y2[i]<Y1[j]) AND (Y1[i]>Y2[j]))) THEN
      BEGIN
       b:=FALSE;
       WriteLn('Figure N',i,' overlaps figure N',j);
      END;
   END;
 UNTIL (b=FALSE) OR (i=N);
 IF b AND (i=N) THEN WriteLn('Everything is OK!');
 ReadLn;
END.
Vladimir_S вне форума   Ответить с цитированием
Старый 02.12.2009, 04:05   #18 (permalink)
Dram
Экономичный вид памяти
 
Аватар для Dram
 
Регистрация: 19.02.2008
Сообщений: 2,632
Записей в дневнике: 1
Сказал(а) спасибо: 6
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 2794
По умолчанию

Цитата:
Сообщение от Vladimir_S Посмотреть сообщение
Можно. Хотя, по-моему, проще самому написать, чем в чужой разбираться. Ну как угодно:
Мдя..действительно лучше самому написать(просто уровень знаний у меня еще не тот,на котором прога написанна). Но все равно спасибо. А можно еще спросить по первой проге . что мы сделали вот этой записию
BEGIN
IF n=0 THEN X2np:=1 ELSE
IF n=1 THEN X2np:=X ELSE

Код:
CONST
e=0.0001;

VAR
i:INTEGER;
S,a:REAL;

function X2np(X:Extended; n:WORD):Extended;
Var i:INTEGER;
Y:Extended;
BEGIN
IF n=0 THEN X2np:=1 ELSE
IF n=1 THEN X2np:=X ELSE
BEGIN
Y:=X;
FOR i:=2 TO n DO Y:=Y*X;
X2np:=Y;
END;
END;

BEGIN
S:=1;
i:=0;
REPEAT
INC(i);
a:=X2np(-1,i)/X2np((i+1)*(i+2),i);
S:=S+a;
UNTIL ABS(a)<e;
WriteLn('S= ',S:7:5);
ReadLn;
END.
И вот снова вопрос:
Вычислить бесконечную сумму (-1)**n * x**(n)/n! где
n=1,2,3... с точностью e =0.001 . Значение x ввести с клавиатуры.
(X=4.5, S=-0.989)

Как в условии задачи прочитается сама запись (-1)**n * x**(n)/n! И ! это факториал?
И что в теле проги означает INC
Код:
CONST
e=0.001;

VAR
i:INTEGER;
S,a,x:REAL;

BEGIN
 Write('x= ');
 ReadLn(x);
 S:=0;
 i:=0;
 a:=1;
 REPEAT
  INC(i);
  a:=-a*x/i;
  S:=S+a;
 UNTIL ABS(a)<e;
 WriteLn('S= ',S:6:3);
 ReadLn;
END.

Последний раз редактировалось Dram; 02.12.2009 в 04:16
Dram вне форума   Ответить с цитированием
Старый 02.12.2009, 08:11   #19 (permalink)
AlexZir
support
 
Аватар для AlexZir
 
Регистрация: 19.08.2007
Адрес: Зея
Сообщений: 15,797
Записей в дневнике: 71
Сказал(а) спасибо: 166
Поблагодарили 203 раз(а) в 86 сообщениях
Репутация: 75760
По умолчанию

inc(a,b) - функция, увеличивающая значение переменной a на указанную величину b. Если b не указано, то считается, что b=1.

Значение функции высчитывается в цикле с постусловием, а, именно, этими командами:
Код:
a:=-a*x/i;  S:=S+a;
Цикл повторяется, пока не будет превышена заданная точность вычисления.

! - да, это знак факториала.
__________________
Убить всех человеков!
AlexZir вне форума   Ответить с цитированием
Старый 02.12.2009, 10:00   #20 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

А по первому вопросу - так: как я уже отвечал, функция X2np(x,n) возводит действительное число x в степень n. Отсюда и надо исходить. Указанные строки обозначают, что x в степени 0 есть единица, а x в степени 1 есть x. Если показатель степени превышает 1, то запускается цикл умножений числа x само на себя нужное количество раз.
Vladimir_S вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 11:39.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.