Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву
Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Властивості операції над множинамиСодержание книги
Поиск на нашем сайте
Завдання 2.1 Розробити алгоритм та написати програму обчислення множини:
Проектування рішення задачі Проект рішення задачі представляється в формі принципової блок-схеми.
Мал.1.Принципова блок-схема обчислення множин Примітка: При розробці алгоритму даної задачі ми вводимо множини А, В, D вже в упорядкованому вигляді, але ми нижче приводимо опис методу впорядкування множин методом простого включення. Організація структури прграми
Для обчислення операцій Представимо структуру програми у вигляді наступної блок-схеми (для програми обрано модульний принцип організації програми):
Мал.2.Принципова блок-схема програми
У програмі вирішення даної задачі ми використовуємо наступні процедури: 1. SYS- призначена для сортування цілих додаткових чисел; 2. ОBED- призначена для організації виконання операцій об’єднання двох відсортуваних множин; 3. PERET- призначена для організації виконання операцій перетину двох відсортуваних множин; 4. RIZ- призначена для організації виконання операцій різниці двох відсортуваних множин. Опис процедур Опис процедури SYS. Постановка задачі. Задана послідовність чисел A = {aі, а2, а3, …,аn }. Необхідно упорядкувати її елементи по зростанню, тобто створити послідовність чисел В={ Задачу вирішимо методом простого виключення. Математична модель Як математичну модель представимо логічну схему роботи методом простого включення. Описуємо суть методу. Побудуємо таблицю з 3 стовбців: 1-й стовбець предначений для вказування ітерацій методу. 2-й —для несортованої послідовності (А). 3-й —для відсортованої послідовності (В). На першому кроці ітерацій 1-й елемент з А вставляється в В, потім цей елемент видаляється з А. Далі на кожному кроці ітерацій 1-й елемент з поточної невідсортованої послідовності А вставляється в відповідне йому місце відсортованої послідовності В; потім він удаляєть з послідовності А. Покажемо роботу методу простого виключення на прикладі:
А=
Алгоритм рішення задачі. Алгоритм процедури SYS. Алгоритм призначений для впорядкування чисел методом простого виключення. Вхід: А- масив невідсортуваних даних; n- кількість елементів масиву. Вихід: В- масив відсортуваних даних. Трудоємність алгоритма Крок 1: Визначити перші два елемента масива В. Крок 2: Організувати цикл по Крок 3: Провірити умови Перехід на крок 6. Крок 4: Організувати цикл по Крок 5: Провірити умови Крок 6: Завершення циклу по Крок 7: Кінець. Блок-схема.
так
ні так
Мал.3. Блок-схема процедури SYS. Опис процедури OBED. Постановка задачі. Задані дві множини A={а Потрібно отримати множину С=А
Математична модель Об’єднання визначається наступним чином Алгоритм рішення задачі. Алгоритм вирішення задачі базується на методі злиття двох множин. Приведемо загальний опис вирішення алгоритму задачі.
1 2
3
4 Блок 1:використовуємо Procedure SYS,яка описана в лабораторній pоботі №1. Блок 2,3: не відсортовані масиви; відсортовані масиви. Блок 4: алгоритм OBED Алгоритм OBED: Призначений для об ’ єднання двох відсортованих множин А і В з використанням методу злиття. Крок 1. Присвоїти Крок 2. Перевірити умову Крок 3. Перевірити умову інакше: записати в кінці масиву С елементи масиву В, які залишились нерозглянуті; кінець. Якщо Крок 4. Перевірити Крок 5. Перевірити умову j інакше: записати в кінці масива С елементи А, які залишились нерозглянуті; кінець. Крок 6. Крок 7. Провірити умову: Блок-схема.
Мал.3. Блок-схема процедури OBED Опис процедури PERET Постановка задачі. Задані дві множини: A={а В={b Потрібно отримати множину С=А ÇB Математична модель Перетин визначається наступним чином С=А ÇВ={С,С Алгоритм вирішення задачі Алгоритм вирішення задачі базується на методі злиття двох множин, тому ми можемо допустити, не порушуючи загальності, що множини А і В вже відсортували. Задається у відсортованому вигляді. Приведемо загальний опис вирішення алгоритму задачі. На кожному кроці основного циклу можлива одна з трьох ситуацій: поточний елемент множини А менше, чи більше, чи дорівнює поточному елементу множини В. · у першому випадку поточний елемент множини А не належить перетинанню, він пропускається і відбувається просування в цій множині; · у другому випадку теж саме виконується з множиною; · у третьому випадку знайдені співпадаючі елементи, один екземпляр елементу додається в результат і відбувається просування відразу в обох множинах. Алгоритм перетину: Призначений для перетину двох відсортованих множин А і В з використанням методу злиття. Крок 0. Ініціалізація: задання множин А і В: А={а В={b Присвоїти Крок 1. Перевірити Крок 3. Перевірити Крок 4. Виконати Крок2 і Крок3 при ( Крок 5. Кінець. Блок-схема.
Мал.3. Блок-схема процедури PERET Опис процедури RIZ. Постановка задачі Задані дві множини A={а Потрібно отримати множину С=А \B. Математична модель Різниця визначається наступним чином С=А \В={с, сÎА і сÏВ} Алгоритм вирішення задачі Алгоритм вирішення задачі базується на методі злиття двох множин, тому ми можемо допустити не порушуючи загальності, що множини А і В вже відсортували. Приведемо загальний опис вирішення алгоритму задачі. На кожному кроці основного циклу можлива одна з трьох ситуацій: поточний елемент множини А менше, чи більше, чи дорівнює поточному елементу множини В. · у першому випадку поточний елемент множини А записується в результат С і розглядається наступний елемент множини А; · у другому випадку поточний елемент множини А не належить різниці і розглядається наступний елемент множини В; · у третьому випадку поточний елемент А не належить результату і розглядаються наступні елементи множин А і В. Після закінчення основного циклу ті елементи множини А, які не були розглянуті, записуються в кінець списку С без перевірки. АЛГОРИТМ RIZ. Призначений для знаходження різниці двох відсортованих множин А і В з використанням методу злиття. Крок 0. Задання множин А і В: А={а Присвоїти Крок 1. Перевірити Крок 2. Перевірити Крок 3. Виконати Крок1 і Крок2 поки ( Крок 4. Визначити: якщо залишились нерозглянуті елементи множини А, то записати їх без перевірки в кінець списку С. Крок 5. Кінець. Приведемо загальний опис вирішення задачі.
1
3
4
SYS – procedure для відсортування масиву RIZNICA- procedure для обчислення С = А \ В Блок-схема
Мал.3. Блок-схема процедури RIZ 2.6. Результат Текст програми: Program proga; type ar=array [1..50] of integer; Var A,B,C,D,BK1,BK2,Bk3,Bk4,Bk5,Bk6,M,U:ar; i,j,k,nk1,nk2,nk3,nk4,nk5,nk6,nm,na,nb,nc,nd:integer; Procedure OBED(Var pa:ar;Var pb:ar;Var pc:ar;Var pn1, pn2,pk:integer);{вхід:A,B; вихід C}{програма для об’єднання множин} var i,j,k,l:integer; begin i:=1;j:=1;k:=0; repeat if pA[i]<pB[j] then begin k:=k+1;pC[k]:=pA[i];i:=i+1; end; if pA[i]>pB[j] then begin k:=k+1;pC[k]:=pb[j];j:=j+1; end; if pA[i]=pB[j] then begin k:=k+1;pC[k]:=pA[i];i:=i+1;j:=j+1; end; until (i>pn1) or (j>pn2); if (i>pn1)and(j<pn2) then for l:=j to pn2 do begin k:=k+1; pC[k]:=pB[l];end; if (i<pn1) and (j>pn2)then for L:=i to pn1 do begin k:=k+1;pC[k]:=pA[l];end; write(' A={'); for i:=1 to pn1 do write(pa[i]:3); writeln('}'); write(' B={'); for i:=1 to pn2 do write(pB[i]:3); writeln('}'); write(' C={'); for i:=1 to k do write(pC[i]:3); write('}'); pk:=k; readln; end; Procedure RIZ(Var pa:ar;Var pb:ar;Var pc:ar;Var pn1, pn2,pk:integer); {вхід:A,B; вихід C}{програма для обчислення різниці множин} {const n=5;m=6;} var i,j,k,l:integer; begin i:=1;j:=1; k:=0; repeat if pa[i]<pb[j] then begin k:=k+1; pC[K]:=pa[i]; i:=i+1; end else begin if pa[i]=pb[j] then begin i:=i+1; j:=j+1; end else j:=j+1; end; until (i>pn1)or(j>pn2); if (i<pn1)and(j>pn2) then begin for l:=i to pn1 do begin k:=k+1; pc[k]:=pa[l]; end; end; if k=0 then begin write(' A={'); for i:=1 to pn1 do write(pa[i]:3); writeln('}'); write(' B={'); for i:=1 to pn2 do write(pb[i]:3); writeln('}'); write(' C={'); for i:=1 to k do write(pc[i]:3); writeln('}'); end else begin write(' A={'); for i:=1 to pn1 do write(pa[i]:3); writeln('}'); write(' B={'); for i:=1 to pn2 do write(pb[i]:3); writeln('}'); write(' C={'); for i:=1 to k do write(pc[i]:3); writeln('}'); end; pk:=k; readln; readln; end; Procedure PERET(Var pa:ar;Var pb:ar;Var pc:ar;Var pn1, pn2,pk:integer); {вхід:A,B; вихід C}{програма для перетину множин} {const n=10; m=7;} var i,j,k,l:integer; begin i:=1;j:=1;k:=0; repeat if pA[i]<pB[j] then i:=i+1; if pA[i]>pB[j] then j:=j+1; if pA[i]=pB[j] then begin k:=k+1; pC[k]:=pA[i]; i:=i+1;j:=j+1;end; until (i>pn1) or (j>pn2); if k = 0 then begin write(' A={'); for i:=1 to pn1 do write(pa[i]:3); writeln('}'); write(' B={'); for i:=1 to pn2 do write(pB[i]:3); writeln('}'); write(' C={'); for i:=1 to k do write(pC[i]:3); write('}'); end else begin write(' A={'); for i:=1 to pn1 do write(pa[i]:3); writeln('}'); write(' B={'); for i:=1 to pn2 do write(pB[i]:3); writeln('}'); write(' C={'); for i:=1 to k do write(pC[i]:3); write('}'); end; writeln; pk:=k; readln; end; Begin {тіло програми} k:=15; For i:=1 to k do U[i]:=i; Write ('Задайте множину A та ii границю'); write(' na=');REadln (na); For i:=1 to na do begin write ('A[',i,']= '); Readln(a[i]); end; Write ('Задайте множину В та ii границю'); write(' nb='); Readln (nb); For i:=1 to nb do begin write ('B[',i,']= '); Readln(b[i]); end; Write ('Задайте множину С та ii границю'); write(' nc='); Readln (nc); For i:=1 to nc do begin write ('C[',i,']= '); Readln(C[i]); end; Write ('Задайте множину D та ii границю'); write(' nd='); Readln (nd); For i:=1 to nd do begin write ('D[',i,']= '); Readln(D[i]); end; peret(A,B,bk1,na,nb,nk1); riz(U,bk1,bk2,k,nk1,nk2); riz(U,C,bk3,k,nc,nk3); riz(U,D,bk4,k,nD,nk4); peret(bk3,bk4,bk5,nk3,nk4,nk5); riz(U,bk5,bk6,k,nk5,nk6); obed(bk2,bk6,M,nk2,nk6,nm); end. Результати: Вхідні данні: A={2,3,5,8}, na=4 B={1,2,5,11}, nb=4 C={12,14,15}, nc=3 D={3,9,10,11,12}, nd=5 Отримані данні: М1= {2,5} М2= {1,3,4,6,7,8,9,10,11,12,13,14,15} М3= {1,2,3,4,5,6,7,8,9,10,11,13} М4={1,2,4,5,6,7,8,13,14,15} М5= {1,2,4,5,6,7,8,13} М6={3,9,10,11,12,14,15}
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Последнее изменение этой страницы: 2020-03-02; просмотров: 331; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.216.156 (0.008 с.) |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||