Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.01.2009, 01:25   #1
Nickel_An
 
Регистрация: 17.01.2009
Сообщений: 3
По умолчанию решить задачу с тип.файлами

Вот вся задача. Подскажите пожалуйста как эти данные сгруппировать и потом использовать!!!!!
У меня экзамен сегодня..утром!!

Даны 2 файла вещественных чисел, в файле x.dat – находятся координаты по оси Ох, а в файле y.dat, соответственно по оси Оу. Сгруппировать эти точки по 3. Пусть координаты трех точек, являются координатами вершин треугольника. Найти площади полученных треугольников, результаты вывести на экран, записать в текстовый файл, нарисовать эти треугольники.
Nickel_An вне форума Ответить с цитированием
Старый 24.01.2009, 02:21   #2
Sasha_Smirnov
Особый статус
Участник клуба
 
Аватар для Sasha_Smirnov
 
Регистрация: 24.11.2008
Сообщений: 1,535
По умолчанию Подсказываю как

Код:
	Первый треугольник		Второй треугольник	...
Вершины	1-я	2-я	3-я	1-я	2-я	3-я	

x	7.4	-133	0.5	-8	1100	0	...	
y	5.65	24	-217	2.2	914	-99.55	...
Вот так как-то.
А координатами трёх вершин (если они не на одной прямой) полностью определяется треугольник, и его площадь в том числе.

Советую использовать формулу Герона (см., напр., в википедии — мне не посмотреть) — это для площади, ну а длины сторон, которые для той формулы необходимы, вычислите по тореме Пифагора.

Кстати, Nickel_An, насчёт тех вещественных чисел: чтобы было всё наглядно, я бы «своей властью» ввёл только целые и притом неотрицательные, в пределах от 0 до 600* (а поскольку сам программирую для документа Word, то там вообще нет координат, меньших нуля).
Зачётно смотрелись бы треугольники, если каждый изображён своим цветом! Но для одной ночи программа и так уже весьма непростая (конечно, если она для Вас первая).

Вот Капитан всё Вам уже сделал, но тем временем, науки ради, я отыскал, как вычисляется площадь треугольника непосредственно по декартовым координатам его вершин (формула 8 по ссылке).
_______________________
* иначе в экран не влезут!

Последний раз редактировалось Sasha_Smirnov; 24.01.2009 в 19:37.
Sasha_Smirnov вне форума Ответить с цитированием
Старый 24.01.2009, 02:46   #3
capta1n
Форумчанин
 
Аватар для capta1n
 
Регистрация: 06.12.2008
Сообщений: 613
По умолчанию

сча напишу - только без графики
capta1n вне форума Ответить с цитированием
Старый 24.01.2009, 02:56   #4
Nickel_An
 
Регистрация: 17.01.2009
Сообщений: 3
По умолчанию

напишите пожалуйста!!!
Nickel_An вне форума Ответить с цитированием
Старый 24.01.2009, 03:15   #5
capta1n
Форумчанин
 
Аватар для capta1n
 
Регистрация: 06.12.2008
Сообщений: 613
По умолчанию задачка: без графики :)

Код:
program capta1n;
uses crt;
const
 n=10; { Задаваемый размер ( количество треугольников ) }
type
 krdn = array [1..3] of record { Массив записей координат - группировка в виде записи по 3 }
                          x : real;
                          y : real;
                        end;
var
 d : byte; { Счетчик треугольников для координат в тип. файлах ( максимальное количество треугольников ) }
 f1,f2 : file of real; { Тип. файлы }
 ft : text; { Текстовый }
 x0,y0 : real; 
 zap : array [1..n] of krdn; { Координаты ( уже упакованные по три ) для треугольников - массив массива записей координат }
 i,l : 0..n; { Счетчики }
 k : 1..3; { Счетчик координат }
 x1,x2,x3,y1,y2,y3 : real; { кординаты }
 a,b,c : real; { стороны треугольника }
 p, S : real; { полупериметр и площадь }
begin

  clrscr;
  assign (f1,'x.dat');
  assign (f2,'y.dat');

  rewrite (f1);
  rewrite (f2);

  d:=0;
  while readkey<>#27  do { Пока не нажата "ESC" заносим координаты }
  begin
    inc(d);
    writeln (d,' treugol''nik:');
    for k:=1 to 3 do
    begin
      write ('x=');
      readln(x0);
      write (f1,x0);
      write ('y=');
      readln (y0);
      write (f2,y0)
    end
  end;

  close (f1);
  close (f2);


  reset(f1);
  reset(f2);

  i:=0;
  while (not EOF(f1)) and (not EOF(f2)) and (i<n) do
  begin
    inc(i);
    for k:=1 to 3 do
     with zap[i,k] do
     begin
       read (f1,x);
       read (f2,y)
     end
  end;

  close (f1);
  close (f2);

  assign (ft,'square.txt');
  rewrite (ft);
  for l:=1 to i do
  begin
    with zap[l,1] do
    begin
      x1:=x;
      y1:=y
    end;
    with zap[l,2] do
    begin
      x2:=x;
      y2:=y
    end;
    with zap[l,3] do
    begin
      x3:=x;
      y3:=y
    end;
    a:=sqrt(sqr(x1-x2)+sqr(y1-y2));
    b:=sqrt(sqr(x1-x3)+sqr(y1-y3));
    c:=sqrt(sqr(x3-x2)+sqr(y3-y2));
    p:=(a+b+c)/2;
    S:=sqrt(p*(p-a)*(p-b)*(p-c));
    writeln ('Ploshad'' ',l,' treugol''nika ravna: S= ',S:0:2);
    writeln (ft,l,'  Square= ',S:0:2);
  end;

  close (ft);
  readln;

end.
Небольшое пояснение - в первую очередь мы создаем файлы x.dat и y.dat - дальше записываем в них числа до того, пока вы не нажмете ESC ( код #27 ) дальше закрываем, открываем их для чтения - заносим в запись - производим вычисления сторон, по формуле герона производим вычисление площади - пишем в текстовый файл
PS : программа так сделана, что ошибки ввода-вывода координат не будет - координат ровно столько, сколько нужно и в одном и в другом файле - ровно для правильного количества треугольников

Последний раз редактировалось capta1n; 24.01.2009 в 03:32. Причина: кое-что отредактировал!!!
capta1n вне форума Ответить с цитированием
Старый 24.01.2009, 03:46   #6
Nickel_An
 
Регистрация: 17.01.2009
Сообщений: 3
По умолчанию

Уже все работает!!!! Извините!!
Спасибо за задачу!
Nickel_An вне форума Ответить с цитированием
Старый 24.01.2009, 03:54   #7
capta1n
Форумчанин
 
Аватар для capta1n
 
Регистрация: 06.12.2008
Сообщений: 613
По умолчанию

программа работает?
capta1n вне форума Ответить с цитированием
Старый 25.01.2009, 10:28   #8
АмбрВа
 
Регистрация: 25.01.2009
Сообщений: 4
По умолчанию

Народ, а мне поможите решить такую весч (в Delphi):
x>0
i>=0
A(i)=
числитель: (-1)в степени i+1 * ln(i*x)
знаменатель: i*(iв квадрате +1)
в долгу не останусь
АмбрВа вне форума Ответить с цитированием
Старый 25.01.2009, 13:55   #9
capta1n
Форумчанин
 
Аватар для capta1n
 
Регистрация: 06.12.2008
Сообщений: 613
По умолчанию

Код:
program massiv;
const
 n = 10;
var
 A : array [0..n] of real;
 str1 : string;
 error : integer;
 count : integer;
 x : real;
 i,k : byte;
 e : 1..4;
begin

  e:=4;
  writeln ('Enter x:');
  readln (x);
  for i:=0 to n do
   if x*i>0 then
    if odd(i+1) then
    begin
      str (frac(ln(i*x)), str1);
      delete (str1,pos('.',str1),1);
      str1:=copy(str1,1,e);
      writeln (str1);
      val (str1,count,error);
      if count mod 2 = 0 then A[i]:=1/(i*(sqr(i)+1))
                         else A[i]:=0
    end
    else A[i]:=1/(i*(sqr(i)+1))
   else A[i]:=0;

  for i:=1 to n do
   if A[i]=0 then writeln ('Pri i=',i,' zna4enie neopredeleno!')
   else writeln (A[i]:0:e);

  readln
end.
Запарился я ее тестить
capta1n вне форума Ответить с цитированием
Старый 25.01.2009, 16:44   #10
АмбрВа
 
Регистрация: 25.01.2009
Сообщений: 4
По умолчанию

Гранд тебе респект, так сказать тов. капитан
АмбрВа вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перевести тип String в тип PChar (Delphi 7) ScorpioN_T Помощь студентам 2 28.10.2008 22:13
Помогите решить задачу в паскале на строковый тип valis Помощь студентам 3 29.09.2008 14:54
помогите решить: 1 задача на множественный тип, 2 на файлы и процедуры и функции mpegable Паскаль, Turbo Pascal, PascalABC.NET 1 07.05.2008 18:17
данные о видеосистеме: тип видеоадаптера, тип монитора, режим монитора: разрешение, частота обновления WaxeP Win Api 9 15.04.2007 18:12