М И Н И СТ Е РСТ В О О БРА ЗО В А Н И Я РО ССИ Й СК О Й Ф Е Д Е РА Ц И И В О РО Н Е Ж СК И Й Г О СУ Д А РСТ В Е Н Н ЫЙ У Н И В Е РСИ Т Е Т
О .Ф .У скова О .Д .Гор бенко
О ЛИ М П И А Д Н ЫЕ ЗА Д А ЧИ П О П РО ГРА М М И РО В А Н И Ю . ЛУ ЧШ И Е РЕ Ш Е Н И Я Часть 5 У чебноеиздание
В О РО Н Е Ж – 2003
80
Б Б К 32.97 У Д К 681.3
О ли м п и ад н ы е зад ачи п о п рограм м и рован и ю . Л у чш и е ре ш е н и я. Ч ас ть 5.: У че бн ое и зд ан и е / О .Ф .У с кова, О .Д .Горбе н ко – В орон е ж: О О О ПФ «Д жу д и », 2003 –80 с.
Работа вы п олн е н а в рам ках Ф е д е ральн ой це ле вой п рограм м ы «Ин те граци я н ау ки и вы сш е го образован и я» п о н ап равле н и ю 2.7 «П рове д е н и е н ау чн ы х кон ку рс ов, ш кол и кон фе ре н ци й д ля с ту д е н тов, аспи ран тов, м олод ы х п ре п од авате ле й и с отру д н и ков ву зов и н ау чн ы х орган и заци й»(п рое кт Т0140). Изд ае тс я п ри фи н ан с овой п од д е ржке О О О ПФ «Д жу д и ». Б Б К 32.97 У Д К 681.3 Пе чатае тся п о ре ком е н д аци и ре д акци он н о-и зд ате льс кого сове та факу льте та п ри клад н ой м ате м ати ки , и н форм ати ки и м е хан и ки В орон е жс кого госун и ве рс и те та Ре це н зе н т–кан д и д ат фи зи ко-м ате м ати че ски хн ау к, д оце н т Л .С.М и ловс кая
Р абот а в ы пол н е н а в рам ках Ф е де рал ьн ой ц е ле в ой програ м м ы «Ин т е грац ия н ауки и в ы сш е гообразован ия»пон аправ ле н ию 2.7 «П ров е де н ие н аучн ы х кон курсов , школ и кон фе ре н ц ий дл я ст уде н т ов , аспиран т ов , м олоды х пре подав ат е л е й и сот рудн иков в узов и н аучн ы х орган изац ий » (прое кт Т0140). Издае т ся при фин ан сов ой подде рж ке ООО П Ф «Д ж уди». А вторы : д оце н т У с кова О льга Ф е д оровн а, д оце н тГорбе н ко О ле г Д ан и лови ч
О ли м п и ад н ы е зад ачи п о п рограм м и рован и ю . Л у чш и е ре ш е н и я. Ч ас ть 5.: У че бн ое и зд ан и е / О .Ф .У с кова, О .Д .Горбе н ко – В орон е ж: О О О ПФ «Д жу д и », 2003 –80 с. Ре д актор А н д ре йчи кова Л .А . О тп е чатан о в О О О П Ф "Д жу д и ". Ти раж 200 экз. Л и це н зи я № ПЛ Д 37-25, г.В орон е ж, у л.Свобод ы , 75
ISBN 5-815-047-0 © В орон е жски й у н и ве рси те т © Ф е д е ральн ая це ле вая п рограм м а «Ин те граци я» © О .Ф .У с кова, О .Д .Горбе н ко © О О О ПФ «Д жу д и »
79
которая п од счи ты вае т чи сло всевозм ожн ы х вари ан тов разби е н и я чи с ла m н а n слагае м ы х. В от код н а язы ке С и з с ам ой п рограм м ы :
П РЕ Д И СЛО В И Е
add=1; j=1; И з д ание п од г от овле но в рам ках п рое кт а Т0140 Ц е ле вой Ф е д е ральной п рог рам мы "Ин т е грац ия н ауки и в ы сше го образован ия» по н аправ ле н ию 2.7 «П ров е де н ие н аучн ы х кон курсов , ш кол и кон фе ре н ц ий дл я ст уде н т ов , а спира н т ов , м олоды х пре подав ат е ле й и сот рудн иков в узов и н аучн ы х орган изац ий »". Оно орие нт ировано в основном на участ ников р егио н а л ь н о й о т кр ы т о й ст уде н ческо й ш ко л ы -о л им пиа ды по пр о гр а м м ир о ва н ию ико м пь ю т ер н о м у м о дел ир о ва н ию , но м оже т бы т ь т акже п оле з но ш кольникам ст арш их классов, ст уд е нт ам и учит е лям инф орм ат ики общ е образ оват е льны х и п роф ильны х уче бны х з аве д е ний .
While (j<=(n-1)) { add=add*(m+j)/j; j++; }
Орг аниз ат орам и ш колы -олим п иад ы я вля ют ся Вороне жский г осуниве рсит е т , Вороне жский г осуд арст ве нны й п е д аг ог иче ский униве рсит е т , Вороне жская г осуд арст ве нная т е хнолог иче ская акад е м ия, Ф е д е ральны й научно-п роиз вод ст ве нны й це нт р «Вороне жский НИ И связ и», Вороне жский ре г иональны й це нт р инф орм ат из ации вы сш е й ш колы , Ц е нт р п равовой инф орм ат из ации М инист е рст ва юст иции Россий ской Ф е д е рации п о Вороне жской област и. В п е рвой част и рассмат ривались з ад ачи п ре д ш е ст вовавш их олим п иад п о инф ормат ике раз личног о уровня (ф акульт е т ских, вуз овских, м е жвуз овских, ре г иональны х, ф е д е ральны х). Не кот оры е з ад ачи п риве д е ны с ре ш е ниями, в основном раз работ анны ми ст уд е нт ам и ф акульт е т а п риклад ной м ат е м ат ики и м е ханики Вороне жског о униве рсит е т а, ст авш ими в свое вре мя п риз е рами эт их олим п иад . Во вт орой част и п ом им о з ад ач, п ре д ложе нны х на олим п иад ах раз личног о уровня, бы ли п ре д ст авле ны м ат е риалы п е рвог о (з аочног о) т ура ш колы -олим п иад ы . В т ре т ье й част и п ре д ст авле ны мат е риалы Вт орой от кры т ой ре г иональной ст уд е нче ской ш колы - олимп иад ы п о п рог рамм ированию и комп ьют е рному м од е лированию. Че т ве рт ая част ь д оп олняе т их анализ ом ре з ульт ат ов п е рвог о т ура и лучш им и ре ш е ниями п обе д ит е ле й п е рвог о т ура. В п ят ой част и п ре д ст авле ны ре з ульт ат ы вт орог о т ура Вт орой от кры т ой ре г иональной ст уд е нче ской ш колы -олим п иад ы по п рог рамм ированию и комп ьют е рномум од е лированию и из бранны е ре ш е ния з ад ач. 78
3
Вороне жский униве рсит е т , на баз е кот орог о п ровод ит ся ш кола-олим п иад а, вы ражае т п риз нат е льност ь ООО П Ф "Д жуд и" (д ире кт ор А нд ре й Василье вич А нд ре й чиков), оказ авш е му се рье з ную п од д е ржку в из д ании эт ой книг и.
4 201000000… -> 201110000… 4 200200000… -> 222200000… 4 200102000… -> 211112000… 4 200100200… -> 201110200…
ИТО ГИ В ТО РО Й РЕ ГИО Н А Л Ь Н О Й О ТК РЫ ТО Й СТУ Д Е Н Ч Е СК О Й Ш К О Л Ы –О Л ИМ ПИА Д Ы ПО ПРО ГРА М М ИРО В А Н ИЮ И К О М ПЬ Ю ТЕ РН О М У М О Д Е Л ИРО В А Н ИЮ Прое кт «О ткры тая ре ги он альн ая сту д е н че ская ш кола –оли м п и ад а п о п рограм м и рован и ю и ком п ью те рн ом у м од е ли рован и ю », разработан н ы й в рам ках н ап равле н и я 2.7 «Прове д е н и е н ау чн ы х кон ку рсов, ш кол и кон фе ре н ци й д ля сту д е н тов, асп и ран тов, м олод ы х п ре п од авате ле й и сотру д н и ков ву зов и н ау чн ы х орган и заци й»фе д е ральн ой це ле вой п рограм м ы «Госуд арс тве н н ая п од д е ржка и н те граци и вы сш е го образован и я и фу н д ам е н тальн ой н ау ки » д ва год а стан ови лся п обе д и те ле м гран тов п рограм м ы (в 2001 г. ре ги с траци он н ы й н ом е р Р0054 и в 2002 г. ре ги страци он н ы й н ом е р Т0140). Головн ой орган и заци е й п ри п рове д е н и и ш колы –оли м п и ад ы вы сту п ал В орон е жс ки й госуд арс тве н н ы й у н и ве рс и те т. Сп и сок сои сполн и те ле й ш колы –оли м п и ад ы в 2002 г. н е с колько и зм е н и лся и зн ачи те льн о расш и ри лся. Е сли в 2001 год у сои сп олн и те лям и бы ли В ы чи с ли те льн ы й це н тр и м . А .А . Д ород н и цы н а РА Н и В орон е жски й госуд арс тве н н ы й п е д агоги че с ки й у н и ве рсите т (В ГПУ ), то в 2002 год у сои с п олн и те лям и п ом и м о В ГПУ являли сь В орон е жс кая госуд арстве н н ая те хн ологи че с кая акад е м и я, Ф е д е ральн ы й н ау чн о–п рои звод с тве н н ы й це н тр «В орон е жски й Н ИИ связи », В орон е жс ки й ре ги он альн ы й це н тр и н форм ати заци и вы сш е й ш колы , це н тр п равовой и н форм ати ки М и н и сте рс тва юс ти ци и РФ п о В орон е жской облас ти . Б е з фи н ан с овой п од д е ржки Ф ЦП «Ин те граци я» и облас тн ой А д м и н и страци и п рове д е н и е ш колы –оли м п и ад ы бы ло бы н е возм ожн о. Прове д е н и е откры ты х ре ги он альн ы х оли м п и ад бази ру е тся н а м н оголе тн е м оп ы те орган и заци и и п рове д е н и я с ту д е н че с ки х оли м п и ад п о и н форм ати ке и п рограм м и рован и ю разли чн ого у ровн я: от факу льте тс ки х д о м е жву зовски х. Только за п осле д н и е три год а бы ло п рове д е н о ш е сть таки х состязан и й, вклю чая вн у три ву зовс ки е и ре ги он альн ы е . 4
5) Ф у н кци и п е ре бора Ф у н кци и п е ре бора ос н ован ы н а п е ре боре вс е возм ожн ы х вари ан тов и н ахожд е н и я общ е й части те х вари ан тов, которы е у д овле творяю т те ку щ е м у ряд у . Пу сть UnKnowW –это чи сло н е и зве с тн ы х “бе лы х” блоков. Пе ре бор осущ е ствляе тся с ле д у ю щ и м образом : Пе ре бор1. Пу сть UnKnowEmpty1 – это чи сло бе лы х кле ток, н е вход ящ и х в п олн ы е “бе лы е ” блоки п лю с чи сло н е разгад ан н ы х бе лы х кле ток. В се вари ан ты расс м атри ваю тс я п у те м рассм отре н и я всевозм ожн ы х вари ан тов разби е н и я чи сла UnKnowEmpty1 н а UnKnowW слагае м ы х, н е расс м атри вая н у ле вы е слагае м ы е и у чи ты вая п оряд ок. Э та фу н кци я у чи ты вае т п ри п ос трое н и и вари ан тов, что м е жд у “че рн ы м и ” блокам и д олжн а бы ть хотя бы од н а “бе лая” кле тка, н о н е у чи ты вае т “бе лы е ” кле тки , н е п ри н ад ле жащ и е п олн ы м “бе лы м ” блокам . Пе ре бор2. Пу сть UnKnowEmpty2 – это чи с ло н е разгад ан н ы х бе лы х кле ток. В се вари ан ты расс м атри ваю тся п у те м рассм отре н и я всевозм ожн ы х вари ан тов разби е н и я чи с ла UnKnowEmpty2 н а UnKnowW слагае м ы х, расс м атри вая н у ле вы е слагае м ы е и у чи ты вая п оряд ок. Э та фу н кци я н е у чи ты вае т п ри п ос трое н и и вари ан тов, что м е жд у “че рн ы м и ” блокам и д олжн а бы ть хотя бы од н а “бе лая” кле тка, н о у чи ты вае т “бе лы е ” кле тки , н е п ри н ад ле жащ и е п олн ы м “бе лы м ” блокам .
6) Ч и сло вари ан тов. Под сче т чи с ла вари ан тов д ля фу н кци й п е ре бора осущ е с твляе тся фу н кци е й, 77
Счи тае м с колько вари ан тов н ад о п е ре брать фу н кци и п е ре бор1 (add1) и п е ре бор2 (add2) (п у н кт6). Ес ли min(add1,add2)>MAX_TIMES, то п е ре ход и м к п у н кту 2. Ес ли add1
MAX_TIMES, то вы п олн яе м сле д у ю щ и е д е йс тви я. Зап ом и н ае м расположе н и е п у с ты х кле ток. Сам у ю ле ву ю ве рхн ю ю п у сту ю кле тку закраш и вае м в че рн ы й цве т. T=1. Пока н е тош и бки и е стьп у сты е кле тки , вы зы вае м фу н кци ю главн ого ре ш ате ля. Ес ли н е т ош и бки , п е ре ход и м к п у н кту 6. Сбрасы вае м ош и бку и вос стан авли вае м п у с ты е кле тки . Сам у ю ле ву ю ве рхн ю ю п у сту ю кле тку закраш и вае м в бе лы й цве т. T=1. Пока н е тош и бки и е стьп у сты е кле тки , вы зы вае м фу н кци ю главн ого ре ш ате ля. В озвращ ае м код ош и бки .
4) Л оги че ская фу н кци я. Ид е я этой фу н кци и заклю чае тся в рас см отре н и и н е которы х час тн ы х слу чае в. В от п ри м е ры , которы е оп и сы ваю тэти н е которы е час то возн и каю щ и е с лу чаи : 4 210000000… -> 211112000… 76
К ак и п е рвая, вторая ре ги он альн ая откры тая сту д е н че с кая ш кола – оли м п и ад а п о п рограм м и рован и ю и ком п ью те рн ом у м од е ли рован и я п ровод и лас ь в д ва ту ра. В п е рвом заочн ом ту ре , которы й п роход и л в те ле ком м у н и каци он н ом ре жи м е , в котором м огли соре вн оваться все же лаю щ и е , п ри н яло у части е свы ш е 600 с ту д е н тов В орон е жской, В олгоград с кой, Б е лгород ской, Л и п е цкой, Ту льс кой, Там бовской облас те й, сре д и н и х боле е 200 сту д е н тов факу льте та ПМ М В ГУ . В отли чи е от п рош логод н е й оли м п и ад ы н ы н е ш н яя и м е ла д ве секци и : – с е кци я п рограм м и рован и я и и н форм аци он н ого м од е ли рован и я; – с е кци я п ри клад н ого п рограм м н ого обе сп е че н и я. При п рове д е н и и п ракти че с кой час ти п е рвой секци и ш колы – оли м п и ад ы бы ла зад е йствован а лабораторн ая база факу льте та ПМ М В ГУ и ком п ью те рн ы е клас сы у н и ве рсите тского вы чи с ли те льн ого це н тра. Работа второй с е кци и п роход и ла в В орон е жском госуд арстве н н ом п е д агоги че с ком у н и ве рсите те . В се м ате ри алы ш колы –оли м п и ад ы (н овости , п оряд ок п рове д е н и я обои х ту ров, с п и ски чле н ов оргком и те та, жю ри , у частн и ков, зад ан и я ту ров, ре зу льтаты и д р.) ре гу лярн о разм е щ али сь н а с тран и цах WEB–сайта п о ад ре су WWW.t0140.fromru.com. Итоги ос н овн ой секци и п рограм м и рован и я и и н форм аци он н ого м од е ли рован и я п од вод и ли сь п о н ом и н аци ям : «Пе рвоку рсни ки », «Сту д е н ты , д ля которы х и н форм ати ка являе тся п рофи ли ру ю щ е й д и сци п ли н ой», «Сту д е н ты , д ля которы х и н форм ати ка являе тся общ е образовате льн ой д и с ци п ли н ой», «Ин огород н и е сту д е н ты », «Сту д е н ты вое н н ы х ву зов», «Сту д е н тки ». По и тогам обои х ту ров ш колы –оли м п и ад ы сту д е н ты факу льте та ПМ М В ГУ од е ржали у бе д и те льн у ю п обе д у . Сре д и 64 с ту д е н тов, п рош е д ш и х во 2ой ту р в осн овн ой н ом и н аци и , п олови н а – это обу чаю щ и е с я н а факу льте те ПМ М , сре д и 26 п е рвоку рс н и ков –8 с ту д е н тов ПМ М . Н агражд е н и е сту д е н тов ворон е жски х ву зов, п оказавш и х хорош и е ре зу льтаты в п е рвом ту ре , п роход и ло 30 сен тября 2002 г. н а п ле н арн ом засед ан и и м е жд у н арод н ой кон фе ре н ци и «Те ори я кон фли ктов и е е п ри ложе н и я». Сре д и н агражд е н н ы х бы ли сту д е н ты В ГТА (4 че лове ка), В ГТУ (4 че лове ка), В ГПУ (7 че лове к), м атфака В ГУ (2 че лове ка), фи зфака В ГУ (2 че лове ка) и сту д е н ты ПМ М В ГУ И. Л ари н , С. Си д оре н ко, В . Б арабаш , Д . 5
Скри п че н ков, В . Погоре ле н ко, А . Сороки н , В . А н д ре йчи ков, Д . М у хое д ов, Н . К оржов, С. Соколов, Д . М ам он ов, Э . М ам е д ов, Е . Щ е рбаков, В . Гайд ай, Д . В ы рос тков, С. П олян ски й, С. П рон и н , А . Тарасова, А . Б ойче н ко, Л . Тю н и н а и д р. Д октор фи зи ко-м ате м ати че ски х н ау к, п рофе с сор В олгоград ского те хн и че ского у н и ве рсите та Ге н н ад и й Ильи ч Б ры згали н н аград и л сту д е н тов ворон е жс ки х ву зов, п оказавш и х хорош и е ре зу льтаты в п е рвом ту ре , свое й м он ографи е й «Ч у д е с н ы й тайн ы й клю ч» (н овое п рочте н и е «Слова о п олку Игоре ве », оп и раю щ е е ся н а у н и кальн у ю закон ом е рн ос ть, обн ару же н н у ю в с трое н и и п оэм ы ). Итоги п е рвого ту ра рас с м атри вали сь н а зас е д ан и и У че н ого с ове та факу льте та. При зе рам бы ли вру че н ы суве н и ры . В ы сту п и вш и е н а зас е д ан и и сове та д е кан , п роф. А .И. Ш аш ки н , п роф. В .Г. Зад орожн и й, п роф. М .А . А рте м ов, д оц. И.Б . Ру сс м ан те п ло п озд рави ли п обе д и те ле й и п оже лали у сп е ха оли м п и ад н ом у д ви же н и ю . В рам ках ш колы –оли м п и ад ы п рове д е н кон ку рсн а лу чш у ю эм бле м у . Е го п обе д и те ль – м аги с тр 1 ку рса А рте м е н ко Л ю д м и ла н агражд е н а д е н е жн ой п ре м и е й и з сре д с тв Ф ЦП «Ин те граци я». При зы п обе д и те лям п ре д остави ли и зве с тн ы е ком п ью те рн ы е фи рм ы , ру ковод и те ли которы х – вы п у скн и ки факу льте та ПМ М В ГУ , в п рош лом п обе д и те ли п од обн ы х оли м п и ад и , как п рави ло, отли чн и ки у че бы : Д ан ьш и н Б ори сИван ови ч (ком п ан и я «Ин форм связь-Ч е рн озе м ье »), Л ап ы ги н Д м и три й Ру д ольфови ч (ЗА О «Ре т»), Б ату е в Игорь Ю рье ви ч (OCS-Ю г), Б ойче н ко Игорь А ле ксее ви ч (ЗА О «Ре ле кс »), Си сев А н д ре й Пе трови ч (Изд ате льс тво «Рад и оСофт», М осква), Пе ш ков А н д ре й В ас и лье ви ч (Relax-UZ, СШ А ), М ахортов Се рге й Д м и три е ви ч (О О О «Э ксп е рт»). При зы д ля н ом и н аци и «Сту д е н тки » вы д е ли ла н аш п остоян н ы й сп он сор в те че н и е че ты ре х п осле д н и х ле т и с п ан ская кос м е ти че ская фи рм а Ninelle (бре н д -м е н е д же р п о Ч ЦР Гали н а Иван ова). Ин форм аци он н у ю п од д е ржку В торой откры той ре ги он альн ой с ту д е н че с кой ш коле –оли м п и ад е оказали с ре д ства м ассовой и н форм аци и : В орон е жс кое госуд арс тве н н ое рад и о (В .И. Н овохатская, автор и ве д у щ ая п е ре д ачи «Д и алоги о главн ом »), газе та «Изве сти я» (А . Сороки н с татья «По 6
(п у н кт 2). T=1; Пока е с ть п у сты е кле тки и н е т ош и бки , вы зы вае м фу н кци ю главн ого ре ш ате ля (п у н кт 3). Зап и сы вае м п олу че н н ы е д ан н ы е и ос вобожд ае м п ам ять.
2). М е тод “п е ре сече н и я”. Н ад кажд ой с трокой и кажд ы м столбцом вы п олн яе м с ле д у ю щ и е д е йс тви я: Проход и м ве ктор отн ачала д о кон ца и зап и сы вае м п равы е гран и цы кажд ой и з гру п п (он и бу д у тм и н и м альн ы м и ). Проход и м ве ктор откон ца к н ачалу и зап и сы вае м ле вы е гран и цы кажд ой и з гру п п (он и бу д у т м акси м альн ы м и ). Те п е рь соп ос тавляе м д ля кажд ой гру п п ы е е м и н и м альн у ю п раву ю Rmin и м аксим альн у ю ле ву ю Lmax гран и цы . Е сли Rmin>=Lmax, то кле тки с н ом е рам и i, Lmax<=i<=Rmin закраш и вае м в че рн ы й цве т.
3). Главн ы й ре ш ате ль. Проход и м п о всем с трокам и столбцам и вы п олн яе м сле д у ю щ и е д е йс тви я. Ес ли ряд ре ш е н и ли н е и зм е н ялся, п осле того как к ряд у п ри м е н ялась фу н кци я п е ре бора, то п е ре ход и м к с ле д у ю щ е м у ряд у и оп ять д е лае м п рове рку . Е сли ош и бка п е ре ход и м к п у н кту 6 При м е н яе м к ряд у логи че ску ю фу н кци ю (п у н кт 4). Ес ли ряд ре ш е н , то п е ре ход и м к сле д у ю щ е м у ряд у и к п у н кту 1.1. Д ля те ку щ е го ряд а п од счи ты вае м с ле д у ю щ и е чи сла: а) К оли че с тво и зве с тн ы х бе лы х блоков. б) К оли че с тво бе лы х кле ток в и зве стн ы х бе лы х блоках. в) К оли че с тво бе лы хкле ток. Ес ли коли че с тво бе лы хкле ток больш е д оп у с ти м ого. то это ош и бка и п е ре ход и м к п у н кту 5. 75
од н ой “бе лой” кле ткой.
II. О бозн аче н и я и те рм и н ологи я. Гру п п ам и и ли блокам и бу д е м н азы вать н е сколько п од ряд и д у щ и х кле ток од н ого и того же цве та. Е с ли цве тн е у казан , бу д е м п олагать, что он че рн ы й. В е ктора Vj и Gi бу д е м н азы вать ве кторам и гру п п и ли блоков. Ес ли цве т кле тки е щ е н е и зве сте н , бу д е м н азы вать е е п у с той, а чи словое зн аче н и е , соотве тству ю щ е е п у стой кле тке бу д е т0. Строки и столбцы бу д е м н азы вать ряд ам и . Ч е ре з Т обозн ачи м м акси м альн ое чи сло вари ан тов д ля фу н кци й п е ре бора, которое м оже ти зм е н яться. А че ре з MAX_TIMES обозн ачи м тоже , что и че ре з Т, только это чи сло н е м оже т и зм е н яться.
III. А лгори тм . Сд е лае м од н о зам е чан и е п о п овод у м атри цы А . Д ля у п рощ е н и я алгори тм ов п е ре бора и логи че с ки х фу н кци й п ре образу е м м атри цу А , окайм и в е е бе лы м и кле ткам и (то е сть п олу чи м вм е сто м атри цы mxn м атри цу (m+2)x(n+2)). Э то п ре образован и е д ас т п раво н ам счи тать, что п е ре д и п ос ле лю бого блока е сть хотя бы од н а бе лая кле тка.
п ре зи д е н тс ком у гран ту »), газе та «М олод ой ком м у н ар» (зам е тка О . Е м е льян е н ко «Талан там н ад о п ом огать»), газе та «Ф @ку льте т ПМ М » (№ 9, № 10, гл. ре д актор с т. п ре п . К аф. М М ИО И.Л . К аш и ри н а), газе та «У чи те ль» В орон е жского госуд арс тве н н ого п е д агоги че ского у н и ве рсите та, газе та «За н ау ку » В орон е жской госуд арстве н н ой те хн ологи че с кой акад е м и и , ан гли йс кая ве рс и я газе ты «В орон е жс ки й у н и ве рс и те т». Се рье зн у ю п од д е ржку в п у бли каци и че ты ре х час те й у че бн ого и зд ан и я «О ли м п и ад н ы е зад ачи п о п рограм м и рован и ю . Л у чш и е ре ш е н и я» оказало О О О ПФ «Д жу д и ». К ажд ая час ть и зд ан а ти ражом 200 экз. В се эти кн и ги бы ли п од аре н ы у частн и кам 2 ту ра ш колы – оли м п и ад ы . Пе рвы е д ве части п од готовле н ы п о м ате ри алам п е рвой ш колы – оли м п и ад ы 2001 г. В п е рвой части рас см атри вали сь зад ачи п ре д ш е с твовавш и х оли м п и ад п о и н форм ати ке разли чн ого у ровн я (факу льте тски х, ву зовс ки х, м е жву зовски х, ре ги он альн ы х, фе д е ральн ы х). Н е которы е зад ачи п ри ве д е н ы с ре ш е н и ям и , в ос н овн ом разработан н ы м и сту д е н там и факу льте та ПМ М В ГУ . В о второй час ти п ом и м о зад ач, п ре д ложе н н ы х н а оли м п и ад ах разли чн ого у ровн я бы ли п ре д ставле н ы м ате ри алы п е рвого (заочн ого) ту ра п е рвой ш колы – оли м п и ад ы 2001 год а. А вторы ре ш е н и й зад ач, п ре д ставле н н ы х в п е рвой и второй час тях Поляков А ., М хи тарян Л ., Яку бе н ко А ., В ахти н А ., Си гае ва О ., Польш акова Н ., Ш ахова Н ., Ром ащ е н ко А ., Глад ы ш е в О ., К ли н ски х А ., Ш и ряе в М ., К олбе ш ки н Д . В тре тье й час ти п ре д с тавле н ы м ате ри алы В торой откры той ре ги он альн ой сту д е н че с кой ш колы – оли м п и ад ы п о п рограм м и рован и ю и ком п ью те рн ом у м од е ли рован и ю . Ч е тве ртая час ть д оп олн яе т и х ан али зом ре зу льтатов п е рвого ту ра и лу чш и м и ре ш е н и ям и п обе д и те ле й п е рвого ту ра: Ш али тки н А .(н ом и н аци я «Пе рвоку рсни ки », зад ача «М н ожи те ли и фактори алы »), Щ е рбаков Е . (зад ача «Гори зон ты
1). Главн ы й блок. Ин и ци али зи ру е м все с тру кту ры д ан н ы хн ачальн ы м и зн аче н и ям и . Прове ряе м н а ош и бки ве кторы гру п п Gi и Vi : а) Гру п п ы у казан н ы е в ве кторе д олжн ы п ом е щ атьс я в ряд е свы п олн е н и е м у слови й, у казан н ы х в у слови и зад ачи . б) Су м м а д ли н гру п п “че рн ы х” гру п п п о с трокам д олжн а бы ть равн а сум м е д ли н “че рн ы х” гру п п п о столбцам . При м е н яе м к кажд ой с троке и к кажд ом у столбцу м е тод “п е ре сече н и я” 74
д ля архи те ктора»),
Скри п че н ков Д . (зад ача «А втобу сы »), В ы ростков Д . (зад ача «Л аби ри н т»), А н д ре йчи ков В . (зад ача «А ри фм е ти ка») и д р. В че тве ртой части п ри ве д е н а English version п оложе н и я о п е рвом ту ре и вари ан тов зад ан и й с е кци и п рограм м и рован и я и и н форм аци он н ого м од е ли рован и я. Пе ре вод вы п олн е н м аги с трам и ПМ М п е рвого год а обу че н и я Су стре товы м Д ., Б рон яки н ы м Д . и Х атько В . п од ру ковод с твом д октора фи лологи че ски х н ау к М .А . Сте рн и н ой. Зд е сь же п ом е щ е н сп и с ок у частн и ков второго ту ра вс е х н ом и н аци й и с е кци й В торой ш колы – оли м п и ад ы и спи с ок п обе д и те ле й секци и п ри клад н ого п рограм м н ого обе с п е че н и я и с п и сок п обе д и те ле й н ом и н аци и 7
«Пе рвоку рс н и ки » К ак и в п ре д ы д у щ е й ш коле оли м п и ад е 2001 год а, к орган и заци и и п рове д е н и ю н ы н е ш н е й оли м п и ад ы бы ли п ри вле че н ы лу чш и е сту д е н ты факу льте та ПМ М , как п рави ло, п обе д и те ли п рош лы х оли м п и ад : – Поляков А н д ре й (м аги с тран т второго год а обу че н и я, с оросовс ки й сту д е н т, н е од н ократн ы й п обе д и те ль м е жву зовски х сту д е н че с ки х оли м п и ад , п ри зе р че тве рть фи н ала м и рового п е рве н ства п о п рограм м и рован и ю , отли чн и к у че бы , с ти п е н д и ат Це н тральн о – Ч е рн озе м н ого п ре д с тави те льс тва корп ораци и «Пару с»); – Яку бе н ко А н д ре й (м аги с тран т второго год а обу че н и я, н е од н ократн ы й п обе д и те ль м е жву зовски х с ту д е н че ски х оли м п и ад , п ри зе р че тве рть фи н ала м и рового п е рве н ства п о п рограм м и рован и ю , отли чн и к у че бы , сти п е н д и ат Це н тральн о –Ч е рн озе м н ого п ре д с тави те льс тва корп ораци и «Пару с»); – М хи тарян Л у син е (м аги стран т второго год а обу че н и я, п обе д и те ль у н и ве рсите тс кой с ту д е н че ской оли м п и ад ы , отли чн и ца у че бы ); – Е фре м ов М аксим (м аги стран т второго год а обу че н и я, п обе д и те ль факу льте тс кой сту д е н че ской оли м п и ад ы , отли чн и к у че бы ). Сту д е н ты факу льте та ПМ М В ГУ у спе ш н о вы сту п и ли как н а Пе рвой, так и н а В торой ш коле – оли м п и ад е . Л у чш и м сре д и п е рвоку рс н и ков бы л с ре зу льтатом 10 баллов и з 10 возм ожн ы х Щ е рбаков Е вге н и й; М ам е д ов Э м и н и М ам он ов Д м и три й, н абрав 7 баллов, зан яли 2-ое м е сто; Ш али тки н А н д ре й вы ш е л н а 3-е м е с то с ре зу льтатом 5 баллов. Пе рвое м е с то сре д и п е рвоку рс н и ц зан яла Тю н и н а Л ю д м и ла. Ин те ре сно отм е ти ть, что Щ е рбаков Е ., Ш али тки н А . И Тю н и н а Л . бы ли п ри н яты н а факу льте т ПМ М В ГУ вн е кон ку рс а как п обе д и те ли оли м п и ад ы п о и н форм ати ке сре д и ш кольн и ков. В секци и «При клад н ое п рограм м н ое обе спе че н и е » лу чш и м и сре д и с ту д е н тов ПМ М бы ли сту д е н ты 2 ку рс а Павлов Л е он и д и К оржов Н и колай, которы е зан яли соотве тстве н н о 2-ое и 3-е м е сто. В этой с е кци и бе зу словн ы м и ли д е рам и бы ли с ту д е н ты В ГПУ . В о второй ту р в осн овн ой н ом и н аци и п рош ли с ле д у ю щ и е с ту д е н ты ПМ М :
8
inc (i, k); end; dec(i, k-1); for i:=i to NumMice do L:=(L + step - 1) mod i + 1; end else L:=NumMice;
write ('Н ад о н ачать см ы ш и п од н ом е ром '); writeln ((NumMice + NumWhite - L) mod NumMice + 1,'.'); writeln ('Н ажм и те esc, чтобы вы йти .'); while not (readkey#27) do; End. П р ог р ам м а№ 10 Я понский кр оссвор д А втор ре ш е н и я - Ла рин Игорь, которы й у чи тся н а 2-ом ку рс е факу льте та ПМ М . В связи с больш и м объе м ом код а п рограм м ы п ри ве д е м только алгори тм ре ш е н и я, а с ам и сход н ы й код п рограм м ы м ожн о п олу чи ть у автора. I. Постан овка зад ачи . Яп он ски й кроссворд п ре д с тавляе т с обой заш и фрован н у ю м атри цу A (mxn), п оля которой м огу т п ри н и м ать зн аче н и я ли бо 1 (п оле закраш е н о в че рн ы й цве т), ли бо 2 (п оле закраш е н о в бе лы й цве т). i-ой с троке (i=1,..,m) стави тся в соотве тстви е ве ктор чи с е лGi, а j-ом у с толбцу с тави тся в соотве тстви е ве ктор чи с е л Vj. К оли че ство чи с е л в ве кторе Gi п оказы вае т, сколько н е п ре ры вн ы х гру п п “че рн ы х” кле ток н аход и тс я в i-ой с троке , а зн аче н и е кажд ого чи с ла какой д ли н ы кажд ая и з гру п п , п ри п росм отре с ле ва н ап раво. В е ктор Vj сод е ржи т ту же и н форм аци ю о j-ом столбце , только н ап равле н и е п рос м отра стан ови тся све рху вн и з. Гру п п ы “че рн ы х” кле ток разд е ле н ы п о крайн е й м е ре
73
(2) он о бу д е тсле д у ю щ и м : W = (L(s, n) + f - 2) mod n +1 (7). Н айд е м те п е рь f, е сли и зве с тн о W. Из (7) п олу чи м , что W=L(s, n) + f –2 + ni +1, гд е i лю бое це лое чи сло. А зн ачи т f = (W + n –L(s, n)) mod n + 1 (8). Н а форм у лах (2), (6), (8) и ос н ован а вс я п рограм м а, а также н а том , что L(s, 1) = 1. Program KMice; (* А втор –Л ари н Игорь, с ту д е н т2 ку рса факу льте та ПМ М *) Uses Crt; Var NumMIce, Step, L, i, NumWhite, k: longint; Begin ClrScr; write ('В ве д и те чи с ло м ы ш е й: ');
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
А н д ре йчи ков В .А . Б арабаш В .В . Б е ле н ко А . Б ойче н ко А .И. В лас ов А .В . В ы рос тков Д .В . Гайд ай В .А . Гром ов С.А . К оржов Н .Е . Л ари н И.А . М атве е в Н .А . М атю ш е вс ки й К .Л . М у хое д ов Д .С. Погоре ле н ко В .А . Полян ски й В .В . Прон и н С.С.
17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32.
Прос и н С.А . Си д оре н ко С.В . Скри п че н ков Д .А . Соколов С.А . Сороки н А .И. Тарас ова А .С. У сун ов А .В . Ф и ли п цов А .М . Н ови ков А . Ш и ряе в М .М . К ли н ски х А . М и тогу з Д . Си тн и кова Е . Ж оров М . Ш е стоп алова Е . О рлова А .
read (NumMice); write ('В ве д и те кол-во слов в с чи талочке : ');
Н и же п ри ве д е н ы ре зу льтаты ком ан д н ого заче та п о и тогам обои хту ров: 1 м ес то ПМ М В ГУ
read (step);
2 м ес то СТИ М ИС и С 3 м ес то В ГТА 4 м ес то Ф К Н В ГУ 5 м ес то м атфак В ГУ 6 м ес то В ГТУ 7 м ес то В ГПУ М акс и м альн ое коли че ство баллов, которое м ожн о бы ло н абрать во втором
write ('В ве д и те н ом е р бе лой м ы ш и : '); read (NumWhite);
if step > 1 then begin L:=1; i:=2; k:=1; while i <= NumMice do begin L:=(L + step * k - 1) mod i + 1; k:=(i - L) div (step - 1) + 1; 72
ту ре в ос н овн ой н ом и н аци и – 30 баллов. С ре зу льтатом 27 баллов п е рвое м ес то у ве ре н н о зан ялсту д е н т 3 ку рс а факу льте та ПМ М В ы рос тков Д м и три й. О н вы и грал осн овн ой п ри з ш колы – оли м п и ад ы – и м е н н у ю сти п е н д и ю ком п ан и и «Ин форм связь-Ч е рн озе м ье ». О н п олу чи л также спе ци альн ы й п ри з ЗА О «Ре т», как отли чн и к у че бы , п оказавш и й лу чш и й ре зу льтат. Н а 2-ое м ес то сре зу льтатом 22 балла вы ш е л с ту д е н т 2 ку рс а ПМ М Прос и н Се рге й, п обе д и те ль Пе рвой ш колы – оли м п и ад ы . О н н агражд е н од н и м и з осн овн ы х 9
п ри зов оли м п и ад ы – ци фровы м фотоап п аратом от О О О «OCS-Ю г». В тороку рсн и к факу льте та ПМ М Си д оре н ко Стан и слав (ре зу льтат 22 балла) и сту д е н т СТИ М ИС и С М алаш е н ко О ле г (ре зу льтат 17 баллов), зан явш и е 3 мес то, п олу чи ли м у зы кальн ы е колон ки от ЗА О «Ре т». Ч е тве ртое м е с то п од е ли ли сту д е н т 3 ку рс а ПМ М Гайд ай В и ктор (ре зу льтат 15 баллов), п олу чи вш и й от п ре зи д е н та фи рм ы RelaxUs (СШ А ) А .В . Пе ш кова (вы п у с кн и ка ПМ М ) кн и гу «Ethical Hacking» объе м ом 720 стран и ц и п яти ку рс н и к В ГТА , п остоян н ы й у частн и к оли м п и ад п о и н форм ати ке Затворн и цки й А ле ксан д р (ре зу льтат 12 баллов), п олу чи вш и й н ау ш н и ки от «OCS-Ю г». По м н е н и ю у час тн и ков 2-го ту ра оли м п и ад н ы е зад ан и я бы ли д ос таточн о сложн ы м и : только 42 % см огли н абрать боле е 3 баллов, 12 % п оказали н у ле вой ре зу льтат и ли ш ь 10 % н абрали вы ш е 12 баллов. В ы п у скн и к факу льте та ПМ М , н е од н ократн ы й п обе д и те ль п од обн ы х оли м п и ад , н ы н е д оце н т м ате м ати че ского факу льте та и д и ре ктор О О О «Э кс п е рт»С.Д . М ахортов у чре д и лп ри з (м од е м ) лу чш е м у у частн и ку 2-го ту ра м ате м ати че ского факу льте та п ри у слови и , е с ли он п оп ад е т в п е рву ю п олови н у ту рн и рн ой табли цы . Э тот п ри з п олу чи лс ту д е н т 2-го ку рс а м атфака Л агу н ов Се рге й, н абравш и й 5 баллов и зан явш и й 7 м е с то. Сту д е н т 2 ку рса Ф К Н Д е сятов А н д ре й с ре зу льтатом 8 баллов и сту д е н т 2 ку рса ПМ М А н д ре йчи ков В ас и ли й зан яли 5 м е с то. О н и н агражд е н ы «Совре м е н н ы м ан гло-ру сс ки м словаре м п о вы чи сли те льн ой те хн и ке » (600 с тран и ц), которы й п ре д ос тави л зам . д и ре ктора Изд ате льства «Рад и оСофт» А .П. Си сев, вы п у скн и к ПМ М . Сре д и с ту д е н ток м е с та расп ре д е ли ли сьсле д у ю щ и м образом : Б ойче н ко А н астас и я 3 ку рсПМ М –1 м е сто; О рлова А ле кс ан д ра 3 ку рсПМ М –2 м е с то; К озлова О льга СТИ М ИС и С –3 м е сто. Л у чш и м сре д и и н огород н и х с ту д е н тов бы л М алаш е н ко О ле г (17 баллов), п е рвое м е сто сре д и сту д е н тов те хн и че с ки х ву зов зан ял Затворн и цки й А ле ксан д р (12 баллов), сре д и сту д е н тов вое н н ы х ву зов н а п е рвое м е с то вы ш е лГарш и н Игорь (3 балла). В рам ках В торой откры той сту д е н че с кой ш колы – оли м п и ад ы п о п рограм м и рован и ю и ком п ью те рн ом у м од е ли рован и ю сос тоялась м е жву зовс кая оли м п и ад а п о и н форм ати ке м е жд у сту д е н там и факу льте та 10
Те п е рьн ачн е м ре ш е н и е основн ой зад ачи . П у с ть L(s, n) –и с ком ое чи сло. В ы д е ли м н е с колько свойств этого чи сла: 1) L(s, 1) = 1, 2) 1 <= L(s, n) <= n. Д оп у сти м н ам и зве с тн о L(s, k - 1). Д окаже м , что L(s, k) = (L(s, k - 1) + s - 1) mod k + 1. Д оказате льс тво. В н ачале н ам д ан ы k чи с е л и м ы , н ачи н ая отсче т се д и н и цы , вы че рки вае м чи с ло (s – 1) mod k +1. Пос ле этого у н асостае тс я k – 1 чи с ло и отсче т у же н ачи н ае тся счи сла (s - 1) mod k + 2. После д н е е оставш е е ся чи с ло бу д е т L(s, k - 1)-ы м , е сли с чи тать от (s - 1) mod k + 2, т.е . п о форм у ле (1) это бу д е т((s - 1) mod k + 2 + L(s, k - 1) - 2) mod k + 1 = (L(s, k - 1) + s - 1) mod k + 1. Зн ачи т L(s, k) = (L(s, k - 1) + s - 1) mod k + 1, чтд . Итак, м ы вы ве ли ре ку рре н тн у ю форм у лу L(s, n) = (L(s, n - 1) + s - 1) mod n + 1 (2) О сн овой н е д ос таток этой форм у лы заклю чае тся в том , что м ы д ви гае м ся к це ли сли ш ком м е д ле н н о. Ч тобы вы чи сли ть L(s, n), н ам н ад о п ри м е н и ть форм у лу (2) n –1 раз. В ы ясн и м , н е льзя ли это сде лать это бы стре е . Зам е ти м , что е сли L(s, n) + s –1 <= n, то L(s, n + 1) = L(s, n) + s и тогд а L(s, n + 2) = (L(s, n ) + 2s - 1) mod (n + 2) + 1. При этом с корость вы чи сле н и й у ве ли чи вае тся. Д оп у сти м , что L(s, n) + (k-1)(s-1) <= n (3), а L(s, n) + k(s-1) >= n (4). Пре образу е м н е раве н с тво (3) сле д у ю щ и м образом : L(s, n) + (k - 1)s –1 <= n + k –2 L(s, n) + is+ (k - i - 1)s –1 <= n + k –2 L(s, n) + is –1 <= n + k –2 –(k –i - 1)s = n + i –1 + k –i –1 –(k –i -1)s = = n + i –1 –(k –i -1)(s - 1) <= n + i –1, е сли k –i +1 >=0, т.е . i <= k –1 Итак, и з (3) сле д у е т, что L(s, n) + is –1 <= n + i –1, е сли i <= k –1 (5). Из н е раве н ства (5) п ри i=1 и форм у лы (2) с ле д у е т, что L(s, n + 1) = L(s, n) + s, отку д а L(s, n + 2) = (L(s, n) + 2s - 1) mod (n + 2) + 1. А у чи ты вая (5) п ри i=2, и з п ре д ы д у щ е го раве н ства п олу чи м , что L(s, n + 2) = L(s, n) + 2s, отку д а L(s, n + 3) = (L(s, n) + 3s - 1) mod (n + 3) + 1. Прод олжая так и д альш е , п олу чи м , что L(s, n + k - 1) = L(s, n) + (k - 1)s, отку д а L(s, n + k) = (L(s, n) + ks - 1) mod (n + k) + 1. И это раве н ство у же н е у п рощ ае тся, т.к. д е йс тву е тн е раве н с тво (4). Н айд е м и з (3) и (4) чи с ло k: 1) Из (3) п олу чи м , что k –1 <= (n –L(s, n))/(s - 1). 2) Из (4) п олу чи м , что k –1 >= (n –L(s, n))/(s - 1) –1. Из п олу че н н ы хн е раве н с тв сле д у е т, что k –1 = (n –L(s, n)) div (s - 1), отку д а k = (n –L(s, n)) div (s –1) + 1. L(s, n + k) = (L(s, n) + ks –1) mod (n + k) + 1, гд е max(k) = (n –L(s, n)) div (s 1) + 1 (6) Зам е ти м , что скорос ть вы чи с ле н и я бу д е т те м больш е , че м бу д е тм е н ьш е s. Д оп у сти м , м ы н аш ли , каки м бу д е т п о сче ту п осле д н е е ос тавш е е ся чи сло, е сли счи тать от f. Н у а е с ли м ы хоти м у зн ать сам о это чи с ло, то п о форм у ле 71
if (Q[j]=per_start+src) then{н айд е н о зн аче н и е фу н кци и н а н у жн ом этап е п е ри од и че ского оборота} begin R:=j; exit; end; halt(255); end; begin fillchar(Q,sizeof(Q),0); ReadData; Go; {$IFNDEF Tester_} WriteData; {$ELSE} CheckData; {$ENDIF} end.
ПМ М В ГУ и с ту д е н там и В В А ИИ, гд е п е рве н ствовали с ту д е н ты факу льте та ПМ М : В ы ростков Д . (1 м е сто), Л ари н И., К оржов Н . (2 м е с то). Л у чш и м и сре д и с ту д е н тов В В А И бы ли Гарш и н И.А ., Б е льце ви ч В .В ., М олод ки н Д .В ., В и н оку ров С.Д ., В и н оку ров В .Д . Б лагод аря фи н ан совой п од д е ржке Ф ЦП «Ин те граци я» и областн ой ад м и н и страци и В орон е жс кой облас ти н и каки х оргвзн ос ов и д ру ги х фи н ан совы х расход ов от у частн и ков ш колы – оли м п и ад ы и ву зов, которы е он и п ре д ставляли , н е тре бовалось. Б оле е того, кажд ы й у частн и к 2-го ту ра п олу чи л в п од арок 3 и 4 час ти сборн и ка «О ли м п и ад н ы е зад ачи п о п рограм м и рован и ю Л у чш и е ре ш е н и я», газе ты «М олод ой ком м у н ар», «У чи те ль», «За н ау ку », ан гли йс кая ве рс и я «В орон е жс кого у н и ве рс и те та», блокн оты , ру чки , д и ске тки , совре м е н н у ю м е тод и че с ку ю и у че бн у ю ли те рату ру п о и н форм ати ке . Ин огород н и е у частн и ки второго ту ра бы ли обе с п е че н ы бе с п латн ы м д ля н и х п и тан и е м и п рожи ван и е м . М н оги е у час тн и ки бы ли н агражд е н ы у че бн ы м п особи е м «Програм м и рован и е н а Паскале : зад ачн и к» (А вторы О .Ф . У скова, М .В . Б аклан ов, И.Е . В орон и н а, О .Д . Горбе н ко, Г.Э . В ощ и н с кая, М .В . М е льн и ков, Н .В . О гаркова). В этой кн и ге е с ть глава, в которой п ре д ставле н ы оли м п и ад н ы е зад ачи п рош лы х ле т и п рограм м ы , разработан н ы е сту д е н там и факу льте та ПМ М А . Поляковы м , Л . М хи тарян , Д . К олбе ш ки н ы м , М . Е фре м овы м . У че бн ое п особи е вы ш ло в и зд ате льстве «Пи те р»в с е н тябре 2002
П р ог р ам м а№ 9 М ы ши К оту сн и тся с он , что е го окру жи ли 13 м ы ш е й: 12 серы х и од н а бе лая. «М у рлы ка, ты м оже ш ь съе д атькажд у ю три н ад цату ю м ы ш ку . Счи тай и х п о кру гу в од н ом н ап равле н и и . Б е лу ю м ы ш ку ты д олже н с ъе сть п ос ле д н е й.» Зад у м ался кот… С какой м ы ш ки н ачать? В общ е м ви д е ре ш е н и е этой зад ачи п ре д ложи лсту д е н т2 ку рса факу льте та ПМ М Л арин Игорь. Пу сть п о кру гу рас ставле н ы чи с ла 1, 2, … , n в п оряд ке возрастан и я, е с ли см отре ть п о д ви же н и ю часовой стре лки . Б у д е м вы че рки вать кажд ое s-ое чи с ло, н ачав отсче т счи сла f. К п ри м е ру , е сли s=2, f=1, n=10, то п е рвы м бу д е т вы че ркн у то чи с ло 2, п отом 4 и т.д . Зад ача сос тои т в том , чтобы н айти каки м п о сче ту бу д е т п ос ле д н е е оставш е е ся чи с ло, е сли с чи тать от f. Зам е ти м , что эта зад ача экви вале н тн а зад аче п о н ахожд е н и ю п ос ле д н е го оставш е гося чи с ла, е с ли f=1. Рас см отри м вс п ом огате льн у ю зад ачу : какое чи сло бу д е т s-ы м п о с че ту , е сли отсче т н ачи н ать сf. О тве т: (f + s - 2) mod n + 1 (1) 70
г. и и м е е т гри фМ и н и сте рства образован и я Росс и йс кой Ф е д е раци и . Сре д с тва д ля п ри обре те н и я этой кн и ги вы д е ли ло ЗА О «Ре ле кс». У час тн и ки ш колы -оли м п и ад ы , п ре д стави вш и е ори ги н альн ы е ре ш е н и я п ре д ложе н н ы х зад ан и й, бы ли отм е че н ы д и с кам и ском п ью те рн ы м и и грам и , которы е п ре д ос тави л ге н е ральн ы й д и ре ктор фи рм ы «Б У РУ Т» К олы хали н В и ктор М и хайлови ч. К ажд ы й у частн и к 2-го ту ра п олу чи л 5 п роце н тн у ю ски д ку д о кон ца 2002 год а н а п ри обре те н и е товаров в м агази н ах фи рм ы «М и рра-Л ю кс» (ру ковод и те ль ре ги он альн ого отд е ле н и я фи рм ы Ч е рн ы х Н и н а Пе тровн а, д оце н т, вы п у скн и ца факу льте та ПМ М В ГУ ) и ком п ью те рн ой фи рм ы «РЕ Т» (ге н е ральн ы й д и ре ктор К олы хали н В лад и м и р М и хайлови ч). Ре кторат В ГУ вы д е ли л сре д ства н а оп у бли кован и е п робн ого у че бн ого п ос оби я «Ин форм ати ка. М е тод ы п ре д с тавле н и я, хран е н и я и обработки и н форм аци и » (А вторы О .Ф . У скова, И.Е . В орон и н а, Н .В . 11
М и н е н кова, М .В . Б аклан ов, М .М . М е льн и ков), которы м бы ли н агражд е н ы п обе д и те ли 2-го ту ра ш колы -оли м п и ад ы . Профе ссора факу льте та ПМ М М .А . А рте м ов, Г.И. Л озгаче в, А .Г. Б аскаков вы д е ли ли и з свои х гран тов РФ Ф И д е н е жн ы е п ре м и и д ля н агражд е н и я с ту д е н тов (с п е ци али зи ру ю щ и хся п о и х кафе д рам ), п оказавш и х в п е рвом ту ре хорош и е ре зу льтаты . В заклю чи те льн ы й д е н ь состоялся разбор зад ан и й 2-го ту ра, которы й п рове ли п ре д стави те ли сту д е н че ского д и ре ктората А . Поляков, М . Е фре м ов, А . Яку бе н ко и чле н жю ри оли м п и ад ы , ас си сте н т кафе д ры М О Э В М М е льн и ков В .М ., од и н и з п ос тоян н ы х авторов оли м п и ад н ы х зад ач п о п рограм м и рован и ю и ком п ью те рн ом у м од е ли рован и ю Выс ту п и вш и е н а це ре м он и и н агражд е н и я п обе д и те ле й сту д е н ты Затворн и цки й А . (В ГТА ), М ам е д ов Э . (В ГУ , ПМ М ), Си д оре н ко С. (В ГУ , ПМ М ), М алаш е н ко О . (СТИ М ИСи С), Иван н и ков М . (В ГТУ ) вы рази ли благод арн ос ть оргком и те ту , с ту д е н че с ком у д и ре кторату , спон с орам Ф ЦП «Ин те граци я» за орган и заци ю и п рове д е н и е ш колы -оли м п и ад ы , отм е ти ли хорош у ю орган и заци ю и д оброже лате льн ы е отн ош е н и я ко всем е е у частн и кам . При п од готовке вари ан тов зад ан и й ш колы -оли м п и ад ы н аряд у с авторски м и разработкам и и с п ользу ю тся п ос ле ад ап таци и к ау д и тори и у частн и ков м ате ри алы российски х и м е жд у н арод н ы х сту д е н че ски х и ш кольн ы х оли м п и ад п о и н форм ати ке . В и тоге форм и ру е тся м ате ри ал д ля п ос ле д у ю щ е й работы сод аре н н ы м и с ту д е н там и , п ре п од авате лям и ву зовс кой и ш кольн ой и н форм ати ки . По м н е н и ю ву зовски х п ре п од авате ле й и н форм ати ки , п рове д е н и е оли м п и ад п о п рограм м и рован и ю способс тву е т рос ту и н те ре са у чащ и хся к п ре д м е ту , а также росту и х творче с кой акти вн ос ти . Н и же п ре д с тавле н ы
ре зу льтаты
второго ту ра в ос н овн ой н ом и н аци и
В ы рос тков Д м и три й М алаш е н ко О ле г В и ктор Гайд ай Солом ати н А ле ксей
В ГУ СТИ М ИСи С В ГУ В ГУ
ПМ М ПМ ПМ М ФК Н
3 2 3 1
Л агу н ов Се рге й Л ари н Игорь
В ГУ В ГУ
М АТ ПМ М
2 2
12
end; {п е ре щ е т д ля оче ре д н ого xn} function xn(x:word):word; begin xn:=trunc(l*abs(sin(l*x*x+l*l*x+1))); end; {с чи тае т xn п ока н е встре ти тся н у жн ы й н ом е р} procedure Go; var x:word; j:word; per_int,per_start:word; src:word; begin j:=1; x:=xn(x0); while (Q[x]=0) do begin Q[x]:=j; if j=p then begin R:=x; exit; end; x:=xn(x); inc(j); end; per_int:=j-Q[x]; per_start:=Q[x]; src:=(p-per_start+1) mod per_int;{п осчи тан ли тре бу е м ы й н ом е р, п ройд е т ли фу н кци я п е ри од д о тре бу е м ого зн аче н и я } if src=0 then src:=per_int;{н айд е н н ом е р р, ли бо д ля п олу че н и я тре бу е м ого н у жн о п ройти п е ри од и ли п е ри од ы } dec(src); for j:=0 to l do 69
{с чи ты ван и е и з те кстового файла input в п е ре м е н н ы е x0,p,l} procedure ReadData; begin Assign(input,cInFile); Reset(input); readln(x0,p,l); close(input); end; {зап и сь ре зу льтата в вы ход н ой файлoutput} procedure WriteData; begin Assign(output,cOutFile); Rewrite(output); writeln(r); close(output); end; {п рове рка д ан н ы х в файле -ре зу льтате } procedure CheckData; var S:string; V:longint;
Погоре ле н ко В лад и м и р Прос и н Се рге й Си д оре н ко Стан и слав М у хое д ов Д м и три й Гарш и н Игорь Затворн и цки й Б арабаш В лад и м и р Д е сятов А н д ре й Х орп яков М и хаи л А ле н и н Се рге й А н д ре йчи ков В ас и ли й Б е ле н ко А ле ксан д р Б ойче н ко А н астасия Б у лгаков
В В В В В В В В
ГУ ГУ ГУ ГУ В А ИИ ГТА ГУ ГУ
В В В В В
ГПУ ГУ ГУ ГУ ГУ
Иван н и ков М акси м К арп ю к Д м и три й К озлова О ля К оле сн и к А рте м
В ГТУ В В А ИИ СТИ М ИСи С В ГТА
ФАЭ М
2 2 2 3
К оржов Н и колай Л авски й Н и колай М атю ш е вс ки й К и ри лл
В ГУ СТИ М ИСи С В ГУ
ПМ М
2 3 2
err:integer; begin Assign(output,cOutFile); {$I-} reset(output); {$I+} if (IoResult<>0)then Opa(2);
Н оваковски й Се рге й О рлова А ле кс ан д ра Полян ски й В лад и слав Прон и н Се рге й Се рге е в Се рге й Скри п че н ков Д е н и с Соколов Се рге й Сороки н А н д ре й Сте ш е н ко Се рге й Тахи ров Ф и ру з Ти щ е н ко Иван Токарчу к Ром ан
В ГПУ В ГУ В ГУ В ГУ В ГПУ В ГУ В ГУ В ГУ В ГПУ В ГТА СТИ М ГИСи С В ГПУ
Ч е рн и ков В яче с лав Ш у вае в Ярослав
В ГТУ В ГТА
if Eof(output) then Opa(2); read(S); Val(S,V,err); if err<>0 then Opa(2); if V<>r then Opa(1); close(output); Opa(0); 68
13
ПМ ПМ ПМ ПМ
М М М М
ПМ М ФК Н
2 2 2 3 2 5 2 2
ПМ ПМ ПМ ФК
2 2 3 2
М М М Н
ПМ М ПМ М ПМ М ПМ М ПМ М ПМ М ПМ М
ТУ ФАЭ М
3 2 3 2 2 3 2 2 3 3 2 2 3
Ре зу льтаты второго ту ра в н ом и н аци и «Пе рвоку рс н и ки » 1 Н и колае ва Татьян а Е вге н ье вн а В ГУ 2 Д рап алю к В лад и м и р Се рге е ви ч В ГУ 3 Щ е рбаков Е вге н и й А н атолье ви ч В ГУ 4 М ам е д ов Э м и н Ф арад О глы В ГУ 5 Солом ати н А ле ксей Иван ови ч В ГУ 6 Ш али тки н А н д ре й В лад и м и рови ч В ГУ 7 Н е год яе в А ле кс е й М и хайлови ч В ГПУ 8 Ре ве н ко А ле н а В але рье вн а В ГПУ 9 К аш и ри н А ле ксан д р Н и колае ви ч В ГПУ 10 Л ан цу зс ки й М и хаи лМ и хайлови ч В ГУ 11 Це п ляе в К он стан ти н Ю рье ви ч В ГУ 12 М ам он ов Д м и три й Се рге е ви ч В ГУ 13 Сви ри д ов А н д ре й А ле ксан д рови ч В ГУ 14 К отов Се рге й А ле ксан д рови ч В ГУ
фи з фи з ПМ М ПМ М ФК Н ПМ М фи зм ат фи зм ат фи зм ат фи з ФК Н ПМ М фи з ПМ М
0,3 5 10 7 10 5 5 0,3 1 0,3 2 7 5 0,5
Ре зу льтаты второго ту ра в с е кци и п ри клад н ого п рограм м н ого обе с п е че н и я Б е лоброд ски й А н д ре й В ГУ 14 Ян и н А ле ксей В ГПУ 14 Павлов Л е он и д В ГУ 12,5 Н оваковс ки й Се рге й К оржов Н и колай Л у щ и ков А ле ксей Савви н Паве л Сте ш е н ко Се рге й Ф у рс ова Ири н а
В В В В В В
ГПУ ГУ ГПУ ГТА ГПУ ГПУ
12,5 11 11 11 10 10
Н овостиш колы -олим пиады 29.11.2002 Опре де л е н срок прове де н ия в т орого т ура ш колы -ол им пиады в осн ов н ой се кц ии - 10-11 де ка бря 2002 года. Ин огородн их участ н иков убе дит е л ьн о просим подт ве рдит ь че ре з e-mail: [email protected] или по т е л е фон у (0732)789-305 свое участ ие в ов т ором т уре . 26.11.2002 В газе т е "Ворон е ж ский ун ив е рсит е т " гот ов ит ся подборка м ат е риалов о ш коле -олим пиаде . 14
Init; Prepare; Perform; Done; End. П р ог р ам м а№ 8 Зад ача бы ла п ре д ложе н а н а оли м п и ад е п о и н форм ати ке д ля п е рвоку рс н и ков в 1999 год у . А втор ре ш е н и я – п ри зе р оли м п и ад ы Б ойче н ко А н ас таси я, сту д е н тка 3 ку рса факу льте та ПМ М . Н ап и сатьп рограм м у д ля вы чи с ле н и я xp (0<=x0<=255,0
22.11.2002 В газе т е "Ф @кул ьт е т П ММ" (гл . ре дакт ор доц . кафе дры ММИО И.Л .Каширин а) пом е щ е н ы м ат е риа лы о ре зульт ат ах в т орого т ура в н омин ац ии "П е рвокурсн ики" и в се кц ии "П рикл адн ое програм м н ое обе спе че н ие ".
C:=C mod N; i:=1; while i <= M do begin Read(Inp, B); B := B - C; if B<0 then B:=B+N;
13.11.2002 7 н оября 2002 года н а 3-й Ме ж дун ародн ой м е ж дисц иплин а рн ой н аучн опракт иче ской кон фе ре н ц ии "С ов ре м е н н ы е пробл е м ы гум а н изац ии и гарм он изац ии управл е н ия" в г.Х арьков е пре дсе да т е л ь ж ю ри О.Д .Горбе н ко сде л ал докл ад "С т уде н че ские ол им пиады по програм м иров ан ию и ком пью т е рн ому м оде л иров ан ию : аспе кт ы управ ле н ия"
{Те п е рьв В - ос таток n}
11.11.2002 С ост оял ся в т орой т ур ш колы -ол им пиа ды в н ом ин ац ии "П е рв окурсн ики". Р е зул ьт ат ы зде сь.
if A[B] >= 0 then Write(Outp, A[B], ' ') else i := M; {При н у д и те льн ы й вы ход }
10.11.2002 П одв е де н ы ит оги в т орого т ура в се кц ии "П рикл адн ое програм м н ое обе спе че н ие ", кот оры й проходил н а базе Ворон е ж ского государст в е н н ого пе дагогиче скогоун ив е рсит е т а . С ре зульт ат ам и м ож н оозн аком ит ься зде сь.
inc(i); end; Close(Outp); {Е сли вы ш ли п о ош и бке в д е код и рован и и }
6.11.2002 Д е кан фа культ е т а ком пью т е рн ы х н аук проф. Э .К.Алгазин ов н аградит де н е ж н ой пре мие й ст уде н т ов факульт е т а КН , кот оры е покаж ут хорошие ре зул ьт ат ы во в т ором т уре ш кол ы -олим пиады . 5 н оября 2002 года н а засе да н ии У че н ого сове т а факул ьт е т а П ММ рассмат рив ал ись ит оги пе рв ого т ура ш колы -ол им пиа ды . П ризе ра м бы л и в руче н ы сув е н иры . Вы ст упив шие н а засе дан ии сов е т а проф. А .И.Ш ашкин , проф. В.Г.За дорож н ий , проф. М.А.Арт е м ов , доц . И.Б .Р уссм ан т е пл о поздрав ил и побе дит е л е й пе рв ого т ура и пож е л ал и успе ха ол им пиадн ом у движ е н ию .
if A[B] < 0 then begin ReWrite(Outp); WriteLn(Outp, 'NO.'); Close(Outp); end; end;
Зав . ка фе дрой т е хн иче ской кибе рн е т ики (ВГУ ), проф. Г.И.Лозгаче в вы де лил из свое го гран т а Р Ф Ф И де н е ж н ую пре м ию дл я н аграж де н ия С е рге я П рон ин а , ст уде н т а кафе дры т е хн иче ской кибе рн е т ики, показав ше го хорош ие ре зульт ат ы в пе рв ом т уре олим пиады .
procedure Done; begin Close(Inp); end;
5.11.2002 Р е кт ор ВГУ проф. И.И.Б орисов уст ан ов ил призы дл я н аграж де н ия побе дит е л е й ш колы -ол им пиады в н ом ин ац ии "П е рв окурсн ики" и в осн ов н ой н омин ац ии.
Begin 66
15
2.11.2002 П роф. кафе дры т е оре т иче ской и прикл адн ой м е хан ики М.А.Арт е м ов в ы де л ил изсв ое гогран т а Р Ф Ф И де н е ж н ую пре мию для н аграж де н ия Ш е ст опалов ой Е л е н ы , ст уде н т ки ка фе дры ТиП М,показав ше й хорошие ре зульт ат ы в пе рв ом т уре ш колы -ол им пиады сре ди де в уш е к. 31.10.2002 Опре де л е н список участ н иков в т орогот ура в ов се х н омин ац иях. 30.10.2002 Опре де л е н а дат а прове де н ия в т орогот ура олимпиады дл я пе рв окурсн иков 11 н оября 2002 года в 14 часов . 28.10.2002 Вт орой т ур се кц ии "П рикл адн ое программн ое обе спе че н ие " ш колы ол им пиа ды сост оит ся 4 н оября 2002 года в 8:30 в ауд. 428 Ворон е ж ского государст ве н н ого пе дагогиче ского ун иве рсит е т а . Во в т орой т ур прошл и ст уде н т ы ВГ П У , ВГТА, факул ьт е т ов П ММ и э кон ом иче скогоВГУ . 26.10.2002 5 н оября 2002 года н а засе дан ии У че н ого сове т а факул ьт е т а прикл адн ой м а т е м а т ики, ин форм ат ики и м е хан ики будут ра ссм ат рива т ься ит оги пе рв ого т ура школ ы -ол им пиа ды . П ригл аш ае м н а э т о засе дан ие ст уде н т ов фа кул ьт е т а П ММ - побе дит е л е й пе рвого т ура (И.Л арин , С .С идоре н ко, В.Б арабаш , Д .С крипче н ков , В.П огоре л е н ко, А.С орокин , В.Ан дре й чиков , Д .Мухое дов , Н .К орж ов , С .С окол ов , Д .Мам он ов , Э .Мам е дов , Е .Щ е рбаков , В.Га й дай , Д .Вы рост ков , С .П ол ян ский , С .П рон ин , А.Тарасова , А.Б ой че н ко, Л .Тю н ин а ) 25.10.2002 компа н ия "Ин формсв язьОсн ов н ой приз ол импиады пре дост авит Ч е рн озе м ье " - им е н н ую ст ипе н дию в разме ре 1000 рубл е й в ме сяц 24.10.2002 Н П О "Р е лэ кс" в ы де лил о сре дст в а дл я н агра ж де н ия побе дит е ле й ш колы ол им пиа ды уче бн ы м пособие м "П рограм мирован ие н а П аскале : задачн ик" (Ав т оры О.Ф .У сков а, М.В.Б акл ан ов , И.Е .Ворон ин а , О.Д .Горбе н ко, Г.Э .Вощ ин ска я, В.М.Ме л ьн иков , Н .В.Огаркова ). Кн ига т ол ькочт о вы шл а в изда т е л ьст ве П ИТЕ Р и им е е т гриф Мин ист е рст ва образов ан ия Р оссий ской Ф е де рац ии. 23.10.2002 Зав . кафе дрой ММИО (ВГУ ), проф. А.Г.Б аскаков в ы де л ил из св ое го гран т а 16
{Построе н и е с оотве тс тви й м е жд у чи с лам и А и остаткам и } function Prepare : boolean; var k:Integer; A, ModD : Integer; begin for k:=0 to D-1 do begin {Счи тае м п е рву ю возм ожн у ю п ару A и ModN д ля те ку щ е го К } A := (K * N) div D; ModD := D - (K * N) mod D; {К орре кти ровка} if ModD = D then ModD := 0 else inc(A); {О стальн ы е п ары д ля К } repeat Save(A, ModD); ModD := ModD + D; A := A + 1; until ModD >= N; end; Prepare := true; end; {Д е код и рован и е } procedure Perform; var i, B : Integer; Outp : Text; begin Assign(Outp, OutName); ReWrite(Outp); WriteLN(Outp, 'YES!'); 65
NotUniq = -2;
{О статку соотве тству е т боле е од н ого и е грогли фа}
var {Н ачальн ы е д ан н ы е } N, M, C, D : Integer; {Ч и сло A[i] с оотве тс тву е т i-м у ос татку } A : array[0..MaxN] of Integer;
Р Ф Ф И де н е ж н ую пре м ию дл я н аграж де н ия Алин ы Тарасовой , ст уде н т ки кафе дры ММИО, зан яв ше й 1 м е ст ов пе рв ом т уре ш колы -ол им пиады сре ди де в уше к. 21.10.2002 Лучша я изпрограмм побе дит е ля ол им пиа ды буде т опубликов ан а в оче ре дн ом в ы пуске ре гион альн ого сборн ика н аучн ы х и н аучн о-м е т одиче ских работ "Мат е м ат иче ское обе спе че н ие Э ВМ" (гл . ре дакт ор - Н .А.Тю каче в , зав . кафе дрой програм м иров ан ия и ин форм ац ион н ы х т е хн ол огий ВГ У ) 19.10.2002 В газе т е "У чит е ль" Ворон е ж ского государст в е н н ого пе дагогиче ского ун ив е рсит е т а № 15 опубл иков ан а зам е т ка проре кт ора по н аучн ой работ е ВГП У А.С .П от апов а "Вт ора я ре гион ал ьн ая ш кол а-ол им пиада по програ ммиров ан ию и ком пью т е рн ом у м оде л иров ан ию в ВГ П У "
{В ход н ой файл} Inp : Text; procedure Init; var i : Integer; begin Assign(Inp, InpName); reset(Inp); ReadLn(Inp, N, M); ReadLN(Inp, D, C);
17.10.2002 ООО "OCS-Ю г" (дире кт ор Игорь Ю рье вич Б ат уе в , сот л ичие м закон чив ш ий фа кул ьт е т П ММ) учре дил о приз (ц ифров ой фот оаппарат ) побе дит е лю в т орогот ура ш кол ы -олим пиады Колл е кт ив ка фе дры МО Э ВМ фа кул ьт е т а П ММ прин ял ре ше н ие в зят ь н а кафе дру в н е кон курса в т орокурсн ика, показавш е гол учшие ре зульт ат ы сре ди ст уде н т ов 2 курса по ит ога м обоих т уров . 11.10.2002 В газе т е "Ф @кул ьт е т П ММ" № 9 (гл . ре дакт ор доц . кафе дры ММИО И.Л .Каширин а) опубликов ан а ин форм ац ия об олим пиаде . Д е кан ат фа кул ьт е т а П ММ пл ан ируе т н а за се дан ии У че н ого сов е т а факул ьт е т а н аградит ь побе дит е л е й пе рвого т ура - ст уде н т ов факул ьт е т а П ММ
for i:=0 to N-1 do A[i] := NotUsed; end; {Прои звод и т зап и сь в м ас си в с оотве тс тви й, п ри че м чи с ло R отве чае тостатку N} procedure Save(R, N: Integer); begin if A[N] = NotUsed then A[N] := R else A[N] := NotUniq; {Повторн ая зап и сь в эту яче йку } end; 64
5.10.2002 Н а граж де н ие ст уде н т ов в орон е ж ских в узов , показав ш их хорошие ре зул ьт ат ы в пе рв ом т уре , проходил о30 се н т ября н а пл е н а рн ом засе дан ии м е ж дун ародн ой кон фе ре н ц ии "Те ория кон фл икт ов и е е прилож е н ия". С ре ди н их ст уде н т ы ВГТА А.Кол е сн ик, Я .Ш ув ае в , А.За т ворн иц кий , Ф .Тахиров , ст уде н т ы ВГТУ М.Ив ан н иков , В.Щ е рбаков , В.Ч е рн иков , ст уде н т ы ВГП У А.Н е годяе в , А.К аш ирин , А.Р е в е н ко, С .С е рге е в , С .Н ов аков ский , С .С т е ш е н ко, Р .Тока рчук, ст уде н т ВВАИ Д .Карпю к, ст уде н т ы факул ьт е т а ком пью т е рн ы х н аук ВГ У А.Д е сят ов , А .С олом ат ин , М.Х орпяков , м а т е м ат иче ского факульт е т а ВГУ С .Логун ов , А .Л учкин , физиче ского фа кул ьт е т а ВГУ А.С в иридов , Д .С е в е рин ов , фа кул ьт е т а П ММ ВГУ И.Ларин , С .С идоре н ко, В.Б ара ба ш , Д .С крипче н ков , В.П огоре л е н ко, А.С орокин , В.Ан дре й чиков , Д .Мухое дов , Н .Корж ов , С .С окол ов , Д .Мам он ов , Э .Мам е дов , 17
Е .Щ е рбаков , В.Г ай дай , Д .Вы рост ков , С .П ол ян ский , С .П рон ин , А.Тарасова, А.Б ой че н ко, Л .Тю н ин а и др. В ц е ре м он ии н аграж де н ия прин имал и участ ие ст уде н т ки т ре т ье гокурса фа кул ьт е т а П ММ Е .Ан т ош ин а, Н .П ан арин а , Е .С ит н иков а , И.С ит н икова, Е .Х ре н ов а , Т.Р ож н ов а.
чи с е л(код ов В ), разд е ле н н ы х п робе лом . Output.txt: В п е рвой строке д олжн о стоятьслово YES и ли NO, и , е с ли YES, во второй с троке д олжн а бы ть вы ве д е н а и сход н ая (д е код и рован н ая) п осле д овате льн ос ть.
27.09.2002 Ге н е рал ьн ы й дире кт ор фирмы "Б У Р У Т" Кол ы халин Викт орМихай л ов ич пре дост авил дл я н аграж де н ия призе ров олимпиады игровы е ком пакт -диски
Ид е я ре ш е н и я. К ажд ое чи сло код и ру е тся п о форм у ле B=(AD+C) mod N. Пу с ть n = B - C mod N, п ри че м е с ли n<0, п ри бави м к н е м у N, тогд а AD mod N = n, т.е . n - ос таток отд е ле н и я п рои зве д е н и я AD н а N. Те п е рьн аш а зад ача свод и тс я к оп ре д е ле н и ю , A < N, соотве тс тву ю щ е го ос татку n, и , е с ли он о е д и н стве н н о, то он о и бу д е т и сход н ы м чи с лом . Зап и с ь AD mod N = n озн ачае т, что AD = kN + n, п ри че м т.к. A < N то 0 <= k < D. Пе ре п и ш е м это раве н ство в ви д е A = (kN + n)/D. О тсю д а м ожн о оп ре д е ли ть вс е п ары A и n, у д овле творяю щ и е п ос тавле н н ом у у равн е н и ю . Зафи кс и ру е м н е которое k,тогд а A0 = kN div D + 1, и n0 = D - kn mod D, оче ви д н о, у д овле творяю т у равн е н и ю . К ром е того, е сли N > D, то n = n0 + pD и A = A + p, p=1,2,..., также , являю тся ре ш е н и е м у равн е н и я. Таки х п ар д ля кажд ого k кон е чн ое чи сло т.к. n < N. Пе ре брав вс е k м ы п острои м табли цу соотве тстви я чи с е лА остаткам n, п ри че м н е обход и м о особо отм е чать н е од н озн ачн ость ре ш е н и я (е с ли од н ом у ос татку соотве тству ю т н е сколько чи селA). Те п е рьд аже е с ли п ри зад ан н ы х N, C и D н е
Испан ская косм е т иче ская фирм а "Ninelle" (бре н д-м е н е дж е р по Ц Ч Э Р Г.Ив ан ов а ) н аградил а побе дит е л ьн иц пе рв ого т ура олим пиады Л .Тю н ин у, А.Б ой че н ко, А .Тарасову св ое й продукц ие й Д окт ор физико-м ат е мат иче ских н аук, профе ссор Вол гоградского т е хн иче скогоун ив е рсит е т а Ге н н адий Ильич Б ры згал ин н аградил ст уде н т ов в орон е ж ских в узов , показав ших хорошие ре зул ьт ат ы в пе рв ом т уре , св ое й м он огра фие й "Ч уде сн ой т ай н ы клю ч" (н овое прочт е н ие "С л ов а о пол ку Игоре в е ", опираю щ е е ся н а ун икал ьн ую закон оме рн ост ь, обн аруж е н н ую в ст рое н ии поэ м ы ) 23.09.2002 П ре зиде н т фирм ы 'RelexUS' А.В.П е ш ков (в ы пускн ик фа кул ьт е т а П ММ) пре дост авил дл я н агра ж де н ия призе ров в т орогот ура ол им пиа ды дв е ц е н н ы е кн иги "Ethical Hacking" (720 ст ран иц ) и "Web Hacking" (490 ст ран иц ). 17.09.2002 Издат е льст в о "Р адиоС офт " (за м . дире кт ора фирмы А.С исёв , вы пускн ик фа кул ьт е т а П ММ) н аградит побе дит е л е й в т орогот ура ш колы -ол им пиады "С ов ре м е н н ы м ан гл о-русским слов аре м по вы числ ит е льн ой т е хн ике " (600 ст ран иц ). 11.09.2002 В газе т е "Изв е ст ия" от 10 се н т ября 2002 года опубл иков ан а заме т ка А.С орокин а "П опре зиде н т скому гран т у" . 9.09.2002 В суббот н е м н оме ре м олоде ж н ой общ е ст в е н н о-пол ит иче ской газе т ы Ворон е ж ской област и «Мол одой Комм ун а р» от 7 се н т ября 2002 года н а 16 полосе опубл иков ан а зам е т ка О.Е м е л ьян е н ко«Талан т ам н адопом ога т ь» о н аш е й ш кол е -ол им пиаде . 6.09.2002 Ка ж дом у участ н ику в т орого т ура ол им пиады буде т пре дост ав л е н а 5проц е н т н ая скидка до кон ц а года н а приобре т е н ие т ов аров в магазин ах фирм ы «Мирра-Л ю кс» (руков одит е л ь ре гион ал ьн ого от де ле н ия фирмы Ч е рн ы х Н ин а П е т ров н а) и компью т е рн ой фирмы «Р Е Т» (ге н е рал ьн ы й дире кт ор Кол ы халин Вл адим ир Михай л ов ич)
вс е чи сла B и м е ю тобратн ы е отображе н и я, н е которы е код овы е п ос ле д овате льн ос ти у д астся расш и фровать. } Program Cipher; const MaxN = 30000; {М аксим альн ая д ли н а п осле д овае тльн ости } InpName = 'input.txt'; {Им я вход н ого файла} OutName = 'output.txt'; {Им я вы ход н ого файла} NotUsed = -1;
{Н ачальн ое зн аче н и е , с оотве тс тву ю щ е е остатку }
4.09.2002 18
63
begin Init; readln(IFile, s); while s <> '#' do begin s := s + ' '; IndicatePairs(s, pair1, pair2); if (DefineCross(Pair1)) and (DefineCross(Pair2)) then OutCross(Pair1, Pair2) else OutImpossibl; readln(iFile, s); end; Done; end. П р ог р ам м а№ 8 А втор ре ш е н и я н е од н ократн ы й и н форм ати ке , п рограм м и рован и
Ш иф р - Гл ады ш е в Оле г, м аги стран т п е рвого год а обу че н и я, п обе д и те ль ш кольн ы х и сту д е н че ски х оли м п и ад п о у час тн и к че тве рть-фи н ала п е рве н с тва м и ра по ю сре д и с ту д е н тов .
Зад ача бы ла п ре д ложе н а н а че тве ртьфи н але м и рового п е рве н ства п о п рограм м и рован и ю 2000 год а (г. Саратов). У слови е зад ачи . А лфави т н е которой с тран ы с ос тои т и з больш ого коли че с тва и е рогли фов. В се он и п рон у м е рован ы чи слам и от 0 д о N (0<=N<=30000). В и сход н ом те кс те кажд ом у и е рогли фу с тави тся в соотве тс тви е е го н ом е р A, которы й у м н ожае тся н а н е которое чи сло D и к ре зу льтату п ри бавляе тс я чи сло C. В каче стве код а В бе ре тс я ос таток от д е ле н и я п олу че н н ого чи с ла н а N. Тре бу е тся н ап и с атьп рограм м у , которая п о зад ан н ы м N, D, С и код овой п осле д овате льн ос ти оп ре д е ляе т возм ожн о ли од н озн ачн ое д е код и рован и е и , е с ли д а, вы чи сляе ти сход н у ю п осле д овате льн ость. Input.txt: В п е рвой с троке стоят чи сла N и M, разд е ле н н ы е п робе лом , гд е M (1<=M<=30000) - коли че ство и е рогли фов в с ообщ е н и и . В о второй с троке н аход ятс я чи сла D и С (1<=C,D<=30000). В тре тье й - п осле д овате льн ость
ООО П Ф "Д ж уди" (ге н е рал ьн ы й дире кт ор - Ан дре й чиков А.В.) в ы пуст ил о т ре т ью част ь сборн ика "Ол им пиадн ы е за дачи по програм м иров ан ию . Лучшие ре ше н ия", в кот орую вошли задачи олим пиа д прошлы х л е т , ре ше н ие кот оры х пре дст ав ле н о ст уде н т ам и факульт е т а прикл адн ой м ат е м ат ики, ин формат ики и ме хан ики Колбе ш кин ы м Д ., Я кубе н ко А ., Р ом а щ е н ко А. В издан ие в ошл и м ат е риалы пе рв ой от кры т ой ре гион ал ьн ой ст уде н че ской ш кол ы -олим пиады 3.09.2002 Р е кт ора т Ворон е ж скогогосун иве рсит е т а план ируе т в ы де лит ь бе спл ат н ы е пут е в ки для от ды ха н а т урбазах Р оссии, а т акж е сан ат орн о-курорт н ы е пут е в ки в осьм и ст уде н т ам Ворон е ж ского ун ив е рсит е т а, показав шим н аил учш ие ре зул ьт ат ы в ол им пиаде . Р е кт ора т Ворон е ж скогогосун иве рсит е т а план ируе т в ы де лит ь бе спл ат н ы е пут е в ки дл я сан ат орн о-курорт н ого ле че н ия все м ст уде н т ам -ин в алидам Ворон е ж ского ун ив е рсит е т а – участ н ика м ш кол ы -олим пиады и поощ рит ь их де н е ж н ы м возн аграж де н ие м . Ассоц иац ия «Ж е н щ ин ы в н ауке и образова н ии» вы де лила приз участ н ику пе рв ого т ура , пе рвы м прислав ше м у прав ил ьн ое ре ше н ие задан ий пе рв ого т ура н е зависимоот н ом ин ац ии. Ассоц иац ия «Ж е н щ ин ы - м ат е м ат ики» в ы де л ила приз участ н иц е пе рв ого т ура , пре дст ав ивш е й оригин альн ое ре ше н ие задан ий пе рв ого т ура н е зав исимоот н омин ац ии. 30.08.2002 Ф он д профе ссора С .Г .Кре й н а вы де л ил призы участ н икам пе рв ого т ура , показавш им н аилучш ие ре зул ьт а т ы в разде ле м ат е м ат ика. Ворон е ж ский госун ив е рсит е т учре дил призы ст уде н т ам , показав шим хорош ие ре зул ьт а т ы в ол им пиаде физиче ский факул ьт е т : по н аправ ле н ию физико-м ат е м ат иче ские н ауки; факульт е т ком пью т е рн ы х н аук: по н аправл е н ию ком пью т е рн ы е н ауки; м ат е м ат иче ский фа кул ьт е т : пон аправ ле н ию м ат е м ат ика; химиче ский факульт е т : пон аправл е н иям хим ия и м е диц ин а ; ю ридиче ский факульт е т : пон аправл е н ию ю риспруде н ц ия; факульт е т ром ан о-ге рм ан ской филол огии: по н аправл е н ию ком пью т е рн ая л ин гв ист ика ; э кон ом иче ский факул ьт е т : пон аправл е н ию э кон ом ика; факул ьт е т прикл адн ой м ат е м а т ики, ин форм ат ики и м е хан ики: по 19
62
н аправ ле н иям программ иров ан ие и ком пью т е рн ое м оде л иров ан ие . 29.08.2002 Р уков одит е ль прое кт а доц . О.Ф .У сков а вы ст упил а н а Ворон е ж ском обла ст н ом радиов пе ре даче "Д иал оги огл авн ом " срассказом о Вт орой ре гион ал ьн ой ст уде н че ской ш коле -ол им пиа де попрограмм иров ан ию и ком пью т е рн ому моде л иров ан ию . 25.08.2002 Компа н ия "Ин формсв язь-Ч е рн озе мье ", фирмы Р Е Т, Р Е Л Э КС , Ц е н т рал ьн оЧ е рн озе м н ое пре дст авит е л ьст в о корпорац ии "П АР У С ", г.Ворон е ж пл ан ирую т пригла сит ь побе дит е л е й ш кол ы -ол им пиады дл я прохож де н ия ст аж иров ки и посл е дую щ е гот рудоуст рой ст в а. И нф ор м ационная поддерж каоткр ы той рег иональной студенческой ш колы -олим пиады попр ог р ам м ир ованию иком пью терном у м оделир ованию Газе та «К ом сом ольская п равд а»(ре ги он альн ы й вы п у с к) Газе та "М олод ой ком м у н ар" Газе та "В орон е жс ки й у н и ве рсите т" В орон е жс кое госуд арстве н н ое рад и о Газе та «Ф аку льте т ПМ М » Газе та бе лгород ски хсту д е н тов «Сту Д е н ь» О О О ПФ «Д жу д и » Спонсор ы втор ой откр ы той р егиональной студенческой ш колы олим пиады попр ог р ам м ир ованию иком пью тер ном у м оделир ованию А д м и н и страци я В орон е жской области ЗА О "РЕ Т", г.В орон е ж К осм е ти че с кая фи рм а NINELLE, Испан и я ЗА О "РЕ Л Э К С", г.В орон е ж Ф он д С.Г.К ре йн а Росс и йс кая А сс оци аци я "Ж е н щ и н ы в н ау ке и образован и и " Росс и йс кая А сс оци аци я "Ж е н щ и н ы -м ате м ати ки " О О О ПФ "Д жу д и " О О О «Б У РУ Т» О О О «Э кс п е рт» О О О «OCS-Ю г» Ф и рм а «Ин форм бу хгалте ри я-В орон е ж» Ф и рм а «К ом п ью те рн ы е те хн ологи и » К ом п ан и я «Ин форм связь-Ч е рн озе м ье » Изд ате льс кое п ре д п ри яти е «Рад и оСофт» Ф и рм а RelexUS (СШ А ) 20
procedure OutCross(var p1, p2 : TPair); //Вывод пересечения var i, g, mUp, mDown : integer; begin mUp := Max(p1.posS2, p2.posS2); mDown := Max(p1.lengS2-p1.posS2, p2.lengS2-p2.posS2); if p1.posS2 > p2.posS2 then addSpace(p2.s2, p1.s2, abs(p1.posS2-p2.posS2), abs(p1.lengS2 - p1.posS2 - p2.lengS2 + p2.posS2)) else addSpace(p1.s2, p2.s2, abs(p1.posS2-p2.posS2), abs(p1.lengS2 - p1.posS2 - p2.lengS2 + p2.posS2)); for i := 1 to mUp + mDown do begin if i <> mUp then for g := 1 to p1.lengS1 + p2.lengS1 + 1 do if (g = p1.posS1 )then write(OFile, p1.s2[i]) else if (g = (p2.posS1+ p1.lengS1 + 1)) then write(OFile, p2.s2[i]) else write(OFile, ' ') else write(OFile, p1.s1, ' ', p2.s1); writeln(OFile); end; writeln(OFile); end; procedure OutImpossibl; begin writeln(OFile, NeVozmozno); writeln(OFile); end; procedure Done; begin close(IFile); close(OFile); end; 61
p1.lengS2 := length(p1.s2); p2.lengS1 := length(p2.s1); p2.lengS2 := length(p2.s2); end; function DefineCross(var p : TPair) : boolean; //Нахождение пересечения, если возможно var i, g : integer; begin i := 1; g := 1; while (i <= p.lengS1) and (p.s1[i] <> p.s2[g]) do begin g := 1; while (g <= p.lengS2) and (p.s1[i] <> p.s2[g]) do inc(g); if g > p.lengS2 then inc(i); end; Result := (i <= p.lengS1)and(g <= p.lengS2); if Result then begin p.posS1 := i; p.posS2 := g; end; end; function Max(a, b : integer): integer; begin result := a; if b > a then result := b; end; procedure AddSpace(var s1, s2 : TString; n1, n2 : integer); var i : integer; begin for i := 1 to n1 do s1 := ' ' + s1; for i := 1 to n2 do s2 := s2 + ' '; end; 60
ЗА Д А Н И Я 1 Т У РА Секция пр ог р ам м ир ования иинф ор м ационног ом оделир ования Зад ача (общ ая д ля всех н ом и н аци й) П ас сажи р п ри ш е л н а автобу с н у ю остан овку в 8:00 и , н аход ясь н а н е й д о 8:59, зап и сы вал вре м я п ри бы ти я кажд ого автобу с а. Н а кажд ом м арш ру те автобу сы д ви жу тс я с равн ом е рн ы м и н те рвалом (то е сть п ри бы ваю т н а ос тан овку че ре з од и н аковы е п ром е жу тки вре м е н и ). Изве стн о также , что в у казан н ы й отре зок вре м е н и к остан овке п од ъе зжали п о крайн е й м е ре д ва автобу с а кажд ого м арш ру та. Тре бу е тся п о зап и с ям , сде лан н ы м п ас сажи ром н а остан овке , оп ре д е ли ть н аи м е н ьш е е коли че ство автобу сн ы х м арш ру тов, п роход ящ и х че ре з эту ос тан овку , и графи к д ви же н и я автобу сов п о эти м м арш ру там . Те хн иче ские т ре бов ан ия К оли че ство м арш ру тов <= 17. Входн ы е дан н ы е рас п олагаю тся в те кстовом файле Input.txt, которы й сод е ржи т в п е рвой с троке чи сло n<=300 (коли че с тво п ри бы вш и х автобу сов), во второй с троке с од е ржи тс я п осле д овате льн остьце лы х чи сел- вре м я п ри бы ти я автобу сов н а ос тан овку , зад авае м ое в м и н у тах це лы м и чи с лам и от 0 д о 59. Вы ходн ы е дан н ы е п ом е щ аю тся в те кс товы й файл Output.txt, кажд ая с трока которого д олжн а сод е ржать д ан н ы е д ля од н ого м арш ру та: вре м я п ри бы ти я п е рвого автобу са и и н те рвал д ви же н и я, зад ан н ы й в м и н у тах. Поряд ок расположе н и я м арш ру тов н е важе н . Е сли возм ожн о н е сколько ре ш е н и й, д ос таточн о п олу чи тьтолько од и н и з вари ан тов. Зад ачи п о н ом и н аци ям Н ом ин а ц ия «Ф изкульт ура и спорт » «Э с тафе та» В лы жн ой эс тафе те 4 п о 10 км у частву ю т N ком ан д . В суд е йс ку ю колле ги ю п ос ту п ае т и н форм аци я о том , за какое вре м я каки м у час тн и ком п ройд е н оче ре д н ой этап эстафе ты . а) Расположи ть у час тн и ков кажд ой отд е льн ой ком ан д ы п о возрастан и ю ре зу льтатов эстафе ты , т.е . п е рвой в ком ан д е д олжн а стоять фам и ли я у частн и ка, п оказавш е го н аи м е н ьш е е вре м я п рохожд е н и я этап а 10 км сре д и 21
д ру ги х чле н ов ком ан д ы , п осле д н е й - фам и ли я у час тн и ка с н аи больш и м вре м е н е м п рохожд е н и я этап а. б) О п ре д е ли ть п обе д и те ля в и н д и ви д у альн ом п е рве н с тве сре д и вс ех у частн и ков эстафе ты . в) О п ре д е ли ть ком ан д у -п обе д и те льн и цу , н абравш у ю н аи м е н ьш е е сум м арн ое вре м я Н ом ин ац ия «Искусст в о» "К он ку рсп и ан и стов" В кон ку рс е п и ан и с тов вы с ту п ле н и я у час тн и ков оце н и вае т жю ри , в состав которого вход ят ш е сть м у зы кан тов. М акси м альн ая оце н ка, котору ю м оже т вы с тави ть кажд ы й чле н жю ри , 10 баллов, м и н и м альн ая – н оль. Тре бу е тся разработатьалгори тм (п рограм м у ) д ля од е ржащ е й фам и ли и и и н и ци алы - п острое н и я ли н е йн ой табли цы , с у частн и ков, и п рям оу гольн ой табли цы , с од е ржащ е й оце н ки кажд ого чле н а жю ри ; - оп ре д е ле н и я фам и ли и у частн и ка –п обе д и те ля кон ку рса; - н ом е р с ам ого с трогого чле н а жю ри . Н омин ац ия «П е рв окурсн ики» "Пре д м е ты ". Тре бу е тся распре д е ли ть N п ре д м е тов (N<15), м ас са кажд ого и з которы х и зве с тн а, в д ва рю кзака так, чтобы н ап олн е н н ы е рю кзаки м и н и м альн о отли чали сь д ру г от д ру га п о ве су. Те хн иче ские т ре бован ия Входн ы е дан н ы е бе ру тся и з те кстового файла Input.txt. В е го п е рвой строке н аход и тся чи сло N, вторая строка сод е ржи тп ос ле д овате льн ос ть чи с е л, зад аю щ и х ве сп ре д м е тов п о п оряд ку и х н ом е ров. Р е зул ьт ат вы вод и тся н а экран в ви д е д ву х с трок, кажд ая и з которы х сод е ржи тп осле д овате льн остьн ом е ров п ре д м е тов, п ом е щ ае м ы х в рю кзак, и е го ве с. Н ом ин ац ия «Ин форм ат ика , как общ е образов ат е л ьн а я дисц ипл ин а» "М орс кой бой" Тре бу е тся см од е ли ровать п оле д ля и гры в «м орской бой» и п од счи тать 22
TPair = record s1, s2 : TString; lengS1, lengS2 : integer; posS1, posS2 : integer; end; var Pair1, Pair2 : TPair; IFile, OFile : text; s : TString; procedure Init; begin assign(IFile, InFile); assign(OFile, OutFile); reset(IFile); rewrite(OFile); end; function IndicateString(var s : string; var pos : integer): TString; //Выделение слова из строки begin while s[pos] = ' ' do inc(pos); Result := ''; while s[pos] <> ' ' do begin Result := Result + s[pos]; inc(pos); end; end; procedure IndicatePairs(var s : TString;var p1, p2 : TPair); //Создание и инициация пар слов var pos : integer; begin pos := 1; p1.s1 := IndicateString(s, pos); p1.s2 := IndicateString(s, pos); p2.s1 := IndicateString(s, pos); p2.s2 := IndicateString(s, pos); p1.lengS1 := length(p1.s1); 59
коли че с тво од н о-, д ву х-, тре х- и че ты ре хп алу бн ы х корабле й, рас п оложе н н ы х н а н е м . К орабли н е м огу т бы ть «и зогн у ты м и » и д ру г с д ру гом н е соп ри кас аю тся. Поле д ля и гры и м е е тразм е р 10х10 кле ток. Те хн иче ские т ре бов ан ия Входн ы е дан н ы е –коли че ство зан яты хкле ток N и н абор и з N п ар це лы х чи с е л(коорд и н ат кле ток) - бе ру тся и з те кстового файла INPUT.TXT, е го п е рвая строка с од е ржи тце лое чи с ло N, в кажд ой сле д у ю щ е й с троке – коорд и н аты зан ятой кле тки . Р е зул ьт ат ы –ти п корабле й и и х коли че с тво - вы вод ятся п ос трочн о н а экран .
writeln(fo); end; end; var st : string; begin writeln; assign(fi, 'input.txt'); assign(fo, 'output.txt'); reset(fi); rewrite(fo); while not eof(fi) do begin readln(fi, st); if (st <> '#') then Analyse(st) else break; {Е с ли н айд е н заве рш аю щ и й с и м вол- заве рш ае м вы п олн е н и е } end; close(fi); close(fo); end. П р ог р ам м а№ 7 Пер екр есток изслов Е щ е од и н вари ан т ре ш е н и я, п ре д ставле н н ы й с ту д е н том 2 ку рса м ате м ати че ского факу льте та С .Логун ов ы м
Н ом ин ац ия «Ин форм ат ика ка к профил ирую щ а я дисц иплин а» "Л аби ри н т" Л аби ри н т п ре д ставляе т с обой н абор од и н аковы х ком н ат, кажд ая и з которы х м оже т и м е ть от 1 д о 4 д ве ре й в сос е д н и е ком н аты . Пу тн и к, войд я в лаби ри н т, д олго блу жд ал п о н е м у , п ока н е н аш е л вы ход . К ажд ы й раз, п ри п е ре ход е в д ру гу ю ком н ату , он д е лалзап и сь в блокн оте , отм е чая н ап равле н и е д ви же н и я и з ком н аты в ком н ату бу квам и : N – севе р, E – восток, S – ю г, Wзап ад . Тре бу е тся п о зад ан н ом у оп и сан и ю м арш ру та п у тн и ка оп ре д е ли ть сам ы й коротки й п у ть, сос тоящ и й и з ком н ат, в которы х п у тн и к п обы вал, и ве д у щ и й и з вход а в лаби ри н тк е го вы ход у . Те хн иче ские т ре бов ан ия Входн ы е дан н ы е бе ру тся и з те кс тового файла Input.txt, в п е рвой с троке файла у казы вае тс я коли че с тво п е ре ход ов и з ком н аты в ком н ату , кажд ая с ле д у ю щ ая строка сод е ржи т од н у и з бу кв N, E, S, W. Вы ходн ы е дан н ы е –строка ли те р –вы вод и тся н а экран и в те кс товы й файл Output.txt.
program Cross; {$APPTYPE CONSOLE} //Logunov S. VSU Math
Н омин ац ия «С т уде н т ы гум ан ит арн ы х спе ц иальн ост е й »
const InFile = 'Input.txt'; OutFile = 'Output.txt'; NeVozmozno = 'НЕ ВОЗМОЖНО';
"А и Б " В ве д е н н ы й те кст п ре д ставляе т с обой п ре д ложе н и е , в котором вс тре чае тся п е ре чи с ле н и е д ву х объе ктов, связан н ы х с ою зом «и ». Тре бу е тся п ом е н ять м ес там и слова, сое д и н е н н ы е эти м сою зом . Н ап ри м е р, те кст «А и Б сид е ли н а тру бе »п осле п ре образован и я д олже н и м е тьви д «Б и А сид е ли н а тру бе ».
type TString = string; 58
23
Секция прикладног опр ог р ам м ног ообеспечения Зад ан и е 1 Созд ать эм бле м у ш колы -оли м п и ад ы по п рограм м и рован и ю и ком п ью те рн ом у м од е ли рован и ю . Тре бов ан ия: 1) Работа м оже т бы ть вы п олн е н а в лю бом ре д акторе . 2) Пом и м о графи че ски х эле м е н тов эм бле м а д олжн а сод е ржать н азван и е и ли аббре ви ату ру н азван и я ш колы -оли м п и ад ы . Зад ан и е 2 Созд ать ги п е рте кс товы й д оку м е н т, сод е ржащ и й и н форм аци ю об авторе , е го гру п п е и у че бн ом заве д е н и и , в котором у чи тся автор. Тре бов ан ия: 1) Д и зайн е рское ре ш е н и е д олжн о вклю чать фото автора, фото гру п п ы (п од гру п п ы ), работаю щ е й в ком п ью те рн ом клас с е и фото зд ан и я ву за. 2) В се файлы д олжн ы сод е ржаться в од н ом каталоге . Ссы лки д олжн ы бы ть отн осите льн ы м и . Зад ан и е 3 Сре д ствам и Excel с озд ать файл, с од е ржащ и й ре ш е н и е зад ачи п рои зве д е н и я д ву х м атри цразм е ра 4х4. Тре бов ан ия: 1) Н али чи е заголовков. 2) Сохран е н и е форм у л. 3) Расположе н и е и сход н ы х д ан н ы х и ре ш е н и я н а од н ом экран е . ЗА Д А Н И Я В Т О РО Г О Т У РА Секция « А лгор итм изация ипр ог р ам м ир ование» Задания 2 тур ав ном инации"Первокур сники" Гор изонт для ар х итектор а В ве д е н и е С рос том п рои звод и те льн ости ком п ью те рн ы х с и сте м , и х п овсем е стн ое и сп ользован и е у же д ля н ас н е в н ови н ку . О д н и м и з п ри м е н е н и е м с тало 24
begin k := 1; {Полу чае м 4 слова и з строки н ачи н ая сп е рвой бу квы } for i := 1 to 4 do stw[i] := GetWord(st, k); {Полу чае м коорд и н аты п е ре сече н и я слов - (i1, j1), (i2, j2)} b := GetCross(stw[1], stw[2], i1, j1); b := b and GetCross(stw[3], stw[4], i2, j2); {Полу чае м абсолю тн у ю коорд и н ату в вы ход н ом файле } i2 := i2 + length(stw[1])+1; {Е с ли оба п е ре сече н и я н айд е н ы , то н ачи н ае м вы вод } if b then begin {Пом е щ ае м в min и max крайн и е y-коорд и н аты ве рти кальн ы х слов} if (j1 >= j2) then min := 1-j1 else min := 1-j2; if (length(stw[2])-j1) > (length(stw[4])-j2) then max := length(stw[2])-j1 else max := length(stw[4])-j2; {В ци кле п роход и м вс е y-коорд и н аты } for j := min to max do begin {Е сли это н е главн ая коорд и н ата (сгори зон тальн ы м и с ловам и )} if (j <> 0) then begin {То вы вод и м бу квы сп рави льн ой табу ляци е й} for i := 1 to i1-1 do write(fo, ' '); if (j1+j > 0) and (j1+j <= length(stw[2])) then write(fo, stw[2][j1+j]) else write(fo, ' '); for i := i1+1 to i2-1 do write(fo, ' '); if (j2+j > 0) and (j2+j <= length(stw[4])) then write(fo, stw[4][j2+j]) else write(fo, ' '); writeln(fo); end else {Ин аче вы вод и м гори зон тальн ы е слова} writeln(fo, stw[1]+' '+stw[3]); end; writeln(fo); end else begin {Е сли п е ре с е че н и е н е н айд е н о - собщ ае м обэтом } writeln(fo, 'CAN''T'); 57
{ Ф у н кци я п олу че н и я коорд и н аты п е ре че н и я с лов Е сли фу н кци я возвращ ае т true, то коорд и н аты п е ре с е че н и я слов st1 и st2 бу д у тн аход и ться в i0, j0 } function GetCross(var st1, st2 : string; var i0, j0 : integer) : boolean; var i, j : integer; b : boolean; begin {Сн ачала счи тае м , что п е ре сече н и е н е н айд е н о} i0 := 0; j0 := 0; i := 1; b := true; {Прове ряе м все возм ожн ы е вари ан ты } while b and (i <= length(st1)) do begin j := 1; while b and (j <= length(st2)) do begin if (st1[i] = st2[j]) then begin {Е с ли вари ан тн аш е лс я, зап ом и н ае м е го коорд и н аты и сбрасы вае м флаг} b := false; i0 := i; j0 := j;
и спользован и е и з в п рои звод стве н н ом п рое кти рован и и , н ачи н ая п рои звод стве н н ы м и систе м ам и , п рое кти рован и е м п е чатн ы х п лат, п рое кти рован и е м и д и зайн ом архи те кту рн ы х соору же н и й и т.д . О д н а и з п робле м , которая п оявляе тся п ри этом - у д але н и е н е ви д и м ы х ли н и й п ри отри совке и зображе н и я н а д и спле е . Н е ви д и м ы е ли н и и – это ли н и и , которы е скры ты д ру ги м и час тям и и зображе н и я. Пробле м а В аш а зад ача п ом очь город с ком у архи те ктору п ри п рое кти рован и и город с ки х п ос трое к. Програм м а, н ап и с ан н ая В ам и д олжн а п рави льн о ри совать оче ртан и я строе н и й в город е . Д ля того чтобы п робле м а бы ла у д обн ой д ля ре ш е н и я н а ком п ью те ре , вс е зд ан и я п ре д с тавляю тс я п рям оу гольн и кам и , и м е ю щ и м и общ е е ос н ован и е . Таки м образом , ве сь город п ре д с тавляе тся д ву хм е рн ы м и з лю бой точки н аблю д е н и я. К ажд ое зд ан и е п ре д с тавле н о тройкой чи сел (Li, Hi, Ri), гд е Li и R i ле вая и п равая коорд и н ата зд ан и я соотве тстве н н о, а Hi вы сота с трое н и я. Н а ри сун ке н и же зд ан и я оп и сы ваю тся сле д у ю щ и м и д ан н ы м и : (1,11,5), (2,6,7), (3,13,9), (12,7,16), (14,3,25), (19,18,22), (23,13,29), (24,4,28). О че ртан и я с трое н и й бу д у т оп и сы ваться сле д у ю щ е й п ос ле д овате льн остью : (1, 11, 3, 13, 9, 0, 12, 7, 16, 3, 19, 18, 22, 3, 23, 13, 29, 0) В ход н ы е д ан н ы е В ход н ы е д ан н ы е п ре д с тавляю т собой п осле д овате льн ос ть трое к (Li, Hi, Ri) д ля кажд ого зд ан и я. В се коорд и н аты зд ан и й п ре д с тавляю тсобой це лы е чи с ла н е больш и е , че м 10000. Исход н ы е д ан н ы е сод е ржат и н форм аци ю как м и н и м у м обод н ом зд ан и и , м аксим у м о 50-ти . К ажд ая тройка чи селзан и м ае т од н у строку и сход н ого файла, все чи сла разд е ле н ы од н и м и ли н е скольки м и п робе лам и . Тройки чи сел отсорти рован ы п о ле вой коорд и н ате п о возрастан и ю , т.е . и н форм аци я о зд ан и ях, рас п оложе н н ы х ле ве е и д е т ран ьш е . В ы ход н ы е д ан н ы е Ре зу льтатом работы п рограм м ы д олже н бы ть ве ктор, оп и сы ваю щ и й
end; inc(j); end; inc(i); end; GetCross := not b; end; var k, i, j, i1, i2, j1, j2, min, max : integer; b : boolean; {флаг сущ е ствован и я п е ре сече н и я} stw : array [1..4] of string; {м ас си в вход н ы х слов}
56
оче ртан и е зд ан и й. В этом ве кторе (V1,V2,....Vn), Vi – сче тн ы м и i оп и сы ваю тся д ли н ы ве рти кальн ы х ли н и й. Vi – сн е че тн ы м и i п ре д с тавляю т собой д ли н ы гори зон тальн ы х ли н и и . М ожн о говори ть, что этот ве ктор п ре д ставляе т собой п у ть п е ра п о экран у д ля отри совки . После д н е й ком п он е н т ве ктора д олже н бы ть н у ле м . При м е р и сход н ы х д ан н ы х 1 11 5 25
267 3 13 9 12 7 16 14 3 25 19 18 22 23 13 29 24 4 28 При м е р ре зу льтата 1 11 3 13 9 0 12 7 16 3 19 18 22 3 23 13 29 0
М нож ителииф актор иалы Ф актори ал чи сла N (зап и сы вае тся как N!) оп ре д е ляе тся как п рои зве д е н и е всех це лы х чи сле от1 д о N. Ч ас то он оп ре д е ляе тся ре ку рс и вн о: 1!=1 N!=N*(N-1)! Ф актори алрас те т оче н ь и оче н ь бы с тро, н ап ри м е р 5! = 120, 10! = 3,628,800. О д и н и з вари ан тов п ре д с тавле н и я таки х больш и х чи сел – это у казан и е е го разложе н и я н а п рос ты е м н ожи те ли . Так д ля чи с ла 825 это ( 0 1 2 0 1), которое м ожн о расш и фровать как: н е т в разложе н и и «2», од н а «3», д ве «5», н е т «7»и од н о чи с ло «11». Н ап и ш и те п рограм м у , которая счи ты вае т це лое чи сло N ( 2 <= N <= 100 ) и п е чатае т зн аче н и е фактори ала в ви д е разложе н и я н а п рос ты е м н ожи те ли . В ход н ы е д ан н ы е п ре д ставляю т с обой чи сло N. В ы ход н ы е
д ан н ы е
п ре д ставляю т с обой с троку ,
в
н ачале
которой
рас п олагае тс я чи с ло N и зн ак «!», зн ак «=», а д але е п овторе н и я д ля кажд ого м н ожи те ля-п рос того чи сла.
Перекресток изслов А втор ре ш е н и я - с ту д е н т 3 ку рс а факу льте та ПМ М Вы рост ков Д м ит рий , п обе д и те ль ш колы -оли м п и ад ы 2002 год а, и м е н н ой с ти п е н д и ат и н форм аци он н ой ком п ан и и «Ин форм связь-Ч е рн озе м ье » var fi, fo : text; {В ход н ой и вы ход н ой файл} { Ф у н кци я вы д е ле н и я слова и з строки st - вход н ая с трока k - п ози ци я, скоторой н е обход и м о н ачать п ои с к Пос ле вы п олн е н и я п роце д у ры k с м е щ ае тся вп раво н а д н и н у с лова } function GetWord(var st : string; var k : integer) : string; var i, ibeg : integer; begin if k > length(st) then begin {В слу чае е с ли с лов больш е н е т вы ход и м } GetWord := ''; exit; end; i := k; while (st[i] = ' ') do inc(i); {П роп у скае м ве д у щ и е п робе лы } ibeg := i; {Зап ом и н ае м м е сто н ачала слова} while (i <= length(st)) and (st[i] <> ' ') do inc(i); k := i; {Те п е рь k=i - кон е ц слова} GetWord := copy(st, ibeg, i-ibeg); {В озвращ ае м это слово} end;
{ Проце д у ра ан али за с троки , п острое н и я п е ре сече н и й слов е с ли возм ожн о и вы вод п е ре кре стков в вы ход н ой файл } procedure Analyse(var st : string);
При м е р ввод а 5 При м е р вы ход н ы х д ан н ы х 5! = 3 1 1
26
55
стру кту ру п е рвого и д е н ти фи катора} p := GetPointVar(s1); if (p = nil) then begin {Е сли такой н е сущ е ству е т, то с озд ае м е го} new(p); p^.name := s1; p^.defstr := copy(st, k, length(st)); p^.next := pFirst; pFirst := p; end else begin {Ин аче п росто м е н яе м строку д ля вы чи сле н и я} p^.defstr := copy(st, k, length(st)); end; end; end; end; var st : string; begin writeln;
При м е р ввод а 53 При м е р вы ход н ы х д ан н ы х 53! = 49 23 12 8 4 4 3 2 2 1 1 1 1 1 1 1 Задания 2 тур ав основной ном инации Перекресток изслов Пе ре кре сток и з слов образу е тся п арой с лов, п е рвое и з которы х располагае тс я гори зон тальн о, а второе ве рти кальн о, п ри этом он и д олжн ы и м е ть общ у ю бу кву . О сн овн ы м п е ре с е че н и е м слов бу д е м счи тать п е ре сече н и е , п ри котором од н а и з возм ожн ы х общ и х бу кв в гори зон тальн ом слове н аход и тся, как м ожн о бли же к н ачалу слова и эта же бу ква н аи боле е бли зко расп олагае тся к н ачалу слова, рас п оложе н н ого ве рти кальн о. Так слова Ж ИРА Ф и Ф РА Н ЦУ З п е ре секаю тся н а бу кве «Р» в кажд ом слове , а слова Б Е ГЕ М О Т и ПО РТУ ГА Л Е Ц н а бу кве «Е ». Д войн ое п е ре сече н и е п од разу м е вае т, что д ве п ары слов разм е щ аю тс я так, что и х гори зон тальн ы е слова н аход ятся н а од н ой строке и кажд ая п ара образу е т ос н овн ое п е ре сече н и е . Н е обход и м о н ап и с ать п рограм м у , которая п олу чае т че ты ре слова и форм и ру е ти з н и х д войн ое п е ре с е че н и е . В ход н ы е д ан н ы е В ход н ы е д ан н ы е п ре д с тавляю т собой файл INPUT.TXT, кажд ая строка которого сод е ржи т 4 с лова ( д ве п ары ). Слова п ре д ставляю т с обой от 1 д о 10 заглавн ы х бу кв и разд е ле н ы д ру г от д ру га ровн о од н и м п робе лом . Ф айлзакан чи вае тс я строкой с остоящ е й и з зн ака «#».
assign(fi, 'input.txt'); assign(fo, 'output.txt'); reset(fi); rewrite(fo); pFirst := nil; while not eof(fi) do begin readln(fi, st); Analyse(st);
Ре зу льтат Ре зу льтаты работы п рограм м ы д олжн ы бы ть п ом е щ е н ы в файл OUTPUT.TXT, п ри этом в файле он и д олжн ы разм е щ аться д войн ы е п е ре сече н и я, так как он и бы ли оп и с ан ы вы ш е . Е сли п е ре с е че н и е н е возм ожн о, то в файл п ом е щ ае т строка «Н Е В О ЗМ О Ж Н О ». М е жд у п е ре с е че н и ям и разли чн ы х м н оже ств с лов н е обход и м о ос тавлять од н у п у сту ю строку в файле . П р им ер вх одны х данны х MATCHES CHEESECAKE PICNIC EXCUSES PEANUT BANANA VACUUM GREEDY # При м е р вы ход н ы х д ан н ы х C H E E
end; close(fi); close(fo); end.
П р ог р ам м а№ 6 54
27
S E C MATCHES K E
E X PICNIC U S E S
НЕ ВОЗМОЖНО К алькуля тор для Пети К нес частью кальку лятор Пе ти слом алс я н а п рош лой н е д е ле . Те п е рь Пе тя н е п ользу е тся ком п ью те ром , так как там н е оказалось п ри ложе н и я “К альку лятор”, а ве рн у лс я к у том и те льн ой п роце д у ре п од с че та н а бу м аге . В ам п ре д лагае тся п ом очь Пе те и н ап и сать е м у п рограм м у , которая бу д е т п рои звод и ть п рос те йш и е вы чи с ле н и я. После разговора сПе те й оказалось, что ваш а п рограм м а д олжн о бы ть такой: • • •
•
п озволятьработатьтолько сце лы м и чи с лам и и только соп е раци ям и «+», «-», «*»; у м е ть и с п ользовать п рои звольн ое коли че с тво п е ре м е н н ы х, с и м е н ам и д ли н ой н е больш е 50 сим волов; основн ой вари ан т и сп ользован и я кальку лятора – н ап и с ан и е не с кольки х форм у л и п ри свое н и е и х п е ре м е н н ы м . Н е которы е форм у лы д остаточн о сложн ы е , а д ру ги е п ре д ставляю т собой п росто од н о чи с ло. Потом Пе тя м оже т сп рос и ть о зн аче н и ях н е которы х п е ре м е н н ы х; м ожн о п е ре оп ре д е ли ть н е которы е п е ре м е н н ы е и п олу чи ть н овы е зн аче н и я п о форм у лам , которы е зави сятот вве д е н н ы хзн аче н и й.
В ход н ы е д ан н ы е строго сле д у ю т с ле д у ю щ е м у син такс и су (РБ Н Ф ): файл = строка { строка } <EOF>. строка = [ присвоение | печать | сброс ] . присвоение = имя_переменной ":=" выражение. печать = "PRINT" переменная. сброс = "RESET". выражение = терм { операция1 терм }. терм = множитель { операция2 множитель }. множитель = "(" выражение ")" | имя_переменной | число. операция1 = "+" | "-". операция2 = "*". имя_переменной = буква { буква | цифра }. число = [ "-" ] цифра { цифра }. буква = "A" | "B" | ... | "Z" | "a" | "b" | ... | "z". 28
procedure ResetVal; var p : pVar; begin p := pFirst; while (p <> nil) do begin p^.defstr := ''; {Сти рае м строку д ля вы чи сле н и я} p := p^.next; end; end; { Проце д у ра ан али за п рочи тан н ой строки st и вы п олн е н и я соотве тству ю щ и х д е йстви й :) } procedure Analyse(var st : string); var k, ex : integer; s1, s2 : string; p : pVar; begin k := 1; s1 := GetWord(st, k); if (s1 = 'PRINT') then begin {Е с ли п е рвы й оп е ратор - 'PRINT' то п е чатае м сле д у ю щ у ю за н и м п е ре м е н н у ю } s2 := GetWord(st, k); PrintVal(s2); end else if (s1 = 'RESET') then begin {Е с ли оп е ратор - 'RESET' - то сбрасы вае м все п е ре м е н н ы е } ResetVal; end else begin {Ин аче чи тае м второе с лово} s2 := GetWord(st, k); if s2 = ':=' then begin {Е сли это п ри сваи ван и е - то п олу чае м у казате льн а 53
if def then def := GetTerm(st, k, m2); if def then m1 := m1-m2; end else k := k1; {Ин аче откат} if def then begin {Е с ли н айд е н о вы раже н и е - сохран яе м е го} GetExpression := true; x := m1; end else GetExpression := false; end; { Проце д у ра вы вод а зн аче н и я и д е н ти фи катора st Ес ли е го зн аче н и е н е оп ре д е ле н о - вы вод и тся и н форм аци я о е го н е оп ре д е ле н н ос ти } procedure PrintVal(var st : string); var p : pVar; x, k : integer; begin p := pFirst; while (p <> nil) do begin if (p^.name = st) then begin k := 1; if GetExpression(p^.defstr, k, x) then writeln(fo, x) else writeln(fo, 'NE OPREDELENO'); exit; end; p := p^.next; end; writeln(fo, 'NE OPREDELENO'); end; { Проце д у ра сброс а зн аче н и й вс е х и д е н ти фи каторов } 52
цифра = "0" | "1" | ... | "8" | "9". В се с троки и сход н ого файла с од е ржат н е боле е 200 сим волов. Зн аче н и я п е ре м е н н ы х м огу т бы ть н е оп ре д е ле н н ы м и , е сли : • •
е сли он а н е оп ре д е ле н а и ли ссы лае тся н а п е ре м е н н у ю , которая н е оп ре д е ле н а е сли оп ре д е ле н и е п е ре м е н н ой сод е ржи тци кл.
В ы д олжн ы н ап и с ать п рограм м у , которая хран и т оп и сан и е п е ре м е н н ы х и д ля кажд ого оп е ратора п е чати вы чи с ляе т зн аче н и е н а ос н ован и и п ос ле д н е го оп ре д е ле н и я п е ре м е н н ы х. Е сли ваш а п рограм м а вс тре чае т оп е ратор «RESET», то он а д олжн а у д али ть все сохран е н н ы е п е ре м е н н ы е так чтобы он и стали н е оп ре д е ле н н ы м и . В ход н ы е д ан н ы е Ф айлINPUT.TXT сод е ржи т п рограм м у , с трого отве чаю щ у ю п ри ве д е н н ом у си н такс и су. Ре зу льтат Д ля кажд ого оп е ратора п е чати в и сход н ом файле , ваш а п рограм м а д олжн а н ап е чатать в файл OUTPUT.txt строку , со зн аче н и е м у казан н ой п е ре м е н н ой и ли фразу «Н Е О ПРЕ Д Е Л Е Н О ». При м е р вход н ы х д ан н ы х a := b + c b := 3 c := 5 PRINT d PRINT a b := 8 PRINT a RESET PRINT a При м е р вы ход н ы х д ан н ы х НЕ ОПРЕДЕЛЕНО 8 13 НЕ ОПРЕДЕЛЕНО М онеты В алю та Н овой Зе лан д и и сод е ржи т ку п ю ры д ос тои н с твом $100, $50, $20, $10, и $5 и м он е ты $2, $1, 50c, 20c, 10c и 5c (д оллары и це н ты ). Н ап и ш и те п рограм м у , которая оп ре д е ляла бы д ля зад ан н ой сум м ы коли че с тво вари ан тов, которы м и он а м оже т бы ть п олу че н а. Изм е н е н и е 29
п оряд ка сле д ован и я м он е т н е счи тае тся н овы м вари ан том . Так сум м а в 20 це н тов, м оже т бы ть п ре д ставле н а вари ан там и : 1 м он е та 20с, 2 м он е ты п о 10с, м он е та 10с+ 2 м он е ты 5си 4 м он е ты 5с. В сего че ты ре вари ан та. В ход н ы е д ан н ы е Ф айл INPUT.TXT сод е ржи т ве щ е стве н н ы е чи сла н е боле е , че м $50.00 н а кажд ой строке . К ажд ая сум м а являе тс я корре ктн ой, т.е . кратн а 5c. Ф айл закан чи вае тся строкой 0.00. Ре зу льтат Ф айл OUTPUT.TXT д олже н н а кажд ой строке с од е ржать сум м у ( д ве д е сяти чн ы е ци фры п осле зап ятой) и че ре з п робе л коли че с тво вари ан тов е е н абора. О гран и че н и е п о вре м е н и д ля п рограм м ы –30 секу н д . При м е р вход н ы х д ан н ы х 0.20 2.00 0.00 При м е р вы ход н ы х д ан н ы х 0.20 4 2.00 293 Задания втор ог отур ав секции « П р икладное пр ог р ам м ное обеспечение» Зад ача 1. Зад ача с вязан а сн азн аче н и е м н а сти п е н д и ю сту д е н тов п о ре зу льтатам экзам е н аци он н ой сесс ии . С це лью у п рощ е н и я ре ш е н и я зад ачи рассм отри м д ан н ы е п о н е которы м сту д е н там д ву х у че бн ы х гру п п , сдаю щ и х в с е сс и ю че ты ре экзам е н а. Сти п е н д и я н азн ачае тся сту д е н там , п олу чи вш и м н а экзам е н ах хорош и е и отли чн ы е оце н ки . Е сли хорош и х оце н ок п олу че н о боле е од н ой, н азн ачае тся сти п е н д и я в разм е ре 100%. За од н у хорош у ю и за все ос тальн ы е отли чн ы е оце н ки у с тан авли вае тся с ти п е н д и я в разм е ре 150%, а за все отли чн ы е - 200%. Д ан н ы е орган и зован ы в три табли цы : СТУ Д Е Н Т, СЕ ССИЯ, СТИПЕ Н Д ИЯ. Табли ца СТУ Д Е Н Т сод е ржи т н е обход и м ы е све д е н и я о кажд ом сту д е н те , обу чаю щ е м ся в ву зе : н ом е р ли чн ого д е ла, фам и ли я, и м я, отче с тво, п ол, д ата рожд е н и я, н ом е р у че бн ой гру п п ы . 30
и н аход и м п рои зве д е н и е } if def then def := GetMnog(st, k, m2); if def then m1 := m1*m2; end else k := k1; {Ин аче осущ е ствляе м откат} if def then begin {Е сли те рм н айд е н - возвращ ае м е го зн аче н и е } GetTerm := true; x := m1; end else GetTerm := false; end; { Ф у н кци я чте н и я вы раже н и я в те ку щ е й строке st н ачи н ая сп ози ци и k При у спе ш н ой и н те рп ре таци и вы раже н и я фу н кци я возвращ ае т true и в п е ре м е н н у ю x п ом е щ ае тзн аче н и е вы раже н и я } function GetExpression(var st : string; var k, x : integer) : boolean; var def : boolean; m1, m2, k1 : integer; op : string; begin if (st = '') then begin GetExpression := false; exit; end; def := GetTerm(st, k, m1); {Ч те н и е п е рвого те рм а} k1 := k; op := GetWord(st, k); {Ч те н и е возм ожн ой оп е раци и } if op = '+' then begin {Е сли оп е раци я - сложе н и е - осущ е с твляе м сложе н и е } if def then def := GetTerm(st, k, m2); if def then m1 := m1+m2; end else if op = '-' then begin {Е сли вы чи тан и е - то осущ е с твляе м вы чи тан и е } 51
minus := true; end; if (s1[1] in ['0'..'9']) then begin {Е сли стои т ци фра - и н те рп ре ти ру е м е е } def := true; val(s1, m1, code); if minus then m1 := -m1; end else begin {Е сли стои т и д е н ти фи катор - вы чи сляе м е го} def := FindVar(s1, stvar); l := 1; if def then def := GetExpression(stvar, l, m1); end; end; if def then begin {Е сли п олу че н о зн аче н и е - сохран яе м е го} GetMnog := true; x := m1; end else GetMnog := false; end; { Ф у н кци я чте н и я те рм а в те ку щ е й строке st н ачи н ая сп ози ци и k
Табли ца СЕ ССИЯ с од е ржи т све д е н и я о ре зу льтатах сдачи сту д е н там и че ты ре х экзам е н ов: н ом е р ли чн ого д е ла, оце н ка 1, оце н ка 2, оце н ка 3, оце н ка 4, ре зу льтат сдачи сес сии . После д н и й м оже т п ри н и м ать од н о и з с ле д у ю щ и х зн аче н и й: "отл" (за вс е отли чн ы е оце н ки ), "хр1" (за од н у че тве рку и вс е остальн ы е п яте рки ), "хор" (за д ве че тве рки и боле е ), "н хр" (за у д овле твори те льн ы е и н е у д овле твори те льн ы е оце н ки ). Табли ца СТИПЕ Н Д ИЯ сод е ржи т и н форм аци ю об у слови ях н азн аче н и я сту д е н тов н а сти п е н д и ю : ре зу льтат сдачи сесс и и и п роце н т сти п е н д и и . Зад ан и е : 1. Созд айте стру кту ры табли ц СТУ Д Е Н Т, СЕ ССИЯ и СТИПЕ Д ИЯ, у стан ови те клю че вы е п оля. 2. Зап олн и те созд ан н ы е табли цы СТУ Д Е Н Т, СЕ ССИЯ и СТИПЕ Н Д ИЯ. 3. Пос тройте зап росПРО Е К Т ПРИК А ЗА , п озволяю щ и й вы вод и ть фам и ли ю , и м я, отче ство и н ом е р гру п п ы сту д е н тов, которы м м оже т бы ть н азн аче н а с ти п е н д и я, а также разм е р н азн ачае м ой с ти п е н д и и в п роце н тахот м и н и м альн ой сти п е н д и и . 4. Пос тройте зап рос СУ М М А , осн ован н ы й н а сформ и рован н ом ран е е зап рос е ПРО Е К Т ПРИК А ЗА , вы чи сляю щ и й разм е р с ти п е н д и и п ри м и н и м альн ой сти п е н д и и 200 р.
При у с п е ш н ой и н те рп ре таци и те рм а фу н кци я возвращ ае т true и в п е ре м е н н у ю x п ом е щ ае тзн аче н и е те рм а } function GetTerm(var st : string; var k, x : integer) : boolean; var def : boolean; m1, m2, k1 : integer;
К оли че с тво зап и с е й в табли цах оп ре д е ли ть с ам остояте льн о. У че с ть, что в базе д ан н ы х д олжн ы сод е ржаться све д е н и я о сту д е н тах, н е п олу чаю щ и х сти п е н д и ю , п олу чаю щ и х 100%, 150% и 200% отм и н и м альн ой сти п е н д и и .
op : string; begin def := GetMnog(st, k, m1); {Ч те н и е п е рвого м н ожи те ля} k1 := k; op := GetWord(st, k); if op = '*' then begin {Е сли с тои т у м н оже н и е - то чи тае м второй м н ожи те ль
Зад ача 2. Ф и рм а п рои звод и т д ве м од е ли А и В сборн ы х кн и жн ы х п олок. Их п рои звод ство огран и че н о н али чи е м сы рья (вы сококаче с тве н н ы х д осок) и вре м е н е м м аш и н н ой обработки . Д ля кажд ого и зд е ли я м од е ли А тре бу е тс я3 2 2 м д ос ок, а д ля и зд е ли я В - 4 м . Ф и рм а м оже т п олу чи ть от свои х п ос тавщ и ков д о 1700 м 2 д осок в н е д е лю . Д ля кажд ого и зд е ли я м од е ли А
50
5.
Пос тройте зап росФ О Н Д , основан н ы й н а с форм и рован н ом ран е е зап рос е СУ М М А , п од вод ящ и й и тоговы е сум м ы сти п е н д и и д ля кажд ой гру п п ы .
31
тре бу е тся 12 м и н . м аш и н н ого вре м е н и , а д ля и зд е ли я м од е ли В - 30 м и н . В н е д е лю м ожн о и сп ользовать 160 ч м аш и н н ого вре м е н и . К ажд ое и зд е ли е м од е ли А п ри н ос и т 2 д олл. п ри бы ли , а кажд ое и зд е ли е м од е ли В - 4 д олл. п ри бы ли . Сколько и зд е ли й кажд ой м од е ли сле д у е т фи рм е вы п у скать в н е д е лю д ля п олу че н и я м аксим альн ой п ри бы ли су с лови е м п олн ого и сп ользован и я ре сурсов (д осок и м аш и н н ого вре м е н и )? Зад ача 3. Созд ать с ре д ствам и PowerPoint ти ту льн ы й ли с т кн и ги . Ссы лки н а разд е лы оглавле н и я д олжн ы у казы вать н а стран и цы , в которы х е с ть только у казан н ы й заголовок (н и че го, кром е заголовка н а стран и це д е лать н е н ад о). Графи че с ки е вставки –н а у см отре н и е автора. И збр анны е р еш ения П р ог р ам м а№ 1 М онеты А втор ре ш е н и я: С идоре н коС т ан исла в Вл адл е н ов ич, с ту д е н т2 ку рса факу льте та ПМ М , п ри зе р оли м п и ад ы const monety:array[1..11] of integer=(5,10,20,50,100,200,500,1000,2000,5000,10000); {массив содержит достоинства всех монет в центах} var Rsum:real; {денежная сумма} sum,Num:longint; {денежная сумма в центах и искомое число вариантов} fi,fo:text;{входной и выходной файлы} function Number(sum:longint;last:integer):longint; {Находит искомое число вариантов Параметр sum - денежная сумма в центах, для которой производится расчёт. last - номинал минимальной монеты, которая была добавлена в комбинацию 32
begin p := pFirst; GetPointVar := nil; while (p <> nil) do begin if (p^.name = name) then begin GetPointVar := p; exit; end; p := p^.next; end; end; {Ссы лка н а сущ е ству ю щ у ю д але е фу н кци ю } function GetExpression(var st : string; var k, x : integer) : boolean; forward; { Ф у н кци я чте н и я м н ожи те ля в те ку щ е й строке st н ачи н ая сп ози ци и k При у спе ш н ой и н те рп ре таци и м н ожи те ля фу н кци я возвращ ае т true и в п е ре м е н н у ю x п ом е щ ае тзн аче н и е м н ожи те ля } function GetMnog(var st : string; var k, x : integer) : boolean; var def, minus : boolean; m1, code, l, last : integer; s1, stvar : string; begin s1 := GetWord(st, k); minus := false; if (s1 = '(') then begin {Е сли откры вае тс я скобка - то д але е бу д е т вы раже н и е } def := GetExpression(st, k, m1); {Ч и тае м закры ваю щ у ю скобку } GetWord(st, k); end else begin if (s1 = '-') then begin {Е сли стои т м и н у с- п од н и м ае м флаг и п е ре чи ты вае м с лово} s1 := GetWord(st, k); 49
end; { Ф у н кци я п ои с ка и д е н ти фи катора в с п и ске сущ е ству ю щ и х и д е н ти фи каторов п о и м е н и name В слу чае у спе ха фу н кци я возвращ ае т true и в п е ре м е н н у ю st п ом е щ ае т с троку д ля е го вы чи с ле н и я, у казан н у ю ран е е во вход н ом файле } function FindVar(var name : string; var st : string) : boolean; var p : pVar; b : boolean; begin p := pFirst; FindVar := false; {П е ре би рае м ве сьспи сок} while (p <> nil) do begin if (p^.name = name) then begin {Е сли и д е н -тор н айд е н - возвращ ае м строку д ля вы чи сле н и я и вы ход и м } st := p^.defstr; FindVar := true; exit; end; p := p^.next; end; end;
} var i:byte; n:longint;{переменная для временного хранения числа комбинаций} begin if sum<0 then number:=0 {Для отрицательной суммы число вариантов =0} else if sum=0 then number:=1 {Для нулевой суммы есть только один вариант} else begin n:=0; for i:=1 to 11 do if last>=monety[i] then n:=n+number(sum-monety[i],monety[i]); {Число вариантов выдачи суммы в J центов равно сумме слагаемых N(J-L,L), где L - все возможные монеты и купюры достоинства не выше Last. Это число вычисляем рекурсивно} number:=n end; end;
{ Ф у н кци я п ои с ка и д е н ти фи катора в с п и ске сущ е ству ю щ и х и д е н ти фи каторов п о и м е н и name. В слу чае у спе ха фу н кци я возвращ ае т у казате льн а с тру кту ру д ан н ы х, сод е ржащ у ю этот и д е н ти фи катор. В п роти вн ом слу чае возвращ ае тся nil. } function GetPointVar(var name : string) : PVar; var p : pVar; b : boolean; 48
begin {main} Assign(fi,'input.txt'); Reset(fi); Assign(fo,'output.txt'); rewrite(fo); {инициализируем файлы} repeat Readln(fi,Rsum); sum:=Round(Rsum*100);{представляем сумму в виде целого числа} if sum<>0 then 33
begin num:=number(sum,sum);{вычисляем число вариантов} writeln(fo,Rsum:5:2,num:12) {зписываем в файл} end; until sum=0;{конец файла} close(fi); close(fo); end. П р ог р ам м а№ 2 А втор д ру гого вари ан та ре ш е н и я Викт ор Гай да й , с ту д е н т III ку рса факу льте та ПМ М , п ри зе р оли м п и ад ы const N_IN = 'Input.txt'; { Им е н а вход н ого и вы ход н ого файлов } N_OUT = 'Output.txt'; COIN_NUM = 10; { Ч и сло разли чн ы хн ом и н алов м он е т } type TCoins = array [1..COIN_NUM] of Integer; const COINS : TCOINS = (1, 2, 4, 10, 20, 40, 100, 200, 400, 1000); { У п оряд оче н н ы е п о возрастан и ю н ом и н алы м он е т; за "е д и н и цу и зм е ре н и я" д е н е жн ы х сум м в п рограм м е всю д у п ри н ят н аи больш и й общ и й д е ли те ль всех м он е тн ы х н ом и н алов - 5 це н тов. Таки м образом , 1 = $0.05, 2 = $0.10 и так д але е . В эту табли цу н е вклю че н а м он е та в $100, так как п о у слови ю все обрабаты вае м ы е д е н е жн ы е сум м ы н е п ре вы ш аю т $50. } MAX_SUM = 1000; { Та с ам ая "м аксим альн ая возм ожн ая" сум м а - $50 } COEFF = 20; { М н ожи те ль д ля п е ре вод а сум м ы в д олларах в у с ловн ы е вн у три п рограм м н ы е е д и н и цы } var f_in, f_out : Text; { В ход н ой и вы ход н ой файлы } r : Real; sum, i, j : Integer; n : LongInt; table : array [0..MAX_SUM, 1..COIN_NUM] of LongInt; { Табли ца коли че ства вари ан тов. table[i,j] - это чи сло с п особов, которы м и 34
{ Ф у н кци я вы д е ле н и я слова и з строки st - вход н ая с трока k - п ози ци я, скоторой н е обход и м о н ачать п ои с к Пос ле вы п олн е н и я п роце д у ры k с м е щ ае тся вп раво н а д н и н у с лова } function GetWord(var st : string; var k : integer) : string; var i, ibeg : integer; begin if k > length(st) then begin {В слу чае е с ли с лов больш е н е т вы ход и м } GetWord := ''; exit; end; i := k; while (st[i] = ' ') do inc(i); {Проп у скае м все ве д у щ и е п робе лы } ibeg := i; {Зап ом и н ае м м е с то н ачала с лова} {Е сли вс тре ти лся зн ак оп е раци и , то} if (st[i] in ['*', '+', '-', '(', ')', ':']) then begin {Е с ли это зн ак п ри сваи ван и я - то возвращ ае м е го (2 с и м вола)} if (st[i] = ':') then begin k := i+2; GetWord := copy(st, ibeg, 2); {Ин аче возвращ ае м од и н сим вол} end else begin k := i+1; GetWord := st[i]; end {Е сли это н е зн аки оп е раци й, то это и д е н ти фи катор. В ы д е ляе м е го} end else begin while (i <= length(st)) and (not (st[i] in ['*', '+', '-', '(', ')', ':', ' '])) do inc(i); k := i; GetWord := copy(st, ibeg, i-ibeg); end; 47
м ожн о вы д ать д е н е жн у ю сум м у i, и спользу я только м он е ты сн ом и н алом
end; не var s:tStr; begin assign(input,'input.txt');{п е ре оп ре д е ляе м стан д артн ы й файлввод а} ReSet(input); assign(output,'output.txt');{п е ре оп ре д е ляе м стан д артн ы й файлвы вод а} ReWrite(output); Per.Top:=0; while not eof do {п ока н е кон е ц файла, д е лае м } begin Readln(s); {чи тае м оче ре д н у ю с троку и з файла} Analyse(s) {ан али зи ру е м строку } end; ReSetPerem; close(output) {закры вае м файлвы вод а} end. П р ог р ам м а№ 5 При ве д е м е щ е од и н вари ан т ре ш е н и я этой зад ачи , вы п олн е н н ы й сту д е н том 3 ку рса факу льте та П М М Вы рост ковы м Д мит рие м , п обе д и те ле м ш колы оли м п и ад ы 2002 год а, и м е н н ы м с ти п е н д и атом и н форм аци он н ой ком п ан и и «Ин форм связь-Ч е рн озе м ье » type PVar = ^TVar; TVar = record {Ти п п е ре м е н н ой} name : string; {Им я п е ре м е н н ой} defstr : string; {Строка д ля е е вы чи сле н и я} next : PVar; {У казате ль н а сле д у ю щ и й эле м е н т с пи с ка} end; var PFirst : PVar; {У казате ль н а п е рвы й эле м е н т в с пи с ке } fi, fo : text; {В ход н ой и вы ход н ой файлы } 46
больш е COINS[j]. При вы п олн е н и и п рограм м ы эта табли ца бу д е т п ос те п е н н о зап олн яться. } lastrow : Integer; { После д н яя зап олн е н н ая строка табли цы table } BEGIN { О ткры вае м вход н ой и вы ход н ой файлы } assign (f_in, N_IN); assign (f_out, N_OUT); reset (f_in); rewrite (f_out); { В н ачале зап олн е н а ли ш ь н у ле вая строка табли цы table } lastrow := 0; for j := 1 to COIN_NUM do table[0,j] := 1; { Су щ е с тву е тли ш ь од и н с п ос об"вы д атьн у ле ву ю сум м у ": вообщ е н и че го н е д авать } { Счи ты вае м в ци кле п о од н ой д е н е жн ой сум м е и обрабаты вае м е ё } readln (f_in, r); repeat { Пе ре вод и м счи тан н у ю сум м у в у словн ы е е д и н и цы } sum := round (r * COEFF); { Ес ли д ля этой сум м ы с трока в табли це table е щ ё н е зап олн е н а "д озап олн яе м " table } if sum > lastrow then begin for i := (lastrow + 1) to sum do { Зап олн яе м i-ю с троку табли цы } for j := 1 to COIN_NUM do { Зап олн яе м кле тку table[i,j] } begin { Итак, н ад о оп ре д е ли ть, скольки м и с п ос обам и м ожн о вы д ать сум м у i, и сп ользу я только м он е ты сн ом и н алом , Н Е Б О Л Ь Ш ИМ , че м COINS[j]. 35
Э то чи с ло с клад ы вае тс я и з д ву х чи с е л. В о-п е рвы х, м ожн о и сп ользоватьтолько м он е ты сн ом и н алом , М Е Н Ь Ш ИМ , че м COINS[j], то е стьзаглян у ть в кле тку ле ве е : } if j > 1 then table[i,j] := table [i,j-1] else table[i,j] := 0; { В о-вторы х, м ожн о взять отн ять отсум м ы од н у м он е ту с н ом и н алом , РА В Н Ы М COINS[j], и п осм отре ть вы ш е п о табли це , скольки м и способам и м ожн о вы д атьос тавш у ю ся, м е н ьш у ю сум м у : } if COINS[j] <= i then table[i,j] := table[i,j] + table[i-COINS[j],j]; end; lastrow := sum; { Те п е рьтабли ца зап олн е н а д о с троки сн ом е ром sum } end; { Ос талосьтолько п осм отре ть в табли це , скольки м и сп особам и м ожн о вы д ать сум м у sum, и сп ользу я В СЕ м он е ты , и вы ве сти ре зу льтат в вы ход н ой файл} n := table[sum,COIN_NUM]; writeln (f_out, r : 4 : 2, ' ', n); { Счи ты вае м сле д у ю щ у ю д е н е жн у ю сум м у } readln (f_in, r); until r = 0; { Прод олжае м работу , п ока н е встре ти м п ри зн ак кон ца вход н ого файла } { Закры вае м вход н ой и вы ход н ой файлы } close (f_in); close (f_out); END. П р ог р ам м а№ 3 Е щ е од н о ре ш е н и е этой же зад ачи , д ан н ое чле н ом жю ри ш колы -оли м п и ад ы и автором те кс та зад ачи Вадимом Мит рофан овиче м Ме л ьн иков ы м , н е од н ократн ы м п ри зе ром оли м п и ад п о и н форм ати ке в ш кольн ы е и сту д е н че ски е год ы . const 36
begin DelTree(Per.Info[Per.Top].Value); Dec(Per.Top) end end; procedure Let(s:tStr); {соотве тс тву е т ком ан д е п ри сваи ван и я} var i,l:integer; begin i:=Pos(' ',s);l:=length(s); while (i<>0) do begin s:=copy(s,1,i-1)+copy(s,i+1,l-i); Dec(l); i:=Pos(' ',s) end; i:=Pos(':=',s); SetPeremValue(copy(s,1,i-1), copy(s,i+2,l-i-1)) end; procedure Analyse(s:tStr); {ан али з с троки } var t:string[6];{д оп олн и те льн ая п е ре м е н н ая} begin t:=copy(s,1,6);{коп и ру е м п е рвы е 6 с и м волов и з с троки и ли всю строку , е сли си м волов м е н ьш е } if t='PRINT ' then PRINT(copy(s,7,length(s)-6)) {е сли клю че вое с лово PRINT, то вы зы вае м п роце д у ру п е чати } else if t='RESET' then RESETPerem {е сли клю че вое с лово RESET, вы зы вае м п роце д у ру RESETPerem} else Let(s) {и н аче - оп е раци я п ри сваи ван и я} 45
п е ре м е н н ы х} if (i>Per.Top) or StackIn(t) then er:=1 {зн аче н и е н е оп ре д е ле н о} else begin StackAdd(t); {д обаляе м и м я п е ре м е н н ой в сте к} Value(Per.Info[i].Value,rez,er); {вы чи ляе м те ку щ е е зн аче н и е п е ре м е н н ой} StackDel {у д аляе м и м я п е ре м е н н ой и з сте ка} end end; if (er=0) and (p^.zn) then Rez:=-Rez {у чи ты вае м зн ак вы раже н и я} end;
begin i:=1; while (i<=Per.Top) and (s<>Per.Info[i].Name) do Inc(i);
ncoin = 10; { коли че с тво м он е т } maxsum = 5000; { м акс и м альн ая сум м а в це н тах } ncount = maxsum div 5; coin : array[1..ncoin] of integer = { д ос тои н ства м он е ти ку п ю р } (5,10,20,50,100,200,500,1000,2000,5000); var { count[i,j] - коли че ство вари ан тов д ля сум м ы 5*i це н тов, м он е там и сн ом и н алом м е н ьш е и ли равн ы м и coin[j] } count:array [1..ncount,1..ncoin] of longint; i,sum,c:integer; fsum:real; cnt:longint; finp,fout:text; begin for i:=1 to ncount do { 5-ти це н товы е м он е ты д аю ттолько од и н вари ан т} count[i,1] := 1; for c:=2 to ncoin do begin for i:=1 to ncount do begin
if (i>Per.Top) then writeln('н е оп ре д е ле н о') else begin StackClear; Value(Per.Info[i].Value,r,e); if e=0 then writeln(r) else writeln('н е оп ре д е ле н о')
sum := i*5; cnt := count[i,c-1]; { эти вари ан ты м ожн о п олу чи ть боле е м е лки м и м он е там и } while sum >= coin[c] do begin sum := sum - coin[c]; if sum=0 then
procedure PRINT(s:tStr); {соотве тству е т ком ан д е PRINT s} var i,e,r:integer;
end end;
cnt := cnt+1 else cnt := cnt + count[sum div 5,c-1]; end; count[i,c] := cnt; end; end;
procedure RESETPerem; {соотве тству е т ком ан д е RESET} begin while Per.Top>0 do 44
37
assign(finp,'INPUT.TXT'); assign(fout,'OUTPUT.TXT'); reset(finp); rewrite(fout); readln(finp,fsum); while fsum>0 do begin sum:= trunc(fsum*100 + 0.5 ); writeln(fout,count[sum div 5,ncoin]); readln(finp,fsum); end; close(finp); close(fout); end. П р ог р ам м а№ 4 К алькуля тор для Пети А втор ре ш е н и я – П росин С е рге й , с ту д е н т 2 ку рса факу льте та П М М , п обе д и те ль щ колы -оли м п и ад ы 2001 год а, и м е н н ой сти п е н д и ат и н форм аци он н ой ком п ан и и «Ин форм связь-Ч е рн озе м ье », зан явш и й 2 м е с то в ш коле -оли м п и ад е 2002 год а. program Calc; const max=100;{м аксим альн ое кол-во и сп ользу е м ы хп е ре м е н н ы х} type tStr=string[200]; {ти п Строка} tName=string[50]; {ти п Им я п е ре м е н н ой} pTree=^tTree; {оп и сы вае м д е ре во-форм у лу } tTree=record Elem:tName; zn:boolean; {зн ак вы раже н и я} l,r:pTree end; tPerem=record {ти п Пе ре м е н н ая} Name:tName; Value:pTree 38
begin if p<>nil then begin PrintTree(h+1,p^.l); for i:=1 to h do write(' ');if p^.zn then writeln('(-,',p^.Elem,')') else writeln('(+,',p^.Elem,')'); PrintTree(h+1,p^.r) end end; procedure Value(p:pTree;var Rez:integer;var er:integer); {возвращ ае т в п е ре м е н н у ю Rez зн аче н и е д е ре ва-форм у лы pTree е сли er=0 и н аче зн аче н и е н е оп ре д е ле н о} var a,b,i:integer; t:tNa me; begin t:=p^.Elem; if (t='+')or(t='-')or(t='*') then begin {в у зле зн ак} Value(p^.l,a,er); if er=0 then Value(p^.r,b,er); if er=0 then if t='+' then Rez:=a+b else if t='-' then Rez:=a-b else Rez:=a*b end else if t[1] in ['0'..'9'] then {в у зле чи сло} Val(t,rez,er) else begin {в у зле п е ре м е н н ая} i:=1; while (i<=Per.Top) and (t<>Per.Info[i].Name) do Inc(i); { и щ е м в м ас си ве 43
procedure DelTree(p:pTree); {у д але н и е д е ре ва-форм у лы } begin if p<>nil then begin DelTree(p^.l); DelTree(p^.r); Dispose(p) end end; procedure SetPeremValue(name:tName;s:tStr); {п ри сваи ван и е п ре м е н н ой name д е ре ва-форм у лы s} var i:integer; begin i:=1; while (i<=Per.Top) and (name<>Per.Info[i].Name) do Inc(i); if (i>Per.Top) then begin Inc(Per.Top); Per.Info[i].Name:=Name; InitTree(s,Per.Info[i].Value) end else begin DelTree(Per.Info[i].Value); InitTree(s,Per.Info[i].Value)
end; tPeremAr=record {м асси в п е ре м е н н ы х} Top:integer; Info:array[1..max] of tPerem end; tStack=record {м асс и в и м е н п ре м е н н ы х - и спользу е тс я п ри вы явле н и и ре ку рси вн ы х оп ре д е ле н и й} Top:integer; Info:array[1..max] of tName end; var Per:tPeremAr; {объявляе м м асс и в п е ре м е н н ы х} Stack:tStack; {м ас си в и м е н п ре м е н н ы х} function StackIn(name:tName):boolean; {п рове рка н а с од е ржан и е и м е н и в сте ке } var i:integer; begin i:=1; while (i<=Stack.Top) and (Stack.Info[i]<>name) do Inc(i); StackIn:=(i<=Stack.Top) end; procedure StackAdd(name:tName); {д обавляе м и м я в с те к} begin Inc(Stack.Top); Stack.Info[Stack.Top]:=Name
end end;
end;
procedure PrintTree(h:integer;p:pTree); {п е чать д е ре ва - н и гд е н е и спользу е тся, и с п ользоваласьн а стад и и отлад ки } var i:integer; 42
procedure StackDel; {у д аляе м и м я и з сте ка} begin Dec(Stack.Top) end; 39
procedure StackClear; {очи с тка с те ка} begin Stack.Top:=0 end;
end_flag:=true; if (n=0) then {обрабаты вае м с и ту аци ю -...-(вы раже н и е ) - оп ре д е ляе м зн ак вы раже н и я} begin while (s[1]='-') do begin Dec(l); p^.zn:=not p^.zn; end_flag:=false; s:=copy(s,2,l) end; if (s[1]='(') and (s[l]=')') then {у би рае м с кобки } begin l:=l-2; end_flag:=false; s:=copy(s,2,l) end end until end_flag; {кон е цобработки вы раже н и я}
procedure InitTree(s:tStr;var p:pTree); {и н и ци али заци я д е ре ва-вы раже н и я} var sc,i,l,n:integer; flag,end_flag,zn:boolean; {sc - кол-во откры ты х с кобок l - д ли н а строки n - п ози ци я зн ака в вы раже н и и end_flag - п ри зн ак окон чан и я обработки строки zn - зн ак вы раже н и я} begin New(p);p^.zn:=false; {и н и ци али зи ру е м н овы й у зе л} l:=length(s); repeat {н ачало обработки с троки }
{зап олн яе м у зе л}
flag:=false;zn:=true; i:=1;n:=0;sc:=0; while not flag and (i<=l) do {и щ е м зн ак в вы раже н и и } begin case s[i] of '(': begin Inc(sc);zn:=true end; ')': begin Dec(sc);zn:=false end;
if n=0 then begin p^.l:=nil; p^.r:=nil; p^.Elem:=s end else
'*': begin zn:=true;if sc=0 then n:=i end; '+','-':if sc=0 then if not zn then begin n:=i;flag:=true end; else zn:=false; end; Inc(i) end; 40
begin p^.Elem:=s[n]; InitTree(copy(s,1,n-1),p^.l); {обрабаты вае м ле ву ю час ть вы раже н и я} InitTree(copy(s,n+1,l-n),p^.r);{ п раву ю часть} end end; 41