Ф Е Д Е РАЛ Ь Н О Е АГ Е Н Т С Т В О П О О БРАЗО В АН И Ю В О РО Н Е Ж С К И Й Г О С У Д АРС Т В Е Н Н Ы Й У Н И В Е РС ...
24 downloads
306 Views
216KB Size
Report
This content was uploaded by our users and we assume good faith they have the permission to share this book. If you own the copyright to this book and it is wrongfully on our website, we offer a simple DMCA procedure to remove your content from our site. Start by pressing the button below!
Report copyright / DMCA form
Ф Е Д Е РАЛ Ь Н О Е АГ Е Н Т С Т В О П О О БРАЗО В АН И Ю В О РО Н Е Ж С К И Й Г О С У Д АРС Т В Е Н Н Ы Й У Н И В Е РС И Т Е Т
Язык программированияPascal М ножес тва . Т ипизирова нны еконс та нты П ра ктикум С п ециа л ь но с ть 010101 (010100) М а тем а тика
В О Р О НЕ Ж 2005
2
У тверждено научно-методическимсоветомМ атематического ф акуль тета – ( 28 ф евраля2005 года, протокол № 6 )
С оставители: В асиль ев В .В ., Х ливненко Л .В .
П рактикумподготовлен накаф едре математического моделированияматематического ф акуль тетаВ оронежского государственного университета. Рекомендуетсядлястудентов вечернего отделенияматематического ф акуль тетаВ оронежского государственного университета.
3
М но ж ес тва относятсяк структурированнымтипамданных и представляю т собой наборы э лементов одного типа. П орядок э лементовпри описании не учитывается. Э лементы не нумерую тся. М ножестваисполь зую тсяв задачах, длякоторых важен ф акт наличияили отсутствияэ лементаво множестве себе подобных. В П аскале множествамогут состоять толь ко изэ лементовпорядковых типов. В се э лементы конкретного множествадолжны принадлежать одномутипу, который называетсяба зо вы м тип о м м но ж ес тва . М аксималь ное количество значений базового типаназываетсямощ ность ю множества. В качестве базового типамножествав П аскале допустимы толь ко типы, мощ ность которых не боль ш е 256. К роме того, номеранижней и верхней границ базового типадолжны находитсявдиапазоне 0..255. П оэ томубазовыми типами не могут быть типы Integer, LongInt, Word, Real. Д ляразличимости э лементы множествадолжны быть представлены уникаль ными значениями. М ножество, не содержащ ее э лементов, называетсяп у с ты м и обозначается[ ]. М ножественный тип в общ емвиде задаетсяследую щ имобразом: Set of ; Н апример, тип множества, состоящ его изциф р, можно описать так: Type Set of 0..9; С ра внение м но ж ес тв. Д вамножестваравны, если все их э лементы одинаковы, причемпорядок следованияэ лементовне имеет значения. Н апример, [1,2,3]=[3,1,2].
Резуль татомоперации сравненияA=B ( A ⊇ B ) будет true, если множество А вклю чает все э лементы множестваВ (В я в ля етс я п од м н ож ес тв ом А ). О тнош ение строгого вклю чения ( A ⊂ B ) можно сделать следую щ имобразом: (A>=B) And (AB). О п ера ции на дм но ж ес тва м и. В П аскале над множествами допустимы операции объединения, пересеченияи разности. Резуль татомоперации сло ж е н и я (объед ин ен ия ) множеств А и В является множество А +В , содержащ ее э лементы множествА и В (без д ублиров а н ия од ин а ков ых элем ен тов ). В се э лементы множествауникаль ны! Резуль татомоперации в ы чи тан и я (ра зн ос ти) множеств А и В является множество А - В , содержащ ее э лементы множестваА , не входящ ие во множество В . Резуль татомоперации ум н о ж е н и я (п ерес ечен ия ) множеств А и В является множество А * В , содержащ ее э лементы, входящ ие и во множество А , и во множество В . П роверить , п р и н адле ж и т ли э лемент множеству, можно с помощ ь ю знакомой намлогической операции IN: Элемент IN Множество Ко нс тру кто ро м м но ж ес тв называетсявыражение множественного ти-
4
па, которое может содержать операции объединения, разности и пересечения множеств. К онструктор множеств может стоять вправой части оператораприсваивания. Для того, чтобы д оба в итьили уд а литьэлем ен т, его п ред с та в ля ю т ка к м н ож ес тв о м ощ н ос ти 1. Для этого элем ен т берут в кв а д ра тн ые с кобки ! Д лядобавлениянового э лементаво множество имеетсяспециаль наяпроцедураINCLUDE (М н ожес тво, Э л ем ен т); Д ляисклю ченияэ лементаизмножестваслужит специаль наяпроцедура EXCLUDE (М н ожес тво, Э л ем ен т); И споль зуямножества, можно упростить реш ение задач обработки текстовой инф ормации. За да ча 1. Н апиш ите программу, котораяпроверяет, имею тсяли в слове повторяю щ иесябуквы. ♣ С ловомбудемсчитать последователь ность символов, оканчиваю щ ую ся точкой . Буквы словабудемзаписывать в массивизсимволов. П араллель но с вводомбукв будемф ормировать множество букв слова. Е сли очереднаявведеннаябукване входит всф ормированное натекущ ий момент множество букв, то буквавклю чаетсяво множество буквслова. В противномслучае логической переменной flag (хра н я щ ей отв ет н а в оп рос за д а чи) присваивается значение true. ♠ Program Repeat_Letters; Uses crt; Const Max_Len = 100; {максимальная длина слова} eot = '.'; {признак конца ввода} Type Word = array [1..Max_Len] of char; {тип слова} Var Sl: Word; {слово} Letters: set of char; {множество букв слова} i: 0..Max_Len; {счетчик букв в слове} flag: Boolean; {признак наличия повторяющихся букв} Begin Textbackground(7); Textcolor(blue); Clrscr; writeln('Введите слово (в конце поставьте точку): '); i:=0; Letters:=[]; flag:=false; repeat inc(i); read(Sl[i]); if not (Sl[i] in Letters) then Letters:=Letters + [Sl[i]] else if not flag then flag:=true; until (i=Max_Len) or (Sl[i]=eot); if flag then writeln('В слове есть повторяющиеся буквы! ') else writeln('В слове нет повторяющихся букв! '); readkey End.{Repeat_Letters}
5
Н аучимсяпроверять , входят ли э лементы одного множествавдругое. За да ча 2. П усть дан текст. В ерно ли, что внемимею тсябуквы, входящ ие в слово, задаваемое поль зователем? ♣ С ловоми текстомбудемсчитать последователь ность символов, оканчиваю щ ую сяточкой . П араллель но с вводомсловасф ормируеммножество его букв. Буквасловавклю чаетсяво множество букв, если онавстречаетсяв слове впервые. П осле заверш ениявводасловаизмножествабукв словаисклю чается точка. Почем у? П араллель но с вводомсимволовтекста, проверяетсяналичие вводимых символовво множестве букв слова. Е сли проверкадаст положитель ный резуль тат, то логической переменной flag (хра н я щ ей отв ет н а в оп рос за д а чи) присваиваетсязначение true. ♠ Program Words1; Uses crt; Const Max_Len = 100; {максимальная длина слов} eot = '.'; {признак конца ввода} Type Word = array [1..Max_Len] of char; {тип слова} Var Sl,Text: Word; {слово и текст} Letters: set of char; {множество букв слова} i: 0..Max_Len; {счетчик букв} flag: Boolean; {п ризн ак н ал ичия бу кв с л ова в текс те} Begin Textbackground(7); Textcolor(blue); Clrscr; {Ввод слова и инициализация множества букв слова} writeln('Введите слово (в конце поставьте точку): '); i:=0; Letters:=[]; repeat inc(i); read(Sl[i]); if Letters-[Sl[i]]=Letters then Letters:=Letters+[Sl[i]] until (i=Max_Len) or (Sl[i]=eot); Letters:=Letters-[eot]; {Ввод текста и проверка вхождения букв слова в текст} writeln('Введите текст (в конце поставьте точку): '); i:=0; flag:=false; repeat inc(i); read(Text[i]); if (not flag) and (Text[i] in Letters) then flag:=true; until (i=Max_Len) or (Text[i]=eot); if flag then writeln('В тексте есть буквы слова! ') else writeln('В тексте нет букв слова! '); readkey End.{Words1} ♣ П риведемвторой способ реш енияданной задачи. П араллель но с вводом
6
словаи текстаф ормируетсямножество буквсловаи множество букв текста. Е сли пересечение двух сф ормированных множествнепусто, то навопрос задачи надо дать положитель ный ответ. ♠ Program Words; Uses crt; Const Max_Len = 100; {максимальная длина слов} eot = '.'; {признак конца ввода} Type Word = array [1..Max_Len] of char; {тип слова} Var Sl,Text: Word; {слово и текст} Letters1, Letters2: set of char; {м н ожес тво бу кв с л ова} i: 0..Max_Len; {счетчик букв} flag: Boolean; {п ризн ак н ал ичия бу кв с л ова в текс те} Begin Textbackground(7); Textcolor(blue); Clrscr; {Ввод слова и инициализация множества букв слова} writeln('Введите слово (в конце поставьте точку): '); i:=0; Letters1:=[]; repeat inc(i); read(Sl[i]); if Letters1-[Sl[i]]=Letters1 then Letters1:=Letters1+[Sl[i]] until (i=Max_Len) or (Sl[i]=eot); Letters1:=Letters1-[eot]; {Ввод текста и инициализация множества букв текста} writeln('Введите текст (в конце поставьте точку): '); i:=0; Letters2:=[]; repeat inc(i); read(Text[i]); if Letters2-[Text[i]]=Letters2 then Letters2:=Letters2+[Text[i]] until (i=Max_Len) or (Text[i]=eot); Letters2:=Letters2-[eot]; if Letters1*Letters2[] then writeln('В тексте есть буквы слова! ') else writeln('В тексте нет букв слова! '); readkey End.{Repeat_Letters} За да ча 3. П усть дананепустаяпоследователь ность словизстрочных русских букв. М еждусоседними словами присутствует запятая, запоследним– точка. Н апечатай те в алф авитномпорядке гласные буквы, которые входят в каждое слово. ♣ Т екст изсловоф ормимввиде последователь ности символов, оканчиваю щ ей сяточкой . П ри просмотре очередного словатекстабудемф ормировать множество Gl_Sl его гласных букв. М ножество Gl_T гласных букв, входящ их во все словатекста, вначале совпадает с множествомгласных букв первого слова.
7
П ри просмотре n-го словатекстамножество Gl_T получаетсякак резуль тат пересечениямножестваGl_T гласных букв, входящ их во все словаот 1-го до n-1го, и множестваGl_Sl гласных буквn-го слова. Е сли после просмотравсех слов текстамножество Gl_T оказываетсянепусто, то его э лементы выводятсяв алф авитномпорядке. О бра тите в н им а н ие н а то, ка к п рос то в ыв ес ти элем ен ты м н ож ес тв а в а лф а в итн ом п оря д ке (с м . п рогра м м у)! ♠ Program Glas; Uses crt; Const Max_Len = 100; {максимальная длина текста} eot = '.'; {признак конца текста} eow = ','; {признак конца слова} Type TWord = array [1..Max_Len] of char; {тип слова} TGl = set of char; {тип множества гласных букв} Const Gl: TGl = ['а','о','ы','э','у','я','ё','и','е','ю']; Var Text: TWord; {слово} Gl_Sl, Gl_T: set of char; {м н ожес тво гл ас н ы хбу кв с л ова и вс ехс л ов} i,T_Len: 0..Max_Len; {счетчик букв и длина текста} f: boolean; {п ризн ак н ачал ьн ого зап ол н ен ия м н ожес тва Gl_W} ch:char; {счетчик цикла} Begin Textbackground(7); Textcolor(blue); Clrscr; {Ввод текста} writeln('Введите текст (в конце поставьте точку): '); i:=0; repeat inc(i); read(Text[i]) until (i=Max_Len) or (Text[i]=eot); if Text[i]=eot then T_Len:=i-1 else T_Len:=i; {Поиск гласных букв, входящих во все слова} Gl_T:=[]; f:=true; i:=1; repeat {пропуск запятых} while (i=0) and (n