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


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

По просьбе Vladimir_S создаю новую тему . Как он предупредил меня в прошлой теме “ Если чего непонятно - спрашивай, объясню”. Так вот и спрашиваю собственно вот по этой задаче
1. Вычислить приближенно значение суммы с точностью до
e=0.0001, S= 1 - 1/(2*3) + 1/(3*4)**2 - 1/(4*5)**3...
(S= 0,84015)

Код:
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.

function X2np(X:Extended; n:WORD):Extended; что мы сделали вот этой строчкой,
WriteLn('S= ',S:7:5); и что в этой строке означает вот это S:7:5 я так понимаю это сокрашение результата. Но как это работает я что то не очень понемаю.

И еще вот дали задачку : Создать программу типа лазерного резака. Т.е нам дан квадрат 1000х1000. В нем нужно вырезать два квадрата, но так чтобы они не соприкасались друг стругом и не выходили за пределы б.квадрата(в противном случаее программа нам сообщала что чтото не так). Координаты малых квадратов задаются 2 точками левой нижней и правой верхней.
Язык паскаль
без графики только вычесления.
Подскажите хотя бы в какаю сторону начинать думать. И как реализовать в прграмме Поле(те. Б.квадрат 1000х1000).

Последний раз редактировалось Dram; 23.11.2009 в 21:37
Dram вне форума   Ответить с цитированием

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

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

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

Старый 23.11.2009, 21:58   #2 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от Dram Посмотреть сообщение
function X2np(X:Extended; n:WORD):Extended; что мы сделали вот этой строчкой,
WriteLn('S= ',S:7:5); и что в этой строке означает вот это S:7:5 я так понимаю это сокрашение результата. Но как это работает я что то не очень понемаю.

И еще вот дали задачку : Создать программу типа лазерного резака. Т.е нам дан квадрат 1000х1000. В нем нужно вырезать два квадрата, но так чтобы они не соприкасались друг стругом и не выходили за пределы б.квадрата(в противном случаее программа нам сообщала что чтото не так). Координаты малых квадратов задаются 2 точками левой нижней и правой верхней.
Язык паскаль
без графики только вычесления.
Подскажите хотя бы в какаю сторону начинать думать. И как реализовать в прграмме Поле(те. Б.квадрат 1000х1000).
Отвечаю.
1. Зачем в вопросе приведен заголовок функции - не понял.
2. Насчет WriteLn('S= ',S:7:5);. Этой строчкой мы вывели на экран значение числа S в заданном формате. Пара слов о формате вывода ВЕЩЕСТВЕННЫХ чисел. Пусть, для примера, S=0.1543799876544376578. Если формат не указать и применить оператор WriteLn('S= ',S);, то на экране появится:
S= 1.543799876544376578E-0001
Некрасиво. Если задать формат в виде одного числа, то это число будет воспринято, как полное количество значащих цифр в выводе результата. Т.е. в результате команды WriteLn('S= ',S:12); на экране будет:
S= 1.5438E-0001
А вот если задать формат, как сделано в программе, т.е. с двумя числами, то тогда это будет так: результат отобразится в виде десятичной дроби (без всяких Е-0001), причем первое число - это полное количество значащих цифр, а второе - количество цифр после десятичной точки. Т.е. в данном случае WriteLn('S= ',S:7:5); приведет к:
S= 0.15438 .
3. А о размерах малых квадратов ничего не говорится? Они одинаковые или могут быть разные?

P.S. Между прочим, это можно было и в старой теме. Я просил не создавать постов с НОВЫМИ задачками. А тему потому и не закрываю, что еще могут возникнуть вопросы по старым. Но, впрочем, новая так новая.
Vladimir_S вне форума   Ответить с цитированием
Старый 23.11.2009, 22:17   #3 (permalink)
Dram
Экономичный вид памяти
 
Аватар для Dram
 
Регистрация: 19.02.2008
Сообщений: 2,632
Записей в дневнике: 1
Сказал(а) спасибо: 6
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 2794
По умолчанию

Цитата:
Сообщение от Vladimir_S Посмотреть сообщение
А тему потому и не закрываю, что еще могут возникнуть вопросы по старым. Но, впрочем, новая так новая.
В первом Мне не очень понятно что выполняет эта функция "X2np"(т.е какие значения ты ей присвоил?)
Цитата:
Но, впрочем, новая так новая.
Зато моя тема будет А то в той уже действительно сложно искать становится.

А по второй задаче что ни будь подскажешь?

Последний раз редактировалось Dram; 23.11.2009 в 22:21
Dram вне форума   Ответить с цитированием
Старый 23.11.2009, 22:47   #4 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от Dram Посмотреть сообщение
В первом Мне не очень понятно что выполняет эта функция "X2np"(т.е какие значения ты ей присвоил?)

Зато моя тема будет А то в той уже действительно сложно искать становится.

А по второй задаче что ни будь подскажешь?

Функция X2np выполняет возведение действительного числа Х в целую положительную степень n.

Насчет второй задачи - подскажу. Считаем, что нижняя сторона большого квадрата расположена на оси "х" обычной декартовой сетки координат, а левая боковая - на оси "у", причем левый нижний угол соответствует началу координат. Тогда все точки с 0 < x <1000 и 0 < y <1000 находятся внутри большого квадрата. Дальше нужно нарисовать (для себя) все возможные ситуации, когда во-первых, малые квадраты вылезают за указанные рамки и во-вторых, когда они накладываются друг на друга. Дальше сообразить, каким комбинациям координат вершин малых квадратов это соответствует, и предусмотреть в программе оповещение при возникновении таких ситуаций. В принципе совсем не сложно, только долго и малость муторно.
Функция X2np выполняет возведение действительного числа Х в целую положительную степень n.

Насчет второй задачи - подскажу. Считаем, что нижняя сторона большого квадрата расположена на оси "х" обычной декартовой сетки координат, а левая боковая - на оси "у", причем левый нижний угол соответствует началу координат. Тогда все точки с 0 < x <1000 и 0 < y <1000 находятся внутри большого квадрата. Дальше нужно нарисовать (для себя) все возможные ситуации, когда во-первых, малые квадраты вылезают за указанные рамки и во-вторых, когда они накладываются друг на друга. Дальше сообразить, каким комбинациям координат вершин малых квадратов это соответствует, и предусмотреть в программе оповещение при возникновении таких ситуаций. В принципе совсем не сложно, только долго и малость муторно.
Vladimir_S вне форума   Ответить с цитированием
Старый 23.11.2009, 23:28   #5 (permalink)
Dram
Экономичный вид памяти
 
Аватар для Dram
 
Регистрация: 19.02.2008
Сообщений: 2,632
Записей в дневнике: 1
Сказал(а) спасибо: 6
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 2794
По умолчанию

А если размер малых квадратов сделать рандомными и ограничить диапозон площадью б квадрата. И после только прописать условие что если они пересекутся.
Мне только не понятно как представить квадраты? Если можно было бы вводить 4 точки квадрата то было бы проще. Проверялась бы только вхожесть в диапозон. НО как сделать с 2 точками?
Dram вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Старый 24.11.2009, 08:52   #6 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от Dram Посмотреть сообщение
А если размер малых квадратов сделать рандомными и ограничить диапозон площадью б квадрата. И после только прописать условие что если они пересекутся.
Мне только не понятно как представить квадраты? Если можно было бы вводить 4 точки квадрата то было бы проще. Проверялась бы только вхожесть в диапозон. НО как сделать с 2 точками?
Элементарно! Пусть координаты правого верхнего угла х1, у1, а левого нижнего - х2, у2. Тогда левый верхний угол будет иметь координаты х2, у1, а правый нижний - х1, у2. Вот Вам 4 точки.
А вообще-то непонятно, ну на кой ляд эти остальные две точки сдались? Если квадрат вылезает за левую границу б.к., то это означает, что x2<0, если за правую, то x1>1000, если за нижнюю, то y2<0 и, наконец, если за верхнюю, то y1>1000. Осталось только написать условия взаимного наложения двух малых квадратов.
Есть вопрос. Точно ли малые фигуры - КВАДРАТЫ? Может быть, ПРЯМОУГОЛЬНИКИ? Дело в том, что для квадратов нет произвола выбора всех четырех координат двух углов. Поясню. Допустим, мы задали координаты верхнего правого угла х1, у1. Теперь задаем х-координату нижнего левого, х2. Таким образом, сторона квадрата есть а=х1-х2. Y-координата нижнего левого угла будет у2=у1-а=у1-(х1-х2), т.е. не произвольная. В то же время, если бы это были не квадраты, а прямоугольники, то таких ограничений бы не было.
Vladimir_S вне форума   Ответить с цитированием
Старый 26.11.2009, 22:07   #7 (permalink)
Dram
Экономичный вид памяти
 
Аватар для Dram
 
Регистрация: 19.02.2008
Сообщений: 2,632
Записей в дневнике: 1
Сказал(а) спасибо: 6
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 2794
По умолчанию

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

Цитата:
Сообщение от Dram Посмотреть сообщение
И все таки наверное в программировании я полный дундук. Да будут не квадраты а прямоугольники. Мне непонятно то в чем выразится в паскале сама полошадь 1000х1000. как она представится в паскале(в виде чего)?
А площадь, как таковая, и не нужна вовсе.
Хорошо, временно упростим задачу. Пусть надо вырезать не 2, а всего один малый квадрат или прямоугольник. Всё, что для этого нужно - чтобы х-координата ЛЮБОЙ точки м.к., равно как и у-координата, удовлетворяли условиям
0 < x,y < 1000. Тогда не вылезут за рамки б.к., а это всё, что требуется.
В исходной задаче с двумя фигурами еще накладывается условие отсутствия наложений.
Vladimir_S вне форума   Ответить с цитированием
Старый 26.11.2009, 22:25   #9 (permalink)
MrSTEP
一步一步地会到目的
 
Аватар для MrSTEP
 
Регистрация: 09.05.2009
Адрес: Черноземье
Сообщений: 10,939
Записей в дневнике: 10
Сказал(а) спасибо: 140
Поблагодарили 80 раз(а) в 33 сообщениях
Репутация: 28362
По умолчанию

выразить б.квадрат можно через массив 1000х1000, элементы которого - значения булевского типа. Если этот участок квадрата вырезан, то элементам из участка надо присвоить true. если при вырезке второго участка мы натыкаемся на элементы со значением true, то выводим ошибку.
это первое, что пришло в голову
MrSTEP вне форума   Ответить с цитированием
Старый 27.11.2009, 09:59   #10 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от MrSTEP Посмотреть сообщение
выразить б.квадрат можно через массив 1000х1000, элементы которого - значения булевского типа. Если этот участок квадрата вырезан, то элементам из участка надо присвоить true. если при вырезке второго участка мы натыкаемся на элементы со значением true, то выводим ошибку.
это первое, что пришло в голову
Да ну, зачем так сложно? Всё гораздо проще! Ладно, попробую расписать алгоритм. Координаты большого квадрата - 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 вне форума   Ответить с цитированием
Ads

Яндекс

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

Опции темы
Опции просмотра

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

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




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

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