|
Главная | Правила | Регистрация | Дневники | Справка | Пользователи | Календарь | Поиск | Сообщения за день | Все разделы прочитаны |
|
Опции темы | Опции просмотра |
23.11.2009, 21:29 | #1 (permalink) |
Экономичный вид памяти
Регистрация: 19.02.2008
Сообщений: 2,632
Записей в дневнике: 1
Сказал(а) спасибо: 6
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 2794
|
Вопрос по старой теме и не только...
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 |
23.11.2009, 21:29 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
Вы не единственный, кто создавал топик на эту тему Справочники, мануалы и прочая литература по теме форума Удаление старой термопасты |
23.11.2009, 21:58 | #2 (permalink) | |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Цитата:
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. Между прочим, это можно было и в старой теме. Я просил не создавать постов с НОВЫМИ задачками. А тему потому и не закрываю, что еще могут возникнуть вопросы по старым. Но, впрочем, новая так новая. |
|
23.11.2009, 22:17 | #3 (permalink) | ||
Экономичный вид памяти
Регистрация: 19.02.2008
Сообщений: 2,632
Записей в дневнике: 1
Сказал(а) спасибо: 6
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 2794
|
Цитата:
Цитата:
А по второй задаче что ни будь подскажешь? Последний раз редактировалось Dram; 23.11.2009 в 22:21 |
||
23.11.2009, 22:47 | #4 (permalink) | |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Цитата:
Насчет второй задачи - подскажу. Считаем, что нижняя сторона большого квадрата расположена на оси "х" обычной декартовой сетки координат, а левая боковая - на оси "у", причем левый нижний угол соответствует началу координат. Тогда все точки с 0 < x <1000 и 0 < y <1000 находятся внутри большого квадрата. Дальше нужно нарисовать (для себя) все возможные ситуации, когда во-первых, малые квадраты вылезают за указанные рамки и во-вторых, когда они накладываются друг на друга. Дальше сообразить, каким комбинациям координат вершин малых квадратов это соответствует, и предусмотреть в программе оповещение при возникновении таких ситуаций. В принципе совсем не сложно, только долго и малость муторно. |
|
23.11.2009, 23:28 | #5 (permalink) |
Экономичный вид памяти
Регистрация: 19.02.2008
Сообщений: 2,632
Записей в дневнике: 1
Сказал(а) спасибо: 6
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 2794
|
А если размер малых квадратов сделать рандомными и ограничить диапозон площадью б квадрата. И после только прописать условие что если они пересекутся.
Мне только не понятно как представить квадраты? Если можно было бы вводить 4 точки квадрата то было бы проще. Проверялась бы только вхожесть в диапозон. НО как сделать с 2 точками? |
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
24.11.2009, 08:52 | #6 (permalink) | |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Цитата:
А вообще-то непонятно, ну на кой ляд эти остальные две точки сдались? Если квадрат вылезает за левую границу б.к., то это означает, что x2<0, если за правую, то x1>1000, если за нижнюю, то y2<0 и, наконец, если за верхнюю, то y1>1000. Осталось только написать условия взаимного наложения двух малых квадратов. Есть вопрос. Точно ли малые фигуры - КВАДРАТЫ? Может быть, ПРЯМОУГОЛЬНИКИ? Дело в том, что для квадратов нет произвола выбора всех четырех координат двух углов. Поясню. Допустим, мы задали координаты верхнего правого угла х1, у1. Теперь задаем х-координату нижнего левого, х2. Таким образом, сторона квадрата есть а=х1-х2. Y-координата нижнего левого угла будет у2=у1-а=у1-(х1-х2), т.е. не произвольная. В то же время, если бы это были не квадраты, а прямоугольники, то таких ограничений бы не было. |
|
26.11.2009, 22:07 | #7 (permalink) |
Экономичный вид памяти
Регистрация: 19.02.2008
Сообщений: 2,632
Записей в дневнике: 1
Сказал(а) спасибо: 6
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 2794
|
И все таки наверное в программировании я полный дундук. Да будут не квадраты а прямоугольники. Мне непонятно то в чем выразится в паскале сама полошадь 1000х1000. как она представится в паскале(в виде чего)?
|
26.11.2009, 22:18 | #8 (permalink) | |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Цитата:
Хорошо, временно упростим задачу. Пусть надо вырезать не 2, а всего один малый квадрат или прямоугольник. Всё, что для этого нужно - чтобы х-координата ЛЮБОЙ точки м.к., равно как и у-координата, удовлетворяли условиям 0 < x,y < 1000. Тогда не вылезут за рамки б.к., а это всё, что требуется. В исходной задаче с двумя фигурами еще накладывается условие отсутствия наложений. |
|
26.11.2009, 22:25 | #9 (permalink) |
一步一步地会到目的
Регистрация: 09.05.2009
Адрес: Черноземье
Сообщений: 10,939
Записей в дневнике: 10
Сказал(а) спасибо: 140
Поблагодарили 80 раз(а) в 33 сообщениях
Репутация: 28362
|
выразить б.квадрат можно через массив 1000х1000, элементы которого - значения булевского типа. Если этот участок квадрата вырезан, то элементам из участка надо присвоить true. если при вырезке второго участка мы натыкаемся на элементы со значением true, то выводим ошибку.
это первое, что пришло в голову |
27.11.2009, 09:59 | #10 (permalink) | |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Цитата:
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 Если какое-либо из двух условий выполнено, то - порядок, а если результат отрицательный, то следует выдать сообщение об ошибке (наложение). Всё! |
|
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
Опции темы | |
Опции просмотра | |
|
|