2007. Структури на данни, алгоритми, обекти

Препоръчайте документи

данни

Структури на данни, алгоритми, обекти

BMF-NIK-AAO Структури на данни, алгоритми, обекти (AAO) Извадка от материал за 2005/2006 г., базиран на лекциите на László Csink и Árpád Miklós.

Съдържание. 1. Описание на алгоритъма, дефиниция. . 4 Решаване на квадратно уравнение. 5 Приблизително изваждане на корен (метод на Нютон). 7 2. Прости елементи за програмиране. 8 Серийно изчисление. 8 Решение. 9 Избор. 10 Преброяване. 11 Търсене. 12 Максимално търсене. 12 3. Преобразуване на данни, цикли, функции, масиви. 13 Преобразуване на данни. 13 Функции. 16 4. Сортиране, сортиране, двоично търсене. 19 Избор. 19 Сортиране (на два блока). 20 Сортиране (в един масив). 20 Двоично търсене. 21 5. Задайте операции. 22 Раздел. 22 Съюз. 23 Съвпадение. 23 6. Договорености. 24 Bubble sort. 24 Коктейлна линия. 25 Разположение на градински гном. 26 Подреждане на гребена (бедрен ред). 27 Максимално сортиране по избор. 28 Вмъкване на сортиране. 28 Подредба на гълъбови дупки. 29

BMF-NIK-AAO 7. Бързо сортиране (бързо сортиране). 30 Рекурсивно. 30 Не рекурсивно. 31 8. Алгоритми на игрите. 35 9. Намиране на лабиринтна пътека. 39 10. Думата проблем. 42 11. Алгоритми с матрици. 45 Редки матрици. 45 Верижно умножение на матрици. 47 умножение на матрица на Strassen. 47 12. Вълшебният квадрат. 49 Концепцията за магическия квадрат. 49 Еквивалентни магически квадратчета. 50 Извличане на магическата сума. 50 Метод на Кокстър. 51 Пирамиден метод. 52 13. Други алгоритми. 53 Евклидовият алгоритъм. 53 Поредицата на Фибоначи. 53 Схемата на Хорнър. 54 Ситото на Ератостените. 54 14. Частта за ООП (лекции от Árpád Miklós). 55 Изчислителни модели и парадигми за програмиране. 55 Обектно-ориентираната парадигма за програмиране. 60 Основи на обектно-ориентираната парадигма. 66 Отключване, скриване на данни. 74 Наследяване. 79 Разнообразие. 83 Повторно използване на кода (съкратен контур). 89

2. Прости елементи за програмиране: Серийно изчисление, миналата година отлагах сметката за газ всеки месец. Искам да изчисля колко пари струва годишното потребление на газ. “ Стъпки за решение: 1. Нулирайте променлива за агрегиране. 2. Повтарям следващите две стъпки 12 пъти: Гледам следващата фактура, добавям я към предишната сума. 3. Най-накрая получавам резултата. Псевдокод: ПРОМЕНЛИВИ i, сума ЦЯЛО, фактура [i] РЕАЛНА (или ЦЯЛА) i ← 0; сума ← 0; ПОВТОРЕТЕ АКО (i по-малко от 12) < sum←sum+szamla[i]; >ЗАБЕЛЕЖКА (сума)

(номерирането на месеците започва от 0 според маркировката)

Решение BMF-NIK-AAO Бих искал да реша въз основа на оценките на студента дали е отлично или не. Възможни са два вида идеи: 1.

Ако има някои от вашите билети, които не са пет, те не са отлични

Нека да разгледаме билетите, първо първия, после останалите подред и да се уверим, че са пет. Ако открием нещо, което не е с високи пет, тогава няма нужда да разглеждаме допълнителни билети, тъй като има оценка с не висока пет, т.е.не е отлична. Псевдокод: VARIABLES subject_number, i, Tickets [i] WHOLE, van_nemotos LOGICAL i ← 1 REPEAT IF (i subject_number) PRESENT (all_otos)

Избор на BMF-NIK-AAO От затворените хартии в кръг на резервоара изберете една от достатъчните хартии. Решение: нека да разгледаме дисертациите, първо първите, после останалите една по една, докато намерим достатъчно дисертации. Когато намерим достатъчно, той ще бъде избран. Псевдокод: ПРОМЕНЛИВИ i, брой, брой работни места, документи [i] ЦЯЛ i i ← 1 ПОВТОРЯВАНЕ АКО ((брой дни) Console.WriteLine („Няма решение“); иначе Console.Write (i + „ден!“);

Преброяване на BMF-NIK-AAO Предишният проблем е леко модифициран. Пребройте колко дни (ако има такива) доходите на бизнеса надвишават 20 000 HUF? Код за броене: int piece = 0; за (i = 1; i 20) парчета ++; Console.WriteLine (парче + „приходите за деня бяха над 20 хиляди форинта“);

Максимален избор Гледах картата снощи. Написах си надморската височина от 10 високи планини над морското равнище. Влезте в най-високия връх! Решение: Отбелязвам височината на първата планина. Смятам, че това е най-високото. Разглеждам другите планини една по една: ако една е по-висока от най-високата досега, забравям най-високата досега и отбелязвам новата. В края ще се отбележи най-високата планина. Код: int номер на планината = 10; int [] високо = ново int [планински номер + 1]; // защото индексираме от 1 int i; Random RandomClass = нов Random (); за (i = 1; i max) < max=magas[i]; eddigi=i; >Console.WriteLine ("най-големият брой на (един):" + предишен + "височина:" + макс);

Ако, да речем, връх 2 и връх 7 са еднакви по височина, а останалите са по-малки, резултатът ще бъде 2 или седем? Ще има 2. Ако обаче вместо = се добави> =, тогава 7.

3. Преобразувания на данни, цикли, функции, масиви Преобразуване на данни Преобразуване в C # може да бъде неявно или изрично. Ако преобразуването е автоматично, говорим за неявно преобразуване, като в този случай няма загуба на данни. Изричното преобразуване е принудително, в този случай може да настъпи загуба на данни. Преобразуването най-често се случва по време на прехвърляне на параметър на извикване на функция или за числени изчисления със смесени данни. Стрелките показват неявните опции за преобразуване:

Неявно числово преобразуване: дълъг x1; int y1 = 25; x1 = y1; Console.WriteLine (x1); int x1; дълго y1 = 25; x1 = y1;