| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Центр помощи > [pascal] вычислить длины! |
| Автор: xF1x 11.9.2008, 13:09 |
| Всем доброго времени суток! Такая вот школьная задача! Даны 4 точки у каждой точки две координаты(x y) (всего 8 входных параметров т.е x1 x2 x3 x4 y1 y2 y3 y4) по этим парметрам вычислить длины соединений координат(т.е длины сторон этой фигуры, и диагонали, вообще все длины) и найти наибольшую длину в этой фигуре! только что у нас прошел первый урок по ПОДПРОГРАММАМ! сказали нужно через них( procedure) если можно то как можно проще! очень нужно к субботе! ВСЕМ ЗАРАНЕЕ СПАСИБО! |
| Автор: xF1x 11.9.2008, 20:39 |
| Блин неужели никто не знает как это сделать? |
| Автор: mr.Anderson 11.9.2008, 20:50 | ||
| xF1x, все достаточно просто. 1. Пишешь подпрограмму, принимающую четыре координаты - x1,y1 и x2,y2 - соответственно, координаты первой и второй точек, длину отрезка между которыми надо вычислить. Подпрограмма должна считать длину по известной формуле. Запишу, как это выглядит:
2. Пишешь основную часть, где запрашиваешь все координаты у юзера и читаешь их в переменные. Вычисляешь с помощью вышесозданной функции все... ммм... 6 длин (четыре стороны и две диагонали). Затем сравниваешь шесть полученных значений, находишь максимальное, выводишь его. Все. |
| Автор: xF1x 11.9.2008, 21:00 |
| Во первых! я же сказал школьная задача, function calcLength вот этогго я в помине не знаю! я же знаю что для вас програмистов это раз плюнутьб, ну помогите школьнику! |
| Автор: mr.Anderson 11.9.2008, 21:03 |
| xF1x, так, стоп, ты же сказал, что вы прошли подпрограммы? Function/procedure - это подпрограммы, просто функция возвращает какой-то результат, а процедура нет. Так в чем проблема? |
| Автор: xF1x 11.9.2008, 21:10 |
| у нас был первый урок подпрограмм! учитель дал попробовать сможем или нет! только слово procedure изучили! 1 ое домашнее задание |
| Автор: mr.Anderson 11.9.2008, 21:11 | ||
| xF1x, через процедуры эту задачу решать глупо. Можно, конечно, извратиться с глобальными переменными. Знаешь, что это такое? Если знаешь, сейчас напишу. Добавлено через 5 минут и 6 секунд В общем, если извращаться с глобалками, то так. ЭТО ФРАГМЕНТ, не целая программа. Додумай, чего там не хватает.
Добавлено через 6 минут и 3 секунды Вообще, мой совет: делай через function и блесни на уроке знаниями. Почитай, кстати, про function, чтобы понять, что делают функции и в чем отличие от процедур (хотя я об этом уже тут говорил). Меньше головной боли. |
| Автор: xF1x 11.9.2008, 21:18 |
| вообщем она сказала! вот вам procedure! и решайте! программа большая получается а глобальные переменные не слышал! она сказала что по простому вводишь координаты потом формулул для длины отрезков по координатам и вывести наибольшую длину! все! это же ШКОЛА! я програмирование изучаю год от силы! )) |
| Автор: mr.Anderson 11.9.2008, 21:20 |
| xF1x, делай, как я говорю, хуже не будет, если ты знаешь больше, чем дали в школе. Если, конечно, действительно знаешь. Если про глобалки не слышал, тем более. Ссылочные аргументы процедуры знаешь? Если нет, то я не вижу другого метода делать через процедуры. Вообще, это как в Москву из Иванова через Владивосток ехать. |
| Автор: xF1x 11.9.2008, 21:42 |
| я плохо знаю програмирование! если бы знал хорошо сюда бы не обращался! поэтому и прошу мне помочь написать программу! она сказала делать через метки label ты об этом? |
| Автор: Rodman 11.9.2008, 22:33 |
не вздумай метки делать |
| Автор: xF1x 11.9.2008, 22:49 |
| да да кстати и goto она тоже делала! )) ну уж помогите! а для вас это наоборот лучше! разнообразие! мне к субботе нужно! |
| Автор: orthrus 12.9.2008, 05:27 | ||
Вот, вроде работает, пытался написать по школьному
|
| Автор: xF1x 12.9.2008, 06:13 |
| CalcLength не изучали и мы про 3 точки делали без массива! без массива нельзя?case n of тоже не изучали! а так все отлично! |
| Автор: mr.Anderson 12.9.2008, 15:58 |
| xF1x, вы вообще ну хоть что-то, кроме меток, изучали?! Что значит "calcLength" не изучали, а ничего, что это название процедуры? Или на первом уроке по процедурам ты не был? Кошмар. Без массива долго, нудно и муторно. Можно без case, если понаписать кучу условных операторов, это, надеюсь, учили. Если не учили, то максимум и минимум ты не найдешь. Вообще, код от orthrus можно раза этак в 2-3 сократить всего лишь с использованием дополнительного массива. Добавлено через 1 минуту и 9 секунд То есть двух дополнительных, для X и для Y соответственно. Кстати, красивое решение получится. А если еще и записи прикрутить, то вообще супер будет, но я даже не спрашиваю, учили это или нет... |
| Автор: xF1x 12.9.2008, 16:03 |
| ладно давай я напишу как мы делали для 3 ч точек! и на этом основании ты уже подумаешь ок? Добавлено через 14 минут и 53 секунды программа находит существует ли треуголдьник по его заданным координатам тоесть если одна сторона меньше двух других сторон то он существует еслши нет то несуществует! использовали формулу герона где p полупериметр! вот! и теперь нужно по образцу этой задачи сделать то что я написал!вычислить длины соединенй координат четырех точек и найти наибольшую длину! вот var x1 y1 x2 y2 x3 y3:integer; var s,p, l12,l21,l23:real; LABEL1,2; procedure dlin; var n,n1,m,m1:integer; var d:real; begin d:=sqrt (sqr(n1-n) +sqr(m1-m)) end: begin writeln ('x','x2','x3'); readln(x1,x2,x3); writeln ('y1','y2','y3'); readln (y1,y2,y3); dlin (x1,x2,y1,y2,l12); dlin (x2,x3,,y2,y3,l23); dlin(x3,x1,y3,y1,l31); writeln ('dlin12'l12,'dlin23'l23,'dlin31',l31) if l12>(l23+l31)or l23>(l12+l31)or l31>(l12+l23) then go to 1; else writeln ('существует'); p:=(l12+l23+l31)/2; s:=sqrt(p*(p-l12)*(p- l23)*(p-l31); writeln ('площадь's:5:1);go to 2 1:write('ytceo'); 2:readln; end. |
| Автор: THandle 12.9.2008, 18:08 | ||
| xF1x, Боже!!! Ужас какой-то. Вообще код у нас принято соответствующей кнопкой выделять, но это даже кодом называть язык не поворачивается За такое оформление надо расстреливать.
А вот это вообще зачем, а? Что оно хоть делает? просто считает локальную переменную не понятно для чего... Еще и goto эти... послушай ты народ что тебе говорит, сделай с функциями. Знаниями блеснешь... Если не примут сделаем тебе с goto, хотя это извращения жуткие... Зачем такое преподавание языка нужно... Если очень грубо - извиняюсь. |
| Автор: mr.Anderson 12.9.2008, 19:06 |
| xF1x, руки поотрывать тем, кто такой код пишет. THandle тебе правильно сказал насчет стиля и оформления. Да и смысла в коде не особо. Я тебе уже говорил, сделай с функциями и будешь на высоте, репутацию себе поднимешь! Чего через одно место-то все делать, просто потому, что так препод сказал? Не стоит оно этого. |
| Автор: xF1x 12.9.2008, 20:25 |
| Ну ребят выкладывайте свой код давайте! как можно проще с procedure! блесну знаниями! давайте кидайте а то завтра сдавать |
| Автор: xF1x 12.9.2008, 20:50 |
| А РЕБЯТААА! ГДЕ ВЫ ВСЕ? |
| Автор: mr.Anderson 12.9.2008, 21:00 | ||
xF1x, наконец-то. Хоть что-то. Лови. Привел максимально короткое решение с процедурами, какое придумал. Перед сдачей советую проверить на работоспособность, у меня компилятора нет.
Кажись, так. |
| Автор: xF1x 12.9.2008, 21:15 |
| calcLength len поясни пожалуйста не знаю такого, так нужно же 4 точки! а у тебя 2 и что то len := sqrt((x1-x2)*(x1-x2) + (y1-y2)*(y1-y2)) вот эту форумулу не понял зачем две координаты сами на себя перемножать? |
| Автор: xF1x 12.9.2008, 21:59 |
| ауууу ну где ты? |
| Автор: THandle 12.9.2008, 22:22 | ||||||
| mr.Anderson, тебя плющит!!! Уж извини Так кажись:
И хто есть заюзанная, но не объявленная переменная i? Еще как можно например юзать переменную целого типа для присвоения результата вычислений sqrt? Вот в общем как-то работающий код, формулы не мои
Добавлено через 1 минуту и 54 секунды Процедура считающая длину типа.
4 точки, 4. Ты запусти, посмотри сколько раз надо вводить |
| Автор: xF1x 12.9.2008, 22:26 |
| THandle поясни плиз где мы вводим координаты 4 точек? и почему в начале 2 массива а не 4? Добавлено @ 22:29 len := sqrt((x1-x2)*(x1-x2) + (y1-y2)*(y1-y2)) длина от точки до точки не так находиться из конечной начальную вроде надо вычитать |
| Автор: THandle 12.9.2008, 22:31 | ||
Потому что массивы у Андерсена длиной по 4 элемента, в одном [ координаты в другом y. Я бы вообще сделал запись и один массив, ну это мои уже дела Еще вопросы? |
| Автор: xF1x 12.9.2008, 22:32 |
| len := sqrt((x1-x2)*(x1-x2) + (y1-y2)*(y1-y2)) длина от точки до точки не так находиться из конечной начальную вроде надо вычитать |
| Автор: THandle 12.9.2008, 22:40 | ||
xF1x, предъявы не ко мне, я просто разместил объяву... Смотри, так?
|
| Автор: xF1x 12.9.2008, 22:44 |
| вот формула для нахождения длины от одной точки до другой len:= sqrt(sqr(x1-x)+sqr(y1-y)) поправь если не так мы в классе так делали |
| Автор: THandle 12.9.2008, 22:51 | ||
xF1x, тчоно
Так? |
| Автор: xF1x 12.9.2008, 22:52 |
| вообщем все я разобрался! сам кое где подредактировал! ВСЕМ ОГРОМНОЕ СПАСИБО! |
| Автор: THandle 12.9.2008, 22:56 |
| xF1x, если разобрался, то не поленись теме галочку поставить |
| Автор: xF1x 12.9.2008, 22:59 |
| спасибо! |
| Автор: mr.Anderson 13.9.2008, 14:44 |
| THandle, ну, вот что бывает, когда пишешь подобные ответы в спящем состоянии + при изучении второго языка попутно... xF1x, учил бы, например. |
| Автор: xF1x 16.9.2008, 12:49 |
| 5 поставили! СПАСИБО щас еще одна программа будет! |