Нашли или выдавили из себя код, который нельзя назвать нормальным,
на который без улыбки не взглянешь?
Не торопитесь его удалять или рефакторить, — запостите его на
говнокод.ру, посмеёмся вместе!
Задание:
В заданный непустой текст входят только цифры и буквы. Длина текста не более 12 символов.
Определить, удовлетворяется ли следующее свойство:
Текст состоит из чередования букв и цифр, причем если текст начинается с буквы, то он должен и заканчиваться буквой, если с цифры – цифрой (например: p5g6e4d);
Не было в TP7 консоли для Win16. Было три варианта:
1. Досовская программа для реального режима процессора.
2. Досовская программа для 16-битного защищённого режима (Борланд поставлял RTM+DPMI16 — транслятор функций своего API в досовские функции).
3. Виндовая программа для оконного режима Win16.
Первые два варианта выполнялись либо в ДОСе, либо в виртуальной машине ДОСа, которая была встроена во все версии Windows. Никакой ко-ко-консоли для Win16 у Борланда не было.
*****
Борландовский Турбо Дебаггер умел подменять видеодрайвер своим и создавать два «рабочих стола»: на одном сам Турбо Дебаггер, нарисованный в текстовом режиме с помощью Turbo Vision, на другом — все приложения Windows. Но назвать это полноценной консолью язык не повернётся, потому что Турбо Дебаггер предоставлял эту среду только для себя самого.
*****
«Консоль» для Win16 была в проекте RSX (скачать можно отсюда: ftp://ftp.delorie.com/pub/djgpp/current.old/v2tk/rsxdj151.zip
). «Консольку» с помощью средств GDI рисовала программа rshellwx.exe, но запускать в ней можно было только программы, специально собранные компиляторами EMXGCC и DJGPP. Ага, собрать программу для 32-битного защищённого режима ДОС, а потом с помощью пакета RSX запустить в Win16.
До винконсоли эта среда тоже не дотягивала, потому что из программы можно было пользоваться только функциями, предоставляемыми DPMI, а не WinAPI.
Sz: Size bit. If 0 the selector defines 16 bit protected mode. If 1 it defines 32 bit protected mode. You can have both 16 bit and 32 bit selectors at once.
есть мнение что современные виртуалки не полностью реализиуют все спецификации IBM PC, и может что-то не заработать. Ну там наверняка они криво эмулируют контроллер клавиатуры i8042 или там прерывание BIOS не умеет сказать сколько дисководов в системе
В защищённом режиме на 32-битных машинах можно было использовать два типа сегментов: 32-битные и 16-битные. Можно даже было в одной программе использовать оба типа. Флажок был у каждого сегмента, указывающий тип адресации и размер аргумента по умолчанию.
Было два типа DPMI: 16-битный (например, встроенный в Win16 и борландовский RTM) и 32-битный (а их было целое море, например, DOS4GW).
> Virtual 8086 mode был только для protected mode же
Досовскую программу, рассчитанную на реальный режим, можно было запускать как в реальном режиме, так и в Virtual 8086 из-под защищённого. Редкую программу нельзя было запустить из виртуального режима (к таким исключениям относилось либо совсем старьё, написанное во времена 8086/8088, либо откровенный говнокод).
это и есть "не используют". Используют только страницы, а сегменты просто лишний, ненужный шаг на (и без того сложном) пути через MMU к контроллеру памяти.
Именно потому и выпилили)
На 32 битах для программ обычно использовалась модель flat без сегментов. Однако, Watcom C/C++, если его очень попросить, мог создать и сегментированную программу. Вот только какая среда её может выполнить, я не в курсе. DOS4G/4GPRO (не DOS4GW) поддерживал адресацию с ненулевой базой, а насчёт сегментов не уверен.
В те нелёгкие времена приходилось создавать сегменты для 16-битных программ, а в Windows 95/98 (и в OS/2) ещё и некоторые драйвера были 16-битными.
Не было. В API Win16 вообще не было консольных функций. А в Win32s при запуске консольных приложений никакого окна не открывалось, все консольные функции «выводили в NUL». Т. е. в Win32s можно было запускать пакетные консольные конверторы для файлов, но их вывод на экран не был виден (как у служб в Win NT).
Тем не менее, консоль в Win16 была (и даже могла переключаться между чёрным окошком и полным экраном), но доступна она была только для досовских программ. Для приложений Windows у неё не было «публичного интерфейса».
P.S. Кстати, обратите внимание, что у Windows 3.x, не имеющих полноценной текстовой консоли, не было особого успеха. Многие предпочитали пользоваться ДОСом либо ждать возможности перехода на Windows 95 или NT.
А вот у Windows 95 и NT, имеющих полноценную текстовую консоль, успех был. Неужели текстовая консоль оказалась важнее гуя?
// Дан текст длиной ровно 12 символов
// Проверить, что в нем чередуются буквы и цифры, и
// если начинается с буквы, то должен кончаться буквой, если с цифры - цифрой
bool check(char *s)
{
return false;
}
main(int i, int p, int c)
{
for (p = i = 0; (c = getchar()) != 10 && i < 12; i++, p = c)
i = !!p && (p < 58) != (c > 57) ? 13 : i;
puts(!(i % 2) ? "Error!" : "Ok!");
}
main(int i, int p, int c)
{
for (p = i = 0; (c = getchar()) - 10 && i < 12; i++, p = c)
i =! p || p < 58 == c > 57 ? i : 13;
puts(i % 2 * 7 + "Error!\0Ok!");
}
static bool DoSmth(string str)
{
var l = str.Length;
bool a = true, n, p = str[0] > '9'; ;
for (var i = 1; i < l; n = str[i++] > '9', a &= p ^ n, p = n);
return (l%2)==1 && a;
}
> bool a = true
> str[0]
> (l%2)==1
Говорили же бородатые дяди "Выбирай язык под задачу". Это не херня, это херняша. Перепишите на пацанскую сишку или приходите на педесрачу.
int main(void) {
int l, a, n, p;
scanf ("%d\n",&l);
for (a = l%2, p = getchar()>'9'; --l; n = p ^ getchar()>'9', a &= (p^=n)^n^p );
printf("%d", a);
return 0;
}
Компилятор подумал: "посчитаю-ка я для начала p = getchar() > '9', а затем сделаю n = p. Теперь надо посчитать их xor - но они же одинаковы. Значит в результате будет 0. Заменим всю эту херню на a = 0".
то не происходило двойного инкремента. Короче, макросы - говно. Не выебывайтесь и делайте функции, когда это возможно. Если вы у мамы оптимизаторы, объявляйте их inline
трижды, наверное. Впрочем, до этого недолго осталось - концепты + constexpr (пока что слабовато поддерживается) позволят производить компайл-тайм вычисления параметров для шаблонов. Круто же?...
Ага, а новые символы так и нельзя будет генерить, только параметризовать уже имеющиеся.
Ну и макросы - пока что единственный способ закостылить хоть какую-то "компайл-тайм рефлексию".
А std::shared_ptr<void> это баг или фича?
а что такого странного в этой конструкции, что её необходимо зачислить в одну из этих категорий с негативным оттенком?
Плюсы ну никак не могут быть хуже т.к. можно просто не использовать те возможности, которые плюсы добавляют в сишку (а плюсы это именно что говнонадстройка над си, и никак иначе)
>бейсик
Папрашу не трогать грязными лапами.
К слову бейсика существует где-то 5-6 вореций, начиная от фортраноподобного спагетти-языка и оканчивая тупым клоном сишарпика.
Проблема тут фундаментальная, и решать ее надо тоже фундаментально. А именно: необходимо вообще к ***** выкинуть сишкоплюсосинтаксис, шаблоны и прочую ересь, перейти на лиспоскобкосинтаксис, сделать такие средства языка, которые бы позволяли работать с этим AST-скобкопредставлением, и как угодно (полнона по тьюрингу) в компилтайме работать с ним, и чтобы при этом не заниматься парсингом сишного кода, а просто бегать по связным спискам, и иметь возможность как угодно их переделывать. Чтобы например можно было lookup table генерить в процессе компиляции, анроллить хвостовую рекурсию и прочее.
это stdio.h ващето
стандартная, типа, библиотека
Хотя в Windows 3.x такой функции нет. В третьих форточках, правда, и консоли нет, так что придётся искать стороннюю реализацию консоли. Вот беда...
Блин, да в те времена 98% программ были досовыми и работали с command.com
Тэпэшка.
1. Досовская программа для реального режима процессора.
2. Досовская программа для 16-битного защищённого режима (Борланд поставлял RTM+DPMI16 — транслятор функций своего API в досовские функции).
3. Виндовая программа для оконного режима Win16.
Первые два варианта выполнялись либо в ДОСе, либо в виртуальной машине ДОСа, которая была встроена во все версии Windows. Никакой ко-ко-консоли для Win16 у Борланда не было.
*****
Борландовский Турбо Дебаггер умел подменять видеодрайвер своим и создавать два «рабочих стола»: на одном сам Турбо Дебаггер, нарисованный в текстовом режиме с помощью Turbo Vision, на другом — все приложения Windows. Но назвать это полноценной консолью язык не повернётся, потому что Турбо Дебаггер предоставлял эту среду только для себя самого.
*****
«Консоль» для Win16 была в проекте RSX (скачать можно отсюда:
ftp://ftp.delorie.com/pub/djgpp/current.old/v2tk/rsxdj151.zip
). «Консольку» с помощью средств GDI рисовала программа rshellwx.exe, но запускать в ней можно было только программы, специально собранные компиляторами EMXGCC и DJGPP. Ага, собрать программу для 32-битного защищённого режима ДОС, а потом с помощью пакета RSX запустить в Win16.
До винконсоли эта среда тоже не дотягивала, потому что из программы можно было пользоваться только функциями, предоставляемыми DPMI, а не WinAPI.
был такой, да?
вот прямо с кольцами защиты, и при этом 16 бит?
>>либо в виртуальной машине ДОСа
Virtual 8086 mode был только для protected mode же
google: 80286
но так ведь это никто не использовал
там и виртуальной памяти-то не было
Sz: Size bit. If 0 the selector defines 16 bit protected mode. If 1 it defines 32 bit protected mode. You can have both 16 bit and 32 bit selectors at once.
о, сколько нам открытий чудных
И Интел — сын ошибок трудных,
И Борланд — Парадоксов друг.
Да, я пытаюсь вернуть 97-й.
виртуалкой с dos 6.22?)
есть мнение что современные виртуалки не полностью реализиуют все спецификации IBM PC, и может что-то не заработать. Ну там наверняка они криво эмулируют контроллер клавиатуры i8042 или там прерывание BIOS не умеет сказать сколько дисководов в системе
Было два типа DPMI: 16-битный (например, встроенный в Win16 и борландовский RTM) и 32-битный (а их было целое море, например, DOS4GW).
> Virtual 8086 mode был только для protected mode же
Досовскую программу, рассчитанную на реальный режим, можно было запускать как в реальном режиме, так и в Virtual 8086 из-под защищённого. Редкую программу нельзя было запустить из виртуального режима (к таким исключениям относилось либо совсем старьё, написанное во времена 8086/8088, либо откровенный говнокод).
просто ни однасовременная ось (ни linux, ни фря ни Winnt) сегменты-то не использует вроде
а на x64 их и вовсе выпилилли
Все используют. Куда от них денешься. Просто они настроены под flat режим и ты их не замечаешь. Даже на x64 от них рудименты остались...
Именно потому и выпилили)
В те нелёгкие времена приходилось создавать сегменты для 16-битных программ, а в Windows 95/98 (и в OS/2) ещё и некоторые драйвера были 16-битными.
В Win32 регистр FS указывает на сегмент с базой, отличной от других сегментных регистров. Т. е. даже в чистой 32-битной среде Винда создавала специальный сегмент:
https://en.wikipedia.org/wiki/Win32_Thread_Information_Block
Тем не менее, консоль в Win16 была (и даже могла переключаться между чёрным окошком и полным экраном), но доступна она была только для досовских программ. Для приложений Windows у неё не было «публичного интерфейса».
А вот у Windows 95 и NT, имеющих полноценную текстовую консоль, успех был. Неужели текстовая консоль оказалась важнее гуя?
Был коммандком 16 bit
>>Си
или там в stdbool нахуивертили?
Не благодари
Не благодари
я неправильно задание понял
Описание и процесс говнизации - напитоне http://pastebin.com/jjTrRQq7
* Всё, что не цифра - то буква
Во-вторых,
Длину строки как бы надо проверять
нахуя проверять условия задачи?
такого варианта не было
ласт вариант 😀
Глядишь, и уважение будет, и зарплата хорошая, и жизнь наладится...
Вот это отличная находка. Когда читаешь, просто хренеешь. Думаешь "ну, когда же оно на краях глюканёт?"
Экономия на спичках в духе олимпиадных задач.
> str[0]
> (l%2)==1
Говорили же бородатые дяди "Выбирай язык под задачу". Это не херня, это херняша.
Перепишите на пацанскую сишку или приходите на педесрачу.
Осторожно! Пиздец!
https://ideone.com/3fWW1w
https://ideone.com/N4vxCJ
https://ideone.com/wVdzs6
Компилятор подумал: "посчитаю-ка я для начала p = getchar() > '9', а затем сделаю n = p. Теперь надо посчитать их xor - но они же одинаковы. Значит в результате будет 0. Заменим всю эту херню на a = 0".
Что-то меня начали с самими продвинутыми программистами говнокода сравнивать, к чему бы это?
во-первых макросы надо КАПСОМ писать, а во-вторых засовывать все в скобочки, чтобы не происходило всякой херни:
то не происходило двойного инкремента. Короче, макросы - говно. Не выебывайтесь и делайте функции, когда это возможно. Если вы у мамы оптимизаторы, объявляйте их inline
Сам Страуструп писал, что в плюсах макросы ненужны, ибо средства языка позволяют делать все тоже самое, не отрубая программисту ноги.
Но всем насрать
Нет, не всё средства языка позволяют сделать.
Ну и макросы - пока что единственный способ закостылить хоть какую-то "компайл-тайм рефлексию".
Какую бы фичу не взял программист, везде торчат сишные ноги и возможность отстрелить их, заодно с другими частями тела.
Указатели? Но ведь есть умные указатели: unique_ptr, shared_ptr, weak_ptr.
Потоки? std::thread
nullptr, foreach, Rvalue Ref?
Где камни?
Ваш кэп
А std::shared_ptr<void> это баг или фича?
>Указатели? Но ведь есть умные указатели: unique_ptr, shared_ptr, weak_ptr.
>Потоки? std::thread
Большинство из перечисленного не особенности самого языка, а куски его библиотеки.
а что такого странного в этой конструкции, что её необходимо зачислить в одну из этих категорий с негативным оттенком?
вот вам кстати макроговно в плюсовом коде. Почему разрабы нодежс не используют эти хваленые средства языка?
> return
Потому что хвалёные средства не умеют делать выход из внешнего скопа.
Много софта осталось. Платят бабки.
>бейсик
Папрашу не трогать грязными лапами.
К слову бейсика существует где-то 5-6 вореций, начиная от фортраноподобного спагетти-языка и оканчивая тупым клоном сишарпика.
Прочитал как "Парашу не трогать грязными лапами"
По-сути это просто вручную развернутый двоичный поиск. А теперь давайте представим, что нам надо n-ное количество развернутых двоичных поисков для разных размеров массивов и разных типов. Или например вручную развернуть сортировку, чтобы она быстрее сортировала? Средства плюсов могут тут помочь?
Проблема тут фундаментальная, и решать ее надо тоже фундаментально. А именно: необходимо вообще к ***** выкинуть сишкоплюсосинтаксис, шаблоны и прочую ересь, перейти на лиспоскобкосинтаксис, сделать такие средства языка, которые бы позволяли работать с этим AST-скобкопредставлением, и как угодно (полнона по тьюрингу) в компилтайме работать с ним, и чтобы при этом не заниматься парсингом сишного кода, а просто бегать по связным спискам, и иметь возможность как угодно их переделывать. Чтобы например можно было lookup table генерить в процессе компиляции, анроллить хвостовую рекурсию и прочее.
Дык ведь я джва года жду такой езык.