Сумма 10 000 рублей положена в сберегательный банк, при этом прирост составляет 3% годовых. Составьте алгоритм, определяющий, через какой промежуток времени первоначальная сумма увеличится в три раза.
// PascalABC.NET 3.0, сборка 1128 begin var k:=ReadInteger('Укажите номер записи k:'); var a:=ReadLines('T1.txt').Select(x->Length(x)). Where(x->x<>0).ToArray; var n:=a.Length; if k>n then Writeln('В файле записей меньше, чем ',k) else Writeln('Сумма равна ',a.Min+a[n-k+1]) end.
А теперь "школьный вариант" // PascalABC.NET 3.0, сборка 1128 var t:text; min,l,m,n,k:integer; s:string; begin k:=2; // вторая от конца запись Assign(t,'T1.txt'); Reset(t); min:=1000; m:=0; while not Eof(t) do begin ReadLn(t,s); Inc(m); l:=Length(s); if (l>0) and (l<min) then min:=l end; Close(t); Reset(t); k:=m-k+1; if k<1 then Writeln('В файле нет стольких строк') else begin m:=0; while m<>k do begin Readln(t,s); Inc(m) end; Writeln('Сумма равна ',min+Length(s)) end; Close(t) end.
Такие задания нужно решать с конца, команды будут обратные: раздели на 2, вычесть 3. 1. Берём число 47, видим, что без остатка на 2 его разделить не получится, поэтому вычитаем 3. Получаем число 44. Мы использовали команду 1. 2. Видим, что теперь число 44 можно разделить на 2, делим, получаем 22. Мы использовали команду 2. 3. Число опять делится на 2, делим, получаем 11. Команда 2. 4. 11 не делится на 2, вычитаем 3, получаем 8. Команда 1, и т.д. 5. 8/2=4 . 2 6. 4 - 3 = 1. 1 Как раз у нас получилось 6 действий. Т.к. мы использовали обратные команды, то записываем их обратном порядке. ответ: 121221,
begin
var k:=ReadInteger('Укажите номер записи k:');
var a:=ReadLines('T1.txt').Select(x->Length(x)).
Where(x->x<>0).ToArray;
var n:=a.Length;
if k>n then Writeln('В файле записей меньше, чем ',k)
else Writeln('Сумма равна ',a.Min+a[n-k+1])
end.
А теперь "школьный вариант"
// PascalABC.NET 3.0, сборка 1128
var
t:text;
min,l,m,n,k:integer;
s:string;
begin
k:=2; // вторая от конца запись
Assign(t,'T1.txt'); Reset(t);
min:=1000; m:=0;
while not Eof(t) do begin
ReadLn(t,s); Inc(m);
l:=Length(s);
if (l>0) and (l<min) then min:=l
end;
Close(t); Reset(t);
k:=m-k+1;
if k<1 then Writeln('В файле нет стольких строк')
else begin
m:=0;
while m<>k do begin Readln(t,s); Inc(m) end;
Writeln('Сумма равна ',min+Length(s))
end;
Close(t)
end.