25.07.2017 Views

Intro-CSharp-Book-v2015

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Глава 26. Практически изпит по програмиране (тема 3) 1095<br />

Упражнения<br />

1. Напишете програма, която отпечатва спирална квадратна матрица,<br />

започвайки от числото 1 в горния десен ъгъл и движейки се по<br />

часовниковата стрелка. Примери при N=3 и N=4:<br />

7<br />

8<br />

1<br />

10<br />

11<br />

12<br />

1<br />

6<br />

9<br />

2<br />

9<br />

16<br />

13<br />

2<br />

5<br />

4<br />

3<br />

8<br />

15<br />

14<br />

3<br />

7<br />

6<br />

5<br />

4<br />

2. Напишете програма, която брои думите в текстов файл, но за дума счита<br />

всяка последователност от символи (подниз), а не само отделените с<br />

разделители. Например в текста "Аз съм студент в София" поднизовете<br />

"с", "сту", "а" и "аз съм" се срещат съответно 3, 1, 2 и 1 пъти.<br />

3. Моделирайте със средствата на ООП файловата система в един<br />

компютър. В нея имаме устройства, директории и файлове. Устройствата<br />

са например твърд диск, флопи диск, CD-ROM устройство и др. Те имат<br />

име и дърво на директориите и файловете. Една директория има име,<br />

дата на последна промяна и списък от файлове и директории, които се<br />

съдържат в нея. Един файл има име, дата на създаване, дата на последна<br />

промяна и съдържание. Файлът се намира в някоя от директориите.<br />

Файлът може да е текстов или бинарен. Текстовите файлове имат за<br />

съдържание текст (string), а бинарните – поредица от байтове (byte[]).<br />

Направете клас, който тества другите класове и показва, че с тях можем<br />

да построим модел на устройствата, директориите и файловете в<br />

компютъра.<br />

4. Използвайки класовете от предходната задача с търсене в Интернет<br />

напишете програма, която взима истинските файлове от компютъра и ги<br />

записва във вашите класове (без съдържанието на файловете, защото<br />

няма да стигне паметта).<br />

Решения и упътвания<br />

1. Задачата е аналогична на първата задача от примерния изпит. Можете<br />

да модифицирате примерното решение, дадено по-горе.<br />

2. Трябва да четете текста буква по буква и след всяка следваща буква да<br />

я долепяте към текущ буфер buf и да проверявате всяка от търсените<br />

думи за съвпадение с ЕndsWith(). Разбира се, няма да можете да ползвате<br />

ефективно хеш-таблица и ще имате цикъл по думите за всяка буква от<br />

текста, което не е най-бързото решение.<br />

Реализирането на бързо решение изисква използването на сложна<br />

структура от данни, наречена суфиксно дърво. Можете да потърсите в<br />

Google следното: "suffix tree" "pattern matching" filetype:ppt.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!