Вам дан массив а из n натуральных чисел.Вы должны выбрать натуральное число d и покрасить все элементы массива в 2 цвета.Те элементы,которые делятся на d,будут покрашены в красный цвет,а те,которые не делятся - в синий ,
PascalABC.NET 3.3.5, сборка 1662 от 29.04.2018 Внимание! Если программа не работает, обновите версию!
function gcd(a,b:integer):integer; // НОД begin while b<>0 do begin a:=a mod b; Swap(a,b) end; Result:=a end;
procedure RedFrac(var a,b:integer); // сокращение дроби begin var (sgna,sgnb):=(Sign(a),Sign(b)); // мы должны учитывать знак! (a,b):=(Abs(a),Abs(b)); var d:=gcd(a,b); a:=(a div d)*sgna; b:=(b div d)*sgnb end;
begin var (a,b):=ReadInteger2('Введите числитель и знаменатель 1-й дроби:'); var (c,d):=ReadInteger2('Введите числитель и знаменатель 2-й дроби:'); (a,b):=(a*c,b*d); RedFrac(a,b); Writeln('Результат умножения: ',a,' / ',b) end.
Пример Введите числитель и знаменатель 1-й дроби: 32 1024 Введите числитель и знаменатель 2-й дроби: 60 300 Результат умножения: 1 / 160
В качестве бонуса - решение на базе входящей в состав PascalABC.NET библиотеки численных методов
uses NumLibABC;
begin var (a,b):=ReadInteger2('Введите числитель и знаменатель 1-й дроби:'); var (c,d):=ReadInteger2('Введите числитель и знаменатель 2-й дроби:'); Writeln('Результат умножения: ',Frc(a,b)*Frc(c,d)) end.
//PascalABC.NET 3.0, сборка 1088 begin var a:=ReadLines('infile.txt').ToArray; var n:=a.Length; Writeln('*** Исходная информация ***'); // фамилия, имя, возраст, рост, вес a.PrintLn(NewLine); Writeln('*** Задание 1 ***'); var sves:real:=0; var srost:real:=0; foreach var s in a do begin srost+=StrToFloat(s.ToWords.ElementAt(3)); sves+=StrToFloat(s.ToWords.ElementAt(4)) end; Writeln('Средний рост равен ',srost/n:5:1); Writeln('Средний вес равен ',sves/n:4:1); srost/=n; sves/=n; Writeln('*** Задание 2 ***'); var f2:=OpenWrite('rost.txt'); foreach var s in a do begin var ss:=s.ToWords; var rost:=StrToFloat(ss.ElementAt(3)); if rost>srost then begin var s0:=ss.Take(3).ToArray; var s1:=s0[0]+' '+s0[1]+', '+s0[2]; Writeln(s1); Writeln(f2,s1) end end; f2.Close; Writeln('*** Задание 3 ***'); f2:=OpenWrite('ves.txt'); foreach var s in a do begin var ss:=s.ToWords; var ves:=StrToFloat(ss.ElementAt(4)); if ves<sves then begin var s0:=ss.Take(3).ToArray; var s1:=s0[0]+' '+s0[1]+', '+s0[2]; Writeln(s1); Writeln(f2,s1) end end; f2.Close end.
Тестовое решение: *** Исходная информация *** Иванов Игорь 14 158 47.4 Петров Павел 14 161 58.3 Козлов Кирилл 15 160 60.3 Сидорова Мария 14 156 45.9 Тяпкина Наталья 15 158 46 Ляпкин Алексей 15 161 58.6 Мамочкин Константин 14 157 52.8 *** Задание 1 *** Средний рост равен 158.7 Средний вес равен 52.8 *** Задание 2 *** Петров Павел, 14 Козлов Кирилл, 15 Ляпкин Алексей, 15 *** Задание 3 *** Иванов Игорь, 14 Сидорова Мария, 14 Тяпкина Наталья, 15
Внимание! Если программа не работает, обновите версию!
function gcd(a,b:integer):integer; // НОД
begin
while b<>0 do begin a:=a mod b; Swap(a,b) end;
Result:=a
end;
procedure RedFrac(var a,b:integer); // сокращение дроби
begin
var (sgna,sgnb):=(Sign(a),Sign(b)); // мы должны учитывать знак!
(a,b):=(Abs(a),Abs(b));
var d:=gcd(a,b);
a:=(a div d)*sgna; b:=(b div d)*sgnb
end;
begin
var (a,b):=ReadInteger2('Введите числитель и знаменатель 1-й дроби:');
var (c,d):=ReadInteger2('Введите числитель и знаменатель 2-й дроби:');
(a,b):=(a*c,b*d);
RedFrac(a,b);
Writeln('Результат умножения: ',a,' / ',b)
end.
Пример
Введите числитель и знаменатель 1-й дроби: 32 1024
Введите числитель и знаменатель 2-й дроби: 60 300
Результат умножения: 1 / 160
В качестве бонуса - решение на базе входящей в состав PascalABC.NET библиотеки численных методов
uses NumLibABC;
begin
var (a,b):=ReadInteger2('Введите числитель и знаменатель 1-й дроби:');
var (c,d):=ReadInteger2('Введите числитель и знаменатель 2-й дроби:');
Writeln('Результат умножения: ',Frc(a,b)*Frc(c,d))
end.
begin
var a:=ReadLines('infile.txt').ToArray;
var n:=a.Length;
Writeln('*** Исходная информация ***');
// фамилия, имя, возраст, рост, вес
a.PrintLn(NewLine);
Writeln('*** Задание 1 ***');
var sves:real:=0;
var srost:real:=0;
foreach var s in a do begin
srost+=StrToFloat(s.ToWords.ElementAt(3));
sves+=StrToFloat(s.ToWords.ElementAt(4))
end;
Writeln('Средний рост равен ',srost/n:5:1);
Writeln('Средний вес равен ',sves/n:4:1);
srost/=n; sves/=n;
Writeln('*** Задание 2 ***');
var f2:=OpenWrite('rost.txt');
foreach var s in a do begin
var ss:=s.ToWords;
var rost:=StrToFloat(ss.ElementAt(3));
if rost>srost then begin
var s0:=ss.Take(3).ToArray;
var s1:=s0[0]+' '+s0[1]+', '+s0[2];
Writeln(s1);
Writeln(f2,s1)
end
end;
f2.Close;
Writeln('*** Задание 3 ***');
f2:=OpenWrite('ves.txt');
foreach var s in a do begin
var ss:=s.ToWords;
var ves:=StrToFloat(ss.ElementAt(4));
if ves<sves then begin
var s0:=ss.Take(3).ToArray;
var s1:=s0[0]+' '+s0[1]+', '+s0[2];
Writeln(s1);
Writeln(f2,s1)
end
end;
f2.Close
end.
Тестовое решение:
*** Исходная информация ***
Иванов Игорь 14 158 47.4
Петров Павел 14 161 58.3
Козлов Кирилл 15 160 60.3
Сидорова Мария 14 156 45.9
Тяпкина Наталья 15 158 46
Ляпкин Алексей 15 161 58.6
Мамочкин Константин 14 157 52.8
*** Задание 1 ***
Средний рост равен 158.7
Средний вес равен 52.8
*** Задание 2 ***
Петров Павел, 14
Козлов Кирилл, 15
Ляпкин Алексей, 15
*** Задание 3 ***
Иванов Игорь, 14
Сидорова Мария, 14
Тяпкина Наталья, 15