БлогNot. Блог ПерСа

Помощь дата->рейтинг Поиск Почта RSS канал Статистика nickolay.info Домой

qt c++ программирование список studio учебное памятка php mathcad математика ошибка сказка россия политика время javascript css html язык алгоритм random безопасность ретро шахматы числа реклама личное люди быт маразм игра православие форматы картинка статистика словарь графика браузеры юмор блог анекдот книги эзотерика цензура философия сервис аббревиатура email english дата все теги все комментарии


[1-15] [16-30] [31-45] ... [1681-1695] [1696-1703]


PHP: считаем числа Армстронга

Что такое числа Армстронга, легко прочитать в Вики.

Придумать дельный алгоритм, не сводящийся к перебору, видимо, сложнее. Идея такого алгоритма есть вот здесь.

Если таки перебирать, да ещё и на заведомо медленном PHP, то видимых оптимизаций немного. Можно основной алгоритм оформить как цикл по разрядности числа, в котором вызывается функция check(), проверяющая условия Армстронга для всех чисел заданной разрядности.

Все однозначные числа являются числами Армстронга, для них отдельная проверка не нужна. Число известной разрядности $n можно преобразовать в массив цифр посредством функции sscanf с шаблоном "%1d%1d...%1d", где %1d повторено $n раз. Операцию возведения цифры в степень можно затабулировать, а не вычислять трудоёмкими функциями над вещественными числами.

У меня получилось время выполнения скрипта не более, чем над 4-значными числами ~1 сек., над 5-значными около 4 сек., над 6-значными уже примерно 45 сек. Дальше, конечно, будет экспоненциальный рост времени работы скрипта.

Ниже приводится полный листинг, поменяйте значение D в начале и смотрите вывод сами :) Страница статьидалее...
07.03.2017, 23:30 [229]


QT: обрабатываем событие таймера

В стандартных примерах QT 5.X есть красивый виджет Wiggly Example, демонстрирующий обработку события таймера. Сделаем аналогичное приложение без привлечения усложнённых эффектов, связанных с рисованием на канве. Наш виджет будет просто переставлять с шагом по времени буквы некоторой строки и выводить эту строку в текстовую метку QLabel. Текст строки можно будет ввести в однострочное поле ввода QLineEdit, а регулировать интервал времени, через который вызывается таймер, с помощью стандартного "бегунка" QSpinBox.

Создадим виджет RunningString на основе шаблона QWidget ("лишнюю" сущность ui потом оттуда уберём), а нужные компоненты разместим программно из конструктора виджета.

Стандартная метка QLabel не умеет работать с таймером. Логично создать класс TimerLabel - наследник QLabel, который это делает. Добавим в проект класс TimerLabel и опишем в файле TimerLabel.h соответствующий функционал. Страница статьидалее...
03.03.2017, 15:30 [286]


C++: удалить из целочисленного массива повторяющиеся элементы

Если нужен не готовый метод array_unique, как в PHP, а "ручная" реализация, то проще всего выглядит примерно такой код, имеющий вычислительную сложность порядка O(N2), проверено в Studio: Страница статьидалее...
01.03.2017, 23:04 [284]


Куда пойти учиться...

Вадик Б., некогда сокурсник, ушёл со второго курса технического университета на второй же торгового института. Предыдущий раз виделись, кажется, через полгода после этого, следующий - сегодня :)

В тот раз разговорились, конечно, об универе, коснулся разговор и ухода Вадика. Запомнился его монолог, почти дословно:

- Ты думаешь, почему я сюда ушёл? Потому что здесь терминалка круче? Да, это хорошо, но не главное.

Мне лично в моём универе ключи от терминалки (почти святое в начале 90-х дело) доверили только на 4-м курсе, Вадик же в новой альма-матер обладал этим сокровищем уже на втором, а тогда понятия "машинное время" и "доступ к компьютеру" ещё ой как имели смысл.

- Стипендия здесь выше? Нет, это здорово, конечно, но не то.

А там и правда было 60-70 рублей против наших 40-50

- Девчонок красивых больше? Круто, но не из-за этого.

Конечно, девчонки были и в "техническом", но сами знаете, что это обычно за девчонки :)

- Я здесь - самый умный, вот почему - назидательно подняв палец, изрёк тогда Вадик. - А среди ваших ботанов разве карьеру сделаешь?

Кажется, я осознал свою ошибку примерно тогда же. Но к тому времени математика, программирование и подобная лабудень затянули меня уже плотно... Страница статьидалее...
01.03.2017, 21:16 [300]


Как заставить мужика купить штаны? :)

Ужасны тётки-маркетологи, бизнес-тренеры, специалисты по продажам и т.п.

Примерно вот такое они обсуждают часами:

От чего зависят хорошие продажи?

  • На 55% от Вашего продавца;
  • На 20% от месяца года;
  • На 10% от погоды;
  • На 15% от выкладки товара;

Дальше километры бреда о том, как заставить мужика купить штаны. Причём, весь бред - переводной, к экс-СССРному менталитету не подходящий ну вообще никак.

Меж тем, рецепт поднятия продаж среди мужиков так же прост, как и всё остальное в нашем скорбном мире.

Мужик не против купить штаны.

Его отпугивают в магазине всего 2 вещи - приставучие продавцы и то, что он не знает своего размера.

Соответственно, вешаем на входе плакат: "У нас НЕ приставучие продавцы и НЕ нужно знать свой размер".

Мужик знает о себе 3 вещи - рост, вес и другой размер (не штанов), почти не имеющей отношения к покупке.

Поэтому сразу за входом его ждёт понятная таблица: Страница статьидалее...
01.03.2017, 20:46 [292]


Исходники шашек на QT

Шашки гораздо проще шахмат и давно решены компьютером полностью, игра, как и следовало ожидать, оказалась ничейной.

Вот пара проектов, которые могут помочь вам в разработке собственных шашкоподобных игр на доске.

Первый проект - классический и собирается в играющую программу, второй не имеет AI и не играет, но там можно в простой форме посмотреть работу с полями и кружками-шашками как потомками QGraphicsRectItem и QGraphicsEllipseItem и т.п.

В обоих случаях достаточно открыть в QT 5.2 или выше файл .pro из папки развёрнутого проекта и собрать приложение нажатием F5 или Ctrl+R :) Страница статьидалее...
28.02.2017, 15:15 [292]


Сектоведы-2007 :)

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

Вот сами буковки на обороте бумажки: Страница статьидалее...
28.02.2017, 11:11 [341]


PHP: авторизация с помощью cookies, простой пример

Если не принимать в расчёт не всегда удобную проверку того, включены ли у пользователя cookie-файлы, использовать их легко. К тому же, cookie позволяют управлять временем, в течение которого действует авторизация.

Ниже показан небольшой листинг, реализующий авторизацию пользователя с помощью "куки", хранящей зашифрованную алгоритмом md5 контрольную сумму от пароля. Имя кукиза auth отличается от имени встроенной переменной, "ответственной" за пароль ($trypass), так безопасней.

Вместо формы для ввода пароля он передаётся ссылкой через метод $_GET, разумеется, в жизни так делать не нужно.

Также показана "альтернативная" моей обычной обработка параметров функцией get_param. Обратите внимание, что глобальный массив $_REQUEST содержит как данные массивов $_GET и $_POST, так и все $_COOKIE, что позволяет получить компактный код обработки числовых и строковых параметров скрипта.

Предполагается, что файл выполняется на хосте под именем cookie.php, вот полный листинг: Страница статьидалее...
22.02.2017, 10:21 [348]


C++: как поддерживать динамическое свойство класса и нужно ли это делать :)

Например, заданное указателем, с возможностью увеличить при необходимости память, занимаемую свойством.

Естественно, для этого придётся освободить память, которую свойство занимало ранее.

Простой листинг может выглядеть примерно так: Страница статьидалее...
21.02.2017, 13:59 [339]


PHP: выравниваем текст по столбцам

Речь не идёт о задаче красивого форматирования программного кода отступами (code alignment). Её можно попытаться решить многочисленными плагинами для Notepad++, такими как Ident By Fold или мощный TextFX с собственным меню (правда, все они обычно не работают так, как тебе нужно).

Отметим также, что код на C++ можно подровнять в редакторе среды Visual Studio. Пройдите в верхнее меню Сервис, Параметры, откройте список Текстовый редактор - C/C++ - Табуляция и настройте отступы по блоку так, как вам удобно

Мы хотим более скромно решить задачу columns alignment, то есть, "раскидать" некие строки текста с разделителями (в формате CSV или подобном) по столбцам, ширина каждого из которых определяется максимальной шириной попадающего туда элемента. Например, если разделитель - это пробел, а данные - это

Привет, мир
2 столбца!

то получится один из трёх вариантов результата

Привет,|мир     
2      |столбца!

Привет,|     мир
      2|столбца!

Привет,|  мир   
   2   |столбца!

в зависимости то того, как мы хотим выравнивать текст внутри столбцов (символом '|' показан разделитель между столбцами).

В PHP эта задача, в общем, уже решена стандартной функцией str_pad, нам остаётся лишь обернуть её в небольшой класс ColumnAlinger и снабдить его несколькими настройками: Страница статьидалее...
19.02.2017, 15:36 [379]


Факты про Ёжку-Кошку, которые вы знали, но боялись в этом себе признаться :)

Ребёнок хочет такую "запись в интернете", что ж, сделаем.

1. Она появилась из волшебного леса, созданного великим волшебником по имени Забылкакзовут (за 3000 лет он и правда забыл, как его зовут). Чтобы создать лес, волшебнику пришлось выдернуть одну нить из ковра времени и свернуть её в колечко.

2. Из-за этого в волшебном лесу время идёт по кругу, там всегда сегодня, лето и хорошая погода. У этого есть обратная сторона - зайчонок никогда не вырастет, а волк навеки останется голодным.

3. Она не просто помесь кошки, ёжика и лемура, она - нечто большее. В конце концов, у неё 3 мамы, которых она никогда не видела, и один папа - сам волшебник. В каком-то магическом смысле он - папа всем говорящим жителям леса, но Ёжку-Кошку он не просто научил говорить, а сам создал. Она была последней, когда волшебной силы оставалось только на одно существо, но в лесу не хватало как минимум трёх, догадайтесь, каких. Поэтому Ёжка-Кошка и считает его папой.

4. У Ёжки-Кошки на спине колючки, она кричит "мук-ляк", обожает баловаться, есть карандаши и откусывать фарфоровые ручки от чашек. Не ест она, пожалуй, только металл и вату. Металлом можно поломать даже её зубы, а от ваты очень уж в горле щекочет. Поэтому спит она на ватной фуфайке, а другой накрывается. Деревянная кровать давно была бы сгрызена.

5. Дети всего мира в последние годы знают о Ёжке-Кошке, называя её то HedgeKitty, то Erizo-Gatito, то ещё как. А она дружит только с девочкой Энни, живущей на краю деревни, из которой есть тропинка в волшебный лес. Нам трудновато изобразить Ёжку-Кошку, ведь она всё время вертится, пусть будет хоть эта картинка. Страница статьидалее...
18.02.2017, 14:58 [364]


QT: применяем текстовые поля ввода и регулярные выражения

Виджеты-примеры построены на шаблоне QWidget и показывают удобство регулярных выражений при типовой обработке текстовых данных :)

Конечно, "регуляркам" требуется значительно более мощное "железо", чем "вылизанному" коду на ассемблере, но этот фактор сегодня учитывают мало, отдавая предпочтение средам и языкам, позволяющим быструю разработку приложений, пусть даже "тяжёлых". QT именно к таким средам и относится.

1. Проект StringToTemplate показывает "динамическую" проверку вводимой строки на соответствие шаблону (в данном случае, вещественному числу в обычной форме записи). Для работы понадобился единственный пользовательский слот slot1(), обрабатывающий сигнал textChanged() от однострочного поля ввода lineEdit типа QLineEdit. Результат проверки в виде знака "+" или "-" выводится в метку label, вот весь основной код, комментарий поясняет части "регулярки": Страница статьидалее...
17.02.2017, 19:51 [404]


PHP: скрипт статистики шахматного клуба :)

Небольшой (общий объём кода ~800 строк), но ещё способный пригодиться скрипт, предназначен для ведения архива шахматных партий между некоторым (вообще, говоря, небольшим) количеством игроков, своего рода скрипт шахматного клуба.

Вёрстка макета - ещё табличная, мне этот код понадобился просто для иллюстрации некоторых приёмов программирования (альтернативная обработка параметров $_REQUEST функцией get_request_param из листинга, сохранение и продление cookies и т.д.)

База MySQL состоит всего из двух таблиц - players и games, sql-файл для создания таблиц базы прилагается в архиве (schema.sql).

Все настройки, в том числе, макета сайта, записаны в файле config.php, изменить его легко. Файлы закодированы в Юникоде, так что базу данных для скрипта, по умолчанию называемую chess, нужно создать с типом сопоставления кодировки utf8_general_ci.

Система считает количество побед, ничьих и поражений игроков, меняет рейтинги, начиная с указанного в настройках стартового (см. функцию get_new_rating), позволяет хранить и просматривать игры в формате PGN или другом (текст просто вставляется в поле <textarea> при создании новой игры).

Редактирование игр или удаление игроков не предусмотрено, ведь это нарушило бы целостность базы, потребовав обратного пересчёта рейтингов, учёта того, что партия игралась двумя людьми и т.д., в общем, это был бы уже совсем другой скрипт, можете попробовать такой написать, а этот рассчитан на аккуратного редактора, который, в случае чего, залезет в БД "вручную" :) Личные данные игрока, то есть, имя и комментарий изменить при этом можно.

Может, закину туда какие-нибудь свои партейки со временем, а пока пусть лежит в работе онлайн и в виде архива с исходниками: Страница статьидалее...
16.02.2017, 10:54 [398]


PHP: класс для генерации пары слов "Имя+Фамилия"

Добавлю этот небольшой класс в коллекцию PHP-функций, которые всё ещё могут пригодиться при автоматической генерации контента и не только.

Используя 3 содержащихся в архиве небольших файла-словаря:

класс getRussianNames генерирует и возвращает с помощью метода get список из нужного количества мужских или женских имён и фамилий:

Больше русских фамилий одним файлом было вот тут. Для женской формы русской фамилии отдельного словаря нет, функция getWomanForm склоняет их по простейшим правилам:

Все файлы и сам скрипт - в однобайтовой кодировке Windows-1251, для работы с Юникодом, возможно, придётся немного поправить регулярные выражения.

Также код показывает, как включённый через include или require скрипт может узнать свою текущую папку, например, если файлы скрипта находятся на сервере во вложенной папке namelist, а вызывается (и берёт дополнительные файлы-словари) он из папки, находящейся уровнем выше, как и показано в коде. Менять что-либо в коде класса в норме не придётся.

Вот исходники и результат тестового прогона: Страница статьидалее...
14.02.2017, 14:57 [445]


Про fgets и fflush(stdin) в Studio 2015

Обычные проблемы с "пропущенными" элементами ввода при последовательном использовании нескольких fgets (gets) или scanf (scanf_s) с шаблонами %s и %c для ввода с консоли нескольких строк подряд:

const int SIZE = 30; //размер текстовых полей
struct person { //описание структуры
 char f[SIZE]; //фамилия
 char d[SIZE]; //должность
 float zp, pr; //зарплата, премия
 char prof; //профсоюз
 person *next; //указатель на следующего в списке
};
//...
person vvesti() { //ввод элемента с клавиатуры
 person p;
 printf("\nFIO?"); 
 fgets(p.f, SIZE-1, stdin);
 p.f[strlen(p.f) - 1] = '\0';
 printf("\nDolgnost?"); fgets(p.d, SIZE-1, stdin);
 p.d[strlen(p.d) - 1] = '\0';
 printf("\nZP?"); scanf_s("%f", &p.zp);
 printf("\nPremia?"); scanf_s("%f", &p.pr);
 printf("\nProf (+/-)?"); scanf_s("%c", &p.prof);
 return p;
}

При попытке вызвать эту функцию для ввода и возврата введённой структуры (здесь это не слишком опасно, так как структура невелика и все поля в ней статические), как минимум, мы рискуем пропустить ввод одной или нескольких строк:

 
 1. Show all
 2. Add in head
 3. Add in tail
 4. Delete by number
 5. Sort by name
 6. Edit by number
 7. Search by name part
 0. Exit 2

FIO?
Dolgnost?_

Классические fflush (stdin);, поставленные перед fgets, могут помочь в Студии-2010 но не 2015. Опытным путём нетрудно выяснить, что в 2015 рулит только Страница статьидалее...
10.02.2017, 16:02 [454]


[1-15] [16-30] [31-45] ... [1681-1695] [1696-1703]

  в началопоиск по блогунаписать авторустатистика

Наверх Яндекс.Метрика
© PerS
вход