• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о форуме и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Паскаль, строки

blazelott

Новые
Регистрация
3 Фев 2013
Сообщения
18
Реакции
0
Баллы
0
Паскаль, строки

Вводится строка из букв и знаков латинского алфавита. Например: 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.
 
Помогите пожалуйста.
Пожалуйста, вроде отладил, и вычитание добавил. Одно пожелание: в программировании бездумные операции противопоказаны. Вот, например: не используете Вы 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.
 
Назад
Сверху