Форум программистов, компьютерный форум, киберфорум
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. Показов 13200. Ответов 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
Эксперт по электронике
6582 / 3209 / 335
Регистрация: 28.10.2011
Сообщений: 12,518
Записей в блоге: 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
Эксперт по электронике
6582 / 3209 / 335
Регистрация: 28.10.2011
Сообщений: 12,518
Записей в блоге: 7
01.12.2021, 17:02
Цитата Сообщение от Замабувараев Посмотреть сообщение
В настоящем мире так никто не делает
То есть у вас нет решения?
У вас нет предложений как легко и просто писать кроссплатформенный код не ища кучу разных библиотек, изучать их документацию и др. что отнимает много времени и сил? PB хорош тем что имеет кроссплатформенную библиотеку и вся необходимая документация в справке из дистрибутива.

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

Цитата Сообщение от Замабувараев Посмотреть сообщение
А что будет если в x не минус единица, а единица? Или двойка?
Какая разница что будет в переменной? Первый And побитовый и его задача обнулить все биты кроме нулевого.
0
Модератор
10048 / 3894 / 883
Регистрация: 22.02.2013
Сообщений: 5,847
Записей в блоге: 79
01.12.2021, 17:24
В vb6 операторы And, Or и т.д. являются побитовыми и ни у кого особо это проблем не вызывает.
0
Эксперт по электронике
6582 / 3209 / 335
Регистрация: 28.10.2011
Сообщений: 12,518
Записей в блоге: 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
Модератор
10048 / 3894 / 883
Регистрация: 22.02.2013
Сообщений: 5,847
Записей в блоге: 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
Эксперт по электронике
6582 / 3209 / 335
Регистрация: 28.10.2011
Сообщений: 12,518
Записей в блоге: 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
7816 / 4635 / 2837
Регистрация: 22.11.2013
Сообщений: 13,158
Записей в блоге: 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
Эксперт по электронике
6582 / 3209 / 335
Регистрация: 28.10.2011
Сообщений: 12,518
Записей в блоге: 7
02.12.2021, 11:33
Цитата Сообщение от Замабувараев Посмотреть сообщение
Тогда почему вы ещё не на дотнетах?
Не подходит управляемый код. Легко декомапилировать. Требует больше ресурсов для исполнения и т. д. К тому же .NET только для тех платформ, на которые его портировала микрософт. Mono это сторонняя разработка как и вайн и нет гарантий что любой код будет нормально работать.

А вот почему вы до сих пор не на C/C++?
0
Модератор
10048 / 3894 / 883
Регистрация: 22.02.2013
Сообщений: 5,847
Записей в блоге: 79
02.12.2021, 12:04
Цитата Сообщение от bormant Посмотреть сообщение
Но обычно практичнее сравнивать с 0
В данном примере разницы нет никакой. Вот если бы там нужно было бы проверить несколько битов то, да, и то практичнее применить CBool как я написал выше, а не сравнение с нулем.
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
 Аватар для bormant
7816 / 4635 / 2837
Регистрация: 22.11.2013
Сообщений: 13,158
Записей в блоге: 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
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru