Посчитать среднее арифметическое цифр - Turbo Pascal
Формулировка задачи:
В функцию передаётся строка S, в ней есть и пробелы и слова. Пробелы могут быть в любом месте. Есть слова в которых последний символ это цифра . Напишите функцию, которая будет считать среднее арифметическое этих цифр.
Строка 5zxcv yuio9 sdfgg poi7 rgn 9876 8
Ответ 7.5
не могу понять, почему считает неверно, помогите, пожалуйста.
Листинг программы
- var
- S: string;
- K: integer;
- Sred: real;
- function Aver(s: string): real;
- var
- c: Char;
- begin
- K := 0;
- for c := '1' to '9' do
- begin
- if( (Pos(c, s) > 0) and (Pos(' ', s) > 0)) then
- begin
- sred := sred + Ord(c) - ord('0');
- K := K + 1;
- end;
- end;
- if k = 0 then
- Aver := 0
- else
- begin
- writeln(K,' ',sred);
- Aver := sred / k;
- end;
- end;
- begin
- Readln(S);
- Sred := Aver(S);
- Writeln(Sred);
- end.
Решение задачи: «Посчитать среднее арифметическое цифр»
textual
Листинг программы
- function Aver(s: String): Real;
- var k, p, q: Integer; c: Char;
- begin
- k:=0; q:=0; s:=s+' ';
- for c:='1' to '9' do begin
- p:=Pos(c+' ',s);
- while p>0 then begin
- Inc(k); q:=q+Ord(c)-Ord('0');
- Delete(s,p,1); Insert('0',s,p); {s[i]:='0';}
- p:=Pos(c+' ',s);
- end;
- end;
- if k=0 then Aver:=0 else Aver:=q/k;
- end;
Объяснение кода листинга программы
- В функции Aver объявлены три переменные: k, p и q. Они являются целочисленными типами данных и инициализируются нулем.
- Переменная s является строковым типом данных и инициализируется строкой, содержащей символ пробела в начале.
- Затем происходит цикл, который выполняется для каждой цифры от 1 до 9.
- Внутри цикла переменная p инициализируется позицией текущей цифры в строке s.
- Затем происходит цикл while, который выполняется до тех пор, пока переменная p больше нуля.
- Внутри цикла while переменные k и q инициализируются значением 0.
- Затем происходит увеличение переменной k на единицу и вычисление значения q как произведения текущего символа и его порядкового номера (от 0 до 9).
- После этого происходит удаление символа текущей цифры из строки s, заменяя его на символ '0'.
- Затем переменная p инициализируется новой позицией следующего символа.
- Цикл while повторяется до тех пор, пока переменная p больше нуля.
- После окончания цикла while, если переменная k равна 0, то значение функции Aver устанавливается в 0, иначе оно устанавливается в значение q, деленное на k.
- Функция заканчивает свое выполнение и возвращает полученное среднее арифметическое.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д