Advertisement
Guest User

Untitled

a guest
Dec 11th, 2018
57
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.94 KB | None | 0 0
  1. var S1,S2 : string ; // Строки
  2. valid_str, valid_sign : boolean ; // Переменные для валидации
  3. begin
  4. // Ввод строки и контрольная печать
  5. {writeln('Введите строку');
  6. readln(S1);}
  7. S1:='123 +-++ 45 - 23';
  8.  
  9. // Контрольная печать
  10. writeln('Вы ввели строку: «', S1, '»');
  11. writeln;
  12.  
  13. // Подсчёт числа символов '+'/'-' в строке
  14. var plus_count:=0;
  15. var minus_count:=0;
  16. for i:integer:=1 to length(S1) do
  17. if S1[i]='+' then
  18. plus_count+=1
  19. else if S1[i]='-' then
  20. minus_count+=1;
  21. writeln('В строке ',plus_count,' символа «+» и ',minus_count,' символа «–»');
  22. writeln;
  23.  
  24. // Валидация арифметического выражения
  25. valid_str:=true;
  26. for i:integer:=1 to length(S1) do
  27. begin
  28. valid_sign:=false;
  29. foreach code:integer in [43,45,48..57] do
  30. begin
  31. if ((S1[i]=chr(code)) or (S1[i]=' ')) then
  32. begin
  33. valid_sign:=true;
  34. break;
  35. end;
  36. end;
  37. if valid_sign=false then
  38. begin
  39. valid_str:=false;
  40. break;
  41. end;
  42. end;
  43.  
  44. // проверка на наличие знака первого числа
  45. for i:integer:=1 to length(S1) do
  46. if S1[i]<>' ' then
  47. if ((S1[i]<>'+') and (S1[i]<>'-')) then
  48. begin
  49. S1:='+'+S1;
  50. break;
  51. end
  52. else
  53. begin
  54. break;
  55. end;
  56.  
  57. if not valid_str then
  58. writeln('Выражение некорректно')
  59. else
  60. begin
  61. writeln('Выражение корректно');
  62. // Поиск чисел
  63. var sum:=0;
  64. var elem, code:integer;
  65. var str_elem:string;
  66. S2:='';
  67. var sign:='';
  68. for i:integer:=1 to length(S1) do
  69. begin
  70. if ((S1[i]<>'+') and (S1[i]<>'-') and (S1[i]<>' '))then
  71. begin
  72. S2+=S1[i];
  73. end
  74. else
  75. begin
  76. // знак
  77. if ((S1[i]<>' ') and (sign='')) then
  78. sign:=S1[i];
  79. if ((length(S2)<>0)) then
  80. begin
  81. str_elem:=Concat(sign,S2);
  82. write(str_elem);
  83. val(str_elem,elem,code);
  84. sum+=elem;
  85. // знак
  86. if (S1[i]<>' ') then
  87. sign:=S1[i]
  88. else
  89. sign:='';
  90. end;
  91. S2:='';
  92. end;
  93. if ((i=length(S1)) and (length(S2)<>0)) then
  94. begin
  95. str_elem:=Concat(sign,S2);
  96. write(str_elem);
  97. val(str_elem,elem,code);
  98. sum+=elem;
  99. end;
  100. end;
  101. writeln(' = ', sum);
  102. end;
  103. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement