String19. Дана строка. Если она представляет собой запись целого числа, то вывести $$1$$, если вещественного (с дробной частью) — вывести $$2$$; если строку нельзя преобразовать в число, то вывести $$0$$. Считать, что дробная часть вещественного числа отделяется от его целой части десятичной точкой «.».
Решение:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
program String19; var i,error:integer; r:Real; S:string; begin Write('S:'); Readln (S); val(S,i,error); if error =0 then writeln('1') else begin val(S,r,error); if error =0 then writeln('2') else writeln('0'); end; end. |
Решение от Newton:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
program String19; var Line : string; Counter : integer; Output : byte; begin writeln('Enter a line of characters: '); readln(Line); Output := 1; for Counter := 1 to Length(Line) do if (Line[Counter] < '0') or (Line[Counter] > '9') then if (Output = 1) and (Line[Counter] = '.') then Output := 2 else Output := 0; writeln(Output); readln end. |
Другие задачи из раздела String можно посмотреть здесь.
Без использования процедуры (заменил знаки неравенства на LT/GT):
Да, весело… у меня какой то внутренний барьер применять знаки больше или меньше к текстовым переменным. 🙂
Я бы наверно использовал множество, например как то так:
Добавил ваш пример в шапку.
На Python:
вижу у ньютона оператор .LT. и еще один .GT. , лезу в гугол, гугол кажет шишь, ыы =)
с процедурой val понравилось
ошибся я в коде, в 13 строке вместо else break нужно так
Поправил ваш предыдущий комментарий.