Задачи за упражнение

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

    1. Създайте клас Address. Адресът съдържа улица или жилищен комплекс, номер на сграда, номер на апартамент, град и пощенски код. Реализирайте член-функция commes_before, която проверява дали един адрес е преди друг, като адресите се сравняват па пощенски код. Създайте файл с адреси, като четете и пишете адреси (последователен достъп) в този файл.

    2. Напишете предикатна функция
bool equal(vector<int> a, vector<int> b)
която проверява дали двата вектора са еднакви - имат еднаква дължина и равни съответни елементи. Векторите за сравняване се четат от файл.

    3. Напишете предикатна функция
bool same_set(vector<int> a, vector<int> b)
която проверява дали двата вектора съдържат еднакви елементи в произволен ред, като се игнорират повторенията. Например векторите 1 4 9 16 7 9 и 7 7 7 16 9 1 1 4 се смятат за идентични. Векторите за сравняване се четат от файл.

    4. Напишете предикатна функция
bool same_elements(vector<int> a, vector<int> b)
която проверява дали двата вектора съдържат еднакви елементи в произволен ред, но с еднакъв брой повторения. Например векторите 1 4 9 16 7 9 и  7 16 9 9 1 4 се смятат за идентични, а векторите 1 4 9 16 7 9 и  7 16 9 1 1 - не. Векторите за сравняване се четат от файл.

    5.  Напишете функция  sremove_duplicates, която отстранява повтарящи се елементи от вектор. Например ако функцията се извика с вектор 1 4 9 16 7 9, тя трябва да го промени на 1 4 9 16 7. Векторът се чете от файл и промененият вектор се записва отново във файл.

    6. Дефинирайте клас Student. Всеки студент има име и рожден ден. Създайте вектор
vector<Student> friends;
Прочетете последователност от имена и рожденни дати от файл и запълнете с нея вектора friends. След това създайте файл с имената на всички приятели, чиито рождени дати са през зададен от клавиатурата месец.

    7. Напишете програма, която разпределя местата в самолет. Нека самолетът има 20 места в първа класа (5 реда по 4 места) и 180 места във втора класа (30 реда по 6 места). Програмата трябва да приема 3 команди - прибавяне на пътници, показване на местата и край. При прибавяне на пътници си пита за класата, броя на пътниците, пътуващи заедно (1 или 2 за първа класа и от 1 до 3 за втора класа), за предпочитаното място (до пътеката, в средете или до прозореца). Програмата се опитва да намери подходящите места и ги резервира. Съхранявайте на файл данните за местата в самолета.

    8. Напишете програма, която чете файл на български език и смята честотата на срещане на българските букви в текста.

    9. Даден е файл, съдържащ текст на английски език. Всяка дума от текста да се запише в отделен файл, чието име е първата буква от думата, а ако файл с това име вече съществува, да се добавя поредно число. Например думите are, alone и air се записват във файлове с имена a1, a2 и a3. Името на файла с текста се задава от командния ред.

    10. Дадени са два текстови файлове. Направете нов файл, съдържащ всички думи от първия файл (по веднъж всяка дума), които се съдържат и във втория файл. Имената на файловете се задават от командния ред.
   
   11.
Напишете програма, която съхранява база данни за служители (име и заплата) във файл с произволен достъп. Реализирайте функции за добавяне и изтриване на служител. За да изтриете служител, запълнете записа му с интервали. Когато добавяте служител, го добавете на най-напред във файла - на първото празно място.

    12. Напишете програма, която обработва 3 файла с данни. Първият файл съдържа имената и телефонните номера на група хора. Вторият файл съдържа имената и номерата на социалните осигуровки на група хора. Третият файл съдържа номерата на социалните осигуровки и годишните заплати на група хора. Групите се припокриват, но не са непременно идентични. Програмата пита за телефонен номер и отпечатва съответното име, номер на социална осигуровка и годишен доход, ако тази информация се съдържа във файловете.

    13. Банка съхранява сметките си във файл с произволен достъп, в които всеки запис има вида номер_на_сметка сума. Напишете програма, която симулира банкомат. Клиентът може да внася пари, като зададе номера на сметката и сумата, да тегли пари, да се осведомява за сумата в сметката и да прехвъля сума от една сметка в друга.

    14. Напишете програма copyfile, която копира един файл в друг, като имената на файловете се задават от командния ред.

    15. Напишете програма catfile, която конкатенира (съединява) няколко файла в един, като имената на файловете се задават от командния ред. Името на съединения файл е последно в редицата файлове на командния ред.

    16. Напишете програма find, която претърсва файлове и отпечатва всички редове от тези файлове, съдържащи дадена дума. Програмата се извиква с аргументи от командния ред. Например
find Kirov report.txt all.txt me.txt
търси думата Kirov във файловете report.txt, all.txt и me.txt.

    17. Напишете програма reverse, която отваря файл за четене и писане и заменя всеки ред от него с обратния му. Например реда abcd efgh се заменя с hgfe dcba. Името на файловете се задава от командния ред.

    18. Напишете програма, която разделя (двоичен) файл на няколко файла с дължини не по-голяма от 1.4 МБ и може да свърже тези файлове, като възстановява оригиналния файл. Имената на файловете и режима на работа на програмата (разделяне или свързване) се задават от командния ред.

    19. Даден е текстов файл. Намерете броя на всички N-буквени думи във файла за всяко N = 2, 3, ... Дума се дефинира като поредица от български букви. Името на файла се задава от командния ред.

    20. Напишете програма, която създава файл съдържащ N случайни цели числа. Програмата да прочете този файл и да създаде текстов файл, който съдържа числата, наредени по големина.

    21. Даден е текстов файл. Направете нов файл, съдържащ всички N-буквени думи от файла, наредени по азбучен ред (лексикографски), като имената на двата файла и числото N се задават от командния ред.

    22. Даден е текстов файл, който съдържа цели числа. От този файл създайте 2 нови файла - единия съдържащ числата, по-големи от зададено число x, а другия - числата по-малки от x. Имената на трите файла и числото x се задават от командния ред.
   
    23.
Напишете програма, която копира един текстов файл в нов файл, като записва думите на файла в обратен ред (напр. файл, съдържащ думите "кон яздя мамо" се преобразува във файл, съдържащ думите "нок ядзя омам"). Имената на файловете се задават от командния ред.

    24. Даден е текстов файл с текст на български език. Намерете броя на всички думи във файла, които започват с главна буква.

    25. Създайте вектор с елементи обекти от клас Student с данни: име, презиме и фамилия на студент и факултетен номер. Напишете функции за добавяне и премахване на елементи на вектора, за четене от файл и записване на файл на вектора.

    26. Създайте вектор с елементи обекти от клас Book с данни: име на автор, заглавие на книга, име на издателство и година на издаване. Напишете функции за добавяне и премахване на елементи на вектора, за четене от файл и записване на файл на вектора.

    27. Направете програма, която създава малка база данни от обекти от клас Phonebook с данни: име и телефонен номер. Програмата записва във файлове сортираната по телефонни номера и по имена база данни.

    28. Дадена е прекодираща таблица, като на всяка дума от някакво множество от думи съпоставя цяло число - код на думата. Таблицата е реализирана като файл от записи с две полета: дума и код на думата. Напишете програма, която кодира и декодира файл от думи (от зададеното множество).

    29. Даден е файл с различни дати. Всяка дата се състои от ден, месец, година. Напишете програма, която намира: най-малката година; всички зимни дати; най-късната дата. Името на файла се задава от командния ред.

    30. Направете програма, която създава малка база данни от обекти от клас Phonebook с данни: име и телефонен номер. Програмата записва във файл базата данни. Реализирайте функции за търсене в несортираната база данни по име и по телефонен номер.

    31. Напишете програма replace, която търси в текстов файл даден низ и заменя този низ (навсякъде, където се среща във файла) с друг низ със същата дължина. Името на файла и низа се задават от командния ред.

    32. Напишете програма за конструиране на вектор с елементи обекти от клас Magazine с данни: име на списание, година и месец на издаване. Направете програма за сортировка на списанията по времето на издаването и записването на сортирания вектор на файл.

    33. Напишете програма, която създава файл от думи. Създаването на файла завършва след въвеждане на думата zzz. Програмата сгъстява файла, като изключва от него всички повтарящи се думи. Името на файла се задава от командния ред.

    34. Даден е файл, съдържащ фамилни имена и адреси. Напишете програма, която намира колко пъти всяко име се съдържа във файла. Името на файла се задава от командния ред.

    35. Напишете програма, която създава файл от двойки думи - първата е на английски език и втората е преводът й на български език.  Напишете функция, която при зададена дума на английски език намира превода й на български и обратно. Името на файла се задава от командния ред.

    36. Даден е файл от цели числа. Напишете функция, която установява дали елементите на файла са различни (т.е. дали всички числа във файла са различни). 

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