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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.11.2010, 20:35   #1
san050
 
Регистрация: 23.11.2010
Сообщений: 3
Смущение Не получается найти решение

Была дана задача:

"Во входном файле даны 3 целых числа , , . Определить, могут ли они являться длинами сторон треугольника. Если да, то в выходной файл вывести его площадь, иначе вывести -1.

Формат входных данных

Первая строка входного файла содержит 3 целых числа .


Формат выходных данных

Выходной файл должен содержать одно число: площадь треугольника не менее, чем с шестью знаками после десятичной точки, если заданные числа могут являться длинами сторон треугольника, и -1 в противном случае.

Примеры:
Вход

3 4 5

Выход

6.000000"
Я решил её вот так:
Код:
var a,b,c,d,e,S: real;
begin
  reset(input,'input.txt');
  rewrite(output,'output.txt');
  readln(a,b,c);
  if a <= 0 then
  write('-1')
  else
  if b <= 0 then
  write('-1')
  else
  if c <= 0 then
  write('-1')
  else
  begin
    d:=(a+b+c)/2;
    e:=d*(d-a)*(d-b)*(d-c);
    S:=sqrt(e);
    write(S)
  end;
end.
В принципе она работает, но не полностью. Если ввести, к примеру, числа: 25 7 9, то он нечего не выводит, хотя вводя - 23 24 27, всё прекрасно работает. Помогите пожалуйста!

Последний раз редактировалось Stilet; 24.11.2010 в 09:01.
san050 вне форума Ответить с цитированием
Старый 23.11.2010, 21:20   #2
dmitriegorovih
Ещё не
Форумчанин
 
Аватар для dmitriegorovih
 
Регистрация: 04.01.2010
Сообщений: 517
По умолчанию

Цитата:
Код:
if a <= 0 then
write('-1')
else
if b <= 0 then
write('-1')
else
if c <= 0 then
write('-1')
else
это ещё не всё представте треугольник размерами 100:200:1 он не ка не получится не подкаким предлогом.
Воображение важнее, чем знания. (Albert Einstein)
dmitriegorovih вне форума Ответить с цитированием
Старый 23.11.2010, 21:25   #3
san050
 
Регистрация: 23.11.2010
Сообщений: 3
По умолчанию

dmitriegorovih. Хм, логично. Спасибо. А не подскажешь как это исправить?
san050 вне форума Ответить с цитированием
Старый 23.11.2010, 23:18   #4
dmitriegorovih
Ещё не
Форумчанин
 
Аватар для dmitriegorovih
 
Регистрация: 04.01.2010
Сообщений: 517
По умолчанию

Цитата:
А не подскажешь как это исправить?
Подскажу
Код:
var a,b,c,d,e,S: real;
file_chte:Tstringlist;
begin
file_chte:=Tstringlist.Create;
file_chte.LoadFromFile('input.txt');
a:=strtofloat(file_chte.strings[0]); //Будем считать что цифры написаны в столбик
b:=strtofloat(file_chte.strings[1]); //Будем считать что цифры написаны в столбик
c:=strtofloat(file_chte.strings[2]); //Будем считать что цифры написаны в столбик
file_chte.Clear;
if a <= 0 then
file_chte.Add('-1')
else
if b <= 0 then
file_chte.Add('-1')
else
if c <= 0 then
file_chte.Add('-1')
else
begin
d:=(a+b+c)/2;
e:=d*(d-a)*(d-b)*(d-c);
if e>0 then begin
S:=sqrt(e);
file_chte.Add(floattostr(s));
end else begin
file_chte.Add('-1');
end;
file_chte.SaveToFile('output.txt');
end;
end;
Воображение важнее, чем знания. (Albert Einstein)
dmitriegorovih вне форума Ответить с цитированием
Старый 24.11.2010, 00:00   #5
Prisioner
Google user
Пользователь
 
Регистрация: 20.09.2010
Сообщений: 27
По умолчанию

Цитата:
Сообщение от dmitriegorovih Посмотреть сообщение
Подскажу
Не понял суть проверки. Это формула площади, если не ошибаюсь? Не уверен, что она подойдёт.

Вообще проверка делается по "Неравенству треугольника" самая простая.

Если сумма длин любых двух сторон больше третьей - треугольник существует.

Код:
if (a+b>c) and (a+c>b) and (b+c>a) then writeln('Треугольник существует!');
Думаю прикрутить эту строку в нужное место и изменить действие после then не составит труда.
Pascal/Delphi
ICQ: 2881228
Prisioner вне форума Ответить с цитированием
Старый 24.11.2010, 07:17   #6
dmitriegorovih
Ещё не
Форумчанин
 
Аватар для dmitriegorovih
 
Регистрация: 04.01.2010
Сообщений: 517
По умолчанию

Цитата:
Не понял суть проверки. Это формула площади, если не ошибаюсь? Не уверен, что она подойдёт.
Ну смотрите она подходит если это не треугольник то переменная "e" будит отрицательна кстати ваш вариант тоже подходит
Воображение важнее, чем знания. (Albert Einstein)
dmitriegorovih вне форума Ответить с цитированием
Старый 24.11.2010, 09:30   #7
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Цитата:
Не понял суть проверки.
a+b>c неравенство треугольника
a+b-c>0
a+b+c-2c>0
2(a+b+c)/2 -2c>0
(a+b+c)/2 -c>0
d-c>0 положительная площадь
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 24.11.2010, 12:26   #8
san050
 
Регистрация: 23.11.2010
Сообщений: 3
По умолчанию

Всем огромное спасибо за помощь. Всё получилось.
san050 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Delphi. Решение системы нелинейных уравнений методами Ньютона и простых итераций. Помогите найти ошибку! Sianessa Помощь студентам 8 13.04.2012 17:32
подскажите решение -найти значение в диапазоне kievlyanin Microsoft Office Excel 3 19.08.2009 12:05
по заданному А найти эффективное решение Chidory Помощь студентам 1 14.09.2008 17:24
помогите найти решение на Delphi Katovski Помощь студентам 5 17.05.2008 16:14