Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.191.223.123] |
|
Страницы: (2) 1 [2] все ( Перейти к последнему сообщению ) |
Сообщ.
#16
,
|
|
|
Bush3000
Должны как правильные, наверное. Так как после запятой незначащий ноль можно отбрасывать. Паскаль, во всяком случае, такие числа считает правильными. |
Сообщ.
#17
,
|
|
|
Цитата YaSonka @ Должны как правильные, наверное. Так как после запятой незначащий ноль можно отбрасывать. Паскаль, во всяком случае, такие числа считает правильными. Более, того, процедуры read[ln] и val воспринимают и такие числа: '.5', о вот компилятор TP/BP по какой-то причине нет |
Сообщ.
#18
,
|
|
|
YaSonka
Сегодня узнавал у нашего препода насчет этого вопроса. Говорит что это не число которое воспинимает Паскаль(кстати работу засчитала). Но даже если это и число все можно легко исправить убрав строку if (s[i] in p)and(s[i+1] in ost) then b:=false; |
Сообщ.
#19
,
|
|
|
Цитата Bush3000 @ Сегодня узнавал у нашего препода насчет этого вопроса. Говорит что это не число которое воспинимает Паскаль Ну, если преподаватель сказала, то тогда конечно! А это ничего, что Турбо Паскаль вот такую строчку: const test = 5.; спокойно воспринимает? Цитата Bush3000 @ (кстати работу засчитала) И это при том, что программа твоя воспринимает как правильное такое число: "1e". И вот такое: "1e-". И даже вот такое: "-e". Впрочем, с учетом предыдущего абзаца это не удивительно. |
Сообщ.
#20
,
|
|
|
Bug Hunter
Подумаешь. Всего лишь и надо добавить проверку принадлежности последнего символа к множествам ost, p и z и если принадлежит то b присвоить значение false. В конце концов я только учусь программированию. |
Сообщ.
#21
,
|
|
|
Так кто нить может показать финальную прогу?
|
Сообщ.
#22
,
|
|
|
Вряд ли такая прога вообще может существовать, т.к. исходная постановка задачи, IMHO, трижды некорректна.
Напомню: Цитата Bush3000 @ (Подразумевается, что вывод нужно сделать, анализируя строку, а не переводя число из символьного представления в двоичное)Програма вводит строку символов и проверяет может ли эта строка быть записью числа в языке Паскаль. Во-первых, Паскалей много, хороших и разных, и понятия допустимого символьного представления числа в них могут несколько отличаться; Во-вторых, даже если ограничиться Турбо Паскалем, то, как отмечалось выше, он придерживается то ли дуализма мнений, то ли политики двойных стандартов по отношению к незначащим нулям перед и после десятичной точки; В-третьих, Турбо Паскаль считает такую вот запись 1.1e4932 допустимым числом, а 1.1e4933 и 1.2e4932 - уже нет. Различить эти записи, анализируя строку, конечно, можно, если сильно запариться, но уж точно нафиг не нужно. 2ALL: Но потанцевать таки можно! Если поставить задачу так: Написать программу, которая вводит строку и проверяет, является ли она записью числа вида: [+|-]ddd[.ddd][E|e[+|-]ddd] где число десятичных цифр в мантисе и порядке может быть любым (лишь бы, для простоты, сама запись в обычную строку string влезало) Я это к тому что в этой задаче есть заковыка, реальный способ преодоления которой никто таки не предложил, да и я сам нашел решение только со второй попытки. И не уверен, что оно самое эффективное (предполагается, что задача решается через множества типа set of char в качестве упражнения). Так что есть повод пободаться! А еще можно немного усложнить(?) задачу, потребовав, чтобы решение не использовало по крайней мере "больших" множест типа set of char|byte и их подмножеств (решения, использующие эмуляцию множеств через булев массив или битовые карты длинной больше чем одно слово тоже не принимаются) - это уже действительно неплохой этюд может получиться. Ну, что, будем бодаться? За себя: Battle!!! (Х/ф "Майкл) |
Сообщ.
#23
,
|
|
|
Вот что у меня получилось:
program alexpr2; type t = set of char; var s: string; i, s1, s2, posl : integer; fl : integer; n, z, ost, all, p : t; begin begin repeat writeln(' Vvedite text, zakanch. "!"'); write(' s = '); readln(s); if ( s[length(s)]<>'!' ) then writeln(' !! Oshibka vvoda !!') until s[length(s)]='!' end; posl:=length(s)-1; fl:=0; n:=['0'..'9']; z:=['+','-']; ost:=['e','E']; p:=['.']; all:=['0'..'9','+','-','.','e','E']; if (s[1] in p+ost) or (s[posl] in p+ost+z) then fl:=1; s1:=0; s2:=0; i:=1; while ( i<=posl ) and (fl=0) do begin if not(s[i] in all) then fl:=1; begin if (s[i] in n) and (s[i+1] in z) then fl:=1; if (s[i] in p) and (s[i+1] in z) then fl:=1; if (s[i] in ost) and (s[i+1] in p) then fl:=1; if (s[i] in p) and (s[i+1] in p) then fl:=1; if (s[i] in z) and (s[i+1] in z) then fl:=1; if s[i] in p then s1:=s1+1; if s[i] in ost then s2:=s2+1; if s1>1 then fl:=1; if s2>1 then fl:=1; end; inc(i); end; if s1+s2=0 then fl:=1; if fl=0 then writeln(' !! Ok !!') else writeln(' !! Error !!'); readln end. Условие задачи следующее: определить, является ли введенный текст, заканч. "!" правильной записью вещественного числа (либо в форме с фиксированной точкой, либо в форме с плавающей точкой). Задачу приняли, проверял на косяки - вроде всё норм. Про теги не забывай... |
Сообщ.
#24
,
|
|
|
Цитата Bug Hunter @ Если поставить задачу так: Написать программу, которая вводит строку и проверяет, является ли она записью числа вида: [+|-]ddd[.ddd][E|e[+|-]ddd] где число десятичных цифр в мантисе и поряде может быть любым (лишь бы, для простоты, сама запись в обычную строку string влезало) Я на всякий случай уточню, для тех, кто не сразу просек, что данная спецификация предполагает, что перед и после десятичной точки (если она есть) обязательно должно быть хотя бы по одной цифре (хотя бы незначащие нули) и мантиса не может быть пустой или состоять из одного знака (иначе как понять, "-E10" - это число или имя переменной с унарным минусом). Хотя желающие принять участие в соревновании могут написать дополнительно вариант, который распознает и записи числа вида ".5", "5.", ".5E10", "5.E10" и т.п. (число ".", я думаю, надо запретить). Цитата AlexPR @ Вот что у меня получилось: ... Условие задачи следующее: определить, является ли введенный текст, заканч. "!", правильной записью вещественного числа ... Не вдаваясь особо в подробности, сразу скажу, что это решение несколько другой, весьма искусственной задачи. Is there no one else? (Что, больше никого? (англ.)) (Х/ф "Троя") |
Сообщ.
#25
,
|
|
|
Цитата AlexPR @ Задачу приняли, проверял на косяки - вроде всё норм. Плохо проверял: Vvedite text, zakanch. "!" s = 123e4.5! !! Ok !! |
Сообщ.
#26
,
|
|
|
Гек-тор! Гек-тор!!! (Х/ф "Троя")
|
Сообщ.
#27
,
|
|
|
Bug Hunter, давай не будем поднимать темы, которые никому не интересны? Было бы интересно - ответили б уже... Что, обязательно закрывать, чтоб не флудили?
|