Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Delphi, Kylix and Pascal


Ответ
 
Опции темы Опции просмотра
Старый 07.07.2014, 17:55   #11 (permalink)
Олеег
Member
 
Регистрация: 06.07.2014
Сообщений: 12
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
Question

Цитата:
Сообщение от Vladimir_S Посмотреть сообщение
с типами полный ужас!
да я сам не пойму, если не напишу в каждом модуле это, то основа выдает вечно, что пременные не объявлены.

Код:
trg=record      
       x1,y1,x2,y2,x3,y3:real;        
       s, p: real; //площадь, периметр     
      end;
как так, я уже по всякому записывал
и, как вы сказали

Цитата:
Сообщение от Vladimir_S Посмотреть сообщение
Во втором и третьем модуле в разделе Interface поставьте
Uses Suschetstvovanie_treugolnika;
и всё!
тоже делал, выдавал ошибку вечно
Олеег вне форума   Ответить с цитированием

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

Ранее на форуме были созданы похожие темы

Модуль матрицы
DC-DC модуль МПВ6А ИРБИС
Модуль памяти

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

В общем, так.
Могу лишь предложить своё решение Вашей задачки, полностью отлаженное и оттестированное. Надеюсь, что поможет.

1. Основная программа:
Код:
uses
  CRT,Sus_tre,Ploshad,Perimetr;
var
  f1,f2:file of trg;
  z:trg;
  n,i,k,kl:integer;
  r1,r2:real;

begin
  clrscr;
  randomize;
  assign(f1,'input');
  rewrite(f1);
  assign(f2,'output');
  rewrite(f2);
  write('Enter the number of triangles ');
  readln(n);
  for i:= 1 to n do
   with z do
    begin
     x1:= -1.2+2.4*random;
     y1:= -1.2+2.4*random;
     x2:= -1.2+2.4*random;
     y2:= -1.2+2.4*random;
     x3:= -1.2+2.4*random;
     y3:= -1.2+2.4*random;
     a:=Sqrt(Sqr(x1-x2)+Sqr(y1-y2));
     b:=Sqrt(Sqr(x1-x3)+Sqr(y1-y3));
     c:=Sqrt(Sqr(x2-x3)+Sqr(y2-y3));
     p:=perm(z);
     s:=plos(z);
     write(f1,z)
    end;
  Close(f1);
  Reset(f1);
  writeln('File F1 content:');
  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:= kl+1;
      write(f2, z);
    end;
  end;
  close(f1);
  close(f2);
  if kl=0 then
   writeLn('No triangulas lying inside the circle')
  else
   begin
    repeat
     write('Enter the perimeter search range r1<r2 ');
     readln(r1,r2);
    until r1<r2;
    reset(f2);
    writeln('Result of perimeter search:');
    k:=0;
    while not eof(f2) do
     begin
      read(f2,z);
      if (z.p>=r1) and (z.p<=r2) then
       begin
        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;
       end;
     end;
    writeln('Number of triangles with perimeter inside the given range is ',k);
    writeln;
    repeat
     write('Enter the square search range r1<r2 ');
     readln(r1,r2);
    until r1<r2;
    reset(f2);
    writeln('Result of square search:');
    k:=0;
    while not eof(f2) do
     begin
      read(f2,z);
      if (z.s>=r1) and (z.s<=r2) then
       begin
        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;
       end;
     end;
    writeln('Number of triangles with square inside the given range is ',k);
    close(f2);
   end;
  ReadKey
end.
Первый модуль:
Код:
Unit sus_tre;

Interface

uses crt;
type
trg=record
     x1,y1,x2,y2,x3,y3:real;
     a,b,c,p,s: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 Perimetr;

interface

uses
 sus_tre;
function perm(t:trg):real;

implementation

function perm(t:trg):real;
 begin
  perm:=t.a+t.b+t.c;
 end;

End.
Третий модуль:
Код:
unit Ploshad;

interface

uses  sus_tre;
function plos(t:trg):real;

implementation

function plos(t:trg):real;
var p2:real;
begin
 p2:=(t.a+t.b+t.c)/2;
 plos:=Sqrt(p2*(p2-t.a)*(p2-t.b)*(p2-t.c));
end;

End.
Пользуюсь DOS Free-Паскалем, поэтому с кириллицей и длинными именами файлов - напряженка. Поправьте, если надо.
Кроме того, я, извините, напрочь не понял, как это Вы так лихо считаете площади треугольников. Я - по старой доброй формуле Герона.
Vladimir_S вне форума   Ответить с цитированием
Старый 07.07.2014, 21:58   #13 (permalink)
Олеег
Member
 
Регистрация: 06.07.2014
Сообщений: 12
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
Smile

Цитата:
Сообщение от Vladimir_S Посмотреть сообщение
В общем, так.
Могу лишь предложить своё решение Вашей задачки, полностью отлаженное и оттестированное. Надеюсь, что поможет.
спасибо за помощь!)
Олеег вне форума   Ответить с цитированием
Старый 07.07.2014, 22:10   #14 (permalink)
Олеег
Member
 
Регистрация: 06.07.2014
Сообщений: 12
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

а площадь по этой формуле)
Изображения
 
Олеег вне форума   Ответить с цитированием
Старый 08.07.2014, 10:01   #15 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от Олеег Посмотреть сообщение
а площадь по этой формуле)
Хм... забавно. Не знал. Вот ведь - век живи, век учись - дураком помрёшь...
P.S. Одна поправка: в этом методе следует брать не сам определитель (он может оказаться и отрицательным), а его абсолютную величину.
Vladimir_S вне форума   Ответить с цитированием
Ads

Яндекс

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

Метки
паскаль, помощь студентам


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

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




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

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