Форум программистов, компьютерный форум, киберфорум
PascalABC.NET
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
0 / 0 / 0
Регистрация: 15.11.2015
Сообщений: 7
1

Неверное отображение результата с цифрами(задачи с лексемами)

16.11.2015, 19:26. Показов 1588. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте, требования к данной задаче звучат так
Кликните здесь для просмотра всего текста
Написать программу для распознавания лексем. Задача - преобразовать последовательность символов, вводимых с клавиатуры в последовательность лексем языка программирования. В языке имеется следующие лексемы:
1) Идентификатор – последовательность букв и цифр, начинающаяся с буквы;
2) Число – последовательность цифр;
3) Лексемы больше-равно, меньше-равно, присвоить ( >=, <=, := ).
Результатом работы программы является массив записей, где каждая запись хранит саму лексему, а также ее название. Выдать его содержимое на экран. Обрабатывать ошибки в случае неправильного ввода.

Моя программа выполняет данные требования, но я нашел один недочет(если можно так выразиться). Подскажите пожалуйста, почему при вводе в программу слова, длиной более 50 символов, отображается лексема длиной в 50(этот пункт мне как раз понятен), а при вводе числа длиной более 10 цифр выводится сообщение о том что лексема не верная, разве не должна быть такая же длина в 50 ? и почему при вводе числа длиной более 10 выводится именно ошибка, а не "введенное число" - число
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
const
  numoflex = 15;
  letter  = ['a'..'z', 'A'..'Z'];
  number = ['0'..'9'];
type
  lexeme = record
    inputlex: string[50];
    typeoflex: string[30];
  end;
 
var
  s: string;
  lex: array [1..numoflex] of lexeme;
  p, i, n: byte;
  v: integer;
 
begin
  i := 0; 
  n := 1;
  read(s); // Например -  123 a312a    asdf := <= >= <> 3a a3a a11   a32>=34
  writeln();
  s := Trim(s);
  Insert(' ', s, Length(s) + 1);
  repeat
    inc(i, 1);
    p := pos(' ', s);
    lex[i].inputlex := copy(s, n, p - 1);
   if TryStrToInt(lex[i].inputlex, v)=true
    then lex[i].typeoflex:='Число'
     else if lex[i].inputlex='>=' then lex[i].typeoflex:='Больше-равно'
      else if lex[i].inputlex='<=' then lex[i].typeoflex:='Меньше-равно'
       else if lex[i].inputlex=':=' then lex[i].typeoflex:='Присвоение'
        else if (lex[i].inputlex[1] in letter) 
         then 
               lex[i].typeoflex:='Идентификатор'
          else lex[i].typeoflex:='лексема введена неверно';
    writeln(lex[i].inputlex, ' - ', lex[i].typeoflex);
    delete(s, n, p);
    s := TrimLeft(s);
  until s = '';
end.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.11.2015, 19:26
Ответы с готовыми решениями:

Неверное отображение в IE
Здравствуйте.Есть такой вопрос насчёт :hover в css В фаирфоксе нижеследующий код работает, а в IE...

Неверное отображение
Здравствуйте, я недавно занимаюсь версткой , скорее даже не занимаюсь а просто учусь. У меня...

Неверное отображение
Здравствуйте, товарищи! Интересуюсь HTML, CSS совсем немного, опыта пока у меня маловато. Недавно...

Неверное отображение символов
Добрый день ув. пользователи ! Подскажите пожалуйста, в окне браузера вижу вот такое ...

3
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32835 / 21172 / 8148
Регистрация: 22.10.2011
Сообщений: 36,431
Записей в блоге: 8
16.11.2015, 21:43 2
Лучший ответ Сообщение было отмечено lisarx как решение

Решение

Цитата Сообщение от lisarx Посмотреть сообщение
разве не должна быть такая же длина в 50 ?
Нет, TryStrToInt пытается преобразовать лексему в число типа Integer, и утыкается в ограничение разрядности для этого типа. Если используется .NET 4 - можно заменить TryStrToInteger на BigInteger.TryParse, и объявить переменную v тоже типа BigInteger.
1
0 / 0 / 0
Регистрация: 15.11.2015
Сообщений: 7
16.11.2015, 22:27  [ТС] 3
Цитата Сообщение от volvo Посмотреть сообщение
Нет, TryStrToInt пытается преобразовать лексему в число типа Integer, и утыкается в ограничение разрядности для этого типа. Если используется .NET 4 - можно заменить TryStrToInteger на BigInteger.TryParse, и объявить переменную v тоже типа BigInteger.
Да, спасибо большое, теперь все понял, и программа тоже заработала.

Добавлено через 8 минут
Нет, TryStrToInt пытается преобразовать лексему в число типа Integer, и утыкается в ограничение разрядности для этого типа. Если используется .NET 4 - можно заменить TryStrToInteger на BigInteger.TryParse, и объявить переменную v тоже типа BigInteger.
Уважаемый Volvo, не могли бы вы сказать мне, легко ли читается мод код ?(если честно не знаю как конкретней сформулировать вопрос), над чем стоит возможно поработать ?
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32835 / 21172 / 8148
Регистрация: 22.10.2011
Сообщений: 36,431
Записей в блоге: 8
16.11.2015, 22:45 4
Цитата Сообщение от lisarx Посмотреть сообщение
над чем стоит возможно поработать ?
Больше внимания уделять встроенным методам .NET-а, если уж он используется. К примеру, при использовании цикла foreach и метода string.Split программа становится примитивной до безобразия, остается только проверить, к какому типу принадлежит очередная найденная часть строки.
0
16.11.2015, 22:45
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.11.2015, 22:45
Помогаю со студенческими работами здесь

Неверное отображение чисел
Всё видно на картинке. Как так ума не приложу Назначал 4 194 304 (4*1024*1024) Выборки реагируют...

Неверное отображение юникода
есть такой код use strict; use utf8; use DBI; .... my $dbh = DBI-&gt;connect.... $dbh-&gt;do(&quot;set...

Неверное отображение времени
Добрый вечер,в общем дело обстоит так,после перевода часов в России сразу перестала работать 2FA...

Неверное отображение кодировки
Во общем ситуация такая,получаю письмо с моего ящика из гугла,но его тело некорректно...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru