Помогите решить задачу.
| |
QWER56 | Дата: Воскресенье, 19 Сентября 2010, 08:39 | Сообщение # 1 |
старожил
Сейчас нет на сайте
| Нужно написать программу, которая высчитывает площадь треугольника по длинам трёх сторон, по формуле Герона. Вот, что у меня получилось: Code program ger; uses crt; var a, b, c:integer; function geron(a,b,c:integer):double; var p:double; begin p:=(a+b+c)/2; geron:=p*(p-a)*(p-b)*(p-c); end; begin write('vvedite a-> '); readln(a); write('vvedite b-> '); readln(b); write('vvedite c-> '); readln(c); writeln(geron(a,b,c)); readkey; end. Но программа выдаёт такой ответ: Как это исправить? А то в Паскале я не очень разбираюсь. Для тех кто не знает, то ФОРУМУЛА ГЕРОНА.
ConsMark - поисковик по интернет магазинам.
Сообщение отредактировал QWER56 - Воскресенье, 19 Сентября 2010, 08:42 |
|
| |
mitch | Дата: Воскресенье, 19 Сентября 2010, 09:35 | Сообщение # 2 |
постоянный участник
Сейчас нет на сайте
| QWER56, а квадратный корень у тебя где? должно же быть вроде так: geron := sqrt ( p * ( p - a ) * ( p - b ) * ( p - c ) ) и зачем там функция geron? можно же просто завести переменные a, b, c, p, geron
Сообщение отредактировал mitch - Воскресенье, 19 Сентября 2010, 09:36 |
|
| |
QWER56 | Дата: Воскресенье, 19 Сентября 2010, 12:58 | Сообщение # 3 |
старожил
Сейчас нет на сайте
| mitch, щас попробую. Добавлено (19.09.2010, 12:58) --------------------------------------------- Только всё равно та же проблема.
ConsMark - поисковик по интернет магазинам.
|
|
| |
bum | Дата: Воскресенье, 19 Сентября 2010, 13:12 | Сообщение # 4 |
почетный гость
Сейчас нет на сайте
| Как уже было сказано выше - пропущен квадратный корень в формуле герона. Но я так понимаю, вас больше интересует как увидеть результат в более привычном виде? Можно использовать некоторые возможности паскаля в плане форматированного вывода: Code writeln(geron(a,b,c):10:3); Здесь первое число после двоеточия - количество символьных розрядов которые вы хотите выделить под вывод данных (данные будут выведены с выравниванием по правому краю), а второе число указывает на желаемое количество десятичных разрядов. Вот я чуть подправил код: http://ideone.com/Mxs15
Сообщение отредактировал bum - Воскресенье, 19 Сентября 2010, 13:19 |
|
| |
lvovand | Дата: Воскресенье, 19 Сентября 2010, 13:17 | Сообщение # 5 |
старожил
Сейчас нет на сайте
| правильно сказали, во-первых корень взять, sqrt ( p * ( p - a ) * ( p - b ) * ( p - c ) ) во-вторых вывод результата чмитаемым сделай через форматированный вывод формат Write(n:s:d); n - это переменная вещественного типа; s - количество позиций для вывода значения переменной n; d - количество знаков после запятой
Разработка и продвижение сайтов. Дизайн
|
|
| |
TrueIfrit | Дата: Суббота, 25 Сентября 2010, 19:58 | Сообщение # 6 |
Свободный геймдизайнер
Сейчас нет на сайте
| Code program ger; uses crt; label metka; var a, b, c: longint; function geron(a,b,c:integer): extended; var p: extended; begin p:=(a+b+c)/2; geron:=sqrt(p*(p-a)*(p-b)*(p-c)); end; begin metka : clrscr; write('Please, enter the A -> '); readln(a); write('Please, enter the B -> '); readln(b); write('Please, enter the C -> '); readln(c); if ((a + b) >= c) and ((a + c) >= b) and ((b + c) >= a) then writeln(geron(a,b,c):10:3) else goto metka; readkey; end. При вводе значений 3, 3 и 3 все работало. При вводе 1, 3 и 5 была ошибка: Quote Program [путь к программе] exited with exitcode = 207 Это связано с тем что треугольник 1, 3 и 5 невозможен, задача решена, спасибо, Йож
Сообщение отредактировал TrueIfrit - Суббота, 25 Сентября 2010, 21:02 |
|
| |
ezhickovich | Дата: Суббота, 25 Сентября 2010, 20:46 | Сообщение # 7 |
[Великий и могучий хозяинъ]
Сейчас нет на сайте
| Code #include <stdio.h> #include <math.h>
float fuckthisbrain (int a, int b, int c) { float p = (a + b +c)/2; return sqrt (p*(p - a)*(p - b)*(p - c)); }
int main () { int a, b, c; scanf ("%d%d%d", &a, &b, &c); printf ("%f", fuckthisbrain (a, b, c)); return 0; } Добавлено (25.09.2010, 20:46) ---------------------------------------------
Quote (TrueIfrit) При вводе 1, 3 и 5 была ошибка Quote [20:41:20] <ezhickovich> хмм... [20:41:48] <ezhickovich> 1 + 3 + 5 = 9 [20:42:01] <ezhickovich> 9/2 = 4.5 [20:42:17] <ezhickovich> 4.5 - 1 = 3.5 [20:42:30] <ezhickovich> 4.5 - 3 = 1.5 [20:42:48] <TrueIfrit> странно [20:42:50] <TrueIfrit> все это [20:42:51] <ezhickovich> 4.5 - 5 = -1.5 [20:43:01] <TrueIfrit> хмм... [20:43:02] <ezhickovich> -1.5!!!!!!!!!!!! [20:43:21] <TrueIfrit> но почему он не хочет показывать отрицательные значения? [20:43:23] <ezhickovich> при умножении на минус получается минус... [20:43:43] <ezhickovich> а из минуса нельзя вычичлить корень... [20:43:52] <ezhickovich> FAIL [20:43:58] <ezhickovich> во как... [20:44:48] <ezhickovich> треугольник 1 3 5 просто невозможен... [20:45:15] <ezhickovich> вот поэтому и FAIL
Я: О великий повелитель этой ничтожной вселенной - сокращённо ЁЖ!
|
|
| |
simtiko | Дата: Суббота, 25 Сентября 2010, 20:47 | Сообщение # 8 |
почти ветеран
Сейчас нет на сайте
| Code
program ger; uses crt; var a, b, c,p,geron:real;
begin write('vvedite a-> '); readln(a); write('vvedite b-> '); readln(b); write('vvedite c-> '); readln(c); p:=(a+b+c)/2; geron := sqrt ( p * ( p - a ) * ( p - b ) * ( p - c ) ); writeln(geron); readkey; end.
|
|
| |
TrueIfrit | Дата: Суббота, 25 Сентября 2010, 20:49 | Сообщение # 9 |
Свободный геймдизайнер
Сейчас нет на сайте
| Изменил свой вариант решения - [клик!] - делал в Free Pascal IDE, все работает ezhickovich, еще раз аригато
|
|
| |
lvovand | Дата: Суббота, 25 Сентября 2010, 20:49 | Сообщение # 10 |
старожил
Сейчас нет на сайте
| сумма длин двух сторон треугольника всегда больше длины третьей стороны, таким образом треугольника со сторонами 1, 3 и 5 просто не может существовать, можно перед расчетом площади организовать эту проверку
Разработка и продвижение сайтов. Дизайн
|
|
| |
TrueIfrit | Дата: Суббота, 25 Сентября 2010, 21:02 | Сообщение # 11 |
Свободный геймдизайнер
Сейчас нет на сайте
| Добавил в свой код проверку, спс lvovand
|
|
| |
ezhickovich | Дата: Суббота, 25 Сентября 2010, 21:03 | Сообщение # 12 |
[Великий и могучий хозяинъ]
Сейчас нет на сайте
| Code #include <stdio.h> #include <math.h>
float fuckthisbrain (int a, int b, int c) { float p = (a + b +c)/2; return sqrt (p*(p - a)*(p - b)*(p - c)); }
int main () { int a, b, c; do { scanf ("%d%d%d", &a, &b, &c); } while (!((a + b >= c) && (b + c >= a) && (a + c >= b))); printf ("%f", fuckthisbrain (a, b, c)); return 0; } Исправил... ( с учётом проверок )
Я: О великий повелитель этой ничтожной вселенной - сокращённо ЁЖ!
|
|
| |
|