Технический форум

Технический форум (http://www.tehnari.ru/)
-   Помощь студентам (http://www.tehnari.ru/f41/)
-   -   Паскаль, строки (http://www.tehnari.ru/f41/t86897/)

blazelott 28.03.2013 14:32

Паскаль, строки
 
Вводится строка из букв и знаков латинского алфавита. Например: abc1;+;56;+9
А в ответе должно выдать сумму этих чисел 1+56+9=66.
Если записано так 1abc2def3, то выдаст ответ 123.
А если нету в строке чисел, то паскаль должен вывести 'Чисел нет'
Программа есть. Только я не могу сделать чтобы Паскаль выводил 'Чисел нет' У меня всегда выводит 'Чисел нет', либо уходит в бесконечный цикл.
Помогите пожалуйста.
Код:

uses crt;
const
  number = ['0' .. '9'];
  plus = ['+'];

var
  value : real;
  rezult : real;
  i, err : integer;
  sign : char;

  s, a : string;
begin
  writeln('Введите строку: ');
  readln(s);

  i := 1;
  a := '';
  sign := '+';
  while i <= length(s) do
  begin
      while (i <= length(s)) and (not (s[i] in plus)) do
      begin
        if s[i] in number then a := a + s[i];
        i:=i+1;
      end;
      val(a, value, err);
      a := '';
      if err <> 0 then value := 0;

      if (i > length(s)) or (s[i] in plus) then
      begin
        case sign of
            '+' : rezult := rezult + value;
        end;
        sign := s[i];
        i:=i+1;
      end;
  end;
  writeln('result = ', rezult);
end.


Vladimir_S 28.03.2013 15:44

Цитата:

Сообщение от blazelott (Сообщение 887485)
Помогите пожалуйста.

Пожалуйста, вроде отладил, и вычитание добавил. Одно пожелание: в программировании бездумные операции противопоказаны. Вот, например: не используете Вы CRT-команды - так и незачем этот модуль цеплять.

Код:

const
 number = ['0' .. '9'];
 plus = ['+','-'];

var
 value, rezult, i, err : integer;
 s, a : string;
 sign:Char;
 b:boolean;
begin
 writeln('Enter the string: ');
 readln(s);
 b:= true;
 i:=1;
 a:='';
 sign:='0';
 while i<=length(s) do
  begin
  while (i<=length(s)) and not(s[i] in plus) do
    begin
    if s[i] in number then
      begin
      b:=false;
      a:=a+s[i];
      end;
    i:=i+1;
    end;
  val(a,value,err);
  Case sign of
    '0': rezult:=value;
    '+': rezult:=rezult+value;
    '-': rezult:=rezult-value;
  end;
  a:='';
  if s[i] in plus then sign:=s[i];
  i:=i+1;
  end;
 if b then writeln('String contains no figures') else writeln('result = ', rezult);
 readln
end.


blazelott 28.03.2013 15:47

Спасибо огромное.


Часовой пояс GMT +4, время: 12:45.

Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.