21.05.2014, 15:53 | #1 (permalink) |
Member
Регистрация: 29.11.2013
Сообщений: 50
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Разработка многомодульной программы с использованием нескольких процедур
Прошу вас о помощи. Разработать программу из двух модулей: Unit и Program. Самостоятельно выделить в задаче процедуры и функции, разместив их в отдельном модуле (Unit) для использования в головном модуле (Program). Если все заданные точки плоскости принадлежат первому квадранту, определить координаты точки, наиболее удаленной от начала координат, иначе определить координаты точек, не попавших в первый квадрант. Впервые сталкиваюсь с такой программой, даже не знаю что такое квадрант. Не умею работать с модулем Unit. Есть схема-"подсказка", но мне она ничего не подсказывает Почитав в интернете про это, я понял только то, что имя файла.pas должно соответствовать имени модуля Unit Это моя последняя программа, завершающая курс информатики, прошу вас помочь мне в последний раз) Заранее спасибо! |
21.05.2014, 15:53 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
Наверное проблема уже решена в похожих темах Нужно сделать в Pascal с использованием функций и процедур Разработка программы с использованием процедур и функций Из данной программы сделать программу с использованием процедур и функций |
21.05.2014, 16:23 | #2 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Мать-перемать, трам-тарарам - язык какой?!!!!
(Не, ну сколько можно просить - ВСЕГДА указывать ЯП! Зла прям не хватает!). А квадрант - это очень просто. Представьте себе бесконечную плоскость, в которой проведены горизонтальная (X) и вертикальная (Y) координатные прямые, обе идут от -∞ до +∞, разделяя плоскость на 4 квадранта, соприкасающихся углами при х=у=0. Стандартная нумерация квадрантов (идем против часовой стрелки): Первый - правый верхний, x≥0; y≥0 Второй - левый верхний, x≤0; y≥0 Третий - левый нижний, x≤0; y≤0 Четвертый - правый нижний, x≥0; y≤0. |
21.05.2014, 17:04 | #3 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Ладно, вот. Если, конечно, устроит Паскаль. Правда, боюсь, смысл этой "схемы-подсказки" навсегда останется тайной ее составителя, я попроще сделал. И не вижу, куда бы тут впихнуть "много модулей" и даже "несколько процедур". ВАЖНО: модуль сохранить под именем My_Unit.pas (ну или под другим, но тогда, соответственно, меняйте и первую строку), программу называйте, как хотите.
Модуль: Код:
Unit My_Unit; Interface Type Coord=Record x,y:Real; End; Function First_Quadr(z:Coord):boolean; Implementation Function First_Quadr(z:Coord):boolean; begin if (z.x>=0) and (z.y>=0) then First_Quadr:=true else First_Quadr:=false; end; end. Код:
Uses My_Unit; Const N=40; Var i:byte; b:boolean; Point:Coord; R:real; Begin R:=0; Randomize; b:=true; for i:=1 to N do begin Point.x:=Random*10-0.12; Point.y:=Random*10-0.12; if not First_Quadr(Point) then begin b:=false; writeln('x = ',Point.x:6:3,' y = ',Point.y:6:3); end else if Sqrt(Sqr(Point.x)+Sqr(Point.y))>R then R:=Sqrt(Sqr(Point.x)+Sqr(Point.y)); end; if b then begin writeln('All points belong to first quadrant'); writeln('Rmax = ',R:6:3); end; Readln End. |
24.05.2014, 15:00 | #5 (permalink) |
Member
Регистрация: 29.11.2013
Сообщений: 50
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Прошу прощения, а как написать так, чтобы выводились координаты точек, не вошедших в квадрант примерно в таком виде:
Координаты точек не вошедших в квадрант: (-1.00 ; -2.00) , (-2.00 ; 3.00) или так как есть только без рандома, а через матрицу или 2 массива. Как лучше прописывать? Двумя массивами (1-ый это Х, 2-ой это У) или матрицей 2хN ? Не получается работать с таким типом. |
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
24.05.2014, 15:41 | #6 (permalink) | |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Что именно "не получается"? Извините, но - не верю! С типом "запись" должен уметь работать даже грёбанный АВС. Скажите уж честно - лень с записями разбираться...
Цитата:
|
|
04.06.2014, 00:41 | #7 (permalink) |
Member
Регистрация: 29.11.2013
Сообщений: 50
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Я с ума сойду , не получается вообще. Помогите мне
Не могу я написать так чтобы выводились координаты всех не вошедших после того как все точки введены. Получается либо сразу после ввода 1 точки, или выводит только последнюю точку если она не вошла.... Вот так мне кажется больше похоже на то что надо, но не работает, не знаю как правильно написать. PHP код:
PHP код:
|
04.06.2014, 09:48 | #8 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Я с Вами тоже.
Знаете, был такой анекдот: - Подсудимый, ваше последнее слово! - Ну вы, блин, даёте... Ведь вот дана была хорошая, отлаженная программка - нет, хочу по-своему! Прекрасно. Вообще-то заслуживает всяческого уважения, куда большего, чем "ничего не знаю, дайте - я скатаю". Но всё-таки надо же представлять себе смысл простейших операторов языка! Вот вы решили вместо массива записей (как у меня), каждая из которых содержит полную информацию о координатах одной точки, сделать единую запись с полями-массивами. Чудесно (хотя, по-моему, это доставание правого уха через-под левое колено, поскольку смысла в такой записи при наличии массивов координат - ровно ноль, ну да Вам виднее - можно и так). И что Вы делаете дальше? Вместо того, чтобы проверять истинность утверждения о том, что конкретная точка сидит в первом квадранте, Вы в функцию First_Quadr за каким-то хреном врабатываете цикл ПО ВСЕМ ТОЧКАМ, причем, вопреки всем правилам и здравому смыслу, используете один и тот же идентификатор (i) и как формальный параметр функции, и как переменную внутреннего цикла! Бедный Паскаль... Даже если он и продерётся через такую конструкцию, то в итоге на выходе функции появится информация о принадлежности к первому квадранту ТОЛЬКО ПОСЛЕДНЕЙ ТОЧКИ! Короче говоря, первое, что нужно - выкинуть цикл из функции: нечего ему там делать!!! Должно быть как-то так: Код:
Function First_Quadr(i:integer; z:Coord):boolean; begin if (z.x[i]>=0) and (z.y[i]>=0) then First_Quadr:=true else First_Quadr:=false; end; Код:
Point.x:=x; Point.y:=y; Поехали дальше. Постановка операторных скобок begin..end внутри программы имеет смысл только тогда, когда ими выделяется тело какого-либо оператора. Выделение просто куска (блока) программы - бессмысленно. Поэтому "begin" после b:=true; и соответствующий ему "end" нужно убрать. Далее. Ну зачем же при наличии точек вне первого квадранта выводить заголовок 'Координаты точек не попавших в первый квадрант: ' перед выводом координат КАЖДОЙ из этих точек?! Некрасиво. Кроме того, вывод самих координат следует, естественно, сделать форматным. Опять же для красоты. Я тут нарисовал тестовый вариант без модуля (лень было с ним дрызгаться). Советую взять за основу. Код:
Const n=5; Type mass = array[1..n] of real; Coord=Record x,y:mass; End; Const x:mass=(2, -3, 6, 7, 8); y:mass=(0, 1, -2, 9, 3); Var i:byte; b:boolean; Point:Coord; R:real; Function First_Quadr(i:integer; z:Coord):boolean; begin if (z.x[i]>=0) and (z.y[i]>=0) then First_Quadr:=true else First_Quadr:=false; end; Begin Point.x:=x; Point.y:=y; R:=0; b:=true; for i:=1 to n do if not First_Quadr(i, Point) then begin b:=false; writeln('Point coordinates out of first quadrant: '); end; if not b then begin for i:=1 to n do if not First_Quadr(i, Point) then writeln('x = ',Point.x[i]:0:3,' y = ',Point.y[i]:0:3); end else begin for i:=1 to n do if Sqrt(Sqr(Point.x[i])+Sqr(Point.y[i]))>R then R:=Sqrt(Sqr(Point.x[i])+Sqr(Point.y[i])); end; if b then begin writeln('All points belong to first quadrant. '); writeln('Rmax = ',R:0:3); end; Readln End. |
04.06.2014, 11:35 | #9 (permalink) |
Member
Регистрация: 29.11.2013
Сообщений: 50
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Спасибо большое=)
PHP код:
PHP код:
|
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
|
|