Поиск вещественный чисел в произвольной строке символов - Pascal

Узнай цену своей работы

Формулировка задачи:

Ребят, всем привет! Нужна программа на паскале на тему "работа со строковыми переменными". Суть заключается в том, что в произвольной строке символов, которая может состоять из латинских букв, чисел, знаков препинания (русские буквы исп. нельзя) нужно найти все вещественные числа, т.е. в формате к примеру 3.14, 0.25 и т.д. вывести их на экран и посчитать их сумму. пример: строка - 5frtyu6.25obdz:,er' 3.7sa числа - 6.25 3.7 их сумма = 9.95 Если такая программа есть, дайте ссылку, пожалуйста.)

Решение задачи: «Поиск вещественный чисел в произвольной строке символов»

textual
Листинг программы
const
cf=['0'..'9'];{цифры}
{все допустимые символы, латнские буквы, цифры и разделители}
ds=['A'..'Z','a'..'z','0'..'9',#32,#33,#34,#39,#40,#41,#44,#45,#46,#58,
    #59,#63,#91,#93,#123,#124,#125,#126];
var s,s1:string;
    c:integer;
    sum,t:real;
    i,j,k:byte;
begin
clrscr;
repeat
k:=0;
writeln('Введите строку из латинских букв, цифр и знаков препинания:');
readln(s);
for i:=1 to length(s) do
if not(s[i] in ds) then k:=1;
if (k=1)or(s='') then  writeln('Строка введена неверно! Повторите ввод.');
until (k=0)and(s<>'');
writeln('Вещественные числа, входящие в строку:');
sum:=0;k:=0;
for i:=1 to length(s) do
if (s[i]='.')and(s[i-1] in cf)and(s[i+1] in cf) then{если точка между цифрами}
 begin
  k:=1;{фиксируем}
  j:=i-1;{идем назад}
  s1:='.';{строка пока только точка}
  while(s[j] in cf)and(j>=1) do{пока цифры}
   begin
    s1:=s[j]+s1;{составляем целую часть числа}
    j:=j-1;
   end;
  j:=i+1;{встаем за точкой}
  while(s[j] in cf)and(j<=length(s)) do{идем вперед пока цифры}
   begin
    s1:=s1+s[j];{составляем дробную часть}
    j:=j+1;
   end;
  val(s1,t,c);{преобразуем в число}
  write(t:0:2,' ');{выводим}
  sum:=sum+t;{суммируем}
 end;
writeln;
if k=0 then writeln('Вещественных чисел нет!')
else write('Сумма=',sum:0:2);
readln
end.

Объяснение кода листинга программы

  1. const - объявляются константы
  2. ds - объявляется массив символов
  3. s, s1: string; - объявляются строковые переменные
  4. c: integer; - объявляется целочисленная переменная
  5. sum, t: real; - объявляются вещественные числа
  6. i, j, k: byte; - объявляются байтовые переменные
  7. begin - начинается выполнение программы
  8. clrscr; - очищается экран
  9. repeat - повторяется цикл
  10. k:=0; - устанавливается значение переменной k
  11. writeln('Введите строку из латинских букв, цифр и знаков препинания:'); - выводится сообщение и переменная s
  12. readln(s); - считывается введенная строка
  13. for i:=1 to length(s) do - выполняется цикл по каждому символу строки
  14. if not(s[i] in ds) then k:=1; - проверяется условие
  15. if (k=1) or (s='') then writeln('Строка введена неверно! Повторите ввод.'); - выводится сообщение
  16. until (k=0) and (s<>'); - выполняется до тех пор, пока k не станет равным нулю и s не станет пустой строкой
  17. writeln('Вещественные числа, входящие в строку:'); - выводится сообщение
  18. sum:=0; - устанавливается значение переменной sum
  19. k:=0; - устанавливается значение переменной k
  20. for i:=1 to length(s) do - выполняется цикл по каждому символу строки
  21. if (s[i]='.') and (s[i-1] in cf) and (s[i+1] in cf) then begin k:=1; j:=i-1; s1:='.'; while(s[j] in cf) and (j>=1) do begin s1:=s1+s[j]; j:=j-1; end; j:=i+1; while(s[j] in cf) and (j<=length(s)) do begin s1:=s1+s[j]; j:=j+1; end; val(s1,t,c); write(t:0:2,' '); sum:=sum+t; end;
  22. j:=i+1;
  23. while(s[j] in cf) and (j<=length(s)) do begin s1:=s1+s[j]; j:=j+1; end;
  24. if k=0 then writeln('Вещественных чисел нет!') else write('Сумма=',sum:0:2);
  25. readln;
  26. end.

Оцени полезность:

9   голосов , оценка 3.667 из 5
Похожие ответы