Правила


Следните правила описват процеса по заявяване и защитаване на курсови проекти по Увод в програмирането.


  • Всеки студент има право да избере най-много един проект.

  • Срок за заявяване на проекти: 27.11.2014 г.

  • Заявяването става чрез попълване на анкета

  • За всеки проект има квота, т.е. максимален брой пъти които може да бъде избиран, затова ако сте си харесали проект -- заявете го по-бързо

  • По проектите се работи самостоятелно (т.е. не се допуска работа в екипи)

  • Не губите нищо ако предадете частично направен проект! По-добре се опитайте да направите някой проект, отколкото да си кажете, че не можете!

  • Плагиатство от колеги и от други източници води до анулиране на работата.

  • Срок за предаване: 4.01.2015 г.

  • Предаването става чрез прикачване на ZIP архив към съответното задание в Moodle, който съдържа всички файлове, необходими за компилирането на проекта, както и кратка документация на избраното решение и инструкции за използване

  • Защитата на проектите ще се извърши на 10-11.01.2015 г. по допълнително обявен график

  • Основният критерий при оценяването на проектите ще бъде доколко те са функционални и успяват да изпълнят задачата си.

  • Максималната оценка за проект, който изпълнява изисквания е 60 т. Като бонус могат да бъдат дадени до 20 допълнителни точки за реализирани допълнителни функционалности. Примери за бонуси са дадени след условията на всеки от проектите.

  • Оценката няма да бъде намалявана само заради това, че не са използвани допълнителни библиотеки (графика, звук и т.н.) или допълнителни възможности на езика (обектно-ориентирано програмиране, шаблони), които не са част от курса. Ако проектът работи и прави това, което се очаква от него, това е достатъчно основание да бъде оценен високо.




Проекти по УП

Силоз 1: Игри


Този силоз съдържа проекти, които реализират някои популярни компютърни игри от миналия век. Не е нужно игрите да бъдат реализирани в графична среда, нито да използват други входни устройства (мишка, gamepad или други). Приемат се решения реализирани дори само с cin и cout, но използването на допълнителни библиотеки за постигане на по-добри ефекти е позволено. Вместо подробно описание на игрите, към повечето от тях е добавена връзка, на която можете сами да поиграете и да получите представа за логиката на играта.


Общи бонуси за всички игри:

  • графика

  • звук

  • запазване на най-високите резултати (high score) при спиране на играта

  • запазване на състоянието на играта (save) с възможност за продължаване при рестартиране

  • всякакви ваши оригинални идеи :)


Snake


Примерна игра: http://goldfirestudios.com/proj/snake/


Бонуси:

  • възможност за двама играчи

  • възможност компютърът да управлява автоматично една от змиите

  • различни нива с препятствия

  • "развалени” хапчета, които скъсяват змията



Alien Attack


Примерна игра: http://www.mysteinbach.ca/game-zone/85/space-invaders/


Бонуси:

  • възможност за двама играчи

  • възможност компютърът да управлява автоматично единия кораб

  • бонуси, които играчът може да събира (живот, бомби, щитове, реконструиране на крепости)



Sokoban


Примерна игра: http://www.game-sokoban.com/


Бонуси:

  • автоматично генериране на нива

  • подсказване от компютъра

  • бонуси, които играчът може да събира (кука за дърпане, вместо само за бутане, бутане на две квадратчето едновременно, бомба за стени)



Tetris


Примерна игра: http://www.htmltetris.com/


Бонуси:

  • подсказване от компютъра (къде е най-добре да се сложи фигурата)

  • режим "късметлия” -- да се пускат най-удобните в дадена ситуация фигури

  • режим "карък” -- да се пускат най-неудобните в дадена ситуация фигури



Breakout


Примерна игра: http://kodogames.com/game/breakout/


Бонуси:

  • специални тухли (чупещи се по-трудно, взривяващи се, нечупливи, телепортиращи, изчезващи)

  • бонуси за играча (животи, стрелба, повече топчета, топчета с по-голяма сила, удължаване/скъсяване на плочката, лепкава плочка)

  • автоматична игра на компютъра


Xonix


Примерна игра: http://www.youtube.com/watch?v=POhMfAFZ_6c


Бонуси:

  • "умни” врагове, които преследват топчето

  • бонуси за играча (временно безсмъртие, стрелба, животи)


Pacman


Примерна игра: http://pacman.platzh1rsch.ch/


Бонуси:

  • "умни” духчета, които преследват играча

  • генериране на произволни лабиринти



Mine Sweeper


Примерна игра: http://minesweeperonline.com/


Бонуси:

  • "жокери” (отваряне на произволно квадратче без мина)

  • избор на игра с произволни параметри (брой мини, размер)


Pong


Примерна игра: http://ricklamers.nl/pong/


Бонуси:

  • компютърът като автоматичен играч

  • забързване на топчето при удар "в движение”



Lander


Примерна игра: https://phet.colorado.edu/sims/lunar-lander/lunar-lander_en.html


Бонуси:

  • генериране на случайни терени

  • симулиране на различна гравитация за различни планети

  • двама играчи едновременно (кой по-бързо ще приземи)

  • компютърът като автоматичен играч


Arcade Volleyball


Примерни игри:

http://blobby.sourceforge.net/data/bv2browser/

http://slime.clay.io/


Бонуси:

  • компютърът като автоматичен играч

  • забавяне на топката при докосване на мрежата

  • подскачане на различна височина (в зависимост от продължителността на натискане на клавиша за скок)


Frogger


Примерна игра: http://www8.games.mobi/games/html5/turtle-rescue/


Бонуси:

  • възможност за двама играчи

  • компютърът като автоматичен играч

  • режим "късметлия” -- минаващите коли се опитват да не блъснат животното

  • режим "карък” -- минаващите коли се опитват да блъснат животното


The Game of Life


(вижте повече в Wikipedia наанглийски илибългарски)


Да се напише програма, която реализира "Игра на Живот”. В Играта на Живот има "дъска" състояща се от M x N квадратни клетки (10 ≤ M, N ≤ 60), дори да е възможна с по-малки стойности от дадените играта е безинтересна). Във всяка клетка или има живо същество или не. Две клетки наричаме съседни, ако имат общ Живите същества могат да бъдат от различни племена (т.е. условно можем да ги наречем Варвари, Рицари, Граждани и т.н). Всяко племе си има собствен "знак” (т.е '%' за Варварин, "+” за Рицар, "&” за Гражданин и т.н).  Дъската има начално състояние. To определя се в кои клетки има живот, в кои не и кое същество от кое племе е. Играта се състои от безброй много ходове, като на всеки ход дъската се променя по следните правила:

  • Всяка жива клетка с по-малко от две живи (независимо от племето) съседни клетки умира (от самота).

  • Всяка жива клетка с повече от три живи (независимо от племето) съседни клетки умира (от пренаселеност).

  • Всяка жива клетка с две или три живи (от същото племе) съседни клетки остава жива и на следващата итерация.

  • Съдбата на всяка жива клетка, която не удовлетворява никое горните условия, се решава от случайността (шанс 50% за живот и 50% за смърт).

  • Всяка мъртва клетка с точно три живи (от същото племе) съседни клетки се превръща в жива клетка (от съответното племе).

След края на всеки ход дъската трябва да се визуализира на екрана. Между два последователни хода трябва да се изчака известно време за да може човек да наблюдава развитието на играта.

Бонуси:

  • Всеки път дъската се инициализира с произволен размер, брой племена и състояние на клетките.

  • Опция за игра до "победа”. Като (някои) от избираемите условия за победа могат да са:

    • Да остане само едно "живо” племе

    • Да умрат всички племена

    • Дъската да не се е променила в рамките на два последователни хода

  • Да се засичат ситуации, в които никой не печели, понеже дадено състояние на дъската започва да се повтаря винаги, независимо от случайността.


2048


Оригиналната игра: http://gabrielecirulli.github.io/2048/


Бонуси:

  • да се реализира възможност за undo/redo (без да се променя позицията и стойността на случайно появяващите се клетки)

  • режим "късметлия” -- появяващите се клетки да са максимално изгодни за играча

  • режим "карък” -- появяващите се клетки да са максимално неудобни за играча


Силоз 2: Изчислителни


Този силоз съдържа проекти, които използват компютъра за това, за което е бил създаден: за извършване на разнообразни пресмятания. Целта на проектите е да приложите знанията си от курса по увод в програмирането и общи познания по математика, за да "научите” компютъра да смята и обработва разнообразни обекти извън стандартните възможности за работа цели и дробни числа и низове.


Матрици и вектори


Да се напише програма, която позволява операции с матрици и вектори от дробни (рационални) числа:


1. Матрици


  • въвеждане на матрица от клавиатурата

    • да се задават размерности и да се въвеждат елементите по удобен начин

  • извеждане на матрица на екрана

    • да се извежда матрицата в подреден табличен вид

  • събиране и изваждане на матрици

    • да могат да се правят няколко събирания или изваждания последователно, например A + B + C + D

  • умножение на матрици

    • да се прави проверка дали размерностите на матриците са подходящи

  • транспониране на произволна правоъгълна матрица

  • намиране на детерминанта на матрица

    • без значение кой алгоритъм ще бъде използван

  • намиране на обратна матрица

    • да се извежда грешка, ако матрицата няма обратна

  • проверка дали дадена квадратна матрица може да се преобразува до единичната  (E)




2. Вектори


Разглеждаме векторите като матрици с 1 ред или 1 колона (по ваш избор). Да се реализират следните операции за работа с вектори:

  • скаларно и векторно произведение на вектори

  • нормализиране на вектор

  • умножение на вектор с матрица (линейна траснформация)


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


Бонуси:

  • персистентност (работа с файл)

  • редактиране на матрица с курсор (както в електронна таблица)

  • реализиране на именувани матрични променливи

Големи числа


"Големите числа” са цели положителни числа, представени, без практическо ограничение за тяхната големина (освен наличната памет). Може да се приеме, че поддържаните големи числа не могат да имат повече от 255 цифри (в съответната бройна система).

  • въвеждане от стандартния вход на число с практически произволен брой цифри в:

    • десетична бройна система

    • шеснайсетична бройна система

  • извеждане на екрана на голямо число в:

    • десетична бройна система

    • шеснайсетична бройна система

  • събиране на две големи числа

  • изваждане на две големи числа

  • умножение на две големи числа

  • целочислено деление на две големи числа с намиране на частно и остатък

  • намиране на целочислен корен квадратен от голямо число (можете да използвате някой от тези методи)

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

Въпросните операции да са реализирани в програмата чрез ясно обособени функции. Употребата на входно / изходни операции в тялото на фунцкиите е забранена (освен при функциите за вход и изход). Т.е. функциите реализират математически изображения, например BigNumber sum (const BugNumber& a, const BigNumber& b).

Примери (за тестване):

"5" * "5" = "25"

"4321" - "1234" = "3087"

"1234" * "4321" = "5332114"

"12456789031415" + "98765432123456789" = "98777888912488204"

"12456789031415" * "98765432123456789" = "1230300151558439221348916026435"

"1230300151558439221348916026435" / "98765432123456789" = "12456789031415"


sqrt ("12456789031415" )=”3529417”  (всъщност точната стойност е  3529417.6617985, но работим с цели числа)


Бонуси:

  • да се премахне ограничението за 255 цифри

  • чрез големите числа да се реализират рационални числа с голяма точност


Геометрия


Да се напише програма, която поддържа текстов диалогов режим, позволяващ удобен интерактивен избор на серия от операции с геометрични обекти в равнината:


  • Дефиниране (въвеждане) на прави (чрез уравнения на прави) и точки (чрез координати). На правите и точките да може да се задават "имена” от една буква (f,g,h...)

  • Проверка дали дадена точка лежи на дадена права

  • Извежда уравнение на права (от вида ax + by + c = 0) по дадени две точки

  • по права g и точка p извежда уравнение на права, успоредна на g и минаваща през p

  • по права g и точка p, лежаща на нея, извежда уравнение на права, перпендикулярна на на g с пета в p

  • по две прави намира пресечната точка, ако има такава

  • по триъгълник (зададен с три точки) построява уравненията на

    • височина

    • медиана

    • симетрала

  • по дадени координати на център на окръжност и триъгълник (зададен с три точки) да се определи дали окръжността е вписана или описана спрямо триъгълника

  • по дадени четири уравнения на прави определия вида на четириъгълника, който те образуват при пресичането си, ако правите не образуват четириъгълник да се изведе съобщение


Бонуси:

  • графично представяне на всяка операция

  • въвеждане на пълното уравнение на права (ax + by + c = 0), а не само на коефициентите. Събираемите от лявата страна може да са в произволен ред!

  • четене на входните данни от файл

  • въвеждане на именувани геометрични обекти (точки, прави, триъгълници, окръжности) и извършване на операции с тях само по име (например: потребителя да поиска да се намери пресечната точка на f и g, които е вече е въвел)

Дати


Да се напише програма, която поддържа текстов диалогов режим, позволяващ удобен интерактивен избор на серия от операции с дати:


  • въвеждане на дата от клавиатурата и проверка за коректност

  • извеждане на дата на екрана в избран от потребителя формат

  • по дата да се определи ден от седмицата

  • по описание с ден от седмицата да се определи датата, която отговаря на него, например:

    • втората събота от месец октомври

    • последният понеделник от месец ноември

  • отпечатва календар за даден месец

    • календарът да се извежда прегледно, като си личи коя дата на кой ден от седмицата отговаря

  • позволява добавяне/изваждане на брой дни/седмици/месеци/години от дадена дата

    • да се обработват правилно граничните случаи, например 31 януари 2012 г. + 1 месец = 29 февруари 2012 г.

  • намира разстоянието между две дати в дни/седмици/месеци/години

    • пример: разстоянието между 3 март 2012 г. и 13 юли 2013 г. е 1 година, 4 месеца, 1 седмица и 3 дена

  • по дадена година определя датата на Великден за тази година


Реализацията на всички функции трябва да се съдържа в дадена програма, не е позволено използването на системна библиотека за работа с дати.


Бонуси:

  • да се даде възможност за задаване на почивни дни, включително и такива с отработване. Операциите за добавяне/изваждане на дати и разстояния между дати да се променят така, че да оперират с работни дни (под добавяне/изваждане на дни да се има предвид работни такива, резултатът от добавяне/изваждане винаги да е работен ден, разстоянието между датите да се мери в работни дни)


Кодирания RLE и Base64


1. RLE


Run-length encoding (RLE) представлява кодиране на низове, при което последователности от еднакви символи се заменят с двойка от символа и броя повторения. Например S = AAAABBBBCCCAABBBB може да се представи с RLE списъка R = (4,A) (4,B) (3,C) (2,A) (4,B). Да се напишат функции, които


  • кодират даден низ в RLE списък

  • декодират RLE списък до низ

  • вмъкват един RLE списък на произволна позиция в друг, като позицията се указва в брой символи от началото на оригиналния низ

    • пример: след като вмъкнем (3, C) (1, B) на позиция 6 в R се получава (4,A) (2, B) (3, C) (3, B) (3, C) (2, A) (4, B)

  • изтриват последователност от символи от RLE списък

    • пример: след като изтрием последователност от 8 символа от позиция 6 в R се получава списъкът (4,A) (5, B)

  • проверяват дали низът, кодиран от RLE списъка A е подниз на низа, кодиран от RLE списъка B. Проверката да не включва операция по декодиране, с цел ефективност

    • пример:  списъкът (2, B) (1, C) е подсписък на R

    • пример: списъкът (1,C) (3,A) (1, B) не е подсписък на R (4,B)

  • По дадено RLE кодиране на низ, да се построи честотната таблица на низа (за всеки символ, който се среща в низа, се оказават броят на срещанията му в низа). Резултатът да е под формата на  RLE списък, в който всеки символ се среща най-много веднъж

    • пример: (6,A) (8,B) (3,C) е честотна таблица на R


Горните операции да бъдат реализирани в програмата чрез ясно обособени функции. Употребата на входно / изходни операции в тялото на фунцкиите е забранена, освен при функциите за вход и изход. С други думи, функциите трябва да реализират математически изображения.


2. Base64


Нека е даден масив F от байтове (unsigned char).  Да се дефинират функции, които:


  • Преобразуват F до низ, в който се използват само символите "A-Za-z0-9+/”.

  • От кодиран по този начин низ, възстановяват съдържанието на F


Целта на кодирането е да се избегнат специалните символи като '\t', '\n', '\0' и други. Забележете, че броят на символите в множеството "A-Za-z0-9+/” е 64 (= 26+26+10+2).


Алгоритъм на кодиране:


1) разглеждаме двоичния файл като последователност от групи по 24 бита (три байта  от по 8 бита)

2) всеки 24 бита разбиваме на четири 6-битови байта

3) на всеки 6-битов байт съпоставяме съответния символ от "A-Za-z0-9+/”

4) записваме получените символи в текстовия файл


При достигане края на двоичния файл имаме от един от следните случаи:


а) при последната операция сме прочели точно 24 бита и значи всичко е ОК

б) при последното четене е имало само 8 бита

в) при последното четене е имало само 16 бита


В случай "б)” допълваме до 12 бита с нули и получаваме 2 6-битови байта, съпоставяме им символи и допълваме с два символа '=' в текстовия файл.


В случай "в)” допълваме до 18 бита с нули и получаваме 3 6-битови байта, съпоставяме им символи и допълваме с един символ '=' в текстовия файл.


Не е задължително да реализирате случаи "б)” и "в)”, приемете, че размера на файла е кратен на 3.


Това кодиране се нарича base64 и се използва при прикрепяне на файл към e-mail съобщение, заради изискванията на протокола да не се използват специални символи. Резултатът от кодирането е текстов файл с размер 4/3 спрямо оригиналния, но без специални символи и върши работа за всякакви файлове. Недостатък е, че съдържанието на кодирания файл е неразбираемо за човек. Съществува и друго широко използвано кодиране наречено quoted-printable - като при него се разчита, че се изпраща главно текст и малък брой специални символи, които се escape-ват.


Вашата задача е да напишете една кодираща и декодираща програма използвайки алгоритъма на base64. Програмата да реализира:

  • кодиране

    • прочитане на масив от байтове (числа от 0 до 255) от клавиатурата

    • извеждане на екрана низ, който кодира масива

  • декодиране

    • прочитане на низ от клавиатурата

    • извеждане на екрана на масив от байтове

Можете да проверите, че програмата ви работи правилно, като сравните резултата с този от някоя online реализация на base64.


Не се позволява използването на стандартни библиотеки и готови решения!


Подробна спецификация на base64 и quoted-printable кодиранията можете да намерите в секции 6.7 и 6.8 на rfc2045 (например на адрес http://www.faqs.org/rfcs/rfc2045.html).


Бонуси:

  • програмата да използва двоични файлове вместо масиви и да работи с командни параметри, както следва:

base64 encode file1.inp file1.out

base64 decode file1.out file1.copy


XML Parser

Да се напише програма, която разчита XML файлове и позволява правенето на прости XPath 2.0 заявки към тях.


Забележка: За проекта не е позволено използването на готови библиотеки за работа с XML. Целта на проекта е да се упражни работата със структурирани текстови файлове, а не толкова със самия XML.

Внимание: Не се изисква осигуряване на всички условия в  XML и XPath спецификациите! Достатъчно е файловете да "приличат на XML” (както файла в горния пример, който не е валиден XML), а завките да "приличат” на XPath.  За уточняващи въпроси пишете във форума. Колкото повече от възможностите на XML поддържате, с толкова повече точки ще бъде оценен проекта ви.


Минимални изисквания за поддържаните XPath заявки


Примерите по-долу са върху следния прост XML низ:

<person id=”0”>

<name>John Smith</name>

<address>USA</address>

</person>

<person id=”1”>

<name>Ivan Petrov</name>

<address>Bulgaria</address>

</person>


  • да поддържат оператора  / (например person/address връща списък с всички елементи address, които са child елементи на person, за всеки елемент person във файла)

  • да поддържат оператора [] (например person/address[0] връща първия елемент address, който е child на person, за всеки елемент person във файла)

  • да поддържат оператора @ (например person[@id] връща списък с id атрибутите на всички елементи person във файла)

  • Оператори за сравнение = (например person[address=”USA”]/name връща списък с всички елементи person във файла, на които child елементите address са с текстово съдържание USA)


Забележка:  Дадените XPath адреси по-горе (от типа person/*) са относителни (т. е. прилагат се върху елементите и атрибутите, съдържащи се в текущо избран елемент, аналогично на директориите и файловете в текущо избраната папка във файлов мениджър (explorer) или обвивка (shell) на ОС. Съществуват и абсолютни пътища, които започват със / (например /person, /person/address). Те избират елементи/атрибути спрямо кореновия (root) елемент (в горния пример адресът му е /person), аналогично на абсолютните пътища в Unix-like операционните системи и URL-ите.


Силоз 3: Информационни системи


Този силоз съдържа проекти, в рамките на които имате шанс да разработите микро-вариант на т. нар. "информационна система”, т.е. система за съхранение и обработка на информация, свързана с поддържането на конкретна реална система. Не е нужно системата да бъде пълно функционална и готова за използване в реална ситуация. Необходимо е обаче системата да позволява изпълнение на избраните операции, да реагира адекватно на подадените команди и да дава исканата информация на ползващия я потребител. Целта на проектите е да приложите знанията си за обработка и организиране в паметта на данни, които да представят реални обекти.


Библиотека


Да се напише компютърна програма, реализираща информационна система, която поддържа библиотека. Програмата съхранява и обработва данни за наличните в момента книги под формата на текстови файлове.


Всяка книга се характеризира със  следните данни:


  • автор

  • заглавие

  • жанр

  • кратко описание

  • година на издаване

  • ключови думи

  • рейтинг

  • уникален номер за библиотеката


Системата поддържа два вида потребители -- администратори и клиенти на библиотеката. Всеки потребител се характеризира със следните данни:


  • потребителско име

  • парола

  • ниво на достъп -- указва дали потребителят е администратор или не.


Програмата работи в интерактивен текстов режим, като очаква въвеждането на команди от потребителя и реагира на тях по съответен начин. Всички команди са предварително дефинирани.


Команди достъпни от всички потребители:


login

След въвеждането на командата потребителят последователно е питан за потребителско име и парола. Ако потребител с посочените данни съществува в програмата, се извежда съобщение "Welcome, <username>!”, където <username> съответства на  потребителското име. В противен случай се извежда съобщение за грешно име или парола. При повторен опит за login, се изкарва съобщение "You are already logged in.”


logout

потребителят напуска системата (програмата продължава да работи)


help

извежда на екрана списък с всички възможни команди и краткото им описание

exit

програмата спира изпълнение (Press any key to continue . . .  :)


books all

извежда последователно за всяка книга следната информация:

- заглавие, автор, жанр,  персонален номер


books info <isbn_value>

извежда на екрана подробна информация за книга с персонален номер равен на <isbn_value>

Пример: books info 1124


books find <option> <option_string>

<option> е един от следните низовете {"title” , "author”, "tag”}

<option_string> е стойноста на критерия за търсене, може да съдържа интервали

Пример: books find title Introduction to programming

  books find Stephen King

  books find superhero


books sort <option> <option_string>

<option> е един от следните стрингове {"year”, "rating”}

Извежда информация за книгите на екрана, в сортиран вид спрямо стойността на option.


При първоначално стартиране на програмата няма налични данни за книги. Има регистриран по подразбиране само един потребител с администраторски акаунт със следните данни:

  • потребителско име: "admin”

  • парола:   "i<3c++”


Програмата очаква да се въведе команда, като след въвеждането и се изпълнява според дефинираните правила. Това продължава до въвеждането на командата "exit”, която прекратява програмата.



команда

логин

админ

help

не

не

login

не

не

logout

да

не

exit

не

не

books all

да

не

books find

да

не

books sort

да

не

books view

да

не

books add

да

да

books remove

да

да

users add

да

да

users remove

да

да


Бонус:

  • при въвеждане на паролата на екрана да се изписва  символа * вместо реалния символ

  • при сортиране на книгите по зададен критерий, да се напише алгоритъм различен от пряка селекция и метода на мехурчето

  • Търсене на книга по зададен критерий да игнорира регистъра на буквите (малки или големи)


Хотел


Да се напише компютърна програма, реализираща информационна система, обслужваща хотел. Програмата да поддържа текстов диалогов режим, позволяващ удобен интерактивен избор на следните операции:


  • регистриране в стая (задава се номер на стая, начална и крайна дата и се въвежда коментар, например "семейство Симпсън”)

  • списък на свободни стаи

  • освобождаване на заета стая

  • справка за използването на стаи в даден период (по начална и крайна дата се извежда списък, в който за всяка стая, използвана в дадения период, се извежда и броя на дните, в които е била използвана)

  • намиране на подходяща (с необходимия брой легла) свободна стая по дадена начална и крайна дата

  • задаване на допълнителни изисквания за стаи (бебешка кошарка, със/без закуска, с изглед към морето/планината/двора)

  • да се напише алгоритъм, който предлага спешно намиране на стая за важен гост в случай на липса на свободни стаи за даден период. Алгоритъмът да предлага разместване на настанените от най-много две стаи


Бонуси:

  • програмата да съхранява и обработва необходимите данни под формата на текстови файлове.

  • да е възможно някои стаи да бъдат обявени за временно недостъпни, например в ремонт, в такъв случай те са свободни, но никой не може да бъде настанен в тях

  • гостите на хотела да могат да се записват по стая за различни дейности от даден списък при настаняване

    • да се извежда списък на програмата на една стая

    • да се извежда списък на всички записали се за дадена дейност

Склад


Да се напише компютърна програма, реализираща информационна система, обслужваща склад. Програмата да поддържа текстов диалогов режим, позволяващ удобен интерактивен избор на следните операции:


  • списък на наличните продукти в склада. За всеки продукт се съхранява и извежда следната информация:

    • име (описание - символен низ с произволна дължина)

    • срок на годност

    • дата на постъпване в склада

    • има не производител

    • мерна единица (килограми, литри)

    • налично количество

    • местоположение (секция/рафт/номер) (номерирайте склада си както прецените, че ще ви е удобно, имайте предвид, че в началото той е празен и различно количество стока е нормално да заема различно по обем място)

    • коментар (свободен текст)

  • записване на нова доставка

    • ако нов продукт е с различен срок на годност от вече съществуващ едноименен продукт, той да бъде поставен на различно място

    • ако имате достатъчно място, еднакви продукти с един и същи срок на годност да бъдат поставени на едно и също място

    • при извеждане на списъка с налични продукти да се изведе общото количество на едноименните продукти независимо от срока им на годност

  • изваждане на продукти от склада

    • по дадено име и количество изважда съответните продукти от склада и извежда информацията за продукта и къде се е намирал

    • при наличие на повече от една партида, първо намалява тази със най-скоро изтичащ срок на годност, тогава във информацията за извършеното действие се отбелязва количеството и мястото на всяка от партидите, които сме намалили

    • в случай на опит за изваждане на повече от наличното да се дава информация на потребителя за наличността на продукта и срока на годност на партидите и възможност да реши дали все пак не иска да извади това което е останало

  • справка за наличността в даден период (по дадена начална и крайна дата се извежда списък с всички промени на наличността в дадения период, включително зареждания и извеждания на стоки)

  • разчиства склада от всички стоки, на които е изтекъл или предстои скоро да изтече срока на годност, като извежда информация за разчистените стоки


Бонуси:

  • Програмата да съхранява и обработва необходимите данни под формата на текстови файлове.

  • по въведен продукт и неговата цена, за брой или съответно килограм, да се пресметнат загубите за даден от потребителя период (изхвърленото количество продукт със развален срок на годност)


СУСИ


Да се напише компютърна програма, реализираща информационна система за обслужване на студенти. Програмата съхранява и обработва необходимите данни под формата на текстови файлове. Програмата да поддържа текстов диалогов режим, позволяващ удобен интерактивен избор на следните операции:


  • записване на студент към системата, чрез съхранение на следната информация:

    • Име -- символен низ с произволна дължина

    • Факлутетен номер

    • Година на приемане

    • Текущо записан курс, специалност, група

    • всякаква допълнителна информация, нужна за изпълнение на заявките по-долу

  • промяна на статус (прекъсване на обучението, завършване)

  • справка за студенти в даден поток/курс/специалност (по дадени поток, курс и специалност се извеждат всички съответни студенти)

  • добавяне на оценки/изпити (за даден предмет, оценка и студент)

  • записване на задължителни/избираеми предмети

  • отпечатване на протоколи

  • академична справка за оценките на даден студент (списък с всички взети изпити ,съответните оценки и успех на студента). Да се включи също и списък с невзетите изпити (предмети, които са записани, но за тях няма оценки, те да се включат в пресмятането на средния успех на студента като двойки), ако има такива


Бонуси:

  • Програмата да съхранява и обработва необходимите данни под формата на текстови файлове.

  • да се поддържат кредити за всеки избираем предмет и минимален брой за специалността и да се извежда справка колко още кредита от избераеми дисциплини трябва да вземе студента, за да може да се дипломира (кредитите от избираеми дисциплини, които студента не е взел, не се включват в текущите кредити)


Билети


Да се напише компютърна програма, реализираща информационна система, която обслужва билетна каса. Програмата съхранява и обработва необходимите данни под формата на текстови файлове. Програмата да поддържа текстов диалогов режим, позволяващ удобен интерактивен избор на следните операции:


  • добавяне на представление (име и дата)

  • списък със свободни места за дадено представление (непродадени и незапазени билети)

  • запазване на билет (въвежда се номер на място и коментар, примерно "За Хоумър Симпсън”)

  • закупуване на билет. За всеки билет се издава уникален сложен код, който съдържа информация за съответното място

  • получаване на списък на запазените, но неплатени (незакупени) билети (за дадено представление или за всички представления)

  • отмяна на резервация

  • проверка за валидност на билет (по даден код се извлича номера на мястото или се връща грешка, ако кодът е невалиден)

  • справка за закупени билети в даден период (по дадена начална и крайна дата се извежда списък с всички изнесени представления като за всяко отделно представление се извежда и количеството продадени билети)


Бонуси:

  • програмата да съхранява и обработва необходимите данни под формата на текстови файлове.

  • да се извежда статистика за най-гледаните представления

  • да се извежда статистика за представления с под 10% посещаемост за даден период и да се дава възможност на потребителя да свали тези представления


Личен календар


Да се напише компютърна програма, реализираща информационна система, която поддържа личен календар. Програмата да поддържа текстов диалогов режим, позволяващ удобен интерактивен избор на следните операции:


  • запазване/отказване на час за среща. Записва се начало на среща (ден, час), край на среща, име (кратко описание - например "зъболекар”) и коментар

  • отпечатване на дневна програма, като по даден ден се извежда хронологичен списък с всички ангажименти за деня

  • промяна на часа и/или мястото на среща по име, като се запази останалата информация за събитието

  • търсене на среща: по име се извеждат останалите данни се срещата

  • определяне на някои дни като неработни (въвежда се коментар, напр. "ден на труда”)

  • извеждане на статистика за натовареност: по дадени начална и крайна дата се извеждат подреден списък с дните от седмицата по критерия "брой заети часове”

  • намиране на свободно място за среща: по дадена начална дата и желана продължителност на срещата търси дата, на която е възможно да се запази такава среща, но само в работни дни и не преди 8 часа сутринта или след 5 часа вечерта.

  • намиране на свободно място за среща, съобразено с личен календар на друг човек: по дадена начална дата, желана продължителност на срещата и друг личен календар търси дата, съобразена с двата личени календара, на която е възможно да се запази такава среща, но само в работни дни и не преди 8 часа сутринта или след 5 часа вечерта

  • синхронизиране на два календара (например потребителят се е записал на спорт и иска да включи всички тренировки и спортни събития в календара си), като при наличие на две събития по едно и също време, потребителят избира кое от двете да остане и кога да премести другото събитие


Бонуси:

  • програмата да съхранява и обработва необходимите данни под формата на текстови файлове.

  • извеждане на статистика за срещи по име (например при задаване на "зъболекар” извежда всички минали и бъдещи събития, които в името си имат зъболекар)


Last modified: Wednesday, 19 November 2014, 11:18 PM