Помощь - Поиск - Пользователи - Календарь
Полная версия: чтото с условием
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
admitriev1992
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
Цитата(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
Цитата(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
Цитата(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
да не моя ) у нас отчет и надо сделать кучу этих программ)
скажи пожалуйста это что за строчка?
Код
writeln('Угол: ACB=',uc:0:0,#248);
точнее что делает #248 ???
IUnknown
Цитата
точнее что делает #248 ???
Ты хотя бы запускал программу-то?

Посмотри, что выводится после надписи "Угол: ACB=" сколько-то_там... Значок "градус" (вот такой, в смысле: "°") видишь? Он что, по мановению волшебной палочки там появляется? Его ж надо вывести на экран? Вот его и выводит write(#248). Код этого символа = 248, если что...
admitriev1992
спасибо тебе огромное)) просто у меня чтото с кодировкой наверно и выводит букву "ш" вместо градуса))

скажи пожалуйста еще а для такого задания Изображение
код программы будет такой
Код
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.


как думаешь??smile.gif)
Krjuger
Что за угадай мелодию......

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
Цитата(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
Цитата(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
пока я ждал вас тут, додумался сам и вот что получилось
Код
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
Цитата(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
Цитата
и так правильно.
Угу, как же. А то, что выводить надо не i, а T - это ничего? smile.gif

Вариант, разносящий мозг в клочья:
   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
Цитата(IUnknown @ 5.06.2011 22:18) *

Угу, как же. А то, что выводить надо не i, а T - это ничего? smile.gif


lol.gif дальше не смотрел
Krjuger
Ну почему же выносящий, предпосылки к этому были какие то у топикстартера)))Собственно если умело скрестить его первую и вторую программы так оно где то и вышло,плюс умело найденные закономерности внесеные в саму расчетную формулу)В итоге 5 параметров были заменены 3)))
Кстати для знакочередования можно было не писаль отдельную функцию,а воспользоваться экспоненциальной записью))
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.