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

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

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

Автор: jurkiw 6.11.2008 2:05

Программа. Дана последовательность литер, имеющая следующий вид; d1±d2±...±dn (di—цифры, n>1), за которой следует точка. Вычислить значение этой алгебраической суммы.

Вот код, но щитает толька первые два числа, помогите переделать:

program z6_26;
uses crt;
var s,s1,s2: string;
l,f,k,z,i,a,c,v: integer;
begin
clrscr;
write ('Wwedit radok ');
read (s);
f:=(-1); k:=0; z:=0;
l:=length(s);
l:=l div 2;
for i:=1 to l do
begin
f:=f+2;
s1:=copy(s,f,f);
k:=k+2;
s2:=copy(s,k,k);
val(s1,c,a);
val(s2,v,a);
z:=z+v+c;
end;
writeln ('Znachenna algebraichnoi sumy = ',z);
readkey;
end.

Автор: volvo 6.11.2008 5:07

Если я правильно понял задачу, то должно быть вот так:

{ Чтение строки }
f := 0;
val(copy(s, 1, 1), z, a); { <--- Сразу в Z значение первой цифры }
for i:=1 to length(s) div 2 do begin
f:=f+2;
s1:=copy(s,f,2); { <--- Следующая цифра со знаком, который перед ней }
val(s1,c,a); { Преобразуем в число }
z:=z+c; { и складываем с общей суммой }
end;
{ Вывод результата }
Описания всех лишних переменных можно убрать, кроме всего прочего S1 тоже не нужно, можно сразу в Val подставить вызов функции Copy...

Автор: jurkiw 6.11.2008 19:29

Спасмбо volvo што выручил.