Предмет: Информатика,
автор: Olivka0
сделать в паскале при помощи процедур
Приложения:
Аноним:
Эта задача была решена. Вчера или позавчера - точно не помню.
там без процедур
Может быть, не помню, хоть и сам решал.
Она слишком простая, процедуры только увеличат объем писанины )))
ну вот увы(9(
Хороший пример того, как НЕ НАДО использовать процедуры )))
так могли бы помочь?)
Сейчас сделаю из той...
спасибо заранее))
Ответы
Автор ответа:
1
PascalABC.NET 3.4.0, сборка 1670 от 23.05.2018
Внимание! Если программа не работает, обновите версию!
procedure В_Круге(x,y:array of real; var r:array of boolean);
// Каждый элемент r[i] равен True, если точка с координатами (x[i],y[i])
// лежит внутри единичного круга c центром в точке (2;-3)
begin
r:=x.Zip(y,(p,q)->Sqr(p-2)+Sqr(q+3)<1).ToArray
end;
procedure ПроизведениеАбсцисс(x:array of real; r:array of boolean;
var res:real);
begin
res:=x.Where((v,i)->r[i]).Aggregate(1.0,(p,q)->p*q)
end;
procedure СуммаОрдинат(y:array of real; r:array of boolean;
var res:real);
begin
res:=y.Where((v,i)->r[i]).Sum
end;
begin
var n:=ReadInteger('n=');
var x:=SeqRandom(n,0,40).Select(t->t/10).ToArray;
Writeln('Массив Х:'); x.Println;
Writeln('Введите элементы массива Y:');
var y:=ReadArrReal(n);
var b:=new boolean[n];
В_круге(x,y,b);
var Px,Sy:real;
ПроизведениеАбсцисс(x,b,Px);
СуммаОрдинат(y,b,Sy);
Writeln('Произведение абсцисс ',Px,', сумма ординат ',Sy)
end.
Внимание! Если программа не работает, обновите версию!
procedure В_Круге(x,y:array of real; var r:array of boolean);
// Каждый элемент r[i] равен True, если точка с координатами (x[i],y[i])
// лежит внутри единичного круга c центром в точке (2;-3)
begin
r:=x.Zip(y,(p,q)->Sqr(p-2)+Sqr(q+3)<1).ToArray
end;
procedure ПроизведениеАбсцисс(x:array of real; r:array of boolean;
var res:real);
begin
res:=x.Where((v,i)->r[i]).Aggregate(1.0,(p,q)->p*q)
end;
procedure СуммаОрдинат(y:array of real; r:array of boolean;
var res:real);
begin
res:=y.Where((v,i)->r[i]).Sum
end;
begin
var n:=ReadInteger('n=');
var x:=SeqRandom(n,0,40).Select(t->t/10).ToArray;
Writeln('Массив Х:'); x.Println;
Writeln('Введите элементы массива Y:');
var y:=ReadArrReal(n);
var b:=new boolean[n];
В_круге(x,y,b);
var Px,Sy:real;
ПроизведениеАбсцисс(x,b,Px);
СуммаОрдинат(y,b,Sy);
Writeln('Произведение абсцисс ',Px,', сумма ординат ',Sy)
end.
Приложения:
Замечание: PascalABC.NET позволяет использовать в именах не только латинские буквы и цифры, но также буквы других алфавитов - кириллицу, греческие и т.д.
Вы согласны, что программа из-за этих процедур получилась длиннее и даже менее понятной? )))
Это потому, что тело каждой процедуры содержит одну строку и проще написать ее в основной программе, чем городить заголовок процедуры, параметры, вызов этой процедуры...
Видимо, смысл задания был в том, чтобы показать, как процедуры упрощают программу, а получился противоположный эффект.
Похожие вопросы
Предмет: Физика,
автор: sonybespalova19
Предмет: Английский язык,
автор: volenina2005
Предмет: Українська мова,
автор: zepetohouse24
Предмет: Алгебра,
автор: Babka228Masha
Предмет: Математика,
автор: Mммммм