Program n1;
type z = array of integer;
var a: z;
i,n,max: integer;
f: text;
begin
assign(f,'input.txt');
reset(f);
n:=0;
while not eof(f) do
begin
n:=n+1;
setlength(a,n);
read(f,a[n-1]);
end;
close(f);
max:=a[0];
for i:= 1 to n-1 do
if (a[i]>max) and(a[i] mod 2<>0) then max:=a[i];
assign(f,'output.txt');
rewrite(f);
write(f,max);
close(f);
end.
Всё довольно просто. Вещественные в си++ это double и мы их обьявляем и сразу задаём их значение.
Далее цикл while задаём внутренее условие аналогичное коду задания.
Далее просто переписываем всё из кода задания.
В конце вывод.
Код:
#include <iostream>
using namespace std;
int main() {
double a=0,P=1;
while(a <= 20){
P*=a;
a+=2;
}
cout << P;
}
164)
var a: array [1..10] of real;
i: integer;
begin
for i := 1 to 10 do
begin
a[i] := random(100) - 50;
writeln('[', i, '] => ', a[i]);
end;
writeln('------------');
for i := 1 to 10 do
begin
a[i] := sqr(a[i]);
writeln('[', i, '] => ', a[i]);
end;
<span>end.
169)
var a: array [1..10] of real;
i, s: integer;
begin
for i := 1 to 10 do
begin
a[i] := random(100) - 50;
writeln('[', i, '] => ', a[i]);
end;
writeln('------------');
for i := 1 to 10 do
begin
if (A[i] < 0) then s := s + a[i];
end;
writeln(s);
<span>end.
172)
var a: array [1..10] of real;
i, s: integer;
begin
for i := 1 to 10 do
begin
a[i] := random(100) - 50;
writeln('[', i, '] => ', a[i]);
end;
writeln('------------');
for i := 1 to 10 do
begin
if (A[i] <> 0) then s := s + 1;
end;
writeln(s);
<span>end.
174)
var a: array [1..10] of real;
i, s: integer;
b: real;
begin
for i := 1 to 10 do
begin
a[i] := random(100) - 50;
writeln('[', i, '] => ', a[i]);
end;
writeln('------------');
for i := 1 to 10 do
begin
b := b + a[i];
end;
b := b / 10;
for i := 1 to 10 do
begin
if (a[i] > b) then s := s + 1;
end;
writeln(s);
<span>end.
179)
var a: array [1..10] of real;
i, s: integer;
begin
for i := 1 to 10 do
begin
a[i] := random(100) - 50;
writeln('[', i, '] => ', a[i]);
end;
writeln('------------');
for i := 1 to 10 do
begin
if (i mod 2 = 0) then a[i] := sqr(a[i]);
writeln('[', i, '] => ', a[i]);
end;
<span>end.
Вроде так =)</span></span></span></span></span>
uses Crt;
var i, Sum: integer;
begin
ClrScr;
Sum:=0;
for i:=100 to 200 do
if (i mod 2)=0 then Sum:= Sum+i;
WriteLn (' Sum = ', Sum);
ReadLn;
<span>end.</span>
Var
n: integer;
s, x, xn, y: double;
begin
s := 0; x := 0.1; xn := x;
for n := 1 to 20 do
begin
s := s + n * (n + 2) * xn;
xn := xn * x
end;
y := x * (3 + x) / (1 - x);
Writeln('Сумма (x=0.1, n=20)=', s, ', по формуле=', y );
s := 0; x := 0.5; xn := x;
for n := 1 to 15 do
begin
s := s + n * (n + 2) * xn;
xn := xn * x
end;
y := x * (3 + x) / (1 - x);
Writeln('Сумма (x=0.5, n=15)=', s, ', по формуле=', y );
end.
Тестовое решение:
Сумма (x=0.1, n=20)=0.397805212620028, по формуле=0.344444444444445
Сумма (x=0.5, n=15)=9.99008178710938, по формуле=3.5
Как видно, если в первом случае формула еще дает какое-то приближение, то во втором она совершенно не годится.
Блок-схема, реализующая алгоритм, приведена в приложении. Она не копирует программу, а лишь поясняет алгоритм, который в программе использован дважды для разных данных. Конечно, правильнее было воспользоваться функциями и тогда программа выглядела бы так:
function f1(x: double; k: integer): double;
var
s, xn: double;
n: integer;
begin
s := 0; xn := x;
for n := 1 to k do begin s := s + n * (n + 2) * xn; xn := xn * x end;
f1 := s
end;
function f2(x: double): double;
begin
f2 := x * (3 + x) / (1 - x);
end;
begin
Writeln('Сумма (x=0.1, n=20)=', f1(0.1, 20), ', по формуле=', f2(0.1));
Writeln('Сумма (x=0.5, n=15)=', f1(0.5, 15), ', по формуле=', f2(0.5));
end.