program Trepykhalin3; uses crt; function Ugol(a,b:real):real; begin Ugol:=180-a-b; end; function Stor(a,ua,ub:real):real; begin ua:=ua*pi/180; ub:=ub*pi/180; Stor:=a*sin(ub)/sin(ua); end; function Per(a,b,c:real):real; begin Per:=a+b+c; end; function Plosh(a,b,uc:real):real; begin uc:=uc*pi/180; Plosh:=a*b*sin(uc)/2; end; var a,b,c,ua,ub,uc,p,s:real; begin clrscr; write('Введите длину стороны BC b='); readln(b); repeat writeln('Введите углы BAC и ABC:'); readln(ua,uc); if ua+uc >= 180 then writeln('Это не треугольник. Повторите код.'); until a+c < 180; ub:=Ugol(ua,uc); a:=Stor(b,ub,ua); c:=Stor(b,ub,uc); p:=Per(a,b,c); s:=Plosh(a,b,uc); writeln('Стороны: AB=',c:0:2,' AC=',b:0:2); writeln('Угол: ACB=',uc:0:0,#248); write('Периметр=',p:0:2,' Площадь=',s:0:2); readln end.
пишет что это не треугольник а заново ввести велечины не позволяет , программа работает дальше до конца ..(( исправьте плиз)) как можно более проще, я пока что на 1 курсе и мало что понимаю)))) спасибо!) и вообще она правильно написана то? "Вычислить для треугольника ABC все стороны, все углы (в градусной мере), периметр и площадь, если известны: сторона BC и углы BAC, ABC. Замечание: Программа должна содержать ввод известных величин с клавиатуры, вычисление неизвестных с использованием раздела Function и вывод результатов вычислений на экран"
Автор: DarkWishmaster 5.06.2011 17:11
Цитата(admitriev1992 @ 4.06.2011 12:32)
program Trepykhalin3; uses crt; function Ugol(a,b:real):real; begin Ugol:=180-a-b; end; function Stor(a,ua,ub:real):real; begin ua:=ua*pi/180; ub:=ub*pi/180; Stor:=a*sin(ub)/sin(ua); end; function Per(a,b,c:real):real; begin Per:=a+b+c; end; function Plosh(a,b,uc:real):real; begin uc:=uc*pi/180; Plosh:=a*b*sin(uc)/2; end; var a,b,c,ua,ub,uc,p,s:real; begin clrscr; write('Введите длину стороны BC b='); readln(b); repeat writeln('Введите углы BAC и ABC:'); readln(ua,uc); if ua+uc >= 180 then writeln('Это не треугольник. Повторите код.'); until a+c < 180; ub:=Ugol(ua,uc); a:=Stor(b,ub,ua); c:=Stor(b,ub,uc); p:=Per(a,b,c); s:=Plosh(a,b,uc); writeln('Стороны: AB=',c:0:2,' AC=',b:0:2); writeln('Угол: ACB=',uc:0:0,#248); write('Периметр=',p:0:2,' Площадь=',s:0:2); readln end.
пишет что это не треугольник а заново ввести велечины не позволяет , программа работает дальше до конца ..(( исправьте плиз)) как можно более проще, я пока что на 1 курсе и мало что понимаю)))) спасибо!) и вообще она правильно написана то? "Вычислить для треугольника ABC все стороны, все углы (в градусной мере), периметр и площадь, если известны: сторона BC и углы BAC, ABC. Замечание: Программа должна содержать ввод известных величин с клавиатуры, вычисление неизвестных с использованием раздела Function и вывод результатов вычислений на экран"
repeat writeln('Введите углы BAC и ABC:'); readln(ua,uc); if ua+uc >= 180 then writeln('Это не треугольник. Повторите код.'); until a+c < 180;
ага, вводишь ua и uc, а repeat работает для a и с. until ua+uc мб?
Автор: admitriev1992 5.06.2011 20:07
Цитата(DarkWishmaster @ 5.06.2011 14:11)
repeat writeln('Введите углы BAC и ABC:'); readln(ua,uc); if ua+uc >= 180 then writeln('Это не треугольник. Повторите код.'); until a+c < 180;
ага, вводишь ua и uc, а repeat работает для a и с. until ua+uc мб?
сделай пожалуйста чтобы правильно было я не понимаю пока что(
Автор: DarkWishmaster 5.06.2011 20:10
Цитата(admitriev1992 @ 5.06.2011 16:07)
сделай пожалуйста чтобы правильно было я не понимаю пока что(
ну тогда как я понимаю это не твоя програма если что не понятно.
program Trepykhalin3; uses crt; function Ugol(a,b:real):real; begin Ugol:=180-a-b; end; function Stor(a,ua,ub:real):real; begin ua:=ua*pi/180; ub:=ub*pi/180; Stor:=a*sin(ub)/sin(ua); end; function Per(a,b,c:real):real; begin Per:=a+b+c; end; function Plosh(a,b,uc:real):real; begin uc:=uc*pi/180; Plosh:=a*b*sin(uc)/2; end; var a,b,c,ua,ub,uc,p,s:real; begin clrscr; write('Введите длину стороны BC b='); readln(b); repeat writeln('Введите углы BAC и ABC:'); readln(ua,uc); if ua+uc >= 180 then writeln('Это не треугольник. Повторите код.'); until ua+uc < 180; ub:=Ugol(ua,uc); a:=Stor(b,ub,ua); c:=Stor(b,ub,uc); p:=Per(a,b,c); s:=Plosh(a,b,uc); writeln('Стороны: AB=',c:0:2,' AC=',b:0:2); writeln('Угол: ACB=',uc:0:0,#248); write('Периметр=',p:0:2,' Площадь=',s:0:2); readln end.
Автор: admitriev1992 5.06.2011 20:56
да не моя ) у нас отчет и надо сделать кучу этих программ) скажи пожалуйста это что за строчка?
Код
writeln('Угол: ACB=',uc:0:0,#248);
точнее что делает #248 ???
Автор: IUnknown 5.06.2011 21:00
Цитата
точнее что делает #248 ???
Ты хотя бы запускал программу-то?
Посмотри, что выводится после надписи "Угол: ACB=" сколько-то_там... Значок "градус" (вот такой, в смысле: "°") видишь? Он что, по мановению волшебной палочки там появляется? Его ж надо вывести на экран? Вот его и выводит write(#248). Код этого символа = 248, если что...
Автор: admitriev1992 5.06.2011 21:07
спасибо тебе огромное)) просто у меня чтото с кодировкой наверно и выводит букву "ш" вместо градуса))
скажи пожалуйста еще а для такого задания код программы будет такой
Код
program trepykhalin8; uses crt; var T:real; k,i,d:integer; begin i:=5;k:=3;d:=2; T:=(i/(k+ln(d))); while i<=14 do begin i:=i+1; k:=k+3; d:=d+2; T:=T*(i/(k+ln(d))); end; writeln('T=', T);readln; end.
или вот такой
Код
Var t:real; i:byte; k:real; Begin t:=1; k:=0; for i:=1 to 10 do Begin k:=k+2; t:=t*(4+i)/(3*i-(-1)*ln(k)); end; writeln(t); end.
как думаешь??)
Автор: Krjuger 5.06.2011 22:50
Что за угадай мелодию......
program trepykhalin8; uses crt; var T:real; k,i,d:integer; begin i:=5; k:=3; d:=2; T:=(i/(k+ln(d))); while i<=14 do begin i:=i+1; k:=k+3; d:=d+2; T:=T*(i/(k+ln(d))); end; writeln('T=', T); readln; end.
В этом коде есть как минимум 1 проблема здесь нету знакочередования в знаменателе.....И вторая проблема.Нах тебе CRT если ты его вообще не используешь...........
Автор: admitriev1992 5.06.2011 23:06
Цитата(Krjuger @ 5.06.2011 19:50)
Что за угадай мелодию......
program trepykhalin8; uses crt; var T:real; k,i,d:integer; begin i:=5; k:=3; d:=2; T:=(i/(k+ln(d))); while i<=14 do begin i:=i+1; k:=k+3; d:=d+2; T:=T*(i/(k+ln(d))); end; writeln('T=', T); readln; end.
В этом коде есть как минимум 1 проблема здесь нету знакочередования в знаменателе.....И вторая проблема.Нах тебе CRT если ты его вообще не используешь...........
да фиг с этим crt в окошке просто удобнее ))) а как сделать чтобы прога чередовала знак с плюса на минус?))) подскажи пожалуйста!))
Автор: DarkWishmaster 6.06.2011 1:22
Цитата(admitriev1992 @ 5.06.2011 19:06)
да фиг с этим crt в окошке просто удобнее ))) а как сделать чтобы прога чередовала знак с плюса на минус?))) подскажи пожалуйста!))
меняешь T:=T*(i/(k+ln(d))); на T:=T*(i/(k+sgn(i)*ln(d))); где sgn:
function sgn(x:byte):byte; begin if odd(x) then sgn:=1 else sgn:=-1; end;
т.е если у тя " i " четное то будет минус если нечетное то будет +.
Автор: admitriev1992 6.06.2011 1:44
пока я ждал вас тут, додумался сам и вот что получилось
Код
program zadanie8dmitriev; uses crt; var x,k,y,i : integer; t : real; begin i:=1; t:=1; x:=5; k:=3; y:=2; while x<14 do begin t:= t*(x/(k+i*(ln(y)))); x:=x+1; k:=k+3; y:=y+2; i:=i*(-1); end; writeln('T = ',i); end.
помоему правильно, если нет поправьте, только почемуто ответы разные ... получаются мой вариант правильный для данной задачи?
Автор: DarkWishmaster 6.06.2011 1:49
Цитата(admitriev1992 @ 5.06.2011 21:44)
пока я ждал вас тут, додумался сам и вот что получилось
Код
program zadanie8dmitriev; uses crt; var x,k,y,i : integer; t : real; begin i:=1; t:=1; x:=5; k:=3; y:=2; while x<14 do begin t:= t*(x/(k+i*(ln(y)))); x:=x+1; k:=k+3; y:=y+2; i:=i*(-1); end; writeln('T = ',i); end.
помоему правильно, если нет поправьте, только почемуто ответы разные ... получаются мой вариант правильный для данной задачи?
и так правильно. Знак "i" изменяется каждый раз, так что всё норм. а да, там ещё долнжо x<=14 потому что 14 тоже должен считаться.
Автор: IUnknown 6.06.2011 2:18
Цитата
и так правильно.
Угу, как же. А то, что выводить надо не i, а T - это ничего?
Вариант, разносящий мозг в клочья:
k := 3; t := 1; for X := 5 to 14 do begin t := t * (X / (k + (1 - 2*(1 - x mod 2)) * ln((k div 3) * 2))); k := k + 3; end; writeln(T);
Автор: DarkWishmaster 6.06.2011 3:16
Цитата(IUnknown @ 5.06.2011 22:18)
Угу, как же. А то, что выводить надо не i, а T - это ничего?
дальше не смотрел
Автор: Krjuger 6.06.2011 4:50
Ну почему же выносящий, предпосылки к этому были какие то у топикстартера)))Собственно если умело скрестить его первую и вторую программы так оно где то и вышло,плюс умело найденные закономерности внесеные в саму расчетную формулу)В итоге 5 параметров были заменены 3))) Кстати для знакочередования можно было не писаль отдельную функцию,а воспользоваться экспоненциальной записью))