Форум программистов, компьютерный форум, киберфорум
QBasic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.50/54: Рейтинг темы: голосов - 54, средняя оценка - 4.50
 Аватар для Ixmil
19 / 187 / 0
Регистрация: 17.06.2013
Сообщений: 2,163

Подскажите про оператор IF THEN END IF

23.11.2021, 19:51. Показов 14397. Ответов 161
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Тема: Подскажите про оператор IF THEN END IF
Ограничено ли число команд выполняемых при соблюдении его условия или же это может быть любое число комманд?

Потому что в Паскале если пишут подобным образом: if then то это означает что в случае выполнения условия оператора может выполняться только одна инструкция следующаяя сразу за словом then. А следующая команда уже не будет относится к оператору. А если нужно чтобы количество комманд внутри условного оператора было любым нужно писать как:
if then begin end;. Я заинтересован в использовании только универсального варианта условного оператора Бейсика у которого число комманд внутри оператора может быть любым. Если же оператор IF THEN END IF как то переделывается в более уневерсальный вариант то не могли бы вы подсказать как это делать?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
23.11.2021, 19:51
Ответы с готовыми решениями:

Excel 2013 32-bit URLDownloadToFile пишет "Compile error: only comment may appear after End Sub End Function or End Prop
Добрый день! перепробовал все варианты и не вызывается функция URLDownloadToFile: пишет "Compile error: only comment may appear...

Оператор Try . Except . Finally . End; при работе с ресурсами
Здравствуйте. Задача такая. Есть текстовый файл в ресурсах, который считывается и записывается в Memo. Требуется предусмотреть...

Оператор for. Для чего в коде дополнительные begin-end
Program DimanRu; Var name, surname: string; i:integer; Begin; Writeln('Введите имя...'); Readln(name); Writeln('Введите...

161
Эксперт по электронике
7144 / 3323 / 342
Регистрация: 28.10.2011
Сообщений: 13,101
Записей в блоге: 7
01.12.2021, 16:08
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Замабувараев Посмотреть сообщение
В языке где есть тип данных Boolean — оператор побитового And можно называть тем же словом And, чем он собственно и является, а не в виде закорючек, потому что компилятор знает какой из типов операторов And применять в конкретном случае.
Как по вашему должен компилятор понимать эту строку?
PureBasic
1
If x And 1 And y=4
Как он узнает что первый And побитовый, а второй логический?

Цитата Сообщение от Замабувараев Посмотреть сообщение
С тем же успехом можно брать кроссплатформенную библиотеку и подёргивать её за функции.
Приведите пример кроссплатформенной библиотеки охватывающей весь спектр функций (графика, файлы, базы данных, GUI, сеть, многопоточность, работа с железом, аудио, видео, 3D и др.) и чтобы ни в коем случае не было Bloatware ПО.
Потому что на словах у вас все легко и просто. А как на деле? Сколько кроссплатформенных приложений вы написали и какие библиотеки использовали?
1
COM‐пропагандист
 Аватар для Замабувараев
936 / 785 / 149
Регистрация: 18.12.2014
Сообщений: 2,256
Записей в блоге: 4
01.12.2021, 16:41
Цитата Сообщение от locm Посмотреть сообщение
Как по вашему должен компилятор понимать эту строку?
В худшем случае компилятор выбросит Warning: Implicit conversion, и попытается преобразовать что‐то во что‐то, в лучшем случае неявное приведение типа должно быть запрещено, и программист обязан самостоятельно из Boolean получить число.
Цитата Сообщение от locm Посмотреть сообщение
Приведите пример кроссплатформенной библиотеки охватывающей весь спектр функций
В настоящем мире так никто не делает, в нормальном мире делают для каждого класса функций отдельную библиотеку. Например, OpenGL не работает с сетью, а функции чтения USB не работают с XML.

Добавлено через 5 минут
Цитата Сообщение от locm Посмотреть сообщение
If x And 1 And y=4
Предположим, что 0 — это False, тогда True — это Not False, то есть Not 0. Как известно, операция NOT — это обращение всех бит числа в единицу, следовательно получаем для 32‐числа FFFFFFFF. Но ведь FFFFFFFF = -1, следовательно True — это минус единица.
А что будет если в x не минус единица, а единица? Или двойка? Как вообще PureBasic это разруливает?
0
Эксперт по электронике
7144 / 3323 / 342
Регистрация: 28.10.2011
Сообщений: 13,101
Записей в блоге: 7
01.12.2021, 17:02
Цитата Сообщение от Замабувараев Посмотреть сообщение
В настоящем мире так никто не делает
То есть у вас нет решения?
У вас нет предложений как легко и просто писать кроссплатформенный код не ища кучу разных библиотек, изучать их документацию и др. что отнимает много времени и сил? PB хорош тем что имеет кроссплатформенную библиотеку и вся необходимая документация в справке из дистрибутива.

Цитата Сообщение от Замабувараев Посмотреть сообщение
Как вообще PureBasic это разруливает?
Элементарно. Я выкладывал код, разве не видели Подскажите про оператор IF THEN END IF

Цитата Сообщение от Замабувараев Посмотреть сообщение
А что будет если в x не минус единица, а единица? Или двойка?
Какая разница что будет в переменной? Первый And побитовый и его задача обнулить все биты кроме нулевого.
0
Модератор
10061 / 3906 / 885
Регистрация: 22.02.2013
Сообщений: 5,856
Записей в блоге: 79
01.12.2021, 17:24
В vb6 операторы And, Or и т.д. являются побитовыми и ни у кого особо это проблем не вызывает.
0
Эксперт по электронике
7144 / 3323 / 342
Регистрация: 28.10.2011
Сообщений: 13,101
Записей в блоге: 7
01.12.2021, 18:00
Цитата Сообщение от The trick Посмотреть сообщение
В vb6 операторы And, Or и т.д. являются побитовыми
Как решена неоднозначность в условиях?
То есть как на VB выглядит этот код
PureBasic
1
If x & 1 And y=4
который проверяет чтобы в x был установлен 0 бит и чтобы в y было число 4.
0
Кормпилятор
 Аватар для Quiet Snow
5044 / 1718 / 409
Регистрация: 25.04.2010
Сообщений: 4,827
Записей в блоге: 2
01.12.2021, 18:47
Цитата Сообщение от locm Посмотреть сообщение
Как решена неоднозначность в условиях?
Скобки надо ставить для приоритета. Это вся разница.
Условие всё считается побитово. Сам принцип другой. Целочисл. переменную можно использовать
как результат условия, т.е. условие можно сделать в виде выражения.
Например
PureBasic
1
2
3
4
A = B > 10
IF A THEN
 PRINT "ok"
END IF
При этом если переменная не целочисленная, она будет автоматически приведена к целочисленной
для проверки условия.
0
COM‐пропагандист
 Аватар для Замабувараев
936 / 785 / 149
Регистрация: 18.12.2014
Сообщений: 2,256
Записей в блоге: 4
01.12.2021, 19:47
Цитата Сообщение от locm Посмотреть сообщение
То есть у вас нет решения?
Я не верю в серебряные пули и волшебные палочки соломоновых решений. Вы не сможете объять необъятное и запихнуть в одну библиотеку ВСЁ. То есть вообще всё как вы хотите.
Даже корпорация Микрософт не справилась с этой задачей, когда создала .Net Framework, прямые вызовы торчат то тут, то там.
Пример «90% тем на PureBasic‐форуме посвящены WinAPI» подтверждает это. Если бы могли сделать универсальное решение, то все сидели бы в рамках единого универсального решения, и не вызывали бы функции системы напрямую. И была бы тогда одна ОС, один компилятор, один редактор, один язык, один народ, одна страна…
0
Кормпилятор
 Аватар для Quiet Snow
5044 / 1718 / 409
Регистрация: 25.04.2010
Сообщений: 4,827
Записей в блоге: 2
01.12.2021, 19:52
Цитата Сообщение от locm Посмотреть сообщение
А теперь представьте что код написан полностью на WinAPI. Сколько времени потребовалось чтобы переписать около 10 тысяч строк с WinAPI на функции Linux?
Дофига времени, и время тут ещё косвенный фактор, в отличии от знания разных архитектур ОС и их API.
Когда без API на API, тупо алгоритмика портируется очень быстро при знании двух ЯП
и рекомендаций которые давно ещё давал по коду, т.е. простой процедурный стиль без
т.н. "синтаксического сахара".
И никаких проблем с чисто вычислительной стороны диалектов не возникало никогда.


А вот с лажей в библиотеках сталкиваться пришлось. И если в приличных библиотеках,
завязанных на WinAPI ещё можно было что-то сделать, почитав MSDN, то с теми,
где вообще разгрестись сложно - уже нет. Ожидания по поводу библиотек и дальнейшей
разработки в перспективе, как правило, всегда завышенные.
Касаемо встроенного функционала, там с лажей тоже сталкивался, тот же LibGfx FB-шный,
когда с альфа каналом там поработаешь, сразу понимаешь какой это костыль. Но если
так, без альфы - классная библиотека, поэтому первое впечатление не всегда верное.
0
COM‐пропагандист
 Аватар для Замабувараев
936 / 785 / 149
Регистрация: 18.12.2014
Сообщений: 2,256
Записей в блоге: 4
01.12.2021, 19:53
Цитата Сообщение от locm Посмотреть сообщение
Элементарно. Я выкладывал код, разве не видели
А могли бы сделать перегрузку оператора и ввести тип данных Boolean.
В си раньше тоже не было Boolean, зачем же усложнять, всем же понятно что 0 — это ложь, а 1 — это истина, но потом пришлось ввести из‐за чехарды с интерпретацией числа (пример с двойкой и минус единицей) как логического типа данных.
0
Кормпилятор
 Аватар для Quiet Snow
5044 / 1718 / 409
Регистрация: 25.04.2010
Сообщений: 4,827
Записей в блоге: 2
01.12.2021, 20:06
Цитата Сообщение от Quiet Snow Посмотреть сообщение
При этом если переменная не целочисленная, она будет автоматически приведена к целочисленной
для проверки условия.
Ещё хотел добавить что тут, люди, всё кто пишут, думаю понимают сколько там лишних преобразований
типов туда сюда и почему просто написать как я сделал не особо кайфово, а нужно именно задать
тип переменных.
На PB мне приходилось менять вычислительный код, т.к. много проектировалось на QB и частенько
использовал эту абилку и использую до сих пор.

Добавлено через 8 минут
Цитата Сообщение от Замабувараев Посмотреть сообщение
А могли бы сделать перегрузку оператора и ввести тип данных Boolean.
Так оно всё равно лежит в байте. По факту тип булеан нужен лишь чтобы программист видел, что это логика.
Но к нему нужно приводить, если мы что-то вычисляем не посредством условий. А просто значение как в QB
и FB приводить не нужно, компилятор делает это автоматически по значению.
1
COM‐пропагандист
 Аватар для Замабувараев
936 / 785 / 149
Регистрация: 18.12.2014
Сообщений: 2,256
Записей в блоге: 4
01.12.2021, 20:14
Цитата Сообщение от Quiet Snow Посмотреть сообщение
Но к нему нужно приводить
Я бы убрал из языка автоматическое приведение типов, любое, даже из Byte в Integer. Сразу бы стали видны все мины замедленного действия и потенциальные ошибки.
1
Кормпилятор
 Аватар для Quiet Snow
5044 / 1718 / 409
Регистрация: 25.04.2010
Сообщений: 4,827
Записей в блоге: 2
01.12.2021, 20:43
Цитата Сообщение от Замабувараев Посмотреть сообщение
Я бы убрал из языка автоматическое приведение типов, любое, даже из Byte в Integer. Сразу бы стали видны все мины замедленного действия и потенциальные ошибки.
Я бы не убирал, а просто рекомендовал людям попрогать на Паскале. Это проблема программиста, не языка.
Если сразу все типы учитывать и определять, проблема уходит.
0
Модератор
10061 / 3906 / 885
Регистрация: 22.02.2013
Сообщений: 5,856
Записей в блоге: 79
01.12.2021, 20:51
Цитата Сообщение от locm Посмотреть сообщение
Как решена неоднозначность в условиях?
Нет никакой неоднозначности когда присутствуют только битовые операторы, т.к. логические операторы - частный случай битовых.

Цитата Сообщение от locm Посмотреть сообщение
If x & 1 And y=4
либо так:
Visual Basic
1
If CBool(x And 1) And y = 4
либо так
Visual Basic
1
If (x and 1) = 1 And y = 4
0
Эксперт по электронике
7144 / 3323 / 342
Регистрация: 28.10.2011
Сообщений: 13,101
Записей в блоге: 7
01.12.2021, 20:58
Цитата Сообщение от Замабувараев Посмотреть сообщение
Я не верю в серебряные пули и волшебные палочки
Как говорится - слив засчитан!

Цитата Сообщение от Замабувараев Посмотреть сообщение
Пример «90% тем на PureBasic‐форуме посвящены WinAPI» подтверждает это.
Вы вообще читаете что я пишу. Отвечал на этот вопрос. Подскажите про оператор IF THEN END IF
0
COM‐пропагандист
 Аватар для Замабувараев
936 / 785 / 149
Регистрация: 18.12.2014
Сообщений: 2,256
Записей в блоге: 4
01.12.2021, 21:16
Цитата Сообщение от locm Посмотреть сообщение
Как говорится - слив засчитан!
Тогда почему вы ещё не на дотнетах? Библиотека дотнетов намного более универсальна и поддерживает больше архитектур.
По сравнению с библиотекой дотнетов, библиотека PureBasic — это просто какой‐то набор из десяти функций.
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
 Аватар для bormant
7818 / 4637 / 2837
Регистрация: 22.11.2013
Сообщений: 13,159
Записей в блоге: 1
02.12.2021, 09:14
Цитата Сообщение от The trick Посмотреть сообщение
либо так
Visual Basic
1
If (x and 1) = 1 And y = 4
Но обычно практичнее сравнивать с 0
Visual Basic
1
If (x and 1) <> 0 And y = 4
0
Эксперт по электронике
7144 / 3323 / 342
Регистрация: 28.10.2011
Сообщений: 13,101
Записей в блоге: 7
02.12.2021, 11:33
Цитата Сообщение от Замабувараев Посмотреть сообщение
Тогда почему вы ещё не на дотнетах?
Не подходит управляемый код. Легко декомапилировать. Требует больше ресурсов для исполнения и т. д. К тому же .NET только для тех платформ, на которые его портировала микрософт. Mono это сторонняя разработка как и вайн и нет гарантий что любой код будет нормально работать.

А вот почему вы до сих пор не на C/C++?
0
Модератор
10061 / 3906 / 885
Регистрация: 22.02.2013
Сообщений: 5,856
Записей в блоге: 79
02.12.2021, 12:04
Цитата Сообщение от bormant Посмотреть сообщение
Но обычно практичнее сравнивать с 0
В данном примере разницы нет никакой. Вот если бы там нужно было бы проверить несколько битов то, да, и то практичнее применить CBool как я написал выше, а не сравнение с нулем.
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
 Аватар для bormant
7818 / 4637 / 2837
Регистрация: 22.11.2013
Сообщений: 13,159
Записей в блоге: 1
02.12.2021, 12:47
Цитата Сообщение от The trick Посмотреть сообщение
В данном примере разницы нет никакой.
Человеку свойственно ошибаться.
Visual Basic
1
If (x and 1) = 1 And y = 4
А завтра плюс месяц выяснилось, что в номере флага ошиблись, и вот оно, долгожданное исправление:
Visual Basic
1
If (x and 2) = 1 And y = 4

Да-да, конечно так не бывает и это все фантазии...

Но сравнение с 0 этого недостатка лишено:
Visual Basic
1
If (x and 2) <> 0 And y = 4
Вот поэтому практичнее сравнивать с 0.
Да-да, знаю, CBool именно это и делает, сравнивает с нулём
0
COM‐пропагандист
 Аватар для Замабувараев
936 / 785 / 149
Регистрация: 18.12.2014
Сообщений: 2,256
Записей в блоге: 4
02.12.2021, 13:14
Цитата Сообщение от locm Посмотреть сообщение
А вот почему вы до сих пор не на C/C++?
1. Не люблю синтаксисы где конец строки надо дублировать точками с запятой.
2. На FreeBASIC могу делать всё то же самое что и на Си, нет таких вещей которые можно сделать только на Си и нельзя на FreeBASIC.
3. Полностью управляю процессом создания исполняемого файла.
4. Получаю быстрые и маленькие программы.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
02.12.2021, 13:14

Оператор условия не открывает ветвь then begin end, несмотря, на то, что условие выполняется
Учусь по самоучителю &quot;Песни о Паскале&quot;. Код программы предложенный автором не кидать, и ваши коды тоже т.к. сам хочу разобраться. Условие...

Про оператор IF
Добрый вечер. Переменная а получила значение а = &quot;Иванов Иван&quot;, нужно найти в списке этого &quot;Иванов Иван&quot; Запускаем цикл и...

Не могу поставить end. после else – пишет "ожидался оператор"
uses crt; var a:integer; k:string; begin; randomize; repeat clrscr; a:=random(4); if a=1 then begin

Подскажите случаи, когда количество begin и end в программе не совпадают
подскажите случаи когда кол-во begin &amp; end в прграмме не совпадают :swoon: вот первый : case .. of ..... end;

Простая задачка про тернарный оператор
Переписал с учебника простую задачку, однако на 10 и 12 строке показывает ошибки. Что тут не так? #include&lt;iostream&gt; ...


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

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
Новые блоги и статьи
Очистка реквизитов и табличных частей документа при копировании
Maks 26.07.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРаботу", разработанного в КА2. Задача: Заменить алгоритм запрета копирования документов для сотрудников с ролью "Стажер",. . .
Доктрина интенционального знания - Доктрина для портала "Срез".
Hrethgir 25.07.2026
Может найдётся кто захочет оценить доктрину. . . Написания правил участия для меня роскошь, требующая лимита времени, поэтому все сообщения не прошедшие модерацию будут видны только участникам портала,. . .
сукцессия 44. Решил подать на припринт в межународные сервисы препринтов. Но нужно одобрение от ученых
anaschu 25.07.2026
Английский вариант. Пока кто то не одобрит мою личность, мне не получиться это опубликовать на препринте. Но заявку на публикацию статьи я сегодня подам.
сукцессия 43. Вторая научная статья за месяц- прайминг и гатгил
anaschu 25.07.2026
две стороны одной монеты
Более приземисто - Эстафету хвоста в .cdl (деревья эстафеты в сад).
Hrethgir 24.07.2026
В будущем, после написания блока инверсии обхода дерева (эстафеты хвоста), я планирую вернуться к нашему прошлому разговору о том, обладают ли знания целеполаганием. Тогда я пришел к выводу, что. . .
Вот представьте что вам дали бессмертие.
kumehtar 24.07.2026
Вот представьте что вам дали бессмертие, ничего более не меняя. Вообще ничего, только бессмертие в нынешнем виде. Рады были бы? Что бы вы тут делали всё это время? Никакой пенсии. Никакого нового. . .
сукцессия 41
anaschu 24.07.2026
Численная верификация бифуркации в агентной модели лесной сукцессии: от одного параметра к ансамблю Автор: пользователь @Shumilov_AS | Раздел: Прикладная математика / Численные методы Кратко. . .
сукцессия 40. Ансамблевая кластерная параметризаци, часть 1.
anaschu 24.07.2026
Пр# Сопровождение научной статьи ИИ-ассистентом: подготовка публикации и калибровка агентно-ориентированной модели сукцессии микоризных систем **Полевые заметки о двухнедельной совместной работе**. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru