Задачи - ООП, Седмица 1, 22.02.2024

GitHub classroom: classroom.github.com/a/UPJOzHty

Задача 1

< Решение >

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

Имплементирайте функция concatString, която приема две структури от този тип и връща низ, пак в същата структура, който е конкатенация (слепване) на първите два низа.

question Има ли значение дали типовете на аргументите, или на върнатата стойност, са референции или указатели (или нито едното)?

В самия код тествайте функциите (не е нужен потребителски вход).

Задача 2

< Решение >

Имплементирайте структура за динамично-заделен масив от целочислени числа. Тя трябва да запазва указател към масива, размера на масива и бройката на елементи в масива.

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

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

Имплементирайте функция addToEnd, която приема (инстанция на) структурата ви и вмъква елемент в първата незаета позиция.

В самия код тествайте функциите (не е нужен потребителски вход).

Задача 3

< Решение >

Разглеждате “пакети” (логове) информация от редица датчици. Един пакет запазва времето, когато информацията е била отчетена от датчиците, и стойностите на всички датчици: температура, атмосферно налягане, влажност и надморска височина. Всички типове данни са целочислени.

От входа получавате N, броя пакети, които трябва да запазите, и след това 5N на брой целочислени стойности. Накрая получавате буква: t, p, h, e, всяка съответства на някоя отделна стойност от датчиците.

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

Пример:

Вход Изход
6
56 45 64 -8 98
14 40 -15 -18 -1
22 89 72 62 4
85 44 60 17 13
75 18 -12 48 21
27 10 94 -5 16
p
-15 87 109 79 3 75

Задача 4

< Решение >

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

а) въвеждане

< Решение >

От входа получавате N, това определя броя полети, които трябва да се добавят в системата. Всеки полет е редица от 5 стойности, в реда в който са дефинирани.

Напомням, че това е нагласено да ползвате std::cin вместо ръчно да обработвате целия ред.

Изкарайте началните и крайните градове, както и цената на полетите, подредени в нарастващ ред на час на излитане.

Пример:

Вход Изход
5
Berlin Paris 1105 1255 140
Sofia Paris 0915 1115 140
Paris NewYork 1225 1610 500
Sofia NewYork 0610 1345 800
Sofia Berlin 1020 1130 200
Sofia NewYork 800
Sofia Paris 140
Sofia Berlin 200
Berlin Paris 140
Paris NewYork 500

б) търсене

< Решение >

След като се въведат всички полети, получавате от входа два низа - имена на градове. Трябва да изкарате най-евтиния, и след него най-бързия, вариант за пътуване от първия град към втория.

Прикачване между полети е позволено, така че под “вариант” трябва да изкарате всичките полети, които са решение. За един полет е нужно да изкарате само началния град, крайния град, час на излитане и цена, като градовете трябва да са подредени в нарастващ ред на часа на излитане.

Пример:

Вход Изход
5
Berlin Paris 1105 1255 140
Sofia Paris 0915 1115 140
Paris NewYork 1225 1610 500
Sofia NewYork 0610 1245 800
Sofia Berlin 1020 1130 200
Sofia NewYork
Cheapest:
Sofia Paris 0915 140
Paris NewYork 1225 500
Quickest:
Sofia NewYork 0610 800

Задача 5

< Решение >

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

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

Накрая получавате едно име, това е началния потребител. Трябва да намерите, започвайки от него, с колко други потребителя има някаква приятелска връзка (директна, приятел на приятел, приятел на приятел на приятел, …).

Пример:

Вход Изход
5
Георги
2
Асен Гьонов
Майстора
Асен Гьонов
2
Георги
др. Божидаров
Майстора
1
Георги
др. Божидаров
1
Асен Гьонов
Павел
0
Майстора
3

  1. Защото една от първите индустрии, които са се нуждаели от компютърни системи, била авиационната индустрия