Apr 16

Только что 2 часа убил на “простенькую задачку по комбинаторике”, как сказала наша преподаватель по моделированию. Если кто хочет поломать немного мозги, то вот сама задачка (исходного задания у меня нет, так что это моя интерпретация задания):

Бросаем симметричную монетку n раз. Она может упать либо орлом, либо решкой вверх. Найти вероятность выпадения двух решек (ну, или орлов, не суть важно) подряд.

Если перефразировать в более удобный вид, получаем:

Есть массив, состоящий из нулей и единиц, размером в n элементов. Какова вероятность того, что в массиве есть два нуля, стоящие рядом.

Задача просто бешенная, как бы проста она не казалась. У меня ответ получился только через рекурсию, а в конце в нём всплыл еще и дополнительный ряд Фибоначчи:

q(n) = p(n) / (2 ^ n)
p(n)  = 2 * p(n - 1) + f(n - 1)
p(1)  = 0
f(1) = 1, f(2)  = 1, f(3) = 2, ...
f(n) - ряд Фибоначчи
q(n) - конечная вероятность, которую нужно найти

Это просто пипец… Мне вот интересно, что такое “сложненькая” задача, если эта - “простенькая”.

written by FX Poster \\ tags: ,

Jan 28

… можно опять работать в полную силу. :)

Кстати, я, впервые за эти два с половиной года, буду получать повышенную стипендию. :)

written by FX Poster

Jan 15

… сегодня был успешно сдан. Очередная пятерка в зачетке. :)

written by FX Poster

Jan 10

Эх, млин. Список вопросов на выдали, но, судя по тому, что было на консультации (я не был, работал), вопросы будут не эти…  Ладно, посмотрим.

PS. А потом верстать, верстать, верстать, верстать…

PPS. Обьясните мне, бедному и непонимающему студенту, нахрена было делать это! Кто скажет “ну, типа чтобы генерить JS на серверной части” очень советую глянуть в сторону Symfony, а точнее - её JS-helper’ов. Вот в таком есть смысл, а в JQuery-PHP я его не вижу пока что…

written by FX Poster

Dec 29

Достало меня уже всё… Остался последний отчет, который я пишу из последних сил в последний день учебы в этом году…

Вот такое у меня сейчас в отчете родилось:

Отчет по БД

written by FX Poster

Dec 28

Вот такая у нас учеба:

Кароче слушай, всё заебись как херово знаешь я только что заметил, что сёдня я матерился уже больше чем за последние 3 месяца, а вчера походу почти стока же.
Мне <предмет> завтра здавать на зачёт, а я ещё не садился, плюс сцуко <препод> со своим сцуко дегроидным проектом, плюс я вышу вчера написал и не знаю что она мне там влепит и эт меня напрегает. и <препода> на завтра я никак не успеваю сделать и бля у меня ща взорвётся бошка и плюс:
приехал в 6-6:30
вечера домой и час убил на <друга> - помогал с вышкой
потом поужинал и попытался поспать\нихера не вышло плюс меня вовреммя не подняли
и я не погрелся в ванной, теперь очень злой невыспавшийся и неготовый к зачёту студент пишет тебе сообщение и мысленно посылает этот долбанный универ нах, за то чот в таком состоянии через часов 7 будет сдавать всякую хрень вот

Орфография сохранена. Подчеркнутые слова были мной заменены, на всякий пожарный.

written by FX Poster

Nov 01

Что-то я затянул немного выполнение лабораторных работ некоторых по универу, нужно исправляться. Сегодня решил вернуться ко второй лабе по ООП. Задание таково:

“Разработать объектно-ориентированную библиотеку для работы со структурами данных по одной из нижеперечисленных тем в соответствии с нижеуказанными требованиями. Свойства и методы для классов разработать в соответствии с известными определениями соответствующих структур данных. Составить тесты для проверки работоспособности библиотеки. Составить программу, демонстрирующую возможности разработанной библиотеки.”

Требования - хрен с ними, а вот тема мне попалась интересная: “Сетевые базы данных (ввод/вывод, навигация)”. Когда я это задание читал в первый раз - я впал в ступор. Потом оклемался, но когда видишь такое задание как-то не по себе становится…

Сетевая бд - это бд, в которой для связи записей используются графы (граф, по курсу структур данных, - это сеть). Т.е. здесь, в отличии от иерархических бд, связи получаются “много к многим” (а там - “один ко многим”).

Поговорил немного с преподами о задании, итог получился такой - “нам не нужна универсальная бд, сделай несколько таблиц статических и связывай их”. Говорил действительно немного - минуты полторы, так что кроме фразы выше я ничего особо не услышал. Сегодня решил хоть чего-нибудь напроектировать, чтобы в пятницу показать преподам и убедится, правильно ли я делаю, или нет. Мысля сейчас такая: есть отдельные таблицы (неважно, как представленные) и есть какой-нибудь класс Relation, который их связывает. Собственно, это очень напоминает обычную иерархическую бд (таблица - связующая таблица - таблица), но как это оформлять по другому я пока что не представляю.

Сел за комп, закодил… Получилось такая фигня:

class Masseur : public Record {
public:
    Masseur();
    virtual ~Masseur();
private:
    char* _name;
    char* _surname;
    char* _fathername;
    char* _qualification;
    Date _birthday;
};

class Service : public Record {
public:
    Service();
    virtual ~Service();
private:
    char* _name;
    char* _part;
    int _duration;
    double _price;
};

class MasseurServiceRelation : public Relation {
public:
    MasseurServiceRelation();
    virtual ~MasseurServiceRelation();
private:
    void add(Masseur*, Service*);
    void remove(Masseur*, Service*);
    void remove(Service* service);
    void remove(Masseur* masseur);
};

Сейчас сижу и думаю, правильным ли путем я иду…

PS. А первые две таблицы очень напоминают паттерн ActiveRecord, на правда ли? :)

written by FX Poster \\ tags:

Oct 25

Ну вот нахера, скажите мне, мне, знающему очень даже неплохо SQL учить этот галимый Visual FoxPro?  Нет, я все понимаю - он несложный, его выучить можно быстрее чем тот же MySQL, с его помощью можно быстро писать законченные desktop-приложения, но… Просто когда сидишь над этим FoxPro по 8 часов подряд, пытаясь сделать хоть что-то по лабораторной работе, а в итоге нихера не получается… И так у всего потока практически. по-моему это уже немного не мои проблемы, а самого FoxPro и препода, который нам его читает.

Ну это так… Накипело.

На самом деле я против FoxPro в рамках учебной программы ничего не имею (если рассмартивать его просто как “еще одну СУБД”), в отличии от тотального большинства моих одногрупников. Ну поставили нам его в программу - фиг с ним, лабы сдадим и забудем. Я также вполне нормально отношусь к тому, что нам запрещают использовать SQL, хотя СУБД его нормально поддерживает, - преподаватель всегда прав. :) Да, и еще - я не пытаюсь сравнивать, в отличии от все того-же большинства одногрупников, FoxPro с тем же MySQL - они сделаны для разных задач и… в принципе я считаю, что каждая из этих СУБД имеет место быть (хотя иногда мой мозг выступает категорически против FoxPro).

Мне не нравятся совершенно другие вещи:

  1. FoxPro пришел к нам из доса, и в нем до сих пор есть куча комманд, которые сейчас уже особого смысла не имеют. Например, работа со связями или с окошками. То есть, многие действия можно выполнить как минимум двумя разными способами, причем способы, которые пришли из доса явно функциональнее. Самая главная проблема, что способы вообще несовместимы. Хотите построить меню define’ами (препод сказал, что типа за это больше всего баллов) - стройте также и все остальное (формочки всякие и прочее), а вот построить удобным построителем форму и добавить туда define’ами меню не получится никак.
  2. Я не любитель работать с формами. Вообще. А здесь еще, к тому же, сама работа с формами несколько “кривоватая”. :)
  3. Индексирование и связывание глючит. И, похоже, не только у меня. Правда отдельные личности сумели вроде как с этим ужиться. А сегодня препод вообще выдал “если у вас связывание много-ко-многим - фильтрация данных может глючить” - я был очень рад после этих слов! Тем не менее, лабу сдать все равно нужно. :(

Раздражает глючность и несбалансированность самого FoxPro. Причем раздражение начинается только тогда, когда посидишь над ним часиков 5, и за это время решишь две простенькие задачи. Да, потом эти задачи ты будешь решать быстро, но пока вьедешь, как и что…

Одно радует - в MSDN все-таки можно найти хорошие примеры кода, которые быстро все обьясняют. :)

written by FX Poster \\ tags:

Oct 23

Начнем издалека… Есть в C++ встроенный тип size_t, который является “целым типом без знака, используемым реализацией для индексирования массивов” © Страуструп. То есть, если вы работаете с индексами в массивах и их длинами, то в общем-то “правильнее” использовать не int, что в большинстве случаев и делается, а именно size_t (для длин можно еще использовать ptrdiff_t - тип, который возвращает операция вычитания двух указателей). Вчера эта “правильность” для меня вышла боком…

size_t length;
...
for(size_t i = 0; i < length; ++i) {
    double x = 2 * (i - length / 2) / length;
    ...
}

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

size_t length;
...
for(size_t i = 0; i < length; ++i) {
    double x = 2 * static_cast<double>(i - length / 2) / length;
    ...
}

потому что при делении двух целых чисел у нас тоже целое будет, а мне нужно было как раз вещественное.

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

size_t length;
...
for(size_t i = 0; i < length; ++i) {
    double x = 2 * static_cast<double>(static_cast<int>(i) - static_cast<int>(length) / 2) / length;
    ...
}

После чего я на всякий случай еще полчаса проверял небольшую программу на вот такие ошибки - на всякий случай. К счастью, таких больше не нашлось, но неприятный осадок остался.

Выводы: или пишите не особо заморачиваясь на правильности употребления типов (везде используйте int и double, например), или пишите семантически правильно, но не делайте таких ошибок, как я… Может, конечно, это только я такой, но мне лично сложно было именно по коду определить, что результат будет получаться не такой как я хочу.

PS. Я теперь немного понимаю, почему в Java нет unsigned типов. :) 

written by FX Poster \\ tags:

Sep 01

Всех учеников и студентов поздравляю с началом нового учебного года! Хороших вам преподов и классных оценок!

PS. А я уже на 3-м курсе.

written by FX Poster