Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ рекурсия.

Автор: ducky 26.12.2010 23:34

Во входном файле задана непустая последовательность положительных вещественных чисел, за которой следует отрицательное число. Описать рекурсивную функцию sum без параметров для нахождения суммы этих положительных чисел.

program V_12_11;
function sum:extended;
var num:extended;

begin
writeln ('vvedite chislo');
readln;
if num >=0 then begin
sum:=num+sum;
end;
end;


var res:extended;
s:string;
begin
repeat
writeln ('vvedite neskolko neotricatelnih chisel, zaversaja vvod kagdogo chisla klavishej 'Enter'');
writeln ('dlja zavershenija vvoda vvedite otricatelnoje chislo i nagmite 'Enter'');

res:=sum;

writeln ('summa neotricatelnih chisel sledujushich do otricatelnogo chisla: ');
writeln (res);

writeln ('povtorit - Enter. vihod - luboj simvol + Enter');
readln (s);

until s<>";
end.

Автор: volvo 27.12.2010 0:06

Файл, как я понимаю, текстовый? Тогда что-то вроде:

var
f: text;

function sum: extended;
var num: extended;
begin
read(f, num);
if num < 0 then sum := 0.0
else
sum := num + sum;
end;


Допиши программу сама. Осталось открыть файл, вызвать функцию, и закрыть файл... Но здесь подразумевается, что во входном файле обязательно есть отрицательное число. Если его не будет - будет сбой. Попробуй этого избежать...

Автор: ducky 28.12.2010 1:29

mega_chok.gif mega_chok.gif

program V_12_11;
var f:text;
function sum:extended;
var num:extended;

begin
read (f, num);
if num<0 then sum:=0.0
else sum:=num+sum;
end;


const fn='data.txt';
n=5;
var res:extended;
i:integer;
s:string;

begin
assign (f, fn);

repeat
writeln ('soderzimoe fajla: ');
rewrite (f);
randomize;
for i:=1 to n do begin
res:=1+random(100)/10;
writeln (f, res);
if i>1 then write (',');
write (res:0:1);
end;

writeln (f, 0);
writeln (',',0);

reset (f);
res:=sum;
close (f);
writeln ('summa =', res:0:1);

writeln ('povtorit - Enter, vihod - luboj simvol+Enter');
readln (s);
until s<>";

end.