16 июня 2025, 15:35:41

Новости:

Чтобы использовать все возможности форума на смартфоне или планшете необходимо в браузере выбрать настройку "Версия для ПК".


avatar_PlayBoy1989

Pascal- кто может...

Автор PlayBoy1989, 03 мая 2006, 23:45:52

0 Пользователей и 1 гость просматривают эту тему.

WiT[4]eR

Доброго времени суток!
Помогите, пожалуйста, решить задачку на Pascal'e:
Найти S - сумарную площадь N прямоуголных треугольников, если длина меньшего катета равна квадратному корню из длины большего, а длина большего катета составляет последовательность b,b/2,b/3,...,b/n.

Salagin

06 октября 2006, 06:18:56 #11 Последнее редактирование: 06 октября 2006, 10:29:44 от Salagin
WiT[4]eR
Математика рулит  :lol:  Сначала составь математическое решение, а на паскале просто будет.
Если к власти не придут красно-коричневые, потому что им помешают зеленые, то власть захватят голубые.

Летят N самолетов, нет N мало -- К и оба реактивные...

WiT[4]eR

06 октября 2006, 13:16:28 #12 Последнее редактирование: 06 октября 2006, 13:17:27 от WiT[4]eR
S = 1/2*(a1*b1+a2*b2+a3*b3+...+an*bn)
я не знаю как обозначить сумму состоящую из n слагаемых, а также как обозначить больший катет. (с Паскалем совсем мало знаком просто) :huh:

PavelAlex

var a,b,s,n: real (вещественный тип)
begin
writeln('ведите n',n)
read(n)
и ведите всё остальное, кром s
s:=1/2.....
writeln('oтвет s=',s)

а в чём сложность?

WiT[4]eR

08 октября 2006, 08:29:50 #14 Последнее редактирование: 08 октября 2006, 09:43:16 от WiT[4]eR
для меня, на данный, момент сложность заключается в том как присвоить "b" значение в виде последовательности. вот что у меня получилось:
program primer1;
var a,b,s,n,i: real;
begin
writeln('vvedite n',n);
writeln('vvedite a',a);
writeln('vvedite b',b);
read(n,a,b);
a:= sqrt(b);
for i:= 1 to n do
begin
b:= b/i;
s:= (1/2*(a*B))*n;
end;
writeln('s=',s);
end.

ошибка где-то в цикле FOR, но я не знаком с синтаксисом Паскаля. :(  

bestya

08 октября 2006, 10:25:37 #15 Последнее редактирование: 08 октября 2006, 10:33:29 от bestya
Вроде так должно быть, у тебя в циклах использовался вещетвенный тип, а нужно целочисленный.


program primer1;
var
 a,b,s: real;
 i,n:longint;

BEGIN
write('Введите  n');
readln(n);
write('Введите b');
readln(b);

s:=0;

for i:= 1 to n do
 begin
   b:= b/i;
   a:= sqrt(b);
   s:= s+ (a*b);  
 end;

s:=s*1/2

writeln('s=',s);
END.

PavelAlex

08 октября 2006, 10:50:36 #16 Последнее редактирование: 08 октября 2006, 11:04:56 от PavelAlex
WiT[4]eR

Цитировать
//var a,b,s,n,i: real; так не правильно, правельней так:
var a,b,s:real; //вещественный тип
i,n:integer; //целочисленный тип

read(n,a,b );

s:=0; // перед началом цикла (for i:= 1 to n do) нужно s присвоить 0, для того чтобы значение s
// могло наращиваться

// здесь у тебя a:= sqrt(b ) - это неправильно а нужно её в самом цикле прописать, ведь а у тебя
//постояно изменятся должна

for i:= 1 to n do
begin
b:= b/i;
a:= sqrt(b ); //здесь появилась переменая а
s:= s+(1/2*(a*b ))*n; // изменили s:= (1/2*(a*b ))*n на s:= s+(1/2*(a*b ))*n, только вот непонятно
// скорей всего правильней будет вместо n написать i
// а также здесь не понятно, судя по твоей формуле выше, на фига вообще умножать на n
end;
writeln('s=',s);

WiT[4]eR

08 октября 2006, 11:40:33 #17 Последнее редактирование: 08 октября 2006, 11:42:51 от WiT[4]eR
что i и n целочисленные я уже понял. в остальном за советы благодарю.
переменная "а" не изменяется, её вводят один раз. формула, написаная выше не совсем корректна, т.к. "а" и "b" не изменяются.=> S:= (1/2*( a*b ))*i (действительно "i" будет вместо "n")
в общем код получился таким:
program primer1;
var a,b,s: real;
   i,n: integer;
Begin
Write('vvedite n '); ReadLn(n);
Write('vvedite a '); ReadLn(a);
Write('vvedite b '); ReadLn(b);
s:= 0;
For i:= 1 to n do
begin
b:= b/i;
a:= sqrt(b);
s:= (1/2*(a*b))*i;
end;
WriteLn('s= ',s)

только вот в чём проблема. i должно изменяться от 1-го до бесконечности, т.е. до k (n использовать нельзя, т.к. это кол-во треугольников). не подскажите как это реализовать?

PavelAlex

должно быть так:
For i:= 1 to n do
begin
b:= b/i;
a:= sqrt(b);
s:=s+ (1/2*(a*b))*i;
end;


Цитироватьтолько вот в чём проблема. i должно изменяться от 1-го до бесконечности, т.е. до k (n использовать нельзя, т.к. это кол-во треугольников).

пускай препод нормально, объснит, где у тебя ещё и k должно быть.

WiT[4]eR

08 октября 2006, 13:35:07 #19 Последнее редактирование: 08 октября 2006, 13:36:48 от WiT[4]eR
Цитироватьпускай препод нормально, объснит, где у тебя ещё и k должно быть.

препод сказал: "неправильно, внимательно прочти условие задачи" и всё, никакого пояснения не дал. k должно быть, скорее всего, в этой строчке вместо n:
For i:= 1 to n do



По всем вопросам пишите по адресу gratispp@mail.ru