06.07.2014, 11:48 | #1 (permalink) |
Member
Регистрация: 06.07.2014
Сообщений: 12
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
TPU-модуль. Паскаль
вот кусок проги с функцией, которую нужно описать в тпу модуле uses crt; type trg=record x1,y1,x2,y2,x3,y3:real;//координаты end; function prin(t:trg):boolean;{принадлежность треугольника кругу} begin prin:=(sqr(t.x1)+sqr(t.y1)<1)//все 3 вершины в заданном круге and(sqr(t.x2)+sqr(t.y2)<1) and(sqr(t.x3)+sqr(t.y3)<1) end; |
06.07.2014, 11:48 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
Ранее на форуме были созданы похожие темы Модуль матрицы DC-DC модуль МПВ6А ИРБИС Модуль памяти |
06.07.2014, 13:31 | #2 (permalink) | |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Цитата:
Код:
Unit MyUnit; Inteface uses crt; type trg=record x1,y1,x2,y2,x3,y3:real; //координаты end; function prin(t:trg):boolean; {принадлежность треугольника кругу} Implementation function prin(t:trg):boolean; begin prin:=((sqr(t.x1)+sqr(t.y1))<1) and ((sqr(t.x2)+sqr(t.y2))<1) and ((sqr(t.x3)+sqr(t.y3))<1) end; End. Uses MyUnit; Тип trg описывать в программе уже не нужно, он задан в модуле. |
|
07.07.2014, 12:52 | #5 (permalink) | |
Member
Регистрация: 06.07.2014
Сообщений: 12
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
программа не хочет запускаться
Цитата:
прога не запускается, что не так? |
|
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
07.07.2014, 12:56 | #6 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Потому что неправильно задано обращение к модулю! Я же Вам написал, что в основной программе это делается оператором Uses, т.е у Вас должно быть:
Uses CRT, suschestvovanie_treugolnika; А Вы что написали? Кроме того, могут возникнуть проблемы, связанные с размещением TPU-файла. Проверьте, что он находится именно в той директории, которая прописана в свойствах транслятора для модулей. |
07.07.2014, 13:29 | #7 (permalink) | |
Member
Регистрация: 06.07.2014
Сообщений: 12
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Цитата:
syschestvovanie_treygolnika.pas : Встречено 'Inteface', а ожидалось begin |
|
07.07.2014, 16:51 | #9 (permalink) |
Member
Регистрация: 06.07.2014
Сообщений: 12
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
С этой проблемой разобрался, спасибо) но появился новый баг о основной программе.
С этой проблемой разобрался, спасибо) но появился новый баг о основной программе. Проверьте пожалуйста правильность оформления Создать файл F1, содержащий заданное число треугольников, описываемых координатами своих вершин. Координаты вершин получить с помощью датчика случайных чисел Random в интервале [-1.2 , 1.2]. Найти все треугольники, лежащие целиком внутри круга с центром в точке (0,0) радиуса 1.0. Сведения о треугольниках (координаты вершин, площадь и периметр) попавших внутрь круга, поместить в файл F2. Получить из файла F2 данные о количестве треугольников, площадь которых или периметр лежат в заданном интервале. Код:
program Osnova; uses crt, Syschestvovanie_treygolnika, Ploshad, Perimetr; type trg=record x1,y1,x2,y2,x3,y3:real; s, p: real;//площадь, периметр end; var f1, f2: file of trg; z: trg; n, i, k, kl: integer; a, b: real; begin clrscr; randomize; assign(f1, 'input'); rewrite(f1); assign(f2, 'output'); rewrite(f2); writeln('Введите число треугольников:'); readln(n); for i := 1 to n do begin z.x1 := (-1.2 + 2.4) * random; z.y1 := (-1.2 + 2.4) * random; z.x2 := (-1.2 + 2.4) * random; z.y2 := (-1.2 + 2.4) * random; z.x3 := (-1.2 + 2.4) * random; z.y3 := (-1.2 + 2.4) * random; write(f1, z) end; writeln('Содержание файла F1'); seek(f1, 0); k := 0; kl := 0; while not eof(f1) do begin read(f1, z); k := k + 1; writeln(k:2, ') A (', z.x1:5:2, ' ', z.y1:5:2, ') B (', z.x2:5:2, ' ', z.y2:5:2, ')' ' C (', z.x3:5:2, ' ', z.y3:5:2, ')'); if k mod 20 = 0 then begin writeLn('Press Enter'); readln end; if prin(z) then begin kl := 1; z.s := plos(z); z.p := perm(z); write(f2, z); end; end; close(f1); if kl = 0 then begin writeLn('Нет треугольников, целиком лежащих в данном круге'); close(f2); exit end; repeat writeln('Введите интервал для поиска a < b'); readln(a, b); until a < b; seek(f2, 0); writeln('Содержание файла F2'); k := 0; kl := 0; while not eof(f2) do begin read(f2, z); k := k + 1; writeln(k:2, ') A (', z.x1:5:2, ' ', z.y1:5:2, ') B (', z.x2:5:2, ' ', z.y2:5:2, ')' ' C (', z.x3:5:2, ' ', z.y3:5:2, ')'); writeln( 'S = ', z.s:5:2, ' P = ', z.p:5:2); if k mod 20 = 0 then begin writeLn('Press Enter'); readln end; if ((z.s >= a) and (z.s <= b)) or ((z.p >= a) and (z.p <= b)) then kl := kl + 1; end; writeln('Количество треугольников, у которых площадь или периметр'); writeln('попадают в заданный интервал=', kl); close(f2); end. 1) Код:
Unit syschestvovanie_treygolnika; Interface uses crt; type trg=record x1,y1,x2,y2,x3,y3:real; //координаты end; function prin(t:trg):boolean; {принадлежность треугольника кругу} Implementation function prin(t:trg):boolean; begin prin:=((sqr(t.x1)+sqr(t.y1))<1) and ((sqr(t.x2)+sqr(t.y2))<1) and ((sqr(t.x3)+sqr(t.y3))<1) end; End. Код:
unit Ploshad; interface uses crt,syschestvovanie_treygolnika; type trg=record x1,y1,x2,y2,x3,y3:real; s, p: real;//площадь, периметр end; function plos(t: trg): real; implementation function plos(t: trg): real; begin plos := ((t.x1 - t.x3) * (t.y2 - t.y3) - (t.x2 - t.x3) * (t.y1 - t.y3)) / 2 end; End. Код:
unit Perimetr; interface uses crt,syschestvovanie_treygolnika; type trg=record x1,y1,x2,y2,x3,y3:real; s, p: real;//площадь, периметр end; function perm(t: trg): real; implementation function perm(t: trg): real; begin perm := sqrt(sqr(t.x1 - t.x2) + sqr(t.y1 - t.y2)) + sqrt(sqr(t.x2 - t.x3) + sqr(t.y2 - t.y3)) + sqrt(sqr(t.x3 - t.x1) + sqr(t.y3 - t.y1)) end; End. |
07.07.2014, 17:09 | #10 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Сходу не отвечу, ошибок ОЧЕНЬ много, полная путаница с типами, не говоря уж о таких перлах:
z.x1 := (-1.2 + 2.4) * random; Очевидно, имеется в виду z.x1 := -1.2 + 2.4*random; Начните с этих исправлений, но главное, повторяю - с типами полный ужас! Советую ввести ОДИН РАЗ полный тип Код:
trg=record x1,y1,x2,y2,x3,y3:real; s, p: real; //площадь, периметр end; Uses Suschetstvovanie_treugolnika; и всё! Больше ни в модулях, ни в программе повторного описания типа trg БЫТЬ НЕ ДОЛЖНО! Сам алгоритм посмотрю позже. |
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
Метки |
паскаль, помощь студентам |
|
|