Форум программистов, компьютерный форум, киберфорум
QBasic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.92/13: Рейтинг темы: голосов - 13, средняя оценка - 4.92
0 / 0 / 0
Регистрация: 22.10.2012
Сообщений: 35

Сравнение слов по заданному алфавиту

26.11.2012, 19:50. Показов 2914. Ответов 33
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Дан алфавит, состоящий из трех символов: ъ, ь, ы. Нужно составить программу, которая определит какое из двух, вводимых слов больше. То есть мы введем 2 слова, например: ьъъъъыь и ъьы, второе слово будет больше, так как его первый символ (ъ) стоит в данном алфавите раньше, чем первый символ второго слова (ь). Или два слова: ыъъъъь и ыъъъъыъъъъ, первое слово будет больше, т.к. с 1 по 5 символ у слов идентичны, а 6 символ первого слова стоит в алфавите раньше, чем 6 символ второго слова. Вот по такому вот принципу...
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
26.11.2012, 19:50
Ответы с готовыми решениями:

Дан список слов различной длины. Составить программу упорядочения списка слов: По их длине; По алфавиту
Очень срочно!!!!! Дан список слов различной длины. Составить программу упорядочения списка слов: По их длине; По алфавиту.

Сортировка массива по заданному алфавиту
СРОЧНО НУЖНА ПОМОЩЬ:) Кто может подсказать, как можно имея массив отсортировать его по ЗАДАННОМУ алфавиту? Например, я ввёл слова, они...

Сравнение строки по алфавиту
Здравствуйте, подскажите пожалуйста как сравнить строку по алфавиту? То есть мне нужно что бы каждая буква проверялась на указаный алфавит....

33
6180 / 945 / 313
Регистрация: 25.02.2011
Сообщений: 1,381
Записей в блоге: 1
26.11.2012, 20:38
Kosor, у Вас точно правильно описано условие, какое слово больше? т.к. обычно если буква в алфавите идет раньше, то такое слово должно быть меньше, реализовал именно такой вариант.

На QBasic писать лень, да и с кириллицей в нем проблемы, выкладываю код на VB, думаю что перевести на QBasic будет не сложно
Visual Basic
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
42
43
44
Sub main()
    Dim abc As String
    Dim slovo1 As String, slovo2 As String
    Dim p As Long
    abc = "ъьы"
    
    slovo1 = "ьъъъъыь"
    slovo2 = "ъьы"
    p = CompareWords(abc, slovo1, slovo2)
    Select Case p
    Case -1: Debug.Print slovo1; " меньше "; slovo2
    Case 1: Debug.Print slovo1; " больше "; slovo2
    Case Else: Debug.Print slovo2; " равно "; slovo1
    End Select
    
    slovo1 = "ыъъъъь"
    slovo2 = "ыъъъъыъъъъ"
    p = CompareWords(abc, slovo1, slovo2)
    Select Case p
    Case -1: Debug.Print slovo1; " меньше "; slovo2
    Case 1: Debug.Print slovo1; " больше "; slovo2
    Case Else: Debug.Print slovo2; " равно "; slovo1
    End Select
    
    slovo1 = "ыъъъъь"
    slovo2 = "ыъъъъь"
    p = CompareWords(abc, slovo1, slovo2)
    Select Case p
    Case -1: Debug.Print slovo1; " меньше "; slovo2
    Case 1: Debug.Print slovo1; " больше "; slovo2
    Case Else: Debug.Print slovo2; " равно "; slovo1
    End Select
    
End Sub
 
Function CompareWords(abc As String, s1 As String, s2 As String) As Long
    Dim i As Long, n As Long, maxLen As Long
    If Len(s1) > Len(s2) Then maxLen = Len(s1) Else maxLen = Len(s2)
    For i = 1 To maxLen
        n = InStr(" " & abc, Mid$(s1, i, 1)) - InStr(" " & abc, Mid$(s2, i, 1))
        If n <> 0 Then Exit For
    Next i
    CompareWords = Sgn(n)
End Function
1
Платежеспособный зверь
 Аватар для кот Бегемот
8964 / 4387 / 1654
Регистрация: 28.10.2009
Сообщений: 11,645
26.11.2012, 21:13
m-ch, это фигня. Нужно не решение для частных случаев, а общее решение
0
0 / 0 / 0
Регистрация: 22.10.2012
Сообщений: 35
26.11.2012, 22:19  [ТС]
кот Бегемот, верно... Для частных случаев это сделать просто. Нужна сама программа, в которой вводились бы 2 произвольных слова...
0
6180 / 945 / 313
Регистрация: 25.02.2011
Сообщений: 1,381
Записей в блоге: 1
26.11.2012, 23:10
Цитата Сообщение от кот Бегемот Посмотреть сообщение
Нужно не решение для частных случаев, а общее решение
Цитата Сообщение от Kosor Посмотреть сообщение
Нужна сама программа, в которой вводились бы 2 произвольных слова...
ну так что мешает вместо присвоения символьных переменных написать INPUT
я просто привел приер различных вариантов сравнения в одной программе
Само сравнение делает функция CompareWords(), возвращающая "-1" если первое слово меньше второго, "1" если первое больше второго и "0" если строки равны

Дерзайте, т.к. помимо простого INPUTа нужно еще защиту от дурака прописывать, вдруг введут символы, которых нет в алфавите?
0
0 / 0 / 0
Регистрация: 22.10.2012
Сообщений: 35
27.11.2012, 22:02  [ТС]
Много моментов не понимаю в написанной программе Visual Basic. Перевести в QBasic оказалось сложнее, чем я думал. Оператору CompareWords есть аналог в QBasic? Goto, думаю, не подойдет... Кто может перевести?

Добавлено через 7 часов 24 минуты
Ребят, вся надежда на вас... Программа у меня никак не работает, видно коряво переделал в КБ... Позарез нужна к завтрашнему утру...
0
6180 / 945 / 313
Регистрация: 25.02.2011
Сообщений: 1,381
Записей в блоге: 1
27.11.2012, 22:40
QBasic/QuickBASIC
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
DECLARE FUNCTION CompareWords% (abc$, s1$, s2$)
CLS
INPUT "Vvedite alfavit"; abc$
INPUT "Vvedite 1-e slovo"; s1$
INPUT "Vvedite 2-e slovo"; s2$
SELECT CASE CompareWords(abc$, s1$, s2$)
    CASE -1: PRINT s1$; " menshe "; s2$
    CASE 1: PRINT s1$; " bolshe "; s2$
    CASE ELSE: PRINT s2$; " ravno "; s2$
END SELECT
 
FUNCTION CompareWords% (abc$, s1$, s2$)
    DIM i AS LONG, n AS LONG, maxLen AS LONG
    IF LEN(s1$) > LEN(s2$) THEN maxLen = LEN(s1$) ELSE maxLen = LEN(s2$)
    FOR i = 1 TO maxLen
        n = INSTR(" " + abc$, MID$(s1$, i, 1)) - INSTR(" " + abc$, MID$(s2$, i, 1))
        IF n <> 0 THEN EXIT FOR
    NEXT i
    CompareWords = SGN(n)
END FUNCTION
2
 Аватар для CoderHuligan
1743 / 1008 / 257
Регистрация: 30.06.2015
Сообщений: 5,107
Записей в блоге: 56
16.07.2015, 19:09
Предупреждение: кодировка русских букв работает только в dos режиме! С латинницей проблем не возникает на любой платформе. Это пример того, насколько различны пути по которым развивается программистская мысль. Некоторые любят всё усложнять.
QBasic/QuickBASIC
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
DIM A$,B$,C$,E$
DIM i%,s%,d1%,d2%,r%
CLS 
LINE INPUT "vvedite 1 slovo: ", A$
LINE INPUT "vvedite 2 slovo: ", B$
d1%=LEN(A$)
d2%=LEN(B$)
IF d1%>=d2% THEN 
    r%=d2%
ELSE 
    r%=d1%
EndIf
FOR i%=1 TO r%
    C$=Mid(A$,i%,1)
    E$=Mid(B$,i%,1)
   IF C$<>E$ THEN
        SELECT CASE C$
            CASE "ы"
                 PRINT A$;" menshe chem ";B$ : GOTO M2
            CASE "ь"
           IF E$ = "ы" THEN PRINT A$," bolshe chem ";B$ : GOTO M2
                PRINT A$;" menshe chem ";B$ : GOTO M2
            CASE "ъ"
              PRINT A$;" bolshe chem ";B$ : GOTO M2
        END SELECT
   EndIf
NEXT i%
IF d2% = d1% THEN PRINT B$;" ravno ";A$ :  GOTO M2
IF r% = d2% THEN 
   PRINT A$;" bolshe chem ";B$
ELSEIF r% = d1% THEN 
    PRINT A$;" menshe chem ";B$
EndIf
M2:
SLEEP
0
Кормпилятор
 Аватар для Quiet Snow
5044 / 1718 / 409
Регистрация: 25.04.2010
Сообщений: 4,827
Записей в блоге: 2
16.07.2015, 21:10
Некропостинг процветает. CoderHuligan, надеюсь вы все темы трёхлетней давности поднимать не будете?
А то раньше был у нас товарищ, который попёр с этой ботвой. Ну это так, не в укор, а в надежде
на здравый смысл.
0
 Аватар для CoderHuligan
1743 / 1008 / 257
Регистрация: 30.06.2015
Сообщений: 5,107
Записей в блоге: 56
17.07.2015, 14:11
Цитата Сообщение от Quiet Snow Посмотреть сообщение
CoderHuligan, надеюсь вы все темы трёхлетней давности поднимать не будете?
Отсутствием здравого смысла я, надеюсь, не страдаю. Поэтому успокою вас: все темы поднимать совершенно нет необходимости, так как решения задач в большинстве из них вполне удовлетворительны. Просто, хоть изредка, можно обратиться к тем задачам, которые не получили решения или получили, но это решение неверно. Ведь люди гуглят, смотрят на так называемые "решения" и учатся по неверному плану... Не хорошо.
Я вижу, что подфорум квик бейсика, что-то просел в последнее время. То ли сам язык не так популярен, то ли преподавать перестали. Но где вы найдёте более простой язык для начального обучения, чем QBASIC? Считаю, что учится нужно именно на нём, тем более что существует прекрасный инструмент в виде Free Basic, который может эмулировать QBasic(для этого он и создавался).
1
Кормпилятор
 Аватар для Quiet Snow
5044 / 1718 / 409
Регистрация: 25.04.2010
Сообщений: 4,827
Записей в блоге: 2
17.07.2015, 21:19
Ведь люди гуглят, смотрят на так называемые "решения" и учатся по неверному плану... Не хорошо.
Скажу честно - это их проблемы. Нормальный человек спросит, проверит, потом ещё раз проверит.
Просто сетевая этика не приветствует подъём старых тем, которым больше полугода, людей уже нет
кто задавал вопрос, часть форумчан уже ушли, а тем, кто остался уже влом вспоминать и вдаваться
в ньюансы(потому как обращение может быть к любому участнику дискуссии), когда поднимается
тема полугодовой давности, обычно пишут причину и извиняются.

Поэтому понял бы, если б люди поднимали интересный, серьёзный вопрос, а не какую-то
студенческую\школьную лабуду, не применимую НИГДЕ.
К тому же можно поступать лучше: создаём свою тему, в начале даём ссылку на старую тему,
а потом своё решение вопроса, не поднимая раритет и привлекая тем не менее внимание к вопросу
текущей аудитории.

Я вижу, что подфорум квик бейсика, что-то просел в последнее время.
Не только квик, все просели, если вы следили конечно за событиями. Сам тут теперь только как
демагог на расслабоне. Ибо work-аю, некогда разглагольствовать в интернетах и бестолковой
благотворительностью заниматься, - оно бесполезно, да и себе дороже.

Почитал кстати ваш блог, забавный вы человек.
про блог
"Шерлок Холмс и планирование." - Почитайте про быструю разработку, думается имелось в виду это,
но этот метод не подходит к научным и просто ёмким задачам, там неоткуда дедуцировать, т.к. нужны исследования\аналитика.
Вообще вы можно сказать выразили наглядно главный принцип алгоритмизации. Т.е. это не что-то
особенное, все так делают в меру своего IQ, просто кто-то лучше, кто-то хуже.
Хороший алгоритмист без сильных знаний среды ценится в разы выше чем хороший программист с
идеальным знанием среды, но без нормальных навыков алгоритмизации.

Про GOTO уже писал, когда спагетти - это просто чушь. Но иногда GOTO нужен, чтобы обойти ещё
проверки(лишние), чтобы не мудохаться с реструктуризацией сложных кусков, а просто перепрыгнуть.
Т.е. его появление должно быть чем то оправдано.


тем более что существует прекрасный инструмент в виде Free Basic
Пошерстите по форуму на эту тему, что видите?
Как говорится: "вопросы ещё есть?"
0
 Аватар для CoderHuligan
1743 / 1008 / 257
Регистрация: 30.06.2015
Сообщений: 5,107
Записей в блоге: 56
18.07.2015, 17:29
Цитата Сообщение от Quiet Snow Посмотреть сообщение
Скажу честно - это их проблемы. Нормальный человек спросит, провери
В общем, конечно, вы абсолютно правы. Задачи лучше решать самим, а не искать по форумам готовые решения, конечно, если хочешь научится программировать по настоящему. Ну, а если напоролся на неправильную "лабуду", то сам виноват. Просто, просматривая форум наталкиваешся на подобную "лабуду", и сразу хочется исправить.
Цитата Сообщение от Quiet Snow Посмотреть сообщение
К тому же можно поступать лучше: создаём свою тему, в начале даём ссылку на старую тему,
а потом своё решение вопроса, не поднимая раритет и привлекая тем не менее внимание к вопросу
текущей аудитории
Спасибо за совет. Согласен с вами.
Цитата Сообщение от Quiet Snow Посмотреть сообщение
Ибо work-аю, некогда разглагольствовать в интернетах и бестолковой
благотворительностью заниматься, - оно бесполезно, да и себе дороже.
Та же ситуация. Некогда разглагольствовать, хотя и очень охота иногда почесать языком. Пишу сайт, утилиту, которая немного сложнее, чем задачки с этого форума, да ещё учусь, познаю что-то новое... Катастрофически не хватает времени. От компа отходишь только тогда когда перестаёшь видеть экран. Но только так можно чему то научиться.
Цитата Сообщение от Quiet Snow Посмотреть сообщение
но этот метод не подходит к научным и просто ёмким задачам, там неоткуда дедуцировать, т.к. нужны исследования\аналитика.
Не знаю, не знаю..
Алгоритм никто не отменял и в научных задачах, так как результат исследования и предварительной аналитики всегда связывается с алгоритмом их обработки. Это - начальные условия, не более. Алгоритм всегда и во всём важнее, так как опирается на логику, которая является основой машинного языка.
Правда, что касается ООП стиля, то тут я не совсем уверен, что данный метод вообще в принципе может работать...
Цитата Сообщение от Quiet Snow Посмотреть сообщение
Но иногда GOTO нужен, чтобы обойти ещё
проверки(лишние), чтобы не мудохаться с реструктуризацией сложных кусков, а просто перепрыгнуть.
Как раз выше я и привёл наглядный пример подобного. Поборники строгой структуризации и тут нагородили бы огород.
Цитата Сообщение от Quiet Snow Посмотреть сообщение
Пошерстите по форуму на эту тему, что видите?
Как говорится: "вопросы ещё есть?"
У меня всегда есть вопросы, такой уж я человек.
Да, я не вижу подобного под-форума. Совершенно не понимаю почему? Free Basic единственный свободный язык, обладающий почти всеми современными возможностями включая ООП, который продолжает активно развиваться, что можно судить по англоязычному форуму посвящённом ему, на котором уже около 200000 постов: http://www.freebasic.net/forum/
Есть русскоязычный сайт:http://free-basic.ru/index.html
Там есть и другие ссылки.
Этот вариант бейсика претендует на включение в набор компиляторов GNU.
0
Кормпилятор
 Аватар для Quiet Snow
5044 / 1718 / 409
Регистрация: 25.04.2010
Сообщений: 4,827
Записей в блоге: 2
18.07.2015, 20:40
У меня всегда есть вопросы, такой уж я человек.
В поиске по форуму вижу не были, раз пытаетесь указать на сайт, с автором которого, знаком
не по наслышке.

Совершенно не понимаю почему?
Вот если бы пошерстили(поиск по разделу, например по корневому, тут QB всё таки), то всё сразу бы прояснилось.
Но совершенно не тороплюсь, читайте, смотрите, ваши мысли по поводу всего этого тоже лишними не будут.

Алгоритм никто не отменял и в научных задачах
Говорю не про это, а про то, что научная область характерна тем, что без полного исследования вопроса
невозможно выдать результат, нормальный результат. Мы можем спорить об этом долго и муторно, но
осознание к вам придёт, когда вы возьмёте наукоёмкий и сложный проект и не поднимете его нахрапом
по вашей методике, потому как исследуя годами то чёрт поднимешь. Осознание приходит с опытом.
Если говорить простым языком, нельзя за неделю сваять продукт такого же качества, который другой
программист серьёзно мутузил несколько лет, проводя рефакторинги, оптимизации кода и структур,
пересмотр архитектур движков и прочие манипуляции, оттачивая и вылизывая архитектуру & код, готовя
сотни работающих подзадач и натыкаясь на десятки подводных камней.
Чудес в этом мире не бывает, просто хочу до вас это понимание донести. Программирование это работа
т.е. нужно пахать как лошадь, чтобы что-то нормально сделать. Суть алгоритмизации понимают дети
10-ти летнего возраста, но это не делает их сразу высококвалифицированными программистами, нужна
работа над собой в первую очередь: получение опыта, мотивационные и морально волевые аспекты.
Уже молчу о том, что не всё может в принципе написать один человек(тем более любой) и как минимум
на ёмкие проекты нужна команда, всё зависит от прикладной области, насколько часто там используются
недетерминированные алгоритмы, какое количество связей между блоками программы, с каким количеством
данных(и их видов) необходимо работать(и анализировать), сколько матана в конце концов.

что можно судить по англоязычному форуму посвящённом ему
Тут ссылки на форумы запрещены правилами. Туда конечно мало кто пойдёт. Сам сходил бы
конечно, т.к. уже общался на англоязычных форумах, просто нету времени трындеть через
гугл транслейт, а ребята там серьёзные, electrik, D.J.Peters, много чего сбацали для FB.

Задачи лучше решать самим
Всегда про это говорю. Однако надо признать, если тебя учат - это выходит в десятки раз быстрее,
если же учат ещё и хорошо, объясняя все аспекты, то ценного опыта выходит больше, чем пыхтеть самому.
Меня собственно никто не учил, но люди с форумов помогали много конечно.

Free Basic единственный свободный язык
Свободный не единственный, из тех что на слуху: QB64, VB 2010 Express и пара мелких для обучения(small,
qbasic, mobile basic). На самом деле разных диалектов(в т.ч. СПО) дофига, если пошерстить хорошенько.
На ООП, кстати, глубочайше пофиг.)))
0
6180 / 945 / 313
Регистрация: 25.02.2011
Сообщений: 1,381
Записей в блоге: 1
18.07.2015, 21:40
Цитата Сообщение от CoderHuligan Посмотреть сообщение
Просто, просматривая форум наталкиваешся на подобную "лабуду", и сразу хочется исправить.
Это камень в мой огород?
И что не так с кодом, он что не работает?
QBasic сейчас запустить не могу, т.к. он у меня под win8.1 не запускается, но если программу адаптировать под VB/VBA, то все замечательно работает.

Цитата Сообщение от CoderHuligan Посмотреть сообщение
Это пример того, насколько различны пути по которым развивается программистская мысль. Некоторые любят всё усложнять.
Т.е. Вы хотите своим кодом продемонстрировать собственную гениальность (возможно в простоте кода или скорости выполнения или масштабируемости, наверное)?
Например, что нужно поменять в программе, если алфавит состоит не из 3 букв, а из 59 (26 латиницы + 33 кириллицы)?

Цитата Сообщение от CoderHuligan Посмотреть сообщение
Как раз выше я и привёл наглядный пример подобного. Поборники строгой структуризации и тут нагородили бы огород.
Все Ваши Goto запросто можно убрать из кода, при этом его читаемость улучшится.
0
 Аватар для CoderHuligan
1743 / 1008 / 257
Регистрация: 30.06.2015
Сообщений: 5,107
Записей в блоге: 56
19.07.2015, 13:53
Цитата Сообщение от Quiet Snow Посмотреть сообщение
В поиске по форуму вижу не были раз пытаетесь указать на сайт, с автором которого, знаком
не по наслышке.
Да, вы правы, - есть такая тема, но под-форума нет. Автор того сайта как-то оперативно помог мне на своём форуме решить один вопрос по free basic. Большое спасибо haav!
Цитата Сообщение от Quiet Snow Посмотреть сообщение
Чудес в этом мире не бывает, просто хочу до вас это понимание донести. Программирование это работа
т.е. нужно пахать как лошадь, чтобы что-то нормально сделать.
Я это хорошо знаю. Ведь нужно даже просто чисто механически набирать текст, на что уходит уйма времени. Вот например сейчас пишу нечто вроде парсера. Уже нахожусь на 1000 строке, а работы сделано всего только около 10%. Муторные вещи эти лексические анализаторы. Очень много кода. И тут нужно иметь терпение и настойчивость, чтобы ежедневно садится за одну и ту же работу, иногда скучную и однообразную.
Цитата Сообщение от Quiet Snow Посмотреть сообщение
Уже молчу о том, что не всё может в принципе написать один человек(тем более любой) и как минимум
на ёмкие проекты нужна команда, всё зависит от прикладной области,
Это верно. Я на большие проекты и не дерзаю. Прекрасно понимаю, что тут нужна команда и работа "в ключе", на что я плохо способен, так как всё пытаюсь делать по своему, а это многим не нравится.
Цитата Сообщение от Quiet Snow Посмотреть сообщение
а ребята там серьёзные, electrik, D.J.Peters, много чего сбацали для FB.
Да, - я тоже почитываю тот форум поэтому хорошо заочно знаком с этими ребятами.
Цитата Сообщение от Quiet Snow Посмотреть сообщение
Однако надо признать, если тебя учат - это выходит в десятки раз быстрее,
если же учат ещё и хорошо, объясняя все аспекты, то ценного опыта выходит больше, чем пыхтеть самому.
Меня собственно никто не учил, но люди с форумов помогали много конечно.
Хороший учитель много значит, это истина. К сожалению, мне тоже приходится учиться самому. С другой стороны, никакой учитель не заставит ученика проявить самостоятельный интерес к получению знаний. Одним словом, если ученик не хочет учится, то не поможет никакой учитель.
Цитата Сообщение от m-ch Посмотреть сообщение
Это камень в мой огород?
И что не так с кодом, он что не работает?
Я ваш код протестировал. Он работает. Вопрос задан что не так с вашим кодом. Пожалуйста, вот некоторые замечания:
1) Почему вы используете функцию там, где она будет исполняться всего один раз?
2)Почему вы присваиваете тип long там где можно было бы обойтись integer?
3) Возьмём 14 строку:
QBasic/QuickBASIC
1
IF LEN(s1$) > LEN(s2$) THEN maxLen = LEN(s1$) ELSE maxLen = LEN(s2$)
В одной строчке выполняются два лишних вызова функций len... Помедитируйте над этой строчкой. Это полезно, иногда. Можно было бы заранее вычислить длину строк, а потом сравнивать и присваивать уже переменные.
4)Далее в цикле for у вас 4 вызова функций. У меня всего две. Чем меньше в циклах вызовов функций тем лучше. Это признак хорошего тона.
Цитата Сообщение от m-ch Посмотреть сообщение
QBasic сейчас запустить не могу, т.к. он у меня под win8.1 не запускается, но если программу адаптировать под VB/VBA, то все замечательно работает.
Во первых, VB/VBA имеют малое отношение к бэйсику вообще и к qbasic в частности. Это совершнно разные вещи, которые заточены под разные цели.
Во вторых, вам уже раньше кто-то говорил(по моему Quiet Snow), что нужно установить dosbox, а уже в нём запускать старый досовский бэйсик. Но гораздо лучше скачать и установить бесплатный free basic. В нём можно устанавливать препроцессорной директивой: #lang "qb" способность эмулировать qbasic. Насколько я знаю под win8 он работает.
Цитата Сообщение от m-ch Посмотреть сообщение
Вы хотите своим кодом продемонстрировать собственную гениальность (возможно в простоте кода или скорости выполнения или масштабируемости, наверное)?
Ни в коей мере! Сразу оговорюсь, что гениальностью я не страдаю, поэтому ничего "демонстрировать" с целью её проявить, не имею своей целью. Что касается простоты кода и его скорости выполнения, то - да я это и хочу продемонстрировать, потому что считаю, что чем проще код, тем меньше в нём будет возможных багов, тем быстрее он будет работать, и тем легче его будет сопровождать.
Цитата Сообщение от m-ch Посмотреть сообщение
Например, что нужно поменять в программе, если алфавит состоит не из 3 букв, а из 59 (26 латиницы + 33 кириллицы)?
Во первых, речь шла о трёх буквах. Но даже если бы речь шла о 26 буквах, я всё равно применил бы дополнительные case и if, и несмотря на то, что размер моего кода немного и вырос, но по быстродействию он был гораздо лучше. Дело в том, что все ваши действия скрыты за вызовами функций instr и mid, поэтому чем больше будет букв, тем медленнее будут работать эти функции. С case-ами и if-ами программа будет летать.
Цитата Сообщение от m-ch Посмотреть сообщение
Все Ваши Goto запросто можно убрать из кода, при этом его читаемость улучшится.
Интересно было бы посмотреть на такой код. Действительно интересно.
0
6180 / 945 / 313
Регистрация: 25.02.2011
Сообщений: 1,381
Записей в блоге: 1
19.07.2015, 17:13
Пройдусь по порядку:
Цитата Сообщение от CoderHuligan Посмотреть сообщение
1) Почему вы используете функцию там, где она будет исполняться всего один раз?
В функцию выделен алгоритм сравнения строк по заданному алфавиту. Ее можно применять где угодно независимо от самой программы, тем самым производится локализация алгоритма, что полезно в том числе при понимании как работает код.

Цитата Сообщение от CoderHuligan Посмотреть сообщение
2)Почему вы присваиваете тип long там где можно было бы обойтись integer?
Сам не измерял, но по отзывам Long в 32х разрядных системах должен работать быстрее Integer.
В своих кодах я Integer практически не применяю, так же как и Single (для дробных чисел есть Double).

Цитата Сообщение от CoderHuligan Посмотреть сообщение
Можно было бы заранее вычислить длину строк, а потом сравнивать и присваивать уже переменные
Разумеется, но я не ставил целью в учебном коде производить оптимизацию вычислений. Для наглядности (а краткий код легче для понимания) использован двойной вызов функций, а не использование дополнительных вычислений:
Если уж так хочется, то эту часть можно было бы записать:
QBasic/QuickBASIC
1
2
3
maxLen = LEN(s1$)
mL2 = LEN(s2$)
IF maxLen  < mL2  THEN maxLen = mL2
Цитата Сообщение от CoderHuligan Посмотреть сообщение
4)Далее в цикле for у вас 4 вызова функций. У меня всего две. Чем меньше в циклах вызовов функций тем лучше. Это признак хорошего тона.
Ну вообще без функций сделать - на массивах (не уверен, что на QBasic это прокатит). На массивах можно существенно ускорить вычисления.

Цитата Сообщение от CoderHuligan Посмотреть сообщение
Во первых, VB/VBA имеют малое отношение к бэйсику вообще и к qbasic в частности
VBA - единствено доступная среда для меня сейчас (достаточно установить MS Office). Синтаксис от QBasic практически не отличается. Можно реализовать любой алгоритм, код которого практически не будет отличатся от QBasic

Цитата Сообщение от CoderHuligan Посмотреть сообщение
Что касается простоты кода и его скорости выполнения, то - да я это и хочу продемонстрировать, потому что считаю, что чем проще код, тем меньше в нём будет возможных багов, тем быстрее он будет работать, и тем легче его будет сопровождать.
В вашем коде невозможно без переделки использовать другой алфавит, а следовательно любая переделка кода это источник возможной ошибки в том числе и алгоритмической.

Цитата Сообщение от CoderHuligan Посмотреть сообщение
Интересно было бы посмотреть на такой код. Действительно интересно.
Про читаемость не буду врать, возможно она аналогична, но избыток Goto в коде не позволяет его понять.
вот переписанная часть кода, работоспособность не проверял:
QBasic/QuickBASIC
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
DO
  FOR i%=1 TO r%
    C$=Mid(A$,i%,1)
    E$=Mid(B$,i%,1)
   IF C$<>E$ THEN
        SELECT CASE C$
            CASE "ы"
                 PRINT A$;" menshe chem ";B$ : EXIT DO
            CASE "ь"
           IF E$ = "ы" THEN PRINT A$," bolshe chem ";B$ : EXIT DO
                PRINT A$;" menshe chem ";B$ : EXIT DO
            CASE "ъ"
              PRINT A$;" bolshe chem ";B$ : EXIT DO
        END SELECT
   EndIf
  NEXT i%
  IF d2% = d1% THEN 
    PRINT B$;" ravno ";A$ 
  ELSEIF r% = d2% THEN 
    PRINT A$;" bolshe chem ";B$
  ELSEIF r% = d1% THEN 
    PRINT A$;" menshe chem ";B$
  EndIf
LOOP UNTIL true
0
 Аватар для CoderHuligan
1743 / 1008 / 257
Регистрация: 30.06.2015
Сообщений: 5,107
Записей в блоге: 56
20.07.2015, 13:54
Цитата Сообщение от m-ch Посмотреть сообщение
Сам не измерял, но по отзывам Long в 32х разрядных системах должен работать быстрее Integer.
По моему в 32 разрядных системах integer имеет как раз 32 разряда, а long 64 и по определению будет работать быстрее Что касается 64 разрядных систем - ничего не могу сказать.
Цитата Сообщение от m-ch Посмотреть сообщение
Если уж так хочется, то эту часть можно было бы записать:
Теперь это похоже на правду.
Цитата Сообщение от m-ch Посмотреть сообщение
Ну вообще без функций сделать - на массивах (не уверен, что на QBasic это прокатит). На массивах можно существенно ускорить вычисления.
На qbasic без сомнения прокатит, правда нужно будет сделать дополнительные телодвижения.

Цитата Сообщение от m-ch Посмотреть сообщение
VBA - единствено доступная среда для меня сейчас
С закачкой проблемы?
Цитата Сообщение от m-ch Посмотреть сообщение
В вашем коде невозможно без переделки использовать другой алфавит, а следовательно любая переделка кода это источник возможной ошибки в том числе и алгоритмической.
Алфавит - изменяется раз в 1000 лет.
К тому же его размер довольно небольшой, - всего от 26 до nn букв. Заменить эти 26 буковок не большая проблема. Они у меня используются как константы, а не строка, которую нужно ещё отпарсить. С константами программа, по определению, работает гораздо быстрее, чем даже с переменными. Что касается возможной ошибки в алгоритме, то алгоритм довольно жёстко задан, чтобы можно было его как-то нарушить.
Цитата Сообщение от m-ch Посмотреть сообщение
Про читаемость не буду врать, возможно она аналогична, но избыток Goto в коде не позволяет его понять.
вот переписанная часть кода, работоспособность не проверял:
Код не работает. Код со строки 17 не выполняется и программа входит в бесконечный цикл. Проц загружается под 100%.
Вот кстати пример дополнительных костылей в виде совершенно не относящегося к делу цикла do loop. Читаемость программы с подобными костылями становится отвратительной, в то время как с goto всё ясно и прозрачно. Я там по ошибке назначил метке плохое имя: M2, а надо было бы назначить нечто вроде: Vihod, для полной ясности.
0
6180 / 945 / 313
Регистрация: 25.02.2011
Сообщений: 1,381
Записей в блоге: 1
20.07.2015, 18:07
Цитата Сообщение от CoderHuligan Посмотреть сообщение
По моему в 32 разрядных системах integer имеет как раз 32 разряда, а long 64 и по определению будет работать быстрее
2^16 = 65535
2^32 = 4294967296

Из справки QBasic:
Integer - 16-битовая целая переменная со знаком
Long - 32-битовая целая переменная со знаком

Цитата Сообщение от CoderHuligan Посмотреть сообщение
В одной строчке выполняются два лишних вызова функций len... Помедитируйте над этой строчкой. Это полезно, иногда.
Кстати не два а один, всего Len используется только 3 раза, а не 4, т.к. по условию выполняется либо первое вычисление, либо второе.
Цитата Сообщение от CoderHuligan Посмотреть сообщение
Теперь это похоже на правду.
А вот и нет.
Вы, наверное думаете, что функция Len() очень медленная, и ее дополнительное использование сильно замедлит код по сравнению с использованием переменной.
Специально замерил при трех разных ситуациях.
Кликните здесь для просмотра всего текста
QBasic/QuickBASIC
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
CONST n = 10000000
DIM i AS LONG, s1 AS STRING, s2 AS STRING
DIM mlen AS LONG, lns2 AS LONG, t AS SINGLE
 
CLS
'test1
s1 = SPACE$(100)
s2 = SPACE$(100)
 
t = TIMER
FOR i = 1 TO n
    IF LEN(s1) > LEN(s2) THEN mlen = LEN(s1) ELSE mlen = LEN(s2)
NEXT i
PRINT "Test 1: Len1=Len2, 4LEN()", TIMER - t
 
t = TIMER
FOR i = 1 TO n
    mlen = LEN(s1)
    lns2 = LEN(s2)
    IF mlen > lns2 THEN mlen = lns2
NEXT i
PRINT "Test 1: Len1=Len2, 2LEN()", TIMER - t
 
'test2
s1 = SPACE$(100)
s2 = SPACE$(200)
 
t = TIMER
FOR i = 1 TO n
    IF LEN(s1) > LEN(s2) THEN mlen = LEN(s1) ELSE mlen = LEN(s2)
NEXT i
PRINT "Test 2: Len1>Len2, 4LEN()", TIMER - t
 
t = TIMER
FOR i = 1 TO n
    mlen = LEN(s1)
    lns2 = LEN(s2)
    IF mlen > lns2 THEN mlen = lns2
NEXT i
PRINT "Test 2: Len1>Len2, 2LEN()", TIMER - t
 
'test3
s1 = SPACE$(200)
s2 = SPACE$(100)
 
t = TIMER
FOR i = 1 TO n
    IF LEN(s1) > LEN(s2) THEN mlen = LEN(s1) ELSE mlen = LEN(s2)
NEXT i
PRINT "Test 3: Len1<Len2, 4LEN()", TIMER - t
 
t = TIMER
FOR i = 1 TO n
    mlen = LEN(s1)
    lns2 = LEN(s2)
    IF mlen > lns2 THEN mlen = lns2
NEXT i
PRINT "Test 3: Len1<Len2, 2LEN()", TIMER - t

Во всех случаях 4 функции Len (а реально она вызывается только 3 раза) быстрее, чем применение переменной.
Вероятно (точно не знаю), при определении длины строки через функцию Len(), значение не вычисляется, а хранится в памяти как признак и сразу возврящается.
Кстати, замена Long на Integer немного ускорил код и перевернул результаты, но это в QBasic, в VBA первый вариант более чем в 2 раза быстрее второго и с Long работает быстрее чем с Integer

Цитата Сообщение от CoderHuligan Посмотреть сообщение
Алфавит - изменяется раз в 1000 лет
У преподавателей, которые задают подобные задачи, алфавит меняется каждый день

Цитата Сообщение от CoderHuligan Посмотреть сообщение
в то время как с goto всё ясно и прозрачно
Пятый Goto в Вашем коде избыточен и легко заменяется конструкцией If, как я показал
0
 Аватар для CoderHuligan
1743 / 1008 / 257
Регистрация: 30.06.2015
Сообщений: 5,107
Записей в блоге: 56
20.07.2015, 18:56
Цитата Сообщение от m-ch Посмотреть сообщение
Из справки QBasic:
Qbasic разрабатывался под 16 битную dos платформу, поэтому там такие типы. Я имел в виду современные платформы, где тип integer имеет размер 32 бита на 32 битной платформе.
Цитата Сообщение от m-ch Посмотреть сообщение
Кстати не два а один, всего Len используется только 3 раза,
Спасибо, уточнили. Всё равно излишество присутствует.
Цитата Сообщение от m-ch Посмотреть сообщение
Вы, наверное думаете, что функция Len() очень медленная, и ее дополнительное использование сильно замедлит код по сравнению с использованием переменной.
Специально замерил при трех разных ситуациях.
Если функция len работает со строковым типом, который имеет нуль терминатор на конце(строка фиксированного размера), то код будет тормозить тем больше, чем длиннее строка, если эта функция вызывается в цикле. Строка не фиксированного размера имеет дескриптор размера строки, поэтому её вызов достаточно быстр. Но строка не фиксированного размера сильно тормозит код сам по себе.
Я прогнал ваш код, и у меня вышло, что с переменными код выполняется в 1.5 раза быстрее, чем без переменных.
Достаточно большой разрыв. Не знаю почему у вас по другому.
Кстати, измените эту строчку:
QBasic/QuickBASIC
1
2  DIM i AS LONG, s1 AS STRING, s2 AS STRING
на вот эту:
QBasic/QuickBASIC
1
 2  DIM i AS LONG, s1 AS STRING *100, s2 AS STRING *100
такой код выполняется в 17(семнадцать) раз быстрее. Видимо из-за того, что строка имеет фиксированный размер.
Цитата Сообщение от m-ch Посмотреть сообщение
Пятый Goto в Вашем коде избыточен и легко заменяется конструкцией If, как я показал
Пятый goto позволяет избежать лишних бессмысленных проверок, только и всего.
0
6180 / 945 / 313
Регистрация: 25.02.2011
Сообщений: 1,381
Записей в блоге: 1
20.07.2015, 20:07
Цитата Сообщение от CoderHuligan Посмотреть сообщение
Я имел в виду современные платформы, где тип integer имеет размер 32 бита на 32 битной платформе.
Из справки VBA 32х разрядного офиса:
Long (long integer) variables are stored as signed 32-bit (4-byte) numbers ranging in value from -2,147,483,648 to 2,147,483,647. The type-declaration character for Long is the ampersand (&).
Integer variables are stored as 16-bit (2-byte) numbers ranging in value from -32,768 to 32,767. The type-declaration character for Integer is the percent sign (%).
Цитата Сообщение от CoderHuligan Посмотреть сообщение
на вот эту:
Если строка должна вводится с клавиатуры, то как мы можем заранее знать какой он длины?
Цитата Сообщение от CoderHuligan Посмотреть сообщение
Пятый goto позволяет избежать лишних бессмысленных проверок, только и всего.
какие лишние проверки если вместо
QBasic/QuickBASIC
1
2
3
4
5
6
7
IF d2% = d1% THEN PRINT B$;" ravno ";A$ :  GOTO M2
IF r% = d2% THEN 
   PRINT A$;" bolshe chem ";B$
ELSEIF r% = d1% THEN 
    PRINT A$;" menshe chem ";B$
EndIf
M2:
записать
QBasic/QuickBASIC
1
2
3
4
5
6
7
IF d2% = d1% THEN 
    PRINT B$;" ravno ";A$ 
ELSEIF r% = d2% THEN 
    PRINT A$;" bolshe chem ";B$
ELSEIF r% = d1% THEN 
    PRINT A$;" menshe chem ";B$
ENDIF
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
20.07.2015, 20:07
Помогаю со студенческими работами здесь

Сравнение строк и упорядочивание по алфавиту
Определить, какая из них идет раньше по алфавиту, если банан и бананы, то первая идет раньше. Как проще всего? Добавлено через 4...

Лексикографическое сравнение. Сортировка строк по алфавиту
Как отсортировать двумерный массив в лексикографическом порядке в меньшую сторону. (Строки содержат только латинские буквы) vlad ...

Составить программу, которая по заданному слову из набора строит следующее за ним по алфавиту слово
Задано слово (латинскими буквами). Из всех его букв состоят другие слова, возможно и бездумные. Составить программу, которая по заданному...

Сортировка слов по алфавиту
Доброго времени суток. Нужно написать программу которая сортирует введенные с клавиатуры слова по алфавиту, ингорируя символы и пробелы....

Сортировка слов по алфавиту
есть столбец слов нужно их отсортировать по алфавиту подскажите алгоритм До этого сортировал цифры примерно таким образом First...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru