Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Помощь студентам


Ответ
 
Опции темы Опции просмотра
Старый 14.08.2015, 21:12   #1 (permalink)
Asya_inter
Member
 
Аватар для Asya_inter
 
Регистрация: 12.01.2015
Сообщений: 71
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию Использовать данные из файла в программе

Здравствуйте,задача решена, но мне хотелось бы, чтобы координаты точек были записаны в файле, но я не знаю как можно из файла брать значения координат и вычислять в программе(через цикл наверное)? Подскажите, если знаете, а то примеры в интернете всё не подходящие. И ещё как исключить вероятность нахождения трёх точек на одной прямой?(просто это вроде в условии требуется, а в данном решении не выполняется) задача:На плоскости множество точек, любые три не лежат на одной прямой. Построить треугольник с наименьшей площадью.
Цитата:
program z3;
uses crt;
function Pl(x1,y1,x2,y2,x3,y3:integer):real;
begin
Pl:=abs((x1-x3)*(y2-y3)-(x2-x3)*(y1-y3))/2
end;
const nmax=19;
var t:array[1..2,1..nmax] of integer;
n,i,j,k,imn,imx,jmn,jmx,kmn,kmx,v:byte;
mn,mx:real;
begin
clrscr;
randomize;
repeat
write('Количество точек от 3 до ',nmax,' n=');
readln(n);
until n in [3..nmax];
for i:=1 to n do
begin
t[1,i]:=-10+random(21);
t[2,i]:=-10+random(21);
end;
writeln('Исходные координаты:');
write('X');
for i:=1 to n do
write(t[1,i]:4);
writeln;
write('Y');
for i:=1 to n do
write(t[2,i]:4);
writeln;
mx:=Pl(t[1,1],t[2,1],t[1,2],t[2,2],t[1,3],t[2,3]);
mn:=mx;
imn:=1;imx:=1;
jmn:=2;jmx:=2;
kmn:=3;kmx:=3;
v:=0;
for i:=1 to n-2 do
for j:=i+1 to n-1 do
for k:=j+1 to n do
begin
if(Pl(t[1,i],t[2,i],t[1,j],t[2,j],t[1,k],t[2,k])<mn) then
begin
mn:=Pl(t[1,i],t[2,i],t[1,j],t[2,j],t[1,k],t[2,k]);
imn:=i;
jmn:=j;
kmn:=k
end;
if Pl(t[1,i],t[2,i],t[1,j],t[2,j],t[1,k],t[2,k])>mx then
begin
mx:=Pl(t[1,i],t[2,i],t[1,j],t[2,j],t[1,k],t[2,k]);
imx:=i;
jmx:=j;
kmx:=k
end;
end;
writeln('Треугольник с минимальной площадью:');
writeln(imn,'(',t[1,imn],';',t[2,imn],')');
writeln(jmn,'(',t[1,jmn],';',t[2,jmn],')');
writeln(kmn,'(',t[1,kmn],';',t[2,kmn],')');
writeln('Площадь=',mn:0:2);
writeln('Треугольник с максимальной площадью:');
writeln(imn,'(',t[1,imx],';',t[2,imx],')');
writeln(jmn,'(',t[1,jmx],';',t[2,jmx],')');
writeln(kmn,'(',t[1,kmx],';',t[2,kmx],')');
writeln('Площадь=',mx:0:2);
readln
end.
Asya_inter вне форума   Ответить с цитированием

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

Эти темы аналогичны, можете поискать там полезную информацию

Потоковый граф к программе на C++
Ошибки в программе
Ошибка в программе
Документация по программе
Ошибка в программе

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

Фу, ну и головоломка!
В общем, сотворил.
1. Работа только с файлами, без массивов (использовать и то, и другое - IMHO некультурно ).
2. В выходной файл заносятся значения площадей и туда же - итоговый результат.
3. Имена файлов и пути к ним можно, естественно, поменять.
4. Критерием расположения трёх точек на одной прямой является непревышение площадью треугольника заранее заданного малого числа (Eps). Если сгенерированная точка легла на одну прямую с двумя уже имеющимися, то такая точка не записывается и координаты генерируются заново.
Код:
uses CRT;

Const
 Eps=0.0001;

var
 x,y,x_1,y_1,x_2,y_2,x_3,y_3,
 x1mn,y1mn,x2mn,y2mn,x3mn,y3mn,
 x1mx,y1mx,x2mx,y2mx,x3mx,y3mx:integer;
 N,i,j,k,q:byte;
 s,mn,mx:real;
 f1,f2:Text;
 B:boolean;

function Pl(x1,y1,x2,y2,x3,y3:integer):real;
begin
 Pl:=abs((x1-x3)*(y2-y3)-(x2-x3)*(y1-y3))/2;
end;

Begin
 clrscr;
 randomize;
 repeat
  write('Number of points exceeding 3, N = ');
  readln(N);
 until N>2;
 assign(f1,'D:\inp.txt');
 repeat
  rewrite(f1);
  for i:=1 to 3 do
   begin
    x:=-100+random(201);
    y:=-100+random(201);
    writeln(f1,x:4,y:14);
   end;
  close(f1);
  reset(f1);
  readln(f1,x_1,y_1);
  readln(f1,x_2,y_2);
  readln(f1,x_3,y_3);
  s:=Pl(x_1,y_1,x_2,y_2,x_3,y_3);
  mx:=s;
  mn:=s;
 until s>Eps;
 close(f1);
 assign(f2,'D:\out.txt');
 rewrite(f2);
 writeln(f2,s:12:5);
 i:=3;
 repeat
  x_3:=-100+random(201);
  y_3:=-100+random(201);
  j:=0;
  repeat
   inc(j);
   reset(f1);
   for q:=1 to j-1 do readln(f1);
   readln(f1,x_1,y_1);
   k:=j;
   repeat
    inc(k);
    reset(f1);
    for q:=1 to k-1 do readln(f1);
    readln(f1,x_2,y_2);
    s:=Pl(x_1,y_1,x_2,y_2,x_3,y_3);
    B:=(s<Eps);
    writeln(f2,s:12:5);
    if Not(B) then
     begin
      if s<mn then
       begin
        x1mn:=x_1;
        y1mn:=y_1;
        x2mn:=y_2;
        y2mn:=y_2;
        x3mn:=x_3;
        y3mn:=y_3;
        mn:=s;
       end;
      if s>mx then
       begin
        x1mx:=x_1;
        y1mx:=y_1;
        x2mx:=y_2;
        y2mx:=y_2;
        x3mx:=x_3;
        y3mx:=y_3;
        mx:=s;
       end;
     end;
   until B or (k=i);
  until B or (j=i-1);
 if Not(B) then
  begin
   inc(i);
   close(f1);
   append(f1);
   writeln(f1,x_3:4,y_3:14);
   writeln(f2,s:12:5);
   close(f1);
  end;
 until i=N;
 writeln(f2);
 writeln(f2,'Minimal square triange:');
 writeln(f2,'(',x1mn:3,',',y1mn:3,')');
 writeln(f2,'(',x2mn:3,',',y2mn:3,')');
 writeln(f2,'(',x3mn:3,',',y3mn:3,')');
 writeln(f2,'Square = ',mn:0:2);
 writeln(f2);
 writeln(f2,'Maximal square triangle:');
 writeln(f2,'(',x1mx:3,',',y1mx:3,')');
 writeln(f2,'(',x2mx:3,',',y2mx:3,')');
 writeln(f2,'(',x3mx:3,',',y3mx:3,')');
 writeln(f2,'Square = ',mx:0:2);
 close(f2);
End.
Vladimir_S вне форума   Ответить с цитированием
Старый 25.08.2015, 17:19   #3 (permalink)
Asya_inter
Member
 
Аватар для Asya_inter
 
Регистрация: 12.01.2015
Сообщений: 71
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Vladimir_S, большое спасибо - теперь понятно как это делается!
Asya_inter вне форума   Ответить с цитированием
Ads

Яндекс

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

Метки
free pascal, задача, помогите пожалуйста

Опции темы
Опции просмотра

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

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




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

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