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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.12.2011, 10:45   #1
impulsgraw
Верховный Судья
Пользователь
 
Аватар для impulsgraw
 
Регистрация: 23.11.2010
Сообщений: 82
Злость Missing operator or semicolon

Здравствуйте!
Скажите пожалуйста, почему у меня delphi ругается на вот этот кусок кода? Причём в том месте, где у меня первый раз написана функция random

Код:
if(aRegExpr.Match[1]='random')then begin
if((aRegExpr.Match[2]<>'NIL')and(strtoint(aRegExpr.Match[2])<>0)and(aRegExpr.Match[3]<>'NIL')and(strtoint(aRegExpr.Match[3])<>0))then begin
f1 := {вот здесь}random(strtofloat(aRegExpr.Match[2]))+(strtofloat(aRegExpr.Match[3])-strtofloat(aRegExpr.Match[2])); 
end else if((aRegExpr.Match[2]<>'NIL')and(strtoint(aRegExpr.Match[2])<>0))then begin
f1 := random()+strtofloat(aRegExpr.Match[2]);
end else begin
f1 := random();
end;
end;
Вот такой вот ошибкой: Missing operator or semicolon .
Никак не могу понять, где в моей программе изъян?
Этот кусок кода находится в позиции 100023 строке. Может он бредит из за того, что у меня очень много кода?
impulsgraw вне форума Ответить с цитированием
Старый 03.12.2011, 12:09   #2
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

я бы сказал, что проблемы с f1, но не видя, как оно объявлено, гадать можно долго.
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 03.12.2011, 17:35   #3
QunneD
C++ &amp;amp; PHP &amp;amp; Asm
Форумчанин
 
Аватар для QunneD
 
Регистрация: 06.12.2008
Сообщений: 300
По умолчанию

Придерживаться нормам синтаксиса не учили? Самому не впадлу читать подобную "ахинею"?

Цитата:
Missing operator or semicolon
Пропущен оператор, или точка с запятой (";").
QunneD вне форума Ответить с цитированием
Старый 03.12.2011, 17:51   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Аргумент у Random (если есть) типа Integer должен быть. С этого начать следует. И подсмотреть в любом дельфийском юните примеры оформления кода
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 03.12.2011, 18:19   #5
hon
Форумчанин
 
Регистрация: 08.06.2011
Сообщений: 693
По умолчанию

Ответ на данный вопрос не будет дан или будет дан очень поздно, т.к. код плохо оформлен. Вот красиво оформленный код:

Код:
if(aRegExpr.Match[1]='random') then
   begin
   if((aRegExpr.Match[2]<>'NIL') and (strtoint(aRegExpr.Match[2])<>0) and (aRegExpr.Match[3]<>'NIL') and (strtoint(aRegExpr.Match[3])<>0))then
      begin
      f1 := {вот здесь}random(strtofloat(aRegExpr.Match[2]))+(strtofloat(aRegExpr.Match[3])-strtofloat(aRegExpr.Match[2])); 
   end else
       if((aRegExpr.Match[2]<>'NIL')and(strtoint(aRegExpr.Match[2])<>0)) then
       f1 := random()+strtofloat(aRegExpr.Match[2]);
       else begin
       f1 := random();
      end;
   end;
И что этот код должен делать?
hon вне форума Ответить с цитированием
Старый 03.12.2011, 19:01   #6
QunneD
C++ &amp;amp; PHP &amp;amp; Asm
Форумчанин
 
Аватар для QunneD
 
Регистрация: 06.12.2008
Сообщений: 300
По умолчанию

Вот, другое дело, теперь более менее приятно смотреть.

Ну, во-первых:

Random([Range: Integer])

Соответственно, если не задать значение, то появиться ошибка.

Во-вторых:

Тип Double/Float/Extended/Real несовместим с типом Int из-за запятой, соответственно всё это дело надо перевести в тип Int предварительно округлив значение до целого числа с помощью функции round(X: Real);

В третьих:

Без инициализации процедуры Randomize, функция Random бессполезна.

Код:
 if((aRegExpr.Match[2]<>'NIL')and(strtoint(aRegExpr.Match[2])<>0)) then
       f1 := random()+strtofloat(aRegExpr.Match[2]);
       else begin
Где оператор end ?!

З.Ы.: Встроенный дебаггер для чего? Используем F7, F8 - выявляем где ошибочки.

Последний раз редактировалось QunneD; 03.12.2011 в 19:07.
QunneD вне форума Ответить с цитированием
Старый 03.12.2011, 21:46   #7
impulsgraw
Верховный Судья
Пользователь
 
Аватар для impulsgraw
 
Регистрация: 23.11.2010
Сообщений: 82
Подмигивание

ээ, конечно спасибо за критику!
Но есть несколько НО:
Цитата:
Придерживаться нормам синтаксиса не учили? Самому не впадлу читать подобную "ахинею"?

Цитата:
Missing operator or semicolon
Пропущен оператор, или точка с запятой (";").
Это я прекрасно понимаю! Я никак немогу понять, где в коде есть эта ошибка?

Цитата:
Вот, другое дело, теперь более менее приятно смотреть.

Ну, во-первых:

Random([Range: Integer])

Соответственно, если не задать значение, то появиться ошибка.

Во-вторых:

Тип Double/Float/Extended/Real несовместим с типом Int из-за запятой, соответственно всё это дело надо перевести в тип Int предварительно округлив значение до целого числа с помощью функции round(X: Real);

В третьих:

Без инициализации процедуры Randomize, функция Random бессполезна.
Во-первых и во-вторых:
Если бы была ошибка по этому поводу, то она была бы по несовместимости типов Extended и Integer.
Я не дурак и про то, что десятичная дробь отлична от целого числа, я знаю, но в strtofloat я ошибся.
Да, кстати, функция random существует в 2 видах: с аргументом типа integer, возвращающая значение integer, и вообще без аргументов, возвращающая значение типа extended.

В третьих:

Не правда!
Функция Random работает и без Randomize, но хуже. Randomize предаёт рандому более "разбросанный" вид.

Цитата:
Где оператор end ?!
Вообще-то, если нету begin-а, то и end-а тоже не надо! Читайте документацию по pascal-ю.

Цитата:
З.Ы.: Встроенный дебаггер для чего? Используем F7, F8 - выявляем где ошибочки.
И как вы себе это представляете?? Даже если я и расставлю breakpoint-ы, то из за ошибок в коде программа не запустится!
Отладка может происходить только в процессе работы программы!

Ну вобщем, спасибо вам всем за всё, но проблема то была совсем явной: я создал тип
Код:
Type TFunctions = (random, round);
, тоесть когда я писал random, он думал, что это не функция, а константа из типа TFunctions.
Ошибку решил, убрав из типа константу random.

Последний раз редактировалось impulsgraw; 04.12.2011 в 13:00.
impulsgraw вне форума Ответить с цитированием
Старый 04.12.2011, 02:59   #8
QunneD
C++ &amp;amp; PHP &amp;amp; Asm
Форумчанин
 
Аватар для QunneD
 
Регистрация: 06.12.2008
Сообщений: 300
По умолчанию

Уважаемый, мы не экстрасенсы.

Цитата:
Вообще-то, если нету begin-а, то и end-а тоже не надо!!! Читайте документацию по pascal-ю.
Операторы begin, end, облегчают компилятору выполнять его работу. И без использования данных операторов, более одной операции не выполнишь. И вообще, кому еще документацию надо читать? " ';' not allowed before 'ELSE' " - " ';' не разрешен перед 'ELSE' ".

Использовав три восклицательных знака, Вы только что нарушили правила форума, в курсе об этом?

Цитата:
Если бы была ошибка по этому поводу, то она была бы по несовместимости типов Extended и Integer.
Ошибки отображаются по мере их важности, соответственно первоначально отображаются наиболее важные элементы которые необходимо исправить, после исправления чего, появиться следующая ошибка.

Основная мысль в том что она обязательно появиться.

Поскольку вопрос исчерпан, до свидания.

Последний раз редактировалось QunneD; 04.12.2011 в 03:11.
QunneD вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
возникает ошибка Missing operator or semicolon (классы) fate Общие вопросы Delphi 16 22.02.2011 19:12
missing operator or semicolon - Как получить секунды [Delphi] bulldog5293 Помощь студентам 8 10.12.2010 16:30
ошибкa "missing operator or semicolon" Дим@@ Помощь студентам 3 11.11.2010 15:14
ошибка: no match for ‘operator<<’ in ‘std::operator<< [with _Traits = std::char_traits<char> Critter Общие вопросы C/C++ 5 08.08.2010 23:38
NTLDR is missing... melkortheshadow Windows 7 19.09.2009 03:03