Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.11.2010, 11:17   #1
Powerslave
 
Регистрация: 06.11.2010
Сообщений: 6
По умолчанию Строковая последовательность

Дана строка, изображающая арифметическое выражение вида "<цифра>+
(-)<цифра>+(-)...+(-)-<цифра>, где на место операции "+(-)" нахоится символ "+" или "-" (например, "4+7+2+8). Вывести значение данного выражения(целое число). Вчера весь день думал и сегодня в универе, но что то немогу я сделать(.
Powerslave вне форума Ответить с цитированием
Старый 09.11.2010, 11:40   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
<цифра>+(-)<цифра>+(-)...+(-)-<цифра>
именно цифра? Не число?
Так это же элементарщина тогда:
Код:
begin
  Readln(s);
  Rezultat := 0;
  Znak := '+'; {первое число будем добавлять к результату}
  for i:=1 to length(s) do  begin
     if s[i] in ['0'..'9'] then begin
       if Znak='+' then Rezultat := Rezultat + (ord(s[i])-ord('0'))
       else {значит знак минус} Rezultat := Rezultat - (ord(s[i])-ord('0'));
     end
     else begin {если не цифра, значит должен быть знак }
       if s[i] in ['+','-'] then Znak := s[i]
       else begin
         Writeln('обнаружен необрабатываемый символ в ',i,'-й позиции');
         Halt(1); {выход из программы}        
       end
     end;
  end;
  writeLn('Результат: ', Rezultat);
  readln;
end.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 09.11.2010, 11:50   #3
Powerslave
 
Регистрация: 06.11.2010
Сообщений: 6
По умолчанию

Да, именно цифра
Powerslave вне форума Ответить с цитированием
Старый 09.11.2010, 16:16   #4
Powerslave
 
Регистрация: 06.11.2010
Сообщений: 6
По умолчанию

почему тут так? Rezultat + (ord(s[i])-ord('0')). Почему именно символ '0'?
Powerslave вне форума Ответить с цитированием
Старый 09.11.2010, 16:32   #5
Риндера
Delphi, учу С
Форумчанин
 
Аватар для Риндера
 
Регистрация: 20.10.2010
Сообщений: 178
По умолчанию

Цитата:
Сообщение от Powerslave Посмотреть сообщение
почему тут так? Rezultat + (ord(s[i])-ord('0')). Почему именно символ '0'?
Операция (ord(s[i])-ord('0') дает нам в результате саму цифру. То есть при вычитании кода '0' из кода символа-цифры в s[i].
Риндера вне форума Ответить с цитированием
Старый 09.11.2010, 16:35   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

это для того чтобы символ преобразовать в число.
например, берём символ '1'. код у него 49 (шестнадцатиричный код 31)
чтобы из этого кода получить 1 (число единица)
нужно отнять код символа ноль '0' (у символа '0' десятичный код 48)
если из кода символа 49 отнять код символа с кодом 48 получим ЕДИНИЦУ.
То же справедливо и для всех других символов с цифрами, т.к. они в любой кодовой таблице стоят строго по порядку.

если такой подход не нравится, можете воспользоваться функцией VAL()
просто ещё одна строчка кода и пара переменных добавится...
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Строковая переменная и DOS W.i.d.g.e.t.1 Общие вопросы Delphi 10 24.07.2010 12:04
Invalid Pointer Operation, DLL + Строковая функция Alex Cones Общие вопросы Delphi 13 18.09.2009 21:47
Строковая задача С++ на поиск слова Graf Xandr Помощь студентам 1 07.05.2009 22:14
строковая функция с++ dollemika Помощь студентам 2 30.04.2009 22:08
Последовательность CrazyRabbit Помощь студентам 14 08.02.2009 17:22