28.03.2013, 14:32 | #1 (permalink) |
Member
Регистрация: 03.02.2013
Сообщений: 18
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Паскаль, строки
А в ответе должно выдать сумму этих чисел 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. |
28.03.2013, 14:32 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
Схожие по содержанию с вашим топики могут помочь Паскаль, строки Паскаль, строки Строки в Паскаль |
28.03.2013, 15:44 | #2 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Пожалуйста, вроде отладил, и вычитание добавил. Одно пожелание: в программировании бездумные операции противопоказаны. Вот, например: не используете Вы 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. |
28.03.2013, 15:47 | #3 (permalink) |
Member
Регистрация: 03.02.2013
Сообщений: 18
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Спасибо огромное.
|
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
Опции темы | |
Опции просмотра | |
|
|