C, PHP, VB, .NET

Дневникът на Филип Петров


Авторски архив

* Монитори и семафори в Java

Публикувано на 04 юли 2023 в раздел ПИК3 Java.

Вече съм показвал няколко примери с употребата на монитори. Зад кадър в тях стои т.нар. мютекс (mutex) - представете си го като ключалка (променлива със стойности „отключено“ и „заключено“). Идеята е, че когато някоя нишка заключи мютекса, други могат да видят това и съответно да спрат и да изчакат, докато тя си свърши работата. Мониторите автоматизират този процес, като организират централизирано управлявана опашка за изчакване на ресурсите. Това се прави чрез синхронизирани блокове или синхронизирани методи. Тук просто ще припомня с елементарен пример. Прочети още...

.

 


* Бързо степенуване

Публикувано на 03 юли 2023 в раздел Информатика.

Степенуването е основна математическа операция и е очаквано да се използва често. Интуитивната реализация на алгоритъм за изчисление на [mathi]x^{n}[/mathi] би била „умножаваме [mathi]x[/mathi] по себе си [mathi]n[/mathi] на брой пъти“. Тоест нещо подобно на следното: Прочети още...

.

 


* Алгоритъм на Флажоле-Мартин за определяне на кардиналност на мултимножество

Публикувано на 29 юни 2023 в раздел Информатика.

Мултимножествата са множества, за които повторенията от елементи се отчитат и са от значение. Например мултимножеството {1, 1, 1, 2} е различно от мултимножеството {1, 1, 2}, защото имат различни елементи в него. Подредбата обаче няма значение. За такива множества често ни интересува т.нар. кардиналност (мощност): броят на различните елементи. Или казано по-просто - ако вземем едно цялото количество от всички обекти в едно мултимножество, колко от тях са различни? Прочети още...

.

 


* Ограничено наследими (sealed) класове

Публикувано на 29 май 2023 в раздел ПИК3 Java.

Преди Java 17 в езика се следваше подход за наследяване, в който или всеки интерфейс/клас може да бъде разширяван (наследяван) от всеки с extends, или това е забранено чрез ключова дума final. С включването на новата ключова дума sealed се въвеждат ограничено наследими класове. Те дават разрешителен списък, с който се изреждат ограничено количество интерфейси/класове от същия пакет, които могат да имплементират/наследяват текущия. Прочети още...

.

 


* Игра на Пексесо в Java – упражнение за събития и обхождане на LinkedList

Публикувано на 17 май 2023 в раздел УКИ.

Ще създадем опростен вариант на играта Пексесо. На игралното поле са разположени четен брой карти с еднакви гърбове (при нашия вариант ще бъдат 20 на брой). Всяка една карта има точно една карта-двойник (двете имат една и съща картинка на лицевата страна). Играчът обръща две карти, след което:

  • ако картинките им не са еднакви, той ги връща обратно с гърба нагоре;
  • ако картинките им са еднакви, ги оставя с лицето нагоре.

Целта на играта е с максимално малко ходове да се обърнат всички карти с лицето нагоре. Прочети още...

.

 


* Упражнение за структура от данни Queue

Публикувано на 16 май 2023 в раздел УКИ.

Ще надградим проекта, в който се упражняваше структурата от данни стек, като реализираме по-разширен вариант на играта Война. При нея вместо картите да се премахват от тестетата на играчите, всяка спечелена ръка се връща най-отдолу в тестето на този, който е спечелил. Засега за опростяване на играта ще се отклоним от пълния ѝ вариант, като при равенство (когато получим карти с една и съща стойност) ще приемем, че битката печели чрез цвета във възходящ ред: спатия, каро, купа, пика (в истинската игра не е така). Ще печели играчът, който прибере всички карти. Ще използваме оригиналният дизайн със съвсем леки модификации - dealsValue вече ще започва да брои от 0 и ще се увеличава нагоре, като този брояч вече ще има смисъл на „колко на брой хода са направени от началото на играта“. Прочети още...

.

 


* Упражнение за структура от данни Stack

Публикувано на 16 май 2023 в раздел УКИ.

Ще демонстрирам работата със структура от данни стек (Stack) отново чрез пример с визуална програма. Това ще е опростен вариант на играта на карти, която е позната като „война“. Взима се стандартно тесте от 52 карти. Разбърква се добре и се раздава на две равни части. Когато играта започне, двамата играчи едновременно изтеглят и обръщат най-горната карта от своето тесте. Точка печели този, чиято карта е по-силна. Силата на картите не зависи от цветовете, а само от стойностите им, като във възходящ е следната: 2, 3, 4, 5, 6, 7, 8, 9, 10, J, Q, K, А. Ако се паднат две карти с равна сила, никой не печели точка. Изтеглените карти не се връщат обратно в играта, а се отстраняват. Играта завършва тогава, когато се изчерпят и двете тестета. Печели играчът, който е натрупал повече точки (възможен е и равен резултат). Прочети още...

.

 


* Record в Java

Публикувано на 11 май 2023 в раздел ПИК3 Java.

В практиката често се работи с непроменими (immutable) обекти. Те се описват чрез класове, в които всички член променливи са private и final, и има само и единствено get методи. Така след като е създаден, обектът не може да се променя. Въпреки, че в зависимост от употребата може да се спестят някои елементи от шаблона, който ще покажа по-долу, едно цялостно решение би включило освен get методи до променливите, също метод hashCode(), метод equals() и метод toString(): Прочети още...

.

 


* Схема с преки или косвени връзки на Христаки Павлович, Емануил Васкидович и Неофит Рилски

Публикувано на 23 февруари 2023 в раздел История.

Преди време поблукувах схема, която я популяризираше проф. Иван Ганчев. Тя представя преки или косвени връзки на Христаки Павлович, Емануил Васкидович и Неофит Рилски с видни личности от 18 и 19 век. Може да намерите оригинала тук. Прочети още...

.

 


* Каменохвъргачки – катапулти и требушети

Публикувано на 18 февруари 2023 в раздел История.

Филмите често митологизират историята. Често сте виждали при битки как катапулти разрушават крепостни стени. Е, това е мит - просто не се е случвало. Прочети още...

.