Текст
                    МИНИСТЕРСТВО ВЫСШЕГО И С РЕДНЕГО
СПЕЦИАЛЬНОГО ОБРАЗОВАН И Я УССР
ОДЕССКИИ ОРДЕНА ТРУДОВОГО КРАС НОГО ЗНАМЕНИ
ГОСУДАРСТВЕННЫИ УНИВЕРСИТЕТ им. И. И. МЕЧНИКОВА
В. С. МАl(ОГОН
ПРАКТИКА ПРОГРАММИ Р ОВАНИЯ
·НА
БЕ,АСИКе ·
Учебное пособие
Одесса ОГУ _1987


1. 11· МИНИа!'ЕРЩ'ВО ВIШ!IЕГО И 0P.Eiдl-i&'0 СШЦИАl!ЬНОГО ОБРАЗОВАНИЯ УССР ОДЕССКИй OPДEliA ТРУ.ЦОВОГО К?АШОГО ЗНАМЕНИ ГOWДAPOI'Blliliblй УhИВЕРСИТЕТ иы. И.И . 11.1!.'11-!Иl{ОВА B.C.IIW{OГOH ПРАКТИКА. ПРОГРАШ!ИРОВАНИЯ НА БЕйСИКе Учебное nособие Утверждено ученнм советом института Одесса ОГУ I9tn
УДК 519.95 П{Noхт11ка 11рограаотрования на БЕйСИКе: Учеб. пособие /В! С.Мапо­ rон, - Одесса: ОГУ, 1987, - 95 с. В пособии мзпагаются основные пpиtЩRin,/ программирования на БЕ:ЙСИКе; 11риводятся пркмеры, на кот орых построено обученме nрограм­ ооrропашm. Предназначено д,11я начинающих по11ьзовате11еЯ - студентов 11еха­ н1tко-матемsткчес1tих и других естественных факультетов 110 необеспе­ ченному учебной питературоЯ paeдeJIY иурса "Вычисжитежьные машкны, IIIRШ'I- 11 м11крокоwпыотеры ". Ып. 4?. Табж. I. Бибпиоrр.: 8 назв. ОтветственНЪIЯ редактор Н .Я.Ткхонемко Рецензенты В.Н.Гребенк11н, В,В.Эфенд11ев, кандидаты физихо-матеwатичесхих наух ОдесскмЯ ордена Трудового J{расного Знамени rосударственныя университет км. И.И,Ыечникова
ВВЩЦЕЩiЕ Кард11напьное усцорение научно-технического цро1•ресса в наше й С'l'ран& немыслимо без ntироцого внедрения средств информатики w 11ы­ числительной техники 1:10 все сферы человеческой дея•.rеJ1ьности. В nосдедние rод1:1 сформировались новые области ~ассовоr•о прк­ wенения компьютерно~ техники . В частности, совре,Iенные ыини- u мю,ро- 1tомпью•rеры все шире внедряются а систему высшего и среднего образо­ вания, причеu они становятся не только и не столько с редс 'I·воь, обу­ чения nроrраммированию, сколько универсальнъш инструме1,том n рофес-­ сионаньноn подготовкк сnециаJ1истов. Эффек •.rивное обучение сов рч,нэн­ ного сnециаJ1иста компьютерной грамотн о с•ия - одна из са14Ых октуuхь- ных 11роблеu ·совреwенности. Успешное овладение программированием как pewecлow немыслжuо без непос редственного общения чело века с коwпъютероь.!, Приwенен ие в учебн ом процессе больших (типа ЕС ЭВМ ) вычис J1ителышх ыаmин , в кот орых т радкuионно и спопьзуе тс я nвкетиыА режим об работки зада11111t, Jtишает nольэ ов ат еJtя неnос редст в е нно1•0 до ступа 1t ма!П}lне и де J1ает не­ в оз мо'l!tНЪIМ операт ивное внесение II nрограwыу изwенений по рэзуnьта,•ам ее отладки. А наJ1ичие такой возможности особенно полезно ДJIЯ начи­ нающкх nрогра wмистов_, т ак как ДJ1итеJ1ьно е о•идан ие ре эульта,•ов реше­ н и я задачи на 1<0мпьют ере, ха ракте р ное для па к етно го pt:1uwa, отрица-­ тельн о сказывается на эNoктив ности процес са обучения. ,!J,пя со в ременНЪ/JС м ини- к wикрокомnыоте ров характе рна r~б раб·о'1'«а npoгpaww в ди аJ1оговом реаиwе : процесс редактирования п p o rpa мww, ее отладка и въmолнение проходят в реииwе активного взаиwодеА ствия ~еловека с машиной. з
Одtrиы из CSt.fW]!: ЦOIJ,YЛ.ffPНЬQC .11.И!,\)IОГОВЬIХ .f(ЗЬIКОВ программирР11ащ1я квлиется ВЕйСИК. Он предназначен для решения математических и ин­ w.1енерно-технf{Че9ких змач и вход~~т в состав npoгpa1r1w1-1oгo обеспече­ ния персональных компьютеров, nрименnеЬfЬJХ в учебном процессе. В данном пособии расс1~1отрено подмножество языка, ориентирован-:­ ное на реадизаti.ию нес.l!ОЖНЮ!: алгор11тмов, соответствующих mкольно"'У 1<урсу и·нформатики. Все приведенные nрограММЬJ , не считая просте,ших, прове рены и qтлажены щ1 персональном компьютере ЯМАХА NSл и мо­ t'УТ без всяких измеиениА быть использованы (вви.цу выбран~ого под­ множества языпа) на отечественных ЭВМ, в чSO'riiOC'l'lt, на микроЭВМ ''Иlжра-226" • ДЕК, ";-.Jлектронина ДЗ-28" и др •. • I. ОРГАНИЗАЦИЯ БЕйСИК-ПРОГРАММ. ОСНОВНЫЕ КОНСГРУlЩИИ ЯЗЬ!КА О,:~ганизация н выполнение БF.ЛСИК-програwм на ЭБМ осуществлmотся под упра влением служебной программы - интерпметатора. Программа nр~дставллет собой эапис~ алгоритма решения задачи в виде, понятном для интерпрета'i'ора ri.ЫЙС.ИН.а. Программа и данные вnодятся в маrnину обычно с илавиатуры терминала (дисrшея) 1 иитЕ,рпретируютоя и резупь­ тuты снова выдаются на экран дисплея ЛМQ на печать. При вюпочеиио111 терминале на ero экране постоянно высвечивае•rсн r.neuиaльНЬllil l}Имвол - !(.УJ1С_(Щ., указывающиИ на ту позицию экрана, в к оторую будет занесен очере.u:ной сю,1вол с клавиатуры ю1и из ЭВМ. После ввода ( выводА) оче­ редного си~1во11а курсор автоматически смещается на одну 11озицию впра- • r10. fJ сос1·ав плавиатуры входят 1tлавиmи для набора текс'l'а и служебные 1<11а.виши . При нажатни лю/Sой из кл&виm для наборе теиста изоuражеюiЬlй ив ней r.и111вол заносится в ту позицию экрана, на Rоторуюукаэывает нурсор. На каждой из этих.клавиш изоl'Sражен один или нескодько сим..: волов. (Чаще всего их ,!(ваi один!! верхней, а другой - в нижней час- 1·и 1<лавиши.) Нужный· символ выбирают, предварительно нажав 1tлaви!IIJI' 8ысiора регисrра ( Р:.!С, Sfl/ f Т , (]АР$ ) • Нри lfоротком нажатии одной из клавиш происходит однократliЬlй nывод символа. Длительное (свыше двух uекунд) НаЖ8тие nриводи'.t' к мчо1'окра'1'ному вьtво.цу соответствую­ щего символа, пока не будет отnущена на~втая клавиша. Переход на новую строку и возврат курсоре в нацело . отроки осуществляется оnе­ uиальной клави!!iеl! " Ввод";к,. w8 зависимости от типа компьютера эта клавиша _обnзначается no- peiзнowy: Q=!:' , CR/LF, ПС' И т.п. 4
~ !1 Б основе нэьmti nраграмwкрования ВШlСИК 11еZ1Ст понятие оператое~.. Под операторо• nониыается констру~uия лэЬl}(а, котора я определяет ха­ рактер выполняемого действия хибо описывает о в оАотвu объектов nрог­ раNМЬ!, Onepa'L'opы nк,mчаю'I' в себя к~ш с.пужебные слова , :котоJ:1,10 иwе10т с троrо определенное начертание II C!,11 ,J c J!, так и некоторые параwетры nользователн (те.яо оnвра11•ора). По wepe необходиuост!IJ будем вводить служебные олова (они nиmутоя на · ангжиЦокоu языке) и пояснять их olithlcn и назначение. Интерпретатор Б~::йСИКа моает использоваться в режиме npяvoro вЬ1Полнения поwанд и э режиNе выпоJ[нения програмll!Н ( RUN). В nервоы . о,rучае перед оператора~ но~ер отроки не став ится и выполняет ся он .ср1i'эу после ввода. Результаты арифыетических ияи логическwк опера­ циР моrут быть заnоwнеНЬI u (или) выведены иа экран; сами к оманды посJ1е исполнения нигде не заrщминаются. Пpяwoll peJIUUol полезен при от­ ладке npor•pauм и при исnодь зован1-1и БЕйСИК-ин'!'ерпрета~·ора в качестве калькулятора дця вычислений, не •гребущих сдоЮiЪ/Х nрограuм. Режим RUN мспользуется для подгото&ки, запоминания и nосяе­ дующегр- иопопиенwя програw. I.I. родготовк11 БЕй.СИК..програи~ По своей структуре БЕйСИН:-програ мма представляет посжедоватеяь­ ность nронуыерованных строк. В качестве раздели·rеJ1я строк испОJ1 ьзу­ ется сиuвол "Ввод" ( "возврат ~саретки" /''перевод строки"). Каждая отрока проrрамм1,1 начинается о ее номера, по1·орыЯ пред­ ставляет цeJioe число без знака, содержащее обычио от одной до четы­ . Рf )Х-п11ти цифр. НQмер отроки применяет ся .для ее идентификации и 111<1- ж~т !5ыть использован для ссылки на зту ст р{)ку; кроwе того, он сду­ •ит для упорядочения стро~ программы при ее в~оде на ЭВЫ, Послед- _ . нее означает, что отроки можно вводить в люб ом порядке. Перед нача­ лом выполне ни11 npoгpawlllbl машина с о ртирует строки по возрастан ию 11 оwеров. Это облегчает изменеиие и исправление пpor pauw. Номера qтрок выбираются произвольно, но о некоторым шагоu (равны}А, 1-1аnри­ мер, 5 или 10) дл11 того, чт обы позже мо11tНо бWIO вставить дополни­ тельные с тр оюt ме !(Цу у-«е имеющ имися, не нарушая обще Р уnор.RJ1.Оченно•­ оти номеров . · Ма ксима л ьная д:11ина строки зависит от типа ЭВW. Однаасо nрк вводе програмw через кn ав иа туру дис пJtея рек о м ендует с я о г ран~1чмt1ать ее .11..1и­ ну видимой строкоR экрана дисnлем. Строка nрограмwн может состоRть 2 100 44
пз одного ил~ нескольких операторов; в последнем случае они отделя­ ются друг от друга символом":" (двоеточие). Пробел ни до двоеточия, ни после него не ставится . В произвольных местах строки, в пределах ее долустимоn длины 1,1огут быть записаны про6еЛЬ1, которые исаользую'l'СЯ для удобочитаемост,~ программ. Все служебные слова, в 'rом числе и такие, как ООГО, OOSUB, записываются без пробело в. При подготовке программы на экране дисплея строка считзется а веденной в память ЭВМ после нажатия клавиши "Ввод", Изменить что­ либо в такой стро1tе можно, заново набрав эту строку с те11; mэ номером, Аналогично добавлRЮтся новые строки в программу, Если же ошибка об­ наружена .до нажатия J(лавиши "Ввод", можно вернуться к месту ошиб:ки, нажю,1ая последовательно клавишу ВАСК SPACE (BS), исправить ошибку и продолжить дальше набор содержимого подготе.вливаемой_строки.В совре:.. менных: миRроЭВМ и персональных компью'l'ерах испольэу~отсs, и более совершенные средства реда1tтирования текста на экране. Чтобц убрать вообще некоторую строку из программы, достаточно набрать ее номер и нажать "Ввод", что равносильно вводу пустой строки. Для управлеыия положением курсора на экране использ:,'Ю'l'СЯ . клави­ ши-и - (для смещения курсора вправо или влево) и клавиши t и f ( для смещения курсора по вертикали вверх или вниз). Чтобы уда.аить всю хранящуюся: -: в памяти программу, доста точно ввести директиву CLEAR ( NEW в Пl{ YAMAI-IA) , С нее обычно начи­ нается подготовка новой БЕйСИlt-программы. После того кан вся программа введена в памнть машины и отре­ дактирован1:1, можно приступать к ее выполнению. Пуск программы со строки с наименьшим номером осуществляется с помощью командъr RUN , для чего последовательно нажимаются клав;,ппи J.JUN и "Ввод" , В общем случае программа может быть запущ~на с любоЯ строки, т.е. команда RUN может ;1спользоваться в виде RUN <номер стро:ки > где <номер строки> указывает с•rроку, с 1сотороf.! происходит запуск npoгpawl(ы. Подготовленную в памяти БЕйСИХ-програNllfУ в любой момент можно вызвать на экрак дисмея, набрав директиву L 1S Т и нажав клавищу "Ввод", Выполнение програмМЪI осущеётвляется в порядке возрастания комеров страх, если не предусwотрено программное изменение этой последователь­ ности. б ..
t tJ !1 1 I,2, Ц~шwе12 r~рограwмы Знак оuство с язь11<о~, програмuирования 13.ЕйСИК начнем с рассuот ре­ ния програмtm для поиска больше1··0 из двух чисеп • . Б лок-с хема алгоритма изображена на рис. I, I,a, со о '1•ветст11у щая ВЕйСИК..програыма - на рис , 1,1,б. (начаiiо) -.--- Рис, I, I ! ~ REM МАКСИМ I A,BI 21i'J !NPU T А, В 30 IF А>В TH~N 50 4е, L, .E T Х=В:GОГО 6Jlj 5i21 LET Х~А i,JЭ PRirH "1•1АХ"'"; Х 7f!J END Прежде всего замечаем, что Rаждый 011ера тор на чинае~'.ся с о слу­ жебного слова, которое сле.цует после номера строки. Это слово (на­ прииер, JNPUT, lf , LET , PRINT , END ) указывает 'L'ИП и назна­ чение оператора. Ра ссмотрим более подробн о приаеде 1щую на рис. 1.1,б nр ограыыу. Первый оператор (строка 1/J ) - ко1,11,юн•rарий; он 11рисваивае1• название програ мме и wожет в общеu с луча$ от су•rствоват ь. lh·opol! опе­ ратор ( строка 2ff) INPUT А, 8 - оператор ввода исходных даю1ых, которыА в процессе выпощiения программы обеспечи'l' присвоение аереwен­ ныw ,4 ,В конкре•rных числовых значениll, вводиМЬ!Х с клавиатуры диспл ея, В строке JP проверяетс я усдовие А > В . JJ:сли оно ис·r1щно , то машина должна перейти на строку 5{J, где переменной Х при,~ваива--­ ется введенное ранее числовое значение А ; в 11ротивноы случае wаш1111а пе реходит к сJ1е,ау10щему оператору (строка 4/J ) , Таким образом, ус по в ­ ныR оператор IF- T/IEN сообщает мащине , i<Уда следует перейти в за­ висиwости ОТ ИСТИННОС1'И или r.ожности некоторого ус,'IОВИА',
Строка 4/f содержкт два оператора: первый присваивает nepeweн- нolt Х числовое значение переwенной В ; еторой ( 80ТО 6(J ) nере- двет управ.пение на строку 6U , обходя таким образоw оператор LET %=А , выполн,mщиАся тоJiько тогда, когда А > В , Содериащиl!ся в этой строке оператор PRINT вызовет печать результата, Тело оnератора орга­ низовано так., что в cтpotty экрана дисПJ!ел ( или на печа'l'ь) будет вы- дан nоясняющиn текст МАХ"' , в затем числовое значен~1е Х. - на'1- денны11 результат. Так, если оператору JNPUT ввести значения ? и З, то ответ будет выдан в виде МАХ.. ? Оператор ENJJ •завершает npoгpawuy. Програыwа вводится на выполнение пос.11едовате.J1ьно, строка за строкой с ю1авиатуры дисплея: после набора жаждой строки следует на­ жать :11лавиmу "Ввод". Пос11е ввода пос.11ед11ей строки вводится ноwанда PUN (пуск), за поторой тажже сле,цуе'r символ "Ввод", До етоrо wо- uента wашииа запоминала программу в оnератквной памяти. PUN - есо- манда маsине на выполнение программы. I.З. Алфавит пзыка В а.11фавит ВЕйСИКа входят сле,цующие симво.11ы: а) заг.11авные .11атинские буквы - А, В, С, . . . )', У, i!; б) десятичные цифры - О, I, 2,,,.,9; в) знаки препкнани.я (т очка) ( точка с запятой ) ( дв оеточие ) , (за п.ятея) • (апостроф) • (кавычки); r) знаки арифметиче с ких операций + (сложение) - (вычитание ) • (ум ножение) / (деление) ... или "" (возведение в степень);
д) знаки операций о~ношения .. (равно) < (ыенъmе) <о (wеньwе или равно) > (больше) >"' (больше нпи равно) < > (не равно); е) специаньные сиwволы "' ..... (пробел*). При записи коwwентариев {оператор REM) и в жите рных конс~ан- • тах (любой текст, зак.rrюченны« в кавычnи) WО'!!НО исnольэова~ь заrлав- • ные русские буквы, наприwер: f, j;) 10 REM поиск МАКСИм,чисnА :Z0 PRlNТ"MAl<CИMAnbHAЯ 1ЗЕnИЧИНА2 " . х В рассuатриваеuоu подмножестве языка БЕйСИ!{ определен пмшь вещественный (действитеnЬНЪ114) тип чисе11 . При этом чисп:а uогут быть nредставпены 8 программе в форwе uелого числ&, в форме с фюtсирован­ ноА тоqкой и в форме с п11авающе!lтощ<оА. Знак "+" nеред чисnоw не ставится, а для отделения целой qасти числа от дробной при записи десятиqНЫJС дробей исnользуется точка. Запись цеJIЬ!Х констант по су­ ществу не отличается от общепринятой wатематической записи. Нужевую цeJIYII) qасть_числа с фиксированной т очкой wow.1 -10 оцускать. При записи констант цифра ~ nеречер1tивае•rсл. Примеры записи чисел : ue111,1e fl 196 ..., IЗ с фиксированной точкой .Г/7 - 19. Зf/l 24, При представлении чисел в форwе с. IUаващей точкой пос.11едова­ те.11ьно записываются знак qисла (д.11я -отркuате11ышх чисеn), мантисса, и Символ "пробел", изобра!!:аеuый на бу111аrе каи ...... , на :к.хааиа'!'уре никак не обознаqается, з 10044 9
L___ латинская буква Е, знак ПО{'я,дна и порядо1,. Например, одно и то же число 0,007зв2 может быть представлено несколькими различными ело~ собаии: f),7'Ji32f- 2 {Р. fofl~(J 7ЗЬ2 [ 2 ?З,82 Е -4 Здесь буква Е имеет смысл "возвести IO з с-r.зrzень". Поназатель степени (поря:до1() ножет не иметь знака, SС1!И он положителен. Но нельзя задавать Е 4 в качестве числа IOOO0; следует nисать I Е 4 для того , чтобы указать, что единица умножается на ro 4. Разрядность чисел в микроЭВ,\4 "Искра-226" не прев осходит IЗ де­ сятичных разрядов.Jиапа~он целых чисел - от О до 7999 , дробных- от ro-99 до ( I-Io- • ) • IO 9. Диапазон знач~ни« целщ чисел ffJ{ "Ямаха" ОТ -::12 ?&; ДО 32767, вещественных - ОТ Io-64 ДО I06~ . · Величины, значения которых в проuессе выполнения программы могу'r изменятьс я, на зываются переменными, Чис11овая переменная в БЕИСИl(е обозначается любой буквой латинского алфавита, или любой латинской буквой, за ко•rорой след.1,·ет. одна цифра. Например: 4,N5~В1 Совокупность букв и цифр, обозначающих переменную, называют ее именем (идентификатором). Переменная в программе. означает велич,шу, значение !<О'rорой nрограымист не знает во ~эремя написания программы. Операторами LET, REI/D • .!NPUT переменным даются (или присваи­ ваются) J(Оlшре'l'ные значения. Присвоенные та ким образом значения: переменных не изменяются до тех пор, пока снова не встретятся операторы LET, READ , JNPUT с новыми значениями для э·rой переменной. ОднаJ(О все переменные считаются неопределАнными до начала выполнения программы . Переменно~ необходимо всегда присваивать значения перед те м, ~:ак использовать ее в дал ьне~ших вычислениях. Кроме рассмотренных переменных, которые носят название простых (или одиноч ных) переменных, в БЕйСИl{е широко применяются: переменные с индекс·вми, служащие для обозначении элементов массивов (под ~ - 1!.О!:. пониwают упорядоченную совокупность однородных величин, которой присвоено одно общее иwя). Имена массивам присваиваются так же, как и простым переменным. I0 ti
.. 1 Переменная с индексом обозначаетс11 1~менеы массива, за которым в круг лЬJХ с1соб1<ах указываются разделеннNе запя'l'ьtwи индексы - число­ вые или буквенные" Например: А(З), Bf(1,3},Д(K,l}1 X{'I) Полоиение каждого элемента в массиве определяется с помощью инде1ссов. !{оличес1• во индексов, од,юаю,чн о оrrредед,mщшr элемент массива, задает el'O размернос•rь. Е БЕйСИКе ,п.оцускается использование '•' O.IIЬl!O о.цн омер~ь,!! 11 ,!ш,vмерных масс~п,ов, д,пя одномерного массива инды: с определяет порядкоsы!! номер элемента в ~Аасси ве ; для двумерно­ го массива первый ю-щекс - номер строки, вто~о й - н омер столбца, на nересечении itO'l'Opыx шнсоди•rся элемент . Элементы одно1.1ерного мас­ сива , а таю,1е строки и столбцы двумерного нумеруются с ну~я. Примеры запис и з11ементов массивов : Математичесюн1 запись а(), af,' а.2, а.5 • ••• ат Запись на ВЕйСИ!{е A(f!),A(I), А(2), А(З) ... А(М} 600141, ~ 3,8°" B([J,rf), B(f}, 1), B((J,2), В(f}, 5) 6-о, fJ,11 ~ 2, ~.5 /3(1, J}, /3(/, 1}, 8(1, 2), 8(1, 3} В общем случае инде11сом при задании переменной с индеt(сами может быть произвольное арифметическое выражение. За значение индексе принимается пелая час'l'Ь з начения арифметичес!(ого выражения . Напри- мер, B(fиJ,I() при зна чениях переменных 1 = 2,9, J =- 2, 1(=З.? определяет элемент массива В , стоRЩий на пересечении его 5-й строки и 3--го столбuа, Если в программе используютсл переменные с индексами, то с о от­ ветствующие ма ссивы дол1,,ны быть объявлены с nомощыа сnениальньrх· опе- • рат о ров (см, гл, 2 ) пре11iДе, чем эти переменНЬlе бур,ут испо;rьзованы в программе . I. б . Стандартные функпии языка При решении з адач· неред1<0 • тре буетсн вычисле- ние математических фующ иt! - триrономе'l'рических фун1ший ( sin х , C'OS'X, aict9 x и т.д. ) , модуля числа, логариф1,юв ,е•и l\P, д,пя их въrчислени11 в БЕйСИi{е прер,у сuотрены ста,щарт ные Функuн!!,, кам- дал из которых обозначается соответствуюощы именем, за которым в круt·~ · лых скобках следует аргумент. II
Перечень наибоиее употребительных стандартных фуниuиЯ ВЕйСИКа приводите.к в таблице. . Стандартнаn функuкя БЕйСИКа ABS (х) АTN(Х) eos rxJ ЕХР (Х) INT(X) RND(X) SJN (Х) $0R (Х} JCN (Х) TAN {Х) LOC (Х) Г Матеt.1атичес11ая •• фуНIЩИЯ /Х/ агсt9х cosx ех eat fx) Примечанме Наибольшее целое, не превосходящее Х Случайное число wеж,цу О •1 I Sitl Х ,;; SL'rJlt ,r . s~x={ i:·:;;: ;:g - I, если Х<О Аргументом Х иожет быть число, переменная, арифметическое 8Щ)liаtение (в том числе содержащее !WНЮIИИ), Тригонометрические функuик вwчисл.яются для аргументов, выраженных тольио в радианах;· значения обратных тригонометрических функuий nолучаютсn в радианах. Выражение вида C'OS {%} , . т.е. имя стандартно~ ФУНIО.\ИИ вместе с заданнш, значением аргумента, называют уиазателем фунЮJии. I,?, Арифметические выражения Константы, переменные и ука:эа·rели функuия, соединенные wе11Д,У собоR знаками арифметических оnе:рtщи~ с исnольэованиеw, быть может, сжобок, образуют арифметическое выражение. Например: 12
Математическая запись ~ 2 Х,• .+ /f,· У(а:х- .f8}/(Cx-d)' 1h. v'xeJo1 - 8 - i!,""83-=--_-.tt_a._c-., 2а, Запись на БЕЙСИl{е ' 41(А/В-С А!(Х"2-НЭМХ+С SQR,A)(X+B)/(C•X-D)) LOG (SQR (Х)ЕЕХР.(У))) <-B -SQR(Er2-4MAMC))/(2MAI Пормо1с выполнения операций в арифNетических выражениях 01rpe- tJ де.11яется след,у10Щими правилами. I. Выражение внутри скобок вычисляется до того, как взятая: в скобки величина будет использована в да,1ьне~ших вычислениях. 2. Внутри скобок и в бесскобочных записях порядок действиР совпадает с общепринятым: сначала вычислmотся значения функuий и выполняются все возведения в · ст&пень, затем умножения и делени11 и, наконец, сложени11 и вычитания. Деление ю.1еет тот же приоритет, что и уменьшение, а вычитание - тот же, что и сло11tение. З. При отсутствии скобок в арифметическом вы ражении операции , иwеющие одинаковы, приоритет, выполняются в поряд ке их следования ~ слева направо, 4, Все знаки опера11иf.1 в выражении дол1Кr1Ъ1 бы·rь записан-ь1 явно . Нельзя записывать под.Ряд два знака операц ии . В этоw случ ае они долЮ1ы быть разделень~ кругльши с1tобкаwи. Например: Эти правила иллюстрируются следующими приwераwи. Выражение ,% .; CO.S ( У) и- Z "' Т вычисляется так: Z возво­ дится в степень Т, полученн!>IА результат умножается на CO.S ( У) , а затем Х с1<ладыеается: с результатом уш-~ожения, ti'l 'O не О'l'JiИЧается от обычного порядка выпопнения арифметических деf:lствиА, Если это не тот nор11док, катеры~ требуется, не обходимо использовать ~руrлые скобки для указания желаеыого порядка оычкслениl'. Н11.пр1iмер , есJ1и необходимо возвести в степень Т произведение еоs(т) ~ Z , то tiytt- нo записать ,Х + (COS (У) х 7.) ,, Т или, если необходимо уwно1tн'!'ь Х~с'О$(fl)на Z •в степени Т , то Н)'ilviO записать (,!' + cos(У)иi:лт.. 4 IU044 IЭ
Правила также говорят о · тоы , что мащина, встрет\f.в A-BrC , будет вычита'l'Ь В из А , а зате14 [} складывать с этой раэ!iоотью; ВС'l'ретив А/13 -;lf С , она раздели~~ А на В и полученное частное умно'lkит на С ; встретив А "'В ,,..,С , она возведет число ·А в стеI1ень В , а затем nолученlfЬlй реэульта~<' возведет в стецень С . Сле,nует 11омнить . такое "золотое" цравило: если вознI1кают какие­ либо сомнения: относительно приоритета выполняемых деnствий, рекомен­ ,rуется использовцть ,!1.о,g_ольше скобо1с, чтобы избежа·1·ь возмо11tНоЯ дву­ смысленности. Особую I(атегорию выражений в языке ВЕйСИК предст&вляют lСЛОВИ.!!,, которые являются логическими выражениями и принимают лиmь два зна­ чения - "истина" и "ложь". Условие состоит из левой и правой частея, с оединенных r,сеж,пу собой одним из знаков операций отношения (см. разд. I.3): =,<, <=, >, >=,<> Левой . и цравоЯ частью условия: может быть произвольное арифме­ тическое выражение . Пример~: ' Математическая: запись Зцпись иа ВЕйСИ!{е В*В-4;НА:К-С >=О У(-1)< м ! 2 - /./ас~о IJ; <т • Упражнения I. Записать на БЕйСИКе след1rющие · числа: а) З? ,423 г) ro-5 . б) -98 д) -9,?з~rоз , в) 0,0000?3 е) 4?000000 2._Быделить среди заданных чисел форматы с фиксированной и rurа­ В'1ющей ТОЧКОЙ: . а) I9~?ЗI гJ IЕ-З 6) -0 .9'71 д).-.07 в) ,20З4Е-2 е) -3,72453[2 3, Записать на БЕйСИКе такие арифметические выражения: б)(О;О15+3/96сi./+2мs,4 г) ✓0-s+0,3'~ /J',z f Jkl I4 ,.,,
'\Г lj 4. Записать на язшсе обычнЬJХ математических вuрааений: а/ 6/ р,/ A)(XA2+B*S-C)/D+5*~ (1+EXP(ABS(AA2-B*H)))~(1/~) LOG(5I N<ABS(X(1 )+V (I)) )) о. Пусть •А " 2, В = 3, С' "' 4. Определить истинность с~едующих условий: , ,а/ QIEB -41EAIEC )f4 6/ A+Bl(B>=C"'2 . 'JЗ/ I~T(С/~)аоВ-А ·-··- r/ SбN CA-8 ):oA-S 2. О(}!ОВНЫ.Е OIIEPAТOffi ЯЗЫКА ВЕйСИК Программа на языке В!i:ЙСИl{ представляет собой последователькость оператоыов + По своей структуре оператор - это нек от орая стандартная запись , предписывающая uашине вьmол1:1ениеопределенных де«ствий (ис­ полнимый оператор) или содержащая некоторую осведомительную информа­ цию об объектах проrрамuы (неисполнимый оцератор). • Для . обозначения общlfХ. поняти й буде м использовать у гло вые скоб- ' . . ки. Так, <-переменная> у!(азывает на имя , состоящее из одной буквы и, быть мo11te'r, сдедующей за ней цифры . 2. I . Оператор присваивания Наибопее употреб~те.пьный оператор, обеспечивающий в програwые · в ычисл ител ьные операции и вызывающий изменение значений переменl:IЫХ , - это оператор присваиванця. •Здесь и да11ее под переменной будем пони­ мать как простую переменную, так и переменную с индексами. Оператор присваивания иыеет следующий форNат: Lt Т <переменная,> = <арифметическое выражение> Этот оператор tie является оператором алгебраического · равенства, а . является командой для ЭВМ: вычислить значение стоящего сп)i8ва от знака "=" арифметического выражею~я ripи текущих значениf\Х входящих в неrо переменных и результат присвоить переменной, стоящей слева от знака"=". Вчаст11ости , арифметическиw выражением может быть число • ИJtИ отдельно взятая переменна.R, Ib
Заслуживает внимания случаl! , когда справа от знака присваква­ НКR в выражении прмсутствует переменная, стоящая и слева от него~ ilусть , например, по ходу вычислениА требуется увеличить значение переменноЯ Х на I. Это действие реализуете.А с помощью следующего опе ратора присва и вания: f/ifLETХ;;: )(+t Здесь новое значение Х получается в результате прибавления едини­ цы к старому значению Х . Этот пр11еw часто используется в програм­ ми роваНJ1и дп.А наращивания значений пере wенной с некоторым шагом, Служебное слово LE Т при вводе те.кета программы в ЭВМ м ожет быть оцущено . В некоторых компьютерах оно добавляется автоматически после занесения оператора в па11лть ttашинu. Поэтому при выводе текста програ ммы на н осителе, например при вызове програмМЬI на экран дисщея с помощью директивы i./J Т , слово LE Т появится всrод,у , где оно было - при вводе опущено. Ра ссм отрим некоторые примеры: Математическая запись . _ ю==82 -4ас -1 =ах·1+а(~2+а,!х +aJ' Запись на языitе ВЕйСИ!i 10 P=S "2 -41fAJEC Al2)J€X+Al3) Зm VcLQG(ВQA(X!I/A88(XA2+YA2) 4Ф T•IFIZl)/SINIAI/LOGIZ) 2 , 2. ПростеАшиА ввод и вывод инmормаuии Прщ•раwwы редко составляются для решения неко•rороА конкретной задачи с жестко заданными числовыми значениями · обрабатываемых дан­ ных. Обычно программа составляется в некотором обобщенном виде, когда в реализуемые согласно алгоритму арифметические выраженил входят nереwенные, а конкретные чисповые значения им присваиваются во время вwполнения nрограwмы . Эта возможность обеспечивается с по­ мощью операторов ввода данных. Рассмотрим простейший из них - операто: , ./NPUT(дpyrиe возможности ввода данных бущт рассwотрены в разд. 2, ), Iб
Оператор ввода данных. ,!!д11 Щ>исваивания переwеннw значений , в~одиwх во время исполнения цporpaw W"d по ее запросу с клавиатуры • дисw1е11, служит оператор JNPUT , к оторый иыеет СJlедующиЯ фор,,1ат: INPU Т (список nepewettю.x) <Список переаtе'нных> содержит разделенНЬ1е заnлтwи иuеца пере~,еннюс (простых или имексированных),1оторым во время работы програмw будут присвоены ~онкреfНЬlе числовые значения. Встретив в программе оператор INPt/T указанного формата, ЭВМ делает паузу, выводит знак"?" (знак вопроса) и идет. мя про-· должения работы программы пользователь дoJI11te11 набрать на клавиа-rуре вводимые числа, разделяя их запятыми, и после набора последнего числа нажать клавишу "Ввод". Первое наб~анное на клавиатуре число будет присвоено nервЫ~ переwенной, укманной в списке оператора INPUТ , второе число буде•r присвоено второй пере менной из списка и т.д. Если, например, необхо,ц.иwо ввести чисJ1овые значения ДJIЯ ,( и У, нужно в програаfМе вставить оператор 2fJ INPtJT ,(, У до пер!)ОГQоператора, использующего любую из Е!ТИХ цереwенных. Когда встречается 0'1°от опе ратор, машина iзЬIВодит на экран дисП)!ея во11роои­ тельНЬ1й знак и ждет. Пощ,зщзатель вводит два числа, разделенные запятой, нажи/../ает клавишу "Ввод", и wашина 11родолuет вЫiiодн.ять оставшуюся часть программы, Кроме иNен переwенНNХ, в оператор ZNP(Jl моает бЫ'l'ь вкJIЮчен произвольны/.\ Т&кст, заключенНЬJЯ в апострофы !1 предmеотвующ"Я сп11ску n:еременню:. Форt.1а'1• оператора: . I NРtJТ ~про иэвол ьный текст>" (;] <список переuеиных> Заключенный в апострофы текст и следующая за ним переменная эапятоЯ обычно не раз;цел111Отся. (Б ПК VAMAHA эдес·ь обяэате.11ьна точка с за­ nятоА . ) При выnолнении оператора /NPUT nриведенного выше формата машина выдает на печать текст (уже без апострофов) и приостанавпи- вает работу программы. После этого пользователь должен набрать на клавиатуре вводимые числа, как и в случае формата оператора .INPUT , без поясняющего текста. Обычно заключенны.й в апострофы теист nредстав -­ ляет собой подс1tазку о том, какие переменные ожидают вводимые с иJ1а­ виатурЬ1 числовые значения. Например, оператор 3;,J JNPUT "Введите козф'рициентьr и свободный член" А , В , С выведет на экран цисrurея •reitc'l ' 10044 I? 1
ВВFДИГЕJ КОЭФФlЩИ.ЕНТЫ И СБОВО,JЩЫй ЧЛЕlf пос,!Iе чего маtпина остановится. ·набращfЬlе о клавнату'РЫ три числа бущт присвоены переменНЫN А , В , С в соответствии со сщ,с~rом ввода. Как и оператор LET , оператор JNPUT определяет новые пере­ менные програмw , выде.дяя для них место в памяти ЭВМ. Оператор вывода. Вывод (печать) резухьтатов осуществпяется в языке Бill\GИК с помощью оператора PRINT , имеющего формат: PRINT <список вывода> Эпементы <списка вывода) могут содержать переменные , арифметичес­ кие выражения (в частности, числа ), заключе нные в апострофы текста , а также служебные сдова. В :качестве разделителей в выводном списке оператора используются запя•rая и точ1tа с запято!!, которые служат одновременно для управления печатью. Есл и список вывода с.одержит имя переменной, то при выполнении оператора PR I N Т произойдет вывод чис11ового значения это!! перемен­ но!! , но само имя не выводится . Например, в результате выполнения оператора 2~ PRINT А,'В,'С на экран дисплея может быть выдана (в за­ висимости от текущих з~ачениl\ переменных) строка вида 95 , ?31:J2\135 , 9бI83~3 Список вывода оператора PRINT может содержать и арифметические в ыражения , например: В этом случае оператор PRINT . производит все предусмотренные . арифметическим выражением вычисления и выдает полученные чисповые резуяьтаты. Разумеется , все вход111Цие в арифметическое выражение переменные (простые и индексированные) должны быть оцредеяены в опе­ раторах, предшествующих оператору выв .ода. Весьма удобной особенностью оператора PRINT является то, что он может использоваться для вьщачи разяично11 текстово/:1 информа­ ции: пояснениА, таблиu, графиrtов и др • .Цля этого подлежащую вывощ • информаuию достаточно включить в список вывода оператора PRINT, предварительно заключив ее в кавычки. Пусть , например , текущее зна­ чение переменной Z равно IO?. Тогда вьmолнение оператора I8 ..
2\l PRINT имаксимальное значение ,." i! ; ПО!IЛецет вццачу на экран дисплея такой строки : МА!{СИМА.JiЬНОЕ ЗНАЧЕНИЕ = 107 Рассмотрим несдожную вычислительную программу. Пр11мер 2. I . Пусть V: , а - соответственно начальна.я скорость и ускорение движения тела;_ t • - время движения. Путь, пройденный телом, выражается формулой at2 J:::o;i+y. Программа для вычисления значений S в зависИJ.tости от задан- lШХ значений а , Ц , t может иметь вид l!ll REH rwть 20 INPUT VФ,А,Т 30 S=Y0+A.IIT/2 40 S=S)(T 5J:' РRINt"ПРО-,1ДЕННЫй ПУТЬ=";S · . Ь/Э END. Программа состои'l' из шести строк. Первая из них содержит неис­ полнимы!\ оператор REM с комментарием, облегчающим чтение листинга программы ('l·екста, выданного машиной). В общем случае оператор имеет вид: .R EM <произвольный текст> , где <nрои:звольный текст) является собственно kомментарием и в ка­ вычки не заключается . Оператор не исnолн.яется машиной и мотет разме­ щаться в лю.бом месте программы. Во второй строке программы расnоложен оператор вводе INPUT, • о помощью которого переменным V,@,A и Т присваиваются· ~tонкретные числовые значения, вводимые nользоватеJiем с клавиатуры дисплея во время выполнения этого оператора. • В третье~ и четвертой стрО!(ВХ находятся операторы ·присваивания,. которые реализуют вычислительную формулу: s=(~ + ~t) t. 19
Обратите вниuание , что значение выражения в скобках сначала nрисваи­ ваетсл nеременной S (строка ~) , & затем 13 операторе с номером 4.\1 промежуточное зна чение переменной 8 умн011tается на Т и результат снова присваивается переменной S как окончательный. И, наконец , в строке с номером l;g расположен оператор вывода PRINT , тело которого составлено таким образом, что машина выведет не только само значение S , но и предшествующее ему пояснение . Если, например, V.if = 5,3, А = 2,б, Т = З, то машина выведет сле,пующий результат: ПРОЙДЕ}J}Шй ПУТЬ = 27 . б Завершает программу оператор END. Использование этого операто­ ра в ноице текста программы не обязательно, та1t нак выполнение ее автоматически прекращается при достижении последнего оператора. Расс•ютрю.1, как осуществляется простейшее управле11ие выводо1о1 инфорыаuии на э1tран дисплея (или на печать). hаличие запятой мeJiAY элементами списка вывода опера тора PR1N Т обеспечивает так назы­ ваемую~ печать, суrь которой состоит в следующем. Вел строка экрана днспл~я условно разделена на зоИЬI (ширина зоны зависит от типа компьютера) . Камая запятая в выводном списке оператора PRJNT вызывает печать в следующей зоне , а если свободные ЗОНЪ/ строки исчерпались - в следупцей строке. Две запятые, стоящие рядом, обуслов- пивают пропуск зоны вывода. Примеы. Пусть А = З. 7о, fjf PRINT А, "суwма", В +С (в ПК YIINAl✓A) 1 Howep поз~ии в строке Выводимая инфорwацип /3 = 9.3, С' .. О, 7. Оператор вывода обеспечивает выдачу следуЮЩеЯ строки I Ib Сумма F.сли ме~щу элементами списка вывода оператора PR I N Т стоит точка с запятой(";"), то информаuи.я выводится в IIJJOTlfOM формате: каца.я точка с запятой ~зызывает смещение при выводе очередного эле- ... мента вправо на од.ну позицию относительно ранее выведенного элемента списка. 20
1 ! ttaпpиwep, ес.11и А= З.?Ь., В= 9.3, С"' О.?, то оператор вывода I(l PRINT А ; "су...,.а• ; В тС в!оlдаст cтpoq.r на экран З.?5 СУЫЫА 10•00 (цwrие способы управления выводоw будУт рассмотрены позае}. УпраЖJ-!ещся 1. Составить nроrрцы1,1у !iЫЧИСJ!ени~r nер.,.ода Т II частоты Е хоJtебания waяT!iИRa в зависщ,ости от его дJtины t. Известно, . что пе- • риод (вреwя одного попного колебания) маятника в~ис11.яетс.я по форму­ ле где Т - вреwя, с; { -.дпина wаят1-щка, w; ноrо падения. Частота fl - ускорение свобод- 1 Е= ·t/T 2, В треуГОJ!ЬЩIК0 ИЗ~6СТjiЬI ДJХИНЫ CTOpOji 4 1( 6 11 YГOJi W611JJY ниwи cj, • Составить программу вычисления д~ины трет~;еt! стороны С , riJioщaди треугольника $ и радиуса описанной окружности R • З, Радиус окружности, вписанной в равносторонний треуго.щ,них, равен R • Составить програ1,1му вы1:~ис.11ения .-~ин сторон, высоты и 1U1ощади треугольника. 4, Составить nрограwцу в~исnения ПJ!ощади треуго.rьника по фор­ муле Герона: где р - полупериwетр треугольника. 2,3. Оцераторы управления програwwоМ , Используя .11иwь оператор присваивания и, быть wо~ет, операторы ВВОД8-ВЬIВОДQ ,На UBM удается реализовать В Виде ПРОГр&NW 'l'OAbltO • .11инеn~ще алrорttтмы, т,е. •rакие, в которых операторы выпо.11няются цосае­ дова_тельно друг за дpyrow в порядке их ес'l•ественного распохоаения б 10044 21
r (в порядке возрастания номеров строк) и этот порядо1t не зависит от конкрет!ЩХ значений обрабатываемых данных. ·Если требуется проrраммно изменить этот естественный порядок в~олнения операторов (осуществить обход некоторой группы подряд • расположенных операторов, организовать повторное вылолнение некото­ рой последовательности операторов), то используют операторы управле- •.ill!!! программой. Эта необходимость возникае'l' при реализаuии разветвля- щихся и циклических алгоритмов (8]. ' К операторам управления относятся опера'l'оры условного и безуслов­ .!:!.О!'.О. переходов, а также оператор uикла . Операторы безусповного перехода. Общиl! вид оператора~ 0010 N где ООТО- служебное слово; N - номер строки (целое ~,.исло без знака). ДеРствие этого оператора заключается в безусловном переходе к строке с указанным номером. Если при этом осуществляется переход на неисполнимый или отсутствующиl! оператор, то управление передается ближайшему по порядку исполнимому оператору. Например, оператор ООТО 12~ пред.писывает программный переход к строке с номером I2f,J. Обратимся: 'к примеру 2, I. Пусть при фиксированных зflачениях Vi1= IIЗ 1 А = 19 необходиwо получить ряд значений $ при пооле- довательНЪIХ значениях Т " I2, 24, 36 , 4t!. Очевидно, что для зтоl! цели NOJll-10 было бы воспользоваться программой примера 2. I, вводя ее .в память заново при каждоt.1 •новом наборе исходных данных. Однако эту программу нетруднu видоизыенить так, чтобы ее без повторного ввода • мож.но было бы использовать дм многократных вычисления. Прежде всего, оператор ~эвода (строка с номером 2/5) рвзобъеы на два операто­ ра: 217 INPUT V/, А 25 JNPIJT Т Теперь,для многократного вычисления значения J при указанных последовательных значениях Т , достаточно сделать так, чтобы после каждого очередного выполнения оператора вывода (строка$) снова и снова выполнялся оператор ввода величины Т . Это может быть достигну­ то заменой оператора ЕND ( строка бf,J) оператором безусловного пере­ хода tJ0T0 25. Пос11е указанных преобразований программа будет иметь вид 22
10 f<EH ПУТИ 20 INPU'I" V0, А . 2:S INPUT Т 30 S=Vll.l+AЭET / 2 40 S=>SЭET 50 PRINT "ПРОii!АЕННЫй ГJYTb";S с0 GOTO 25 Протокол работы данной програuw для указанных числовых значений исходных данных : ?. IIЗ, 19 ?I2 Пройденный путь 2724. fбifl ?24 • Пр ойден ный путь 8It34.~{J~ ?Зб Пройденный путь IЬЗЬ.~\1fl ?48 Пройденный путь 27312. ~i\1 Обратите внимание, что после з апуска проrраыw оператор 2f! JNPUT V;if, А выполняе~·ся толь~tо один раз, в то 13реwя ~сак операторы 25 - бf1 вы­ полняются многократно. Оператор условного перехода. Для программирования разветвляющих­ .од алгоритмов . в языке БЕйСИ!{ иwеется оператор условного пе рехода (или, коротко, оператор 1F ) . Напомним,· что раэ,ве'l·вляющимися называют алгоритмы, в которых последовательность обработки данных зависит от истинности или ложности некоторых провер.яеwх усл овиf;I , Существуют несколько форм записи оператора условного перехода. Наиболее распространенной (назовем ее первой формой) явл яет ся с.110- дующая: Jf <условие> THEN <номер строки> ДеRстзует этот оператор так: если указанное после служебного ело- . ва JF условие при текущих значениях входящих в·него переменных истинно, то осуществляется переход к строке, номер котороf;I указан · после служебного слова THEN ; в противном случае . проиэоАдет пере­ ход к следующеf;I по порRДку Q!l?.0..1:(~ (но не к следующему опера то ру, если. в строке после Jf -оператора имеются другие операто ры, разде­ ленные двоеточиями). 23 .1
Пример: Ш IF.Х и Х+У :НУ <==R"'.2 THEN Зj! 2{} PRIN Т "условие не удов.летво.Рf{етоi/Г . Jf/ .... .... . . Этот Оператор Предписывает машине ВЪIПОЛНИТЬ такие действия: а) вычислить значения выражений ,(~ r 1/~ и R~ при текущих значениях Х,IJ,R ; б) если для вычисленных значения отношение ;('6 rf16 ~ R2 удов.11етворяется , то перейти к выполнению строки с номероw 311; ина­ че - к строке с номером 2!1, оператор ко'l·ороА выведет на экран дисПJJея текст: УСЛОВИЕ НЕ .УДОВЛЕГВОРЯЕ;rСЯ В приведеннои формате оператора /F служебное слово TIIEN МО1СНО заменять словом (}ОТО: /F <условие> • (]ОТО <номер строки) В рассматриваемом варианте мнтерпретатора · языка БЕйСИJ< доn:уска­ етсп следух,щвя ИНТеR9сная И ва1:ная ДJIЯ приложениА- форма IF -опера­ тора (вторая форwа)х: . • JF <условие> THEN <оператор> т.е. после служебного слова THEN допускается любой оператор ВЕйСИКа, в том цисле и другой оператор /F. &ли проверяемое условие истинно, то выполняется упомлнутыР _опера тор , а вслед за ним последо­ вательно реализуются другие операторы в этоЯ строке, если они есть. Если же проверяемое условие не удовлетворяется, то указанный после TH[N оператор не выполняетсп и осущестелпется переход к следующе/JI no порпдку строkе программы. Пос11еднее след,ует учитывать nрм заn~с и в одноЯ строке с оператором условного перехода других операторов. А lfbleннo, если nервыw · оператором в строке яв11яется JF -оператор и эаnисанное в нем условие не удовлетворяется, то пропускаются вое операторы этоя строки, сле,цущие после TllfN, и осуutествляетол, rак бЫJJо оказано, переход 1< сле,цующеА с 1rроке, ,, 1( В_современJ:i_~_ реализаrJИЯХ БJ.t;йСИКа допускается полная уоло:вная канет рукцИR: 1 • • IF <ус,rовие> T!IEN <операторы> ELSE <onopa1•opi.o1)> 24
Hanpиuep, во фрагменте програuwы lfJА==,9:В =5 5Jf lF А<> f! THEN 8 =f:f: 0010 l{d 6{18=8-t-3 10 PRJNT 8 програuыа выведет в 1<ачестве значения переменной В чисnо 8, а не число 5, кан может показаться вначале, Прежде чем пере «1·и к составлению разветв.11яющихся программ, рассмотрим общие приемы программирования базовой структуры РАЗВИЛКА средствами языка БЕЙСИК, Понимание общих прющыпов программной реали- зации базовых алгоритмичещ(их С'l'руктур об пегчит затем составление • более с11О11'iНЫХ программ , вю1ючающих в себя базовые структуры как составнъ~е час ·rи. Полная условная констРУкuия. Програwwирование это!! базовой •• отруктуры (рис . · 2,I) проследим nодробно на примере. Рассмотрение конкретного примера не ограничивает общности рассуждений , ТВ!! как выпол­ няемые в этом случае действия • типичны для полно« условной 1<онструк­ цки и в общем случае. Пример 2,2. Функция задана гра­ фически (рис. 2,2). Составить програм­ му вычис .11ения значения зто~ функции в эави с имос•1'И от значения аргумен­ та~ . Иэ графиr.а следует , что •{ о. !I"' v1-x1·, если /Х/ > (, если /.х /::: {. Блт1-схема алгоритма вычисления этой фуюшии приведена на рис. 2, З . Так как выбор вычислительной форму.llЬI зависит от ИС'l'ИННОСТИ или ложности S,2 Рис. 2. I о Рис. 2,2 х некоторого условия ( / Х/ > 1) , •ro зто разветвляющийся аJ1горитw. ~о осно.ву составляет базовая структура РАЗВИЛКА, поwещенная в п;унктирнwй 7 !0044
1 1 L__ .вые.од ,,~~ '~ ~ Pl'lc . 2.3 прямоуrоJ1ьник: Расс мотрим подробно ее программную реализашnо . Соста­ вим строку программы с оператором IF , проверmощим в соотве•гствии с рис. 2. 3 выполнен11е условия /;(/ > 1 . Сначала воспользуемся пер­ вой формой записи условного оператора : 2/JIFАВS(,х)> 1 ТНЕN... " где много'l'оч ие оз нача ет , ч·го пока не известен номер строю~, к которой д, нуж.1,0 переходи·гь при выполнении условия /.Х/ > 1 • В то те время в соо•rветствии с правилами исполнения оператора JF доподлинно известно, что в с,,уча е невыполнения проверяемого условия машина перейдет к строке , следующей сразу же за оператором JF , а соглас- но блок-схеме (с ~ . ~_},З) в этом случае должен выполняться блок присваивания f • = У1-х11 • •Именно эту логичес1<уtо ветвь следУет про-- долмть: • - • 2(1 JF A/3S(,t)>l THEN ... Jff Y=$QR(-t-X"'2) Здесь логическа'Я ветвь, соответствующая условию /,f/ ~ -1 , реалиэу­ етсR в виде одной строки БЕЙСИК-программы. В общем же случае как альтернатива "истина" , так и альтернатива "ложь" структуры PA313ИJlliA могут быть реализованы в виде нескольких строк проrраммы. 26
Согласно cxeue структуры РАЗВИ.ЛШ. (cw. рис. 2.1) после выnол- • нения последовательности операторов, . соответствующих алъ ·.rерна'l'ЮJе "J1оиь", должен происходить безусловный переход к общему вы-коду из нее; поставиu оператор ООТО в том же строRе ~ (либо в спедующеИ строке): . . . 2/J JF AB,f(X) > I lHEN~.. . 3/1 Y=SOR (I-Хл2) : GОТО... Многоточие посшэ СОТО означает, что номер с1•р01(и выхода из структуры РАЗВИЛКА •гакже пока неизве с1·ен. Замечаем теперь, что д1ш продолжения програмi\о1Ы , i< огда условие /Х/ > 1 ис•rюшо, может быть ИСr10)1ЬЗОВана c•rpo ita с номероы 4i - Э'ГО 11ОЗВОЛИТ исключиi-ь /dНОI' О ТОЧШЗ в с'l•роке 2~: 2/:J 1f ABS(Х} >/ ТНЕN .ltO 3Jf Y=.5'QR (J-.Xл2): СОГО.,_ .. Ltff Y= ~ 'Геперь сов ершенно ясно, ч•rо выходоы из с~'РУК'l'уры РАЭВИЛКА (общим для обеих ветвей!) будет С'I'рока с номером ~ . Э'l•и,4 :1оыером и следует дополнить оператор- ВО ТО в строке ~ . Окончате,1ьная за­ пись программы, реализу~ощеА алгоритм по ставленной выше ::нщачи, примет вид : • i@ INPUT У. , _1_~ _P_RI _NJ_~ ~:''J_X _____ ___ 1 , 20 !F ABS(X»J. T~N 4'1/ 1 : 30 YnSQRО-·ХЮО , GOTO 50 ' :40У=0 : 50 PRINT "Vc";V Ь~ END Дnя yдotkrвa сравнения с блок-схемой (см. рие . ,:.З) эдесь реа.11и­ э1шия базовой струк1•уры РА,ЗВИJ!l{А также помещена в цункт ирnЫFI пря1.ю­ уrопьник . Воспользуемся второй формоА записи условно1•0 (i,tepaтopa д,11я ре- шения ра·ссма•rриваемоА з адачи: ' 1iii INPUT Х __1~ 1:'_R_ЩТ _"l'-i"_;)1 _ ___ ________ : 211J IF АЭS(Х) .>1 THEN У=0:60ТО 4111 1 1 3i y"SQR(i-Х*Х) ' - 4i PRrNf '' у-,,.,, ,v- - - - - - - -' 5'1 END 27
Совершенно ясно, что эта форма оператора lf более предпочти­ тельна 110 сравнению с первой, когда число опера'l'Оров, реализующих альтернативу "истина", невелико (помещается: в одноЯ строке с опера­ тором JF), Обычно при испоnьзовании этого оr1ератора удается сокра'l'ИТЬ кол.~честsо операторов програ1>1мы и избаsиться: от излишних операторов бе эусловного перехода, использование которьiХ следует по возможности ОГ:рдничивать, Неполная: условная 1сонстрУК11ИЯ, В неполной условной понструIО.111и ис1юлнимьtА блок .S може'l' быть расположен как на ветви"+" (рис. 2,4,'а), так и на ветви "-" (рис. 2.4,б). Рис: 2. 4 Наиболее просто и естественно программируется случая, когда • блок S находится на линии"-", с помощью первоА формы /,С -опера­ тора: 2# IF Р .THEN 4// Jf/ L.,t__J 1!1 6ь1хо8 Если же бJ1ок S •располоJ1tен .на линии"+" ·и чисJ10 операторов, реа.11изующих б,rок s·., невелико, то целесообразно испо,rьзовать вто­ рую форму: . ,2f1 lf Р ТНЕN CL] 3/4 &t.xo8 Когда из-за большого числа операторов, соответствующих блоку S воспользоваться этой формо~ оператора не удается:, то целесообразно в качестве усJ1овия в операторе 1F взять не Р , а его отрицание ( обозначим ero Р ) : 1/f lF Р ТНЕN 4/1 JflIs1 411 Вы.хо[} 2t, ',
~1 \ Примеg 2.3 . Сост~вить програмuу вычисления фунШJ;ии fl-=/X/ Hanouниw, что no о~ределен!Ф абсолютной величины числа Х ю,ееw: 11 =- { ХI eCJIИХ~0 -х, если Х <О Соответствующая блок-схема и программа показаны ~а рис. 2.5 . нача.nо :::r.:::: --X . BЫf>QA х конец. а. Рис. 2.5 5 RE11 !10АУ11Ь 10 INPI.JT :1 2111 PRINT"X"' "; )( 30 IF X<i:ii iHEN Х ..-. )( 40 PRINT"MOl]YHb Х~";Х 5111 END 'о Обратите внш,1ание, что в :этом примере блок S неполной ус.11ов­ ной конструкции, о которой говорилось, ·сводится к изменению знака Х, если Х < О; в противном случае никакие действия не вьшолнRЮтся li управление сразу nередае•rся на общий для обеих зе'l•вей выход (опе­ ратор ~). qыимер 2.4 . Со ставить программу поиска большего ИЗ T JIO~ чисел. Блок-схема алгоритма изображена на рис. 2 . 6,а, а npo~pawwa - на рис. 2.б,б, Teno 011ератора PRJNT организовано таким обрвзом, 'что на з1tр1ш будет выведен niщученныА результат в виде МАХ ( А, В, С)= М , где А,' 13, О - конкретные числовые значения, ко-rорые nрисвоеИh! переwенИЮ~1 А , в , С с помощью оператора JNPUT , а М - найденное максима.11ьное значение. 29 е. - 10044
м а. 1fJ · f:!EM sonьЦ,IEE и:з ТРЕХ ii; JNPUT .A,D,C: 2~ . PRINT"A•"Aa"~•"8i"C•"J: 31/J . IF" А>В THEN 6~ .4111 II'" D<•C tHEN lil0 ~!li l'l•B, t.oto "'"' 69 IF" A<t ТЧЕN Eltl 7f/J 1"1eA16dTO 9111 el/J · м"t: 'iФ PRЖNT "l'IAXCfA","8","C")•"•" 1ril0 ЕNЬ r~зУ11ЬТАТЫ РАSОТЫ, А• 11 8=-8В с~ L3 11АХСti,-88 ,13)•13 30
1 1 .1 Цдимее 2. ~ . СQотавитр программу, опредеJ1яющую, woryт JI~ три наугад iз~Я'l'!i!e t11щ11а быть дJШНами сторон треугольника. Пр11 noJ1oaи-· тeJIЬHOll QT~~Te nporpaW!,48 ,ЦОJ11КН8 •ВЫЯСНИТЬ -ТИП треуГОJ1ЬЦИК8 ( равно­ С'l'ОJЮН~ИЙ, раэностороiiНИй, равнобедрень1,1й). Блок-схема изобра•еН!t на plfc, 2,7. нач.ало \(ОНеЦ Рис', 2, 7 При составлении этой б.ilок-схемы w несколько отс,туnихи от • ' требований структурной алгоритмизации с целью сокращения размеров бпок-схемы за счет устранения возмо11tНЪ1Х повторений одинаковых б.аоков, ' . Программа, реализующая приведенны/1 на рис. 2.? апrорит~, NO'lte'l' ,,, иметь вид (рис. 2.8): а- :н
10 REM ТРЕУrольник 20 INPUT А,в,с 3 0 PRINT"CTOPOHЬI Тf-ЕУrоnымкА: "А; В; С 40 IF (А+В) <=С Тl-!EN 130 5 0 IF (А+С><=В THEN i30 60 IF (B+tl <=А Тl-tEN 130 70 IF А=В ТНЕ~ 100 80 IF А"'С IHEN 120 85 IF В=С THEN 120 90 РRINТ"АВС-РАЗНОСТОРОННИй":бОТО 140 100 IF А < >С TI-IEN 121!1 11111 PRINT"ABC-PAБHOC TQPOНl-tИй"1GOTD 140 120 PRINT"ABC-PABHOSEl)PEНН\,ii)\"160TO 14fl 131/1 PRlNT " ADc-nocTPOИTb НЕ/IЬЗЯ" 140 END ПРОТОКОЛ РАSОТЫ1 СТОРОНЫ ТРЕУrОЛЫ·IИКА1 3 4 3 ABC-PAЗHOCTOPOH l-iJl!й СТОРОНЫ ТРЕУrОЛ Ы·IИКА1 1 2 2 АВС-РАВНОБЕДРЕННЫй СТОРОНЫ ТРЕУrОЛ ЬНИКА1 3 3 6 АБС-ПОСТРОИТЬ НЕЛЬЗЯ СТОРОНЫ ТРЕУrОЛЬНИКА1 6 6. 6 · АВС-РАВНОС ТОРОННИй Рис . 2,8 Пример 2.6 . Составить программу решения неравенства ах< б при произвольных де Uствительных чис лах а , - ~. Анализируя возможные сочетания значений а и 8 , приходим х б.иок-схеме, изображенной на рис . 2.9 , Соответствующая этому алгоритму программа показана на рис . 2,IO . Выдача результатов в программе организована таким обра зом, что сначала выводится оамо решаемое· неравенство /стром.- Зk1/, а эатем • В оле­ дущеЯ строке - резуль тат его решения : РЕЭУ/IЬТАТЫ PABOTW i НЕРАВЕНСТВО 0 Х< (/J PEUJEH11й НЕТ НЕРАВЕНСТВО 0 Х < :s . ::s х-nювоЕ число НЕРАВЕНСТВО-2 Х< е Х}-2 , :!1 НЕРАВЕНСТВО 2 Х< :s Х< 2,::S 32
G 9 конец Рис . 2,9 ·-·· 10 RE~ НЕРАВЕНСТ ВО АХ<В 2111 INPU T А,В • + - · щено-13/" r1e:r" -- ·- -- -.-~ 3111 PRINT "HEPABEHCT80"JAJ"X<";8 4~ 1F A•III THEN ?0 . !:IФ JF' A>i5 THEN PRINT "Х<"В/А16ОТО 9111 6111 PRINT "X>"B/A1GOTD 9111 7111 IF' В>0 ТНЕN PRINT "X-nlOSOE ЧИCIID"1GOTO 98 80 PRINT "РЕWЕНИ~ НЕТ" 9ё бОtЬ 2111 • Рис. 2, IO I0044 33
2. 4 . ~ополнитель~ше операторы в~ода доннш; Числовые данные. вводимые програwо, с помощью оператора .!NPUT ; при повторном зацус ке програюtы надо заново набирать на клавиатуре и вводить в па.мять ЭВМ. Кроме того, требуете.я много времени, чтобы ввести с помощью оператора INPUT большое количество данных, В языке ВЕйСИi{ имеется оператор опре,gепения данных ( l)ATA), ко­ торый позволяет эаго-rовить обраб_атываемые данНьtе заблаговременно к распоJ1011ить их непосредственно в теле программы. 8 паре с этим операторо.м выступает оператор чтения данf-!ЬIХ ( RfAD ) , который исполь­ зуется для тоrо, чтобы присвоить ряду заданных пе.ременных числовые эначениR, автоматически выбираемые из опера тора .DA ТА • Эти два опе­ ратора не используются друг без друга. Формат операторов: JJA ТА <список арифметических выражения> READ <список пере.мею-шх> Эпем~нты обоих списков разделmотся запятыми. В качестве элементов . списка оператора lJA ТА выступают чаще всего константы (частный слу­ чая выражениР). 8 случае использования арифметических выра11ениl! примен.яемь,е в них переменные долJI\НЬI быть определены раньше, чем бу­ дет использован соответствующиl! элемент списка оператора.DАТА. Так, если в программе запи с ан оператор .D ATA 5, 4.3?, 2.7I Е ..2, W, З.1415 то в результате выполнения оператора ввода REA.D А,В,С~д . произоl!,цут следующие присваивания: А = 5, /3 = 4.37, С• 27!, .D='ifl. • Сами по себе операторы ])А ТА никакого деРствия не производят и могут располагаться в любом .месте програмwы. В программе может быть несколько операторов JJAIA и READ и число их может не сов­ падать, однако количество констант, вводимых в программу оператора­ ми .DATA ·, должно быть по крайней мере не меньше, чем количество переменных, содержащихс.я в операторах REAJJ. Перед выполнением программы машина выбирает из всех операторов JJA ТА числовые данные в том порядке , в каком они расположены в программе, и образует общий блок данных. Оператор чтения вызывает присваивание переменным, пере­ численным в его списке ввода, очередных доступных чисел из общего блока данных. 34
Оператор .DA ТА д'олжен быть единственНЪ!М или nосшедни11 операто­ ром в строке. Каждый раз, когда в любом месте програuwы встречается опера­ тор. READ , общий блок данных поставля:ет ему очередное число. КацыR очередной оператор пporpawwы READ производит выборку величин из общего блока, начиная присвоение с первого ~использованного при предьщущем чтении значения общего блока. llыимер. • 2f} DATA 5.2, - . f5,2.85 3d DATA 8.25,. 31Е-·5 4/J DATA .45, - l.5E3, !2 5Jf READ А,В •6r:fREAD С,D,Е 7/J READ Х, У (S} Эдесь номера строк операторов выбраны произвольно. При выполне­ нии программы оператора DA ТА строки 21, ~. ~ игнорИIJ'J'Ю'!'СЯ: до тех •. пор, пока не. встретится исполнимый оператор READ . Эти 1•ри оператора задают общий блок даННЬIХ, состоя:щий из восьми чисел, расположенных в такой последовательности: 5;2i -0 .15; 2,!)5; 8,25; 0,37•I0-5 ; 0,45; -I,5•!03 ; I2 Первый оператор READ выполнит присваивание: А =- 5,2; В = -О. !5; второй оператор l?EAD , продолжая последовательную выборку из обще го блока данных, присвоит переменным С' , f) , Е соответственно · значе- , о ния 2,85; В.25; 0,3?• ro- . Наконеu, последний оператор READ (стро- ка ?fJ) выполнит присваивание: Х "' О. 45; У ( ~) "' -I ,Б• 103 • В послед­ нем случае з начение присвоено и~цексированноР перемениоА, При необходимости пропуска отдельных элементов блока данных. можно использовать некоторую фиктивную переменную, повторял ее иден­ тифи1<атор в списке !!Вода требуемое число раз. Пусть, например, бJ1оа данных содержит последовательность чисел: 3, I.2; 0.3?; S.9; -7,3, Требуется присвоить переменным А и 8 числовые значения t:.\, 9 и -7 .3 соответственно: Щ DATA 3, I,2, .37, 13,9, -7.З 2i READ W, t,,v', W, А, В 35
При вьщоJщении последнего оп~ратора будут обесцечены следУЮЩие пр11своения: W= З, w" I.2, W = О.Э7, А= 8.9, 13 = 7,3, что n т реб-овал ось . Здесь W играет роль фиi<тивноЯ переменной, :которая а да.п"11еРщем нигде не испольэуетс,1. . Пос.ле Вl!lборки из блщц, даНН\,IХ последнего чисда рн считаfi\тся исчерпанным. Обращен11е к ацустош~энному блоку щ1нных сч11тается опlиб­ и оя и приводит к снятию ррограммы, Если вознинае1 необходимость е повторном испоJ1ьзовани~ бло1<а данных, его прещэарительно след,ует в осстановить с помощью оператора . RE S TORE ; Этот onepa'l'OP не • имеет параметров . ~имер. ~ Щ J)ATA З, 1,2, , 37, 8,9, -?,З 2\1 REAJJ АА, q(5), Х, Z (2, 3} • 11••••••••8 • • • • • • 8888••8С8е8• . fi1 RE.S TORE ?() RfA/J Х, Y,Z, U(J), W После первой выборки даИНЪIХ из блока onep~тopow READ (строка 2~) он окаже-rся полностью ttсчерщ~нным; Оператором RE S TORE блоlt д&lfliЬIX восстанавлива.ется в первоначальное состояние. Втqрой операто{J REA/J (строка?~) снова обращается к началу блока даннЬIХ, присваивая последовательно: Х"' З, У= I,2, i? .. ~,37 и т.д. Рассмотрим несколыrо приh!еров. \!: . Пример 2.?. Составить программу решения уравнения ах=8 ДJIЯ проИЗВОЛЬНЬIХ энечен1Н! ЧИСЛОВЫХ параметров а И 6 , Блок схема алгоритма изображена на рис. 2. II,a, а соответствую- щая программа - на рис~ 2.II,б. • • Приведенная на рис. 2. II, б программа составлена для трех пар значения а, 8 иллrострируюiцих работу алгоритма для •rpex принципиаль- но О'l'личимых случаев соотношения мещцу параметрами. Операторы .DA ТА - READ особенно удобны при отладке программ (проверке их правиль­ ности для всех логически возможных случаев). В приведенной реализаuии rtрограмма введет (благодаря налич~ опера•rора (}ОТО З!1 в строке 1\1~) последовательные пары чисел (0, О); (О, 5); (З, 12.б), после чего бл01с данных будет исчерпан. Программа завершается аварийно с выдачеА соответствующей индикаш1и об ошибке, хотя в данном случае авария была заранее nред,усмотрена. 3б
начала Гl' а 18 REH УРАВ~IЕНИЕ АХ=В 20 DATA 0,0,0,5,3,12.6 30 READ А,В 40 IF A=IIII ТНЕN 7(1 :S0 XuB/A 60 PRINT"X•"1X1БOTO 1Н 78 IF 8•0 ТНЕN 98 88 PRINT"PEIIIEНjllj)\ НЕТ"1бОТО 111118 98 PRINT"X-flNISOff° ЧИСЛО" 1'10 БОТd 38 ПPOTQКOII РАБОТЫ~ X - ЛIOSOE ЧИСЛО PEIIIEl-ll -1DI нет· • Х• 4.2 r5 Рис. 2.II IO 10044 ':.f7
Пример 2.6 . На п.,1оскос'l:'и в nрямоугольноА системе координат :-эащшо кольцо (рис. 2. I2), определяемое двумя ко1-111ентричесю~ми окружностями радиусами !,t{ и t.12 ( tt, < Ч2 ) с центром в начале 1tо­ орди11ат. Составить БЕйСИК-nроrрамму, определmощ.УJQ попадание точки • с произвольными координатами Х и У в область кольца. Принять длл отладки программы ч, = 2, ~t"' 4, Очевидно, точка с координата-- ми ( Х, У ) попадает II кольцо, ~ если выполняетсл следующее двоА- __,,. 7v.,,___ ное неравенство: На рис. 2, IЗ показана блок-схема , алгоритма. '''l'ОЧ l'id. ене" кольца начало х'у Ч.,:: 2; 't:,::: Ч . f::-yx 2 +y2. Рис. 2.rз Зt! Рис. 2. I2 х
t, Соответствующая этой бJioк-cxeue програwuа uожет иwеть вид (рис. 2 , 14) : 10 REM ПОПАД~ 6 КОЛЬЦО 20 DATA 0,1,2,3,4 ,5 30 R1~2,R2=4 40 READ Х,У ' 50 L=-SQR(X:IEX+VЭEV) 60 IF L(Rl ТliEN 100 70 IF L>R2 THEN 100 8111 PIHNT ''ТОЧКА l"XJV") В КОЛЬЦЕ" 90 GOTO 40 101!1 PRINT "ТОЧКА ("X1V") ВНЕ КОЛыtА" О" БОТО 4" ПРОТОКОЛ РАВОТЫ1 ТОЧКА ТОЧl<А ТОЧКА 0 11ВНЕКОЛЬЦА 2 3 ВКОЛЬЦЕ 4 ~ ВНЕ КОЛЬЦА Рис, 2,I4 Для отладки програuwы с целью проверки 11равилыюс1•и ее функцио­ нированип для всех логически возNОЖНЪIХ слуцаев достаточно последниИ оператор использовать в виде ЩI ООТО "11 Программа в этом случае хотя и завершится авари!!но с выдачеА соот­ ветствующего сообщ.ения, однако пос•rавленную задачу выполнит. Авари!!­ ное завершение, как и в предыдущем примере, вызвано обращением оператора ввода l;ff READ ,К, !J к опустошенному блоку данных после трехкратного ввода пар чисел: (O,I); (2,3); (4,5). • Протокол работы приведен сразу после текста npoгpawNЫ (cw. рис. 2,14). . Пример 2.9 . На рис. 2.I5 иаображена програwwа, реализующая игру Ваше, Правила игры приведены в тексте программы и выдаются по запросу играющего с wашиной. Протокол всей игры· приведен посяе текста программы. Первый ход делает играющий с wашиной к всегда проигрывает~ 39
10 REH ИГРй BAI\JE 2" 1NPtJТ "HYJ!Hbl ПРАJ!ИnА liГPW? (t /j!J) • 11< 30 JF 1<~0 THEN Blil ·, 40 PRINT"t\AHЬI М ПPEt\Hj:;TOD. ЗА ХОД " • 50 PRINT"MllJICHO вз~пь от ·. 1 ДО t ПРЕДМЕ" 60 РRХNТ"ТОБ.ВЬМl'РЫВАЕТ ВЗЯВID!й not::n~• 70 PRINT" /lНИй ПРЕД11ЕТ" е0 s~30 • 90 PRINT"H А Ч А 11 D"iSJ" r1PEQ~T!=)B" 11'19;1 PRINT"BAUI ход_~, 1 INPUT KtPRitH К 110 IF К>.,1 Тt-iEN IF t<<.,5 T►IEN 138 120 PRINT"O II И В К А"16ОТО 11118 130 SвS-K 140 PRINT"Miie:. OCTAnQCb"tB 150 IF S<=3 THEN 2 _1t'i Н,0 1<=6-К 110 s"s-к 180 PRINT "Я ВЕР~••р< 185 IF S<•3 THEN 2i0 190 PRINT"OCTA/10Cb'!J8 200 GOTO ll!lil 210 PIONT"BEPY ВСЕ!П О ВЕД А!" 220 ENO ПРОТОКО/1 РАВОТЫt НАЧА11О30ПРЕАМЕТОВ BAW ХОД 5 МНЕ OCTAIIOC~ , 23 ЯБЕРУ1 OCTA/IOCb 24 FAUI ХОД 5 МНЕ ОСТАЛОСI:,, 19 ЯБЕРУ1 остАnось 1е BAW xon 3 МНЕ OCTA/IQCI:,, 13 S\ БЕРУ 3 ос1·дпось 12 BAUI ХОД 5 МНЕ ОСТАЛОСЬ, 7 ЯБЕРУ1 QCTA/IOCb 6 ВАШ ХОД5 МНЕ ОСТАnось 1 БЕРУ ВСЕ!П ОБЕД А! Рис. 2.1 ~ 4) 9
t 1t) 1j 1 1 \ !1 1 ~j Пример 2. IO. Есть отрезки 'l'руб длиной А и В Nетров ( А > 8 ) . Сколь1,о тех и других понадобится, чтобы проложить трубопровод дли­ ноР. Т метров с ыиниыальнш4 количеством свагных швов (тrо,бы разре- • за 'rь не.nьзя:)~ Про'l·окол рабо'l'Ы программы при различl-!Ь!Х значениях Т , А , В приведен на рис. 2.16, сразу после текста программы. Сов етуем ра­ зобрать сщ11остоя:'l'ельно алгори•гм, по которому работает программа. 1~ REM ТРУ~QПРОВОД АЛИНОй Т МЕ:ТРОS 21,! REM ИЗ А- И В-11ЕТРОВЬIХ Tl'YS :$111 IWРuт~вае:аи r,А,Э";Т,А,з 40 r~~ :rc ~т • ::i!I Р= IHT (Т /А) 60 Q"'P3 'A 10 A~T-tl fl{!J If' R< >fll THEN i.2111 ' ?1⁄4! PR1N't А; "-М!TTl"08J>IX: ",Р 1~JJ; PRtNT ~;"-Hl'::TP05HX:"JI 1j~ G01'0 iS~ !20 1=!Н , ,i . ·r~т-.в 14ii.! !~ T>(;I ТНЕN ~ 15;0 PRlNT"Ti'IYf30ПP08QД АЛ!-'!1-Юй", ТС; "11" 16Ф PfHNT"И::)"; А; •и•; В; "-МЕТРОВЫХ 11'116". 17~ PR!NT · нЕльэ, nостюить• 1130 END flPUi()КOfl PA50Tbl: Т"'197А=-7~~;S 7 -l'IETPO~/X 1 ;Н 5 -HETPOBl:!X, 2 •т=1еА;7в=:::; ТРУSОПРОООА Д!114НОй 18 М ИЗ 1 ~ 5 --МЕТРОВЫХ TPV6 НЕЛЬЭЯ ПОСТРОИТЬ Рис. 2. Iб Упражнения: I. Даны к оррдинаты трех т очек ( X0 1J(), (X.2.,fl.2), (Х:5,{13 ) . Выв ести на экран текс1• "да", если эти т оч1си лежат на одной Пi>ямой, и "Нет" - в ПрО'!'ИВНОМ случае. II !00 44 41
2. Даны координаты точки на шос:кости: (,,t, V). Вычислить знвце­ ние· переменно~ Z по с.11едующиw правилаw: (S) г) Z = {X-t -fl, ес.11и (%,(J)t'/1), x-v , если (X,j)~,i),· { sinx, если (У, а)С.Ю, ~.. ' ~- COJy, если (,к', V)! 1J, . Варианты задания области дJ изображены на рис. 2. У/ (заштрихо­ оанная цасть плоскости). ~2 -3 -2 2.з -2. -3 (). 8 l. в 1-2 1 -1 8 -1 Рис. 2. 17 З, Треугольник задан координатами своих вершин: ( ~, j~), (~, у'.,), (~, ~) · Определить, лежит ли точка с kоординатами ( ,,r" 'j) внутри треуго.11ьщ1иа. 4. Заданы координаты трех различных точеи на пл о скости. Найти ту из них, иоторал: а) ближе других к началу координат; б) дальше других от начала координат.
(i З. ПРОГРАММИРОВАНИЕ ЦИ!tЛ.ИЧJi:СК11Х АЛГОРИ1'МОВ Циклическими называю·rся алгорИ'I'МЬI , которые соде ркат многократно пов.торя:емые участки. В основе циклическ их алгоритмов леsит базовая алгоритмическая структура ЦИЮI ( ПОВГОРЕНИЕ) в двух ее разновиднос'l'ЯХ: ЦИЮl-ПОКА (рис. 3.I,a) и ЦИЮI-ДО (рис~ З,I,6), s · -ч=о-- а 6 Рио, З .I Здесь.Р _- условныR оператор; $ - nовтор.f!ЩаяО1Я часть алrоритма ( тело цикла). · Програ!оlМНЪlе аналоги базовой структуры ЦИЮI легко реаяизуются с исдо,1ьзованием оператора IF . Ниже (рис. 3,2) nриве'дены схемы программ на языке БZйСИ!{ для обеих базовых структур. Номера строк программы выбраны произвольно . I~ IFP THEN ~ .щj~ 2fler::J : . (}ОТО Ill 2\1 lf р THEN If,J ~ ВЬIХОД. 3(1 выход ЦИЮl-IЮКА цикл-до а б Рис. 3.2 Я.сне, что в общем случае тело u_ию1а S может занимать несколько строк программы. В некоторых случаj{)( (в зависимости от. рас11оложения тела цикла S - на ветви "+" или " - " ) при записи оператора IF. ус­ ловие Р заменяется его отринанием, как и при ·программировании !'Sа­ зово!! структуры РАЗВИЛКА, что обусловлено выбором наиболее нелесооб­ разного способа программного представления алгоритма . IIlf 43
Рассмотрим соответствующие примеры. !!Jшмеы З.I. Составить программу формирования и печати таблиuы _значениn функuии при изменении аргумен•rа ,,r от а = I до 8 = 90! с шагом h = IOO, Влоп-схема показана на рис. 3.3,а, а соответств~'lОщая программа и протокол ее работы - на рис. З,З,6. J(ОНеЦ а t ri - REM цикп..::до 30 INPUT А,В,Н 40 PRINT "X","(1+1/)t')ЛJ(" :S0 PRINT 60 Х=А 7JiJ, У~<l+ЦХ> " )( 8/i! PRINT, Х, У 90 Х=Х+Н 100 IF х<~в THEN 70 110 PfHNT"KOHEIJ," 120 ENQ ПРОТОКОЛ РАБОТЫ: х 1 101 201 301 401 501 614) 7(i!JI 89,11 9i111 КОНЕЦ Рис. 3,3 2 2,70494::19774783 2.7115~Ji/6254425 2.7!37801179485 2.714' ,,00179}511 2.715573'У'265189 2. 7160238/1J64967 2.7J634551i!lir.2406 2.7165869629'!55 2,7167748810311'7 l{аждое очередное 'значение вычисляемой функции печатается вмес­ те с соответствующим значением аргумента; оператор в стр9ке 4(1' вы­ водит заголовок. В результате работы программы на экран дисплея будет выдана таблиuа (см. рис. 3,3,б). Этот алгоритм может быть реализован и по схеме ЦИКЛ-ШЖА. Блок­ схеvа и соответствующая программа изображенн на рис, 3.4. 44
1~ f!Etl u1,iкn-nOКA 311' Н!PUT А, В, Н 4/б PfЦNT ·· ~•."(1+1 ✓)() ....)i•• ()~ PR\NT Ьf6 Х=А 7~ IF Х>8 Т~Е~ 1:U S/i::I '1'=0+1/Х);,Х 9{6 P/HNT К, У 10fil Х"Х+Н !1111 GOTO 7fll 12vJ PfHNT"KDl-!EЦ" 13/З' END ПРОтокоп PASDTW, х 1 Н111 201 3111 4'1$1 51'11 611'1 71J1 Elili 9JI КОНЕЦ о Рис. З.4 • 0+1/Х)"Х 2 2.7М945"1774783 2 . 711Q5/it6254425 2.71378"1179485 2. 7149"1"1"l91!S11 ~ .712\57~92&!$189 2,7JoQJ23StЭ64967 2.71634!S~//Jtд2486 2,716:586962945:, 2.716774881tfДl57 Приведенные на рис. 3,3 и 3,4 програмwъi равносилыш в том смысJ1е, что они дадут в данном случае одинаковы!! резу.11ьта•1·. И 'l'ew ,.;• не менее программист должен ясно себе представлять, что одинаковые !!О сtшслу програмw, составленные на основе базовых структур ЦИl{Jl-ДО и ЦйiШ-ПО!{А, все-'l'аки различны. Различие обусловлено cawol! r~риродоА этих структур i а стру1tтуi)е ЦИКЛ--ДО те110 $ всегда выnол­ J1летс11 по крайней мере один раз, независимо от истiшнос•rк nроверяе­ ~ого условил Р {см . рис. 3.I) 1 в структуре ЦИКЛ-ПОКА t!;;:ок S мо­ •ет не выпо.11нл•.rьс11 ни разу. В частности, если в рsссwотрениоw 11р11- мере верхняя граница параиетра цикла Х заранее не изsеотна _ 11 оп­ ределяется в результате некоторых првдваритеtьных вычмсхен~й, то t.ioxeт оказаться, что первая программа ЩИЮI-ДО) в этой с~-ту1щик даст Нi!ВВрНЬIА результат, ДеАств ительно, есди окажется, t/'l 'O д < А , то В'I'Орая програмwа ЩИlt/1-ПОКАj сразу же завершит работу, в то зреwя как первая вычислит и выведет на экран одну строr.у, nocJte чеrо оста- . новится. Подобные ситуации требуют особого вниwанкя при состаБжевии программ. 45 !2. 10044
Пример 3,:2• Составить В1!11СИК-программу вычисления и печати суммы нубов натуральных чисел от I до .rz _ • ·Требуетсянай1•и S=I +2з +зз + .,• + TlJ , Приме1,1вначале S = О и будем добавлять и· искомой сумме очередное слагаемое ,1( 3 , начинак с /( = I, Перед операциеt! суммирования.- цредварителы10 будем nроверя~ъ выполнение условия /( .,. - ri . Только при такоР организации сцг оритма результат будет верт..щ, если окажется, что уже в самом 1:ачале fl~O. Бло1с-схема алгоритма, основанная на базовоИ структуре ЦИНЛ-ПОКА, изображена на рис. 3,5 , а, пользуясь котороt!, нетрудно составить 11 програма~у (рис. 3.5,б). начащ.1 а 1fl1 REl'I СУ!!МА кvi.oe 21!1 lNPUT N:PRINТ"No"N 30 6=0':К"<1 4(/i IF K;;>N THEN 6Ф ~ 521,. /-1<"3 61iJ К2К+1 7flJ GOTO 40 61?1 PRINT "t.Y ~111A - ~"; Э 'i'fб ЕNo ПРОТОКО/l РАБfJТЫ: Рис. з.ь Аналогично составлтотся програмМЬJ вычисления суммы п., членов .mбoR последовательности, заданноt! общим членом ак ==/(К) Пример 3,3 , Сос•rавить программу вычисления значения функции f!-=a 11 , где п - целое неотрица•rельное число •. Алгоритм сводится к многократному повторению ' операu.ии умн01ке­ ния 1 · а •а •а- ... а, Поэтому вначале полагаем /1- , .. I, затем при каждом 4б (
1 .1 обороте цикла будем последова'rельно уыножатр /1 НЕ! а , приниыа'l'Ь полученныl\ результат за новое значение 1:/ и 'l',д,, пока операция умножения не выполни'rся требуемое число раз. Блок-схема зтого алго­ ри'I•Ма подобна схеме предыдущего примера, поэтому приводИЬI тоJJько программу: 10 REl"I СТЕПЕНЬ 2/б DATA ::i,0 ,2 ,7 30 READ A,N 40 V=cl 1K=l 5~lFK)NTHENМ 60 Y~YiltA 7fi) K=l(+l;GOTO 5/ll 6fJ PRINT А; "В";N"··й CTf:[lEНИ=";V 90 6tПЬ 3~ ПРОТОКОЛ PA601bl: 5 В ~ -·ii, CTi::rtEHИ"' 1 2 В 7 -й СТЕЛЕ.НИ= 126 Програыма ышанчивается оператора" безусловного перехода GОТО 3~ и благодаря этому будет выполнена дважды : первый раз при А =- 5 , N= О; второй раэ при А= 2, N = 7. О~ати'l'е вниыание на то , как составлено тело опера'l'ора PklNT м в каком внде печа- . таtотся результа·rы. Цример ~ .4 . Даны два целых· положительных числа т и п . Соста­ вить программу вычисления юt наибо1iьшего общего делителп , чспользуя алгоритм Евклида. • Блок-схема показана на рис. З,б,а, а соотватствующ~;~.r. программа - на рис. 3,6,б. Чтобы сохранить д..'I-!! последующ~го вывода исходнъ~е чис лоr. ые зна­ чения 11 и N , в нllчале программы ( строка 4{;1') эти величюч.; присваи­ ваются рабочим пере;Аенным )( и V. Оператор С/= JNT (,К/V) находит uелую часть частного )(/У и присваивает результа•г nеременноn (l ; оператор ,'< = Х - О* У находит ос таток от деления Х нn V к, * Более подробно э:то ·г алгор1пм уже о бсУJ!ЩSЛСЯ В BblflYCKe: Основы алгоритмизании: Учеб. пособие для учителе~, читающих "Uсновы информа­ тики и вычислительной •rехники в 9 классах средней школы" /Сост. В. С, Мзког он. - Uдесса: ОГУ, I9db, 4?
а 11/J 20 3111 4111 \!1111 (111.1 1111 REl'I НАИSОnЬWИй овщиtr~ д,ЕnИТЕnь R~M АЛrОРИ~~ ЕВкnидА INPUT 11,N X=M1YcN Q"'tNTIX/YI R=X-QIEY IF ~• IJ TH~N 1tlll/l iзl!I ;c"yoY=R 9Ф ~ото rsi!I tli!t/1 1-!=У 11~ P~INT •нод1•м,•,•N")•"1Н 12~ l!Nti ПPOTOKDn PABOT.blt НОД( 14•• З!.'J 1"' 7 Рис. З,б Оператор печати выдает результат в виде НОД (/.1,N} =У , где ;Ч и N - исходные целые числа, а ·У ._ найденный НSl'lбОЛЬШИЙ общий делитель этих чисел. Например, если М = I4 и N = 21, то результат будет выведен на э1сран в форме : НО/1 (I4,2I) = 7 В приведенном примере 1соличество повторениll НИI{Ла заранее не определено. Такие циклические алгоритмы, в которых заранее не извест­ но число шагов, необходимых для :решения задачи, и проверка окончания­ вычислений происходи·r не по счетчику повторений, а по достижении нy'l!tliOII ТОЧI;!ОСТИ вычислений, называются, как известно, нтераuионными. Пример 3,5. Рассмотрим задачу извлечения квадратного корня v =va"' без использования стандартной функции БЕйСИКа . IJt!
д,rя реu~ения за~ачи воопо1ъзуемся итерацпонноя формулой Ньютона: (3, I) Эта форъr,у.11а позволяет вычисJIЛ'l'Ь очередной член пос.педоватедьноот" { Еfп}, чGрез уже вычисJ!енныА предыдущий член, начиная с некоторого начального nрибли~ения fl-,, , :которое задается произвольно, В uате­ матике. доказано, что •rакая nоследовате.11ьность стремится (сходится) , точноuу значению уа , Поско.iIЪку щ. не "ожем позволить себе строить бесконечную nомедоватеnьность приближений у., , /h , 1/.2 , • , • ... /lп , . ~ ., то процесс обрывается при некотороu /Z таким образом, чтобы по-грепщость вычисления lf= Га' не пгевосходила некоторой sаданноя ьел~,чilt!Ы ё >О, Для этого достатQчно сравнить два поодедо­ вательньiх приблиrениf! У.п+ f и !/п • Если /f/п,-~-!117/ <С! (3,2) то въrчвсденип с~едует ЩJехратить и ао.nученное приближение U(J fl ♦ ,( принять за значение уа . Из формуm,J· (З.I) сяе,цует, что • f(;a ) Введем обозначение: V::2 i,т. - flп примет вид /V-/< е. , Тогда условке (3,2) При цроrраммировании индексы в итерационной формуле не 11у11ИЫ, так ка~с ri операторе 11: = 11-1 tJ' с11ево от знаиа присваивания стоит "новое", ( п +I)-e. значение , а оправа - "старое", п-е значение пе­ реwенной // , что и требуется согласно алгоритму, . Влок-охеwа мгоритwа изображена на рис, 3,?,а, соответствущая ВЕйСЮt-nрограмСJа - на рис, 3. 7 , б. По ктере;ционной схеме вычисля:о'i' 1,ногие з.11ементарНЬ1е функции, 110- nо11ьэуя их разложения в степенные ряды. Наиболее употребитеJ1ьные сте­ пенНЬ1е рлды д.11я фУнRЦt1Я ех , sш .К , со.<;)( , которые сходятся при любом значении Х: 49
а, 1~ REM КВАДРАТНЫй КОРЕНЬ 20 REl1 IЩ АЛГ'ОРJ,ПМУ НЬЮТОНА 30 INPUT А,У0,Е 4И Y=Ylll · 50 У=.5ЭНА/У-У) 60 V=Y+Y 70 IF AВSIV) >!а THEN 5121 • 8,0 PRINT ~KOPEI -I& 1113 ";/. 'l;"=" ;V 90 END ПРОТОКоп PA60Tbl t КОРЕНЬ ИЗ 9.05 3.0'/б83217927952 о Рис . 3."7 Степенные ряды щ.1лmо'l'ся sажным аnпаратоы для та будирования &.nемен'l'арных фуню11Н!, так как !'IX rrрименение л озволле-т свест и з адачу вычис ления значен!,Jй фуНRции с зада нной точн остью к задаче вычисления многочлена, При.ведем здесь для справок разложения в степенные рнды еще нескольких популярrЩХ функций: • ,($ ,s- ,. ~f aгc"tt;Х=X--g-r 3 _,. ..,..,.(-1) 2пrlf- • • • 50
При вЬ!числении э,1,1ементарных фущщкй с помощью степенных рядс,в удобн о пользоваться I1е153ррен'rными соо•rношенилми, которые позволяют вы,1ислять очередной член ряда не непосредственно ('rакое решение б:ыло бы сл1wшоц примити1щым ) , а через уже вычисленные предыдУЩие члены~ . Для приведенных рядов ренуррентные соотношения: могу·r быть 1щведены непосредственно. Достаточно взлть отношение двух соседниос членов ряда. РассмотрИJ,1 9 например , степенliЬlй ряд для функuии ех , общий член которого меет вид lln = .%;"п 1 Вычислял отношение nосле,цущего члена к предыдущему, получаем: х --- п+f а=О,I,2, •,• Таким образом, для двух соседних членов ряда получаем рекуррент­ . ное соотношен•11J которое удобно для последо в ательного вычисления членов ряда (при этом мы из бавлены от необходимости многократного в~исления степеней и факториалов). При вычислениях с помощью степенных рядов мы ограничиваемся Rонечным числом членов , заменяя сумму ряда его частично~ суммой. Возни1<ает прэ.к'rичiэский воnрос: сколько членов· ряда нужно сохранить 1 чтобы получающаяся погрешность не превышала заданной? Для знакопеременных рядов погрешность легко оцен11ваетсл: при замене суммы такого ряда его ча стичной суммой допускается погрешность, не превосходящая по модулю первого из отброшенных членов. Для рядов{) положительными членами оuенка погрешности более сложная и здесь не.рассматривается, П.ыимер З.б. Составим программу вычисдения фушщ ии fl"' J'tlt Х с заданной 'l'Очностью ё, > О• пользуясь ее разложением в степенной ряд: (З,.З)
Теоретически этот ряд пригоден. для J[J)бЫХ значен11й Х • од1-1ако в дейстsите11ьности он практичесни бесполезен дпя бо,rьmих значений Х из-за очень больши-,r ошибок округления. Будеw пред110.11агать, что ,Х ~ 2 J7 , в протионоw сяучае надо nользоза·rься сначала форwулаыи приведения, а з&тем исаользовать для вычисления .Sin,x степенном ряд (3,3). Введеw обозначения : уз /(" n/(21t+I и.= ,х, и,=-· зf' и-е = .;/) .. • 1 и,,=(- 1) (211~1).' Тогда ИСХОДИЬ/Й ряд (3,3) wожно 11ере11исать так: Частичные суммы последнего ряда 5~::u., S,=S0 +u,, . . . , S,,+,=S,,+u,,,. 1 яв11яются последовательныыи прибдижениmш для искоwого значения фуmщии S == si,н Х. (З.4) Формула (З,4) woжe'l' бы1•ь запрограwuирована в виде цикличесRого итерационного процесса, который описывае'l'ся ренуррен•~•m.rъш соотноше­ ниями между членами ряда LI" и час•1•ичными суммами S,. ·: и,,.,{== и,, (,2n r2)(2n. ;.3) 1 11, .. 0.r,2, Из Э'l'ИХ соотношений видно, что веJtичины и "-п , $,., 1 v.огут быть nо.11учены на основе величин U11- , $ ,. , п , вычисленных в !lредЬl­ дущем исполнении цикла. Нвчальнъiе значения этих велич.ин ;z, = О, S,,=x, и. =Х определmотс.я на основе фор1,WЛЪ1 (З. З). Так как резность 1Аеж,ау соседними зваченияwи функции $ - · S. "" И .f , то момент ,,,,..,f 11, ,,,,,,,. окончания ВЫЧИСJ10ЮIЙ НSС'l'УПИТ при /И,щ'/ .e:f с. ьz
Составим соответству~ блок-схеNу описанного алгоритма - (рио. 3.8,а) и БЕйСИii-программу (рис. 3,8 , б) (при составлении блок­ с:кемы и програ111мы мы с)•r:ка з ал ись от использования индексов по сооб- раmениям, в лреды,ц,ущем 11римере) . 10 REM SINX 20 I'NPUT Х,Е 30 f'RINT "Х = "Х;"ТОЧНОСТЬ="Е 4fil U=X:S =U 50 N=0:V=-(X*X) 60 Z= (2~N-~21JII! (2jfN+31 lfiJ . U=lJKV/ Z е/3 S=S+U ~ !11 N=N+1 J~, IF ABS(U>>E THEN 60 l lli! PR[NT "SIN"X "= ";S t:.1 ~ END ПРОТОКОn РАБОТЫ: Х= 1.52 ТОЧНОСТЬ= IE-04 SIN 1.52 • .99871~10725 307 о Рис. 3.8 В программе предполагается, что аргуwент Х задан В радиана11:. Если же он задан в градусах, то в t1ачале програмNЫ достаточно вст81- вить оператор перевода гра,пусной меры в радианную, например: 25Х=Х *Pt/t8d В этоu операторе )( справа от знака операции присваивания выражен в градусах, а слева - уже в радианах, - В программе введены промежуточные переменные: а) чтобы не вы­ . числять каждый раз в теле ци1tла - .Х.2 , определяем его однажды за бЗ
пределами цюt.1.1а и присваиваем nолученщ)е зн.-чение переuенной V ; б) переыенной 2 обозначено числовое значение знаменате.щt, вычис.uяе­ мое каж,щ,111 раз с новым значецием переwенной N • Упражнения Состliвить БЕЙСvil{-nрограммы для решения сле.цующих зцдач. I. Найти сумму квадратов всех нечетных чисел натурального рядаотIдоП• 2. Вычислить у =п/ 3. ВычисJ1ить $1 = уа , а > о , Р - целое положите,ьное число. Указание. Воспользоваться итерационной формулой Ньютона: • • '(, а, 1/nN=fl"rр,1:• -у,,)1 4. Вычислить с заданной точностью С , .не по11ьзуясь стандартНЮIIИ функциями языка ВЕйСИК: а) /1::: (».fх; б) #=fJe(-1+x); в) !/=> е)(+е-)(. r) у=мср,r, 2) 5, ·табулированием трехчленов: · 4х2_162х +Iб8l 9х2- 249Х +I7бЗ найти последоватеnьности простых чисел; )( изменяете.я от I до 40 с шагом I, Результат Вl!iдатьна экран дисплея и снабдить заголовком "ПРОСl'Н~ ЧИСЛА". б. Вычислить сумму П членов ~оследоватепьности с общи~ членоw: · а_2к. VК а) 1t- ;;т-;:т . ) б) ак=.3к+1 • 7. Что будет. выдано на экран · дисплея в результате работы такоR · npoгpaut.tы: H/J N=35 2!11 I=f2J:K=1 '3р, PRINТ t<; 40° К=К~ [ • 50 I=l<-1 b!lf 1F K<=N THEN 30 7!11 END 54
8, Быtт слить и напеt1атать последовательность, заданную общим членом с ледуЮще го вида: Вычисления продолжать, пока / xf7H - Хп />О, 00(. 9, НаRти и напечатать число членов и приближенное значение Cyt,IWЬI S а) S=/.; -1- ! .)- · (. .! + .!.)+(.l +- i)-(.!. + !.)+ 11 .2 3# 5'. 6 " 8 ••• •(I")(ff1)(1(f') "')$=1- -+ - +-+ - +-.--+ - +-+-+ V 2J ✓/$6 ~ 89f0 '" Процесс суммирования продолжат,ь до тех пор, пока члены суNo,Ц,1 по ыодулю больше 0 , 0001, IO. Найти и напечатать число членов и приближенное значение суммы IIIII +-+-+~+-+ -+ ..., 2ЗоtJIЗ в которой знаменатель каждого слагаемого равен сумме знаменате11еА двух предыдущих членов. Вычисления закончить, когда очередное сла- гаемое станет меньше 0,0005, • • II, Последовательность Фибоначчи (см, упра'&Нение '7) задается ооотношению,си вида Требуется: а) найти число членов последовательности, не превоо­ ходящих. 1000; - --
6) иаt,;•rи сумму членов последоватеJiьности, Jie пра;3осходящих заданного числа ;V; 13) напечатать порядковые номера членов последовательнос'.l'И, удовле"I•ворлющюс условию К</,. < L , где К и L. - заданны~ числа; г) найти ма1,сималъное число членов последовательности, сумuа Кй'орнх не превосходит заданной величины О . 3, I. QпeJJ8'l'OP uинла ' Циклические алгори'l'МЫ могут быть описаны сле,цующей схема!!: I} установка начальных значеиий,учас•rвующих в цr,шле переменннх; 2) задание закона изменения переменной, являющеi-lся параыетроt.1 11.ю,ла; • 3) 11ровер1:а условия оwончания uикла: выход из цикла при выпол1;ении этого усл овия или переход к следующему шагу в nротивно:А сдучае; 4) реализ,щия повторяющейся части алгори•rма ( тели цикла); 5) возв ра•1· к шагу 2. Э•rа схема на БЕЙСИl{е ус11ещно реализуе'l'СЯ с помощью несколысmс операторов присваивания и опера1•ора • 1f , что и было Hf.ll'Jifl.ДHO про- •• иллюстрировано в предыдущих примерах. Большинство встречающихся в программах циклов удовлетворяет таким условиям: чис1ю пов'l'Орениf.1 цикла ионечно и иssестно до т~чала его вы~• nолнения; закон изменения параметра цию1а - арифме•1·м:чес1rая прогрессия .с ааданной разностью и начальным членом, Этнм условию,1 удовлетворяют, в частности , пра~tтически все цюtлические алгори1•мы обрабо•rки массивов данных. ,[\Jrя программирования таких 1щклов в Б!!J'iCИl{e имеется специальная 1сонстру1щия, называемая оператором lJ икла, которая обесnечивае'l' их зацись в бол ее 1tомпактной и удобной для восприятия форме. Она состоит из двух спеuиальных опера·горов: onepa•ropa .начада никла (или, коро1;ко , опера•rора FOR ) и оператора конuа uикла ( оператора N Е,rJ ) • Опе­ раторы FOR и N Е;{ Т всегда используются совмес~•но. ИЛ\11 • Оператор FOR (его еще называю•r заголовкоц никла) и1.1еет вид rOR 1=А то13 SТьР(: roR 1""А тов 56
Здесь f OR , ТО , S ТЕР- служебные слова, которые можно тре, к­ товать соответственно пак ДЛН , ДQ; ,jj]AГ: J - переменная (параме·rр) цикла;~ в качестве параме'rра ци1с11а должна исnо,~ьзоввться простая (неиндексированная) переменная; А,fj,С - соответственно начальное значение, 1сонечное :,шв­ чение и величине шага изменения параме•rра uикла. Они· могут быть пюбsми выражениями. Когда шаг uи,~а равен единице, используется зторая форма записи onepa·ropв ( без служебного слом $ТЕР). Примеры. ffJ ПJR К= I 1'О lff.ff 2# ГО!< A'=Xf TO,,t',2 SlEP 11 ftf f"OR М= lf} ТО/ STEP- J Последния nримернапомииает, что wаг цикла может быть и отрк­ цателы!Ьlм. Оператор Лll:"XT имеет вид Принеры. NEXT <переменная никла> 50 NE,XT К 6fJ NEXT Н В паре оnераторов FOR и NE.XT долж,щ использоваться одна и та 11е переменная цюсла. Общая структура оператора цикла таком: FOR.1 -=A ТО8 [$ТЕР 11] (тело цикла;:, ~' . "", .. NE~T 1 При . выполнеnии оператора цикла происходит следующее. I. Пвраметру L1иила / присваивается зиачение, рав11ое н11чаль­ ному значению А . 2, Значение параметра· цикла сравнивается с его конечным знв-­ чением В . Если оно больше (мень1Пе в . случае отрицательного знач,енил шаг11 Н ) конечного значения параметра цикла, то uикл завершает работу и упрамение передается onepa·ropy, следующему за оперsтором #ЕХТ. В nрот1-1в11ом случае выполняется шаг З. З. Последовательно выполняются опеr.аторы, расположенные между FORи NEXT (тело 1Jикла); Ь?
4, По достижении· оператора · ;1/ЕХ Г проис3!:оди1• изыенение значе­ ния пара1Аетра ЦИl(до\ J на вел11чину шага 1-1 и сноl'!а выполняется шаг 2, Рассмотрим несколько примеров. Пример З.?. Используя опера•rор uикла, сост11вить nporpat)1"4Y вычис- лениясу1,4мы $=I +2з +33 + ••• +п3• Сравнитьподученную программу с решениеы примера 3,2 (рис. 3,9), 10 REM СУММА КУ6OВ 2121 XNPUT N 30 PRINT IIN=··N '10 8=0 50FORК=1тоN 60 6=5+Кл3 70 NEXT к 80 PRXNT "СУММА=",8 90 END ПРОТОКО/1 РА6ОТЫ1 СУММА= 441 Рис. 3,9 В начале работы оператора, цикла (для наглядности он на рис, 3,9 заключен в рам,су) переменная К получает значение, равное единице. После наждого выполнения оператора 6!) ( 1•ело цикла) , где происход~т добавлею1е к nредьщущей сумме куба очередного натурального числа, значение параметра 11ихла К увеличивае'l'СR нii единиuу ( такова ве.11и­ чина шага по умолчанию) и сравнивается со значением переменной N, Цикл 11овторяе·rс11 до 1·ех пор, пока выполнено соотношение 1( ~ N , nосле чего печатается значение накопленной суммы, Примее 3,8, Для заданного х · выч11сл11ть произв!Эдение щ р- лr-1-кх) K•I {+КХ Соо•rветствующая программа может иметь вид: 10 REM ПРОИЗВЕДЕНИЕ 20 INPUT X1PRlNT "Х•"1Х 30 Р"'1 40FORК=1ТО50 50 P=P*(1-KMXl/(1+K*X) ~0 NЕхт· к 70 PRINT "ПРОЭВЕДЕНИЕ•",Р 80 END -ПРОТОКОЛ РАSОТЫ1 Х= 999 n,озвЕдЕНИЕ• .99t03302637222 58
4, ОВРАВОТl-tА 'ГАВЛИЦ (МАССИВОВ) В БЕЙСИl<-IIРОГРАММЕ Наиболее полно преимущества оператора цикла проя:влmотс11 при обработке мас сивов , 4,1. Оператор описани11 массивов В разд, I , 5 подробно рассмо •r рена возмо)l(J-{Ость использования наряду с простыми переменными переменных с инде!(св:ми - злементоЕ1 одномерных и двуме рных массивов. Все массивы, испо11ьзуемые в проr-, рамме, до11ж.ны быть обязательно предварительно описаны. Описание масс ива содержит информас1ию о количестве элемен'l'Ов и его размер-• нос·rи. Такал информация необходима интерпретотору БЕйСИКа длл ре­ зервировани11 определенной области оперативной памяти и выделения необходимого количества мест для элементов массива. для . описания массива используется оператор 1)/М , который 1З программе записывается след.}·ющим образом: вслед за словом JJJAf помещается (лучше через пробел) им.я массива 1 а за ним в круглых скобках - верхние границы индексов (длн двумерных массивов указы­ ваются две границы, разделенные зап11тыми). Одним оператором .l}f!v/ можно описать t'!> 1жолько массивов, разделяя: их описания: запя'l'ЫМИ. Например, опер.,тор t;f 1)111 А(5), Х(.2,~) описывве~• два массива: одномерный массив А из шести э:лементов · и . двумерный массив)( о тремя строками и четырьм11 столбuами, которые мы изобразим схематически в виде 01•дельtiых .ячеек-элементов масqивов, МассивА :· А(З) •!А(4) А<Б> / Массив Х ,Х (0,0) X(O,I) Х(О,2) ,Х(О,З) Х (I,O) X<I,I) ХО,2) ХО,З) .х (2,(1) Х(2;I) Х<2,2> Х(2,Э) . (Естественно , что память ЭВМ линейна и в ней никаких прямоугольНЬ11С таблиu. , подобно приведенной выше, не наблюдаетс11·.) Часто· в алгорlfт~ Ь9
~ах индексы элементов ,1асс·ивов изменяются не от .нуля, в от единицы и до иаксиwалыю воз1южного значения, указаmiого при описании соот­ ветствующего массива. Не следу~т, а,цнахо,заб1,1вать о том, что дnя •11t1улевых" элементов отводится мес·1·O в памяти. В частнос'l'и, fil'J'P pбc-roJ11"':' тельотво надо ице-гь в IЗИдУ при вводе массивов в память ЭВМ. • Оператор .DIH в программе должен бы•1'J;, располажен до исподь- зовiшия описываемых им массивов, Всем эле.мен1·ам, описанНlп( онератороu 'J)I М r~а ссивов 1 nрисваиваю1•ся нулевые значения. Индексы в индеl'СИ­ рованных переменных и операторе DJM могут бы-rь зliданЬ1 о 11оыощью 1Jрифметическюс выражениt1. Зн.ачение та~Оl'О выражения дод~о быт~, неотрицатедьным числом , За значение индекса ПРИliИМается целая часть (без округления) значения вычисленного арифметического 1щр&1itени.11. t!1111римзр, 0110 ратор • 1/fJ)JN А(1*J,К) r1ри текущих значениях переuенных / = 2,8, J =З, К = '7,9 опре­ деляет дву~.;ерный массив А из ВОСЫАИ строи' сеwи с·rолбцов. Пов•1·орное определение массивов, а также массива, И'4еющего иuя уже определенной простой переменной, не до11ускае~'ся. В дапьнейшеw,говоря, что задан массив А (лt)': будем понимать, что он O11исан в программе как дlМ A(N) и порождает в не!! элементы А (\1), А (I), .•. , А(N) 4.2 . Ввод и вывод массивов в В~СИJ\-проrрамме Присвоение числовых значений злоwентаi,, wацсива может быть осуществлено, как и для неиндексированных (прос•rых) nереwенных, в операторе лрисваиван11я и операторах ввода данных, например: • . f ff Х(1)~sз :Z(K,3)= 9.31E-J 2/1 .J-NPIЛ X(l), Х(2), )'(.J},.,( (4) 30 l)АТА-5.3, /!, 8.5; 194, -Щ) 4/J READ Z (1,1), Z (1,2), .с (1,3) ilpи необходимости внесения в программу больших объемов информа­ ции этот способ ~водв массивов неудобен. Наиболее просто мо11tно осу- бО
щес ·r еитJ, ввод массива ~ отдельн~JХ реализациях ВЕЙСИКа, указав u соот­ _ветствуIDщем оцераторе ввода ( .1 NPV т, READ) только имл 1,18ССИl\8 t1 ~след за ним - oтkpывadJu'IO II зак рывающ,ую скобки, Например, nосле­ до~ательн ость операторов ·в БЕ.йСИ!{е длл "Электроники ДЗ-28" 1fj JJIM А(.3) ,,::"{1 JJAТА 4,2>5,3. 7 3(JREADА()• присвоит: А(д;==//; А(1)~2,·А(2}=5/А(3}=3.7 не· следу~т забы- s,ть I что нумерация элемен'!'ОВ массива начинается с нулл. Оператор непосредственного ввода данных в ре111име диало1•а с :ЭВIА такте часто используется для ввода массивов: f/f..lJJH А(3) 21! .ltVPUT А ( ) В ъ~оме;нт вЩ1олненил последнего сператора JЛIPUT маmина оста­ навливае'l'с.ft и вы11одит на э1сран символ "?", после чего программист доткен ввести с кл&виатуры 4 (четыре!) числовые зн'lченил, раэде,11ен­ НЬ1е заплтнми. Они становятся значенилwи еленентов массива А (\J). А (i), А (2), А (3). Если набранное количество чисел не соответ­ ст11;ет дJtине н:.ссива, то ·на ;экране появляется сообщение об 0111111бхе. При вводе большого массива ошибиться нетрудно, Поэтому ре11dмен­ .nуето,t использов1ть сле.цующий шаблон, комбинирующий оператор выво- да - цодскаэку о том, како~ элемент массива следует вводить, - с oi:tepaтopoif ввода JNPUT 10 INPUT N 2f' Dil'I А <NI 3111 f"OR Jst ТО N 4111 P~I ~T ~ A("I")•• :50 INPUT А<I) 68 NEXT I При выполнении этого фрагмента програмыы на экран-последоватеn- - но вводятся строки А(I) = ? А(2)= ? бI
до тех пор, пока все N элементов 1,1аосива А не буд:ilт введены, Ра­ зуммтсн, после каждоl! подсказки и следующего за неРi сим13ола "?" машина останавл ивается и надо вводить с клавиатуры очередно й элемент . мас сив а, При выводе массивов !fa печа•гь или поынить, ч~·о если в теле цикла оператор экран дисплея следует PRJNT :завершается симво- лами ","или";", то выводимые элементы располагаются построчно, в зонноы ИЛI\ плотном форматах соотве•гственно; в противном случае в каждой строке будет выведен один элемент массива. Проиллюстрируем сказанное следующими примерами, !!ы.имер 4, I. Дан массив А {N) . Вычислить и выдать на экран среднеарифметическое , всех его положительных компонент. БJtок-схема и программа показаны на рис. 4,I. Длн вычисления суммы строl'О положительных элементов t.1ассив.ц заводим переменную $ , а для· подсчета их количества - переменную /( • Обе переменные за пре­ делами цикла полагаем равными нулю. В последующем, если очер~дноР; элемент массива А ( /) > О , то он прибавляется к текущему значению переменной $ , а счетчик /( увеличивается на единиuу. • Пример 4.2. По заданному массиву ,4 (N) построи'l'ь массив fJ (N} , содержащий в начале все неотрица•rельные, а затем " все отриц ательные элементы массива, Будем заполнять массив /3 с двух концов: положение очередного неотрицiiтельноrо элемента в массиве д определяется индексом К , который возрастает (К=- К+ 1) , начиная с единиц1,1; положение очеред­ ного О'I'ринательного элемента в массиве В определяется индексом ..Т , которыt1 последовательно уменьшаете.я (J"'N+J-L) , начиная с J=N. Текст программы и протокол ее работы по1<азаны на рис. 4.2. Пример 4.3 . Ненулевые элементы массива А (N} переnисать с сохро­ нением их пор11д1(а n начало массива, а нуJJев'ые - в 1<онец его, Новы f.t массив не заводить. Программа на язык~ БЕйСИН для решения поставленной задачи и 11рото1<ол ее выполнения изображеНЪ\ нв рис. 4,3, Первый цию1 програм­ мы обеспечивае'I' ввод очередного зпемента массива и анализ его зна- • i<a ,. !!оложительные 11омr10нен~ъ1 массива А "подтягиваются" к началу массива, нулевые - nроцуснаются. После того как весь массив просъютре_н до ненца, в его "хвост" дописывается столько нулей, сколько их было обнаружено в исходн ом массиве. 62
начало а 1- REM СРЕДНЕЕ АРИФl'ЕТИЧЕСКОЕ 2111 • INPUT N:PRINT"N• "N 311 DIM A(N) 4121 FOR I=J. ТО N 30 PRINT "&;ВЕДИ А(" 1 ") ";· of/1 INPUT A(lJ :PRIN-1 A(I) 7111 NЕХТ 1 В0 S=0:K=III 91/1 FOR 1=1 ТО N 10121 IF A<I><•lil THEN 130 11111 S=S+A( 1) 12111 К=К+1 130 NEXT I 14111 IF K=III 1HEN 1911 13111 S=S/K 1о0 PRINT ,;СРЕАНЕЕ АРИФМЕТИЧЕСКОЕ"1l<1 17'1 PRINT "СЛАГАl;:МЫХ=";S 181/1 GOTO 2111111 • 19111 PRJNT "НЕТ A(IJ>l'I" 20/ZJ END ПРОТОКОЛ РАБОТW: N=4 В.ВЕДИА(1)10 ВВЕДИ А( 2) 2111 ВВЕДИ А< 3 )-5J;II ввеаи А( 4 ) 4J;II СРЕДНЕЕ АРИФМЕТИЧЕСКОЕ о 3 СЛАrАЕМЫХ= 2 Ji,. Рис. 4,I 63 конец.
10 REM ДАН МАССИВ А(NI.ПОСТРОИТЬ МАССИВ 11 НЕМ В <N J , CO!tEPll!AЩ. BHA4AIIE ВСЕ 1-\ЕОТРИ- • 12 l'cEM UATEllbЬIE, ЗАТЕМ-ОТРИЦАТЕЛЬНЫЕ ЭflE- 13 REH МЕНТЫ ИСХОДQГ'О МАССИВА 20 INPUT N,PRINT ." N="N 30 DIH A<NJ ,B<NI 40.FOR1=1toN 50 · PRINT - "DBEДИ A("l ") "I 60 INPUT A(l)1PRINT All) 70 NEXT 1 80 K=0zL=0 90FOR!=1ТОN 100 IF A(Il>=0 ТНЕN 140 1HJ t.=L+l 120 J=N+l··L 130 B<J>=A(llcбOTO 1bl!I 140· к,ак+t 150 B(Kl=A<ll 160 NEXT I 170 PRIN_T "УПОРЯДIJ4ЕЖЬ!й МАССИВ~~• 180FOR1=1ТОN 190 PRINT B(IJJ 200 NЕХТ .! . 210 END ПРОТОl<ОЛ PI\БOTЬIJ N= ., ВВЕДИ А( 1 1-99 ЕJВЕДИ А( 2) 77 ВВЕДИ А( 3) 0 ВВЕДИ А( 4 J·-88 В&ЕДИА!5J77 f\BEIIИ А( 6 1-66 ВВЕI\ИА(7>55 )1ПОРЯДОЧЕННЫ1i\ МАССИВ~ Tl 0 77 55-66 ··88 -99 Рис. 4, 2 IfiJ REH НЕНУЛЕВЫЕ ЭЛЕНЕН-Гьi МАССИВА ПЕРЕ- 20 REM ПИСАТЬ С СОХРАНЕНИЕМ ПОРЯД КА iз. 30 R!;M ЕГО НАЧА/10,А НУЛЕВЫЕ ··В конI;Щ • 40 DATA 0,8,0,97 ,-13,0,34 1 0,Ш,99 50 JNPUr "ВВЕДИ N";N ,PRINT "N *"N ЫlJ DIM А (N> 70 J=t 80FOR1=1ТОN 90 READ A(l) 1'!jjJ I _F A(l)<>l!I 1'HEN AtJJ•A(l) :J~J+1 1 J,.0 Nlё:XT I 1.2'6 FbR к~J то N 13121 .А<К1=0 141,11 NЕХТ К 150FQR1~1ТОN 160 PRINT A(I); 17ft1 NEXT I 180 END ПРОТОКОЛ РАБОТЫ, N~ 1.i е91-133499000в0 . Рис, 4,3 61
Упыа~ненкя I. Дан ма с сив А ( ti1). Нвйт и произведение nоnоаtительных злемен- 2, Даны мв.ссйвы А(N} и В(N) ( N~ IOO). hаМти значение ин­ дексе к '1'1311:Ое I что ( А (K) -r/3(1<))/2 M8!CCИMaJIЫfO. з. Дан ммс"в )( ( IOO.) , ко1'!rщненты котороrо уnормочены no возраст«~нm> 1t цисло (l ·такое• что ,(t < О < В,00 • Най'l'М К , .удовлетвор!'Jt)tцее соотношёнию & .,.;- Q < 8. , ~ к.,, 4. Из ~t омnонент r,ассивов А(N} и д (N} построить массив r!"'(А,,4 , А2, gz, . .. A,v, 8,v). 5. н:е.кол задача реmается при выполнении сжедуDЦеrо фра гмента nporpвмw: 111) f =f4: N=0 2111 FOR I~l ТО 21/J ;'10 1F А ( 11<:.171 THEN 6/11 40 Р =Р -0-1; GOTO 71<' 50 1F А 11) =О THl:N '7(1) 1:,(/) N=N·~l 7fJ NEXT 1 80 PRINТ P,N 90 END ,, . б. Дан массив A(N) 11 число i.! • Вычислить суМN,у $=).,~ A,z' . -~~, . без htnожьзования операции возведения в с тепень. ?. Раэдели1ь заданный массив )( (IOO) на два массива: а) массив по.1101tмте.11ьtlЬfХ и 1118соив orpкцeтe.lьtfWt ttо1ШонентГ б) ~аооиг четных и массив нечетных компоненt. б. СЛОНЕ ЦИЮШ С.11ожньщи традиционно называют цик,ш, содtэра~ие 1! себе раэветвяения и другие в.11охенНЬ1е uикш. При реализацим е.11о•еННЬ1Х цмх.11ов необход~•о с~едить за тем, чтобы параметры внутреннеrо ( вJ1оаенн.оrо) цикла восстанавJ1ива.11ись в nермначаиilном 8 и,nё np ii Х811ДОN .вi.поJJН9НИК внешнеrо''( ОJtаl!млящеrо) ЦИttJla) • - бб
Цеимер б .!. Состt.1вить rspoгpaмwy ~ечати таб.11ицы Пифагоре (рис. 6.I), 1/iJ REM ПИФА/"ОР 20 INPUT N 30 PRINT " тА6nИЦАПИФА/"ОРА" 40 PRtNTrPRINT :118 FQR 1•1 та N 60 FORJ=1ТОN 70 PRINT TABC4~J) HEJa 130 NEXt J .,. PRINT 1е,0 NEXT I 118 END Ре31уп~.таты ра ■ атw nроrранн1,1 nри /11 - 91 tА6пицА·п r' ифА,.. орА 1 2 :s 4 15 6 7 в 9 2 4 6 в 11111~141618 :s <о9121151В212427 4 в 121621124203236 15 1111 115 2r. , 215 :S/11 :se 40 415 6 121824'31136424854 7 14212831:142491:1663 в 1624324040:566472 9 iв·27 36 4:1•154 63 72 fH Рис, б.1 . Приведенная на рис. б. I програwа достаточно 11роqта, хотя • содер7/tИТ 01101tt11,1й цик,~. Вf!Утренний цик,~ (по J ) при ка•дом фпс11ро;.. . в~111иом во внешнем цик.11е номере строки •1 обеспечивает перебор всех N с,··. СТQ.11dцов табпиuы и печать произведения J 11j , Поо11е завериения • внутреннего цихоrа внешний nовторпетсл nри •новом значении 1 , ·а ,щvт- . • ренний. восстанавnивается 1! nервонача.11ьиом в иде - J СН088 "пробе- • • rает" все значении от I до N • Обратите вн111моние на onepa'l'op в C'l'po- · ае 90: он обесnечивает перевод печати на 11овуn строи-у. И еще OдliG эаuечание: что.бы поцучк•rь вЮ!од 'l'iiблiщu Пмфаi'ора II приведенном Н& рис. o.I виде, в оnйраторе PRJNT wы исnоJ1ьзоваiи фунхцию ТА/3 , ~отоr,ая будет описана дaJlee. бб
ПШ1Кее 522 • •Т~буется сQОтавить Бfi'.0atii-.nporpawмy ,11 ,1 .11 •)'Порядоче­ н,я uассива А (N) 110 воэраотаюm ещ) 1:1:аеwентов. Соот11етствующая r1porpawa показана на рис. 0.2. В нея реа"кэо­ ~~н ~.11rоритм, основанный на следующей идее: nоследовательнQ сравнк­ аа~топ ав11ДЬ1е два соседних епе~ента и меняются wестами, ео:аи они Ktt уrtорядьчены по 90ЗfJ80TAHИJ). Эта otieJjlЩИЯ BIOIOJIHЯe'l'O.fl во внутрен­ н;r,, ции.1$е {no napaweтpy К ) . За одно вlоliiолнение этого цикпв мав:ом­ •ltJl~ный иэ раосwотренных элементов оказываетол на последнем ~еоте . ( "~~-ет il осадо!«") и в да~ьнейntих аравненклх не участвует (ик•­ дехо •(( меняется от I до /V- f , rде Г ,. .параметр 11иеmнеrо цц.11il). За о.цно вьшоцненке внешнего цки.11а· количество оравниввеwх во внутреи,.. н,щ цмкже элементов 111ассиl'!а сокращается на единицу. В об11ем сnучае так происходи'!', пока во в1fе111ИеN цккпе не будет просмотрен весь мас­ она •. Однако, еоли насоив частично упорядо~ен, вoзмoJIU!i> "досрочно1~,• · sа11ераение·оортировки: еми посяе npocwoтpa ив неко'1'ор6м шаге оо'fа1- 111t1шл епементов масомва не б11J1Ь ни одной их nереотаиоекм, опецкuь­ ньtil ьараметр-признsи Р сожранкт свое нулевое значение I установнен­ и~· li н11ча.11е виешнеrо цикла, l'i оператор Г70 •(ркс. 1$,2) ь этом o,ty- • tJl'lie обеоttеt1кт nринудите11ы-1ый выход ttз циалl!I и передач, уiфа11.11енм • овера'l'орам Sl~!Дачи результатов. _. _ __: ______ _ ____________ _ 1)(1 REl"I СОРТИРОВКА СРАВНЕНИЕМ CMEiH-IЫX nAP 2f', OIM А( 101 3111 DATA 0,8,9 ,6,1,3,2 ,5,7,t0,12 '4f1 INF'UT N:PRINT "N =" N 51/1 FUR 1=1 ТО N 6111 READ Ail) · 65 PRINT A([)J 7f!J NEXT i 75 PRTNT 80FOR!"'1ТОN 9iil Р~0 i0111 F'CJR K=t ТО N-t 11111 IF A<IO<=A<K+II ТНЕN ibtll 1·2Ji,1 • z"A (!О 13111 A(Kl=A<K+1) 111111 A(K+·l)•Z 15111 р;,1 16111 NЕХТ i< i7JII IF Р=0 THEN 183 101/J NEXT 1 183 PRINT1PRINТ · , 185 PRINT "OTCOPn-lPPBAHHЬI{)\ МАССИВ~" 1!36 PRINT 191!' FOR i"'l ТО N 211!0 PR./NT A(ll1 ' 2Ii2' NEXT 1 - 220 END :ПРОТОКСl/1 PASOTЬI: '~, ''ti= 10' ·" • ---- -- --- 089Ь132__~710 -·ьтсоРТИРОВАННЫй МАССИВ: -111 123sе-, е •9 1111.- __ ___ ___ Рис.5.2
Цg!{Мер 5,3. Раосuотриu 61>:аее с.110-.ю1А пример~ Из "oei Y'Ч/JOTXl)II масс11ва . Л ( N) • CfV!OIJlb СОСТОЯЩIQ( из нулеfl, выб~ть CSNЬIЙ ДJIИHНЬJII . • • отwеtить индексы его нача.11а и 1t_oi-щa. Влои-схеuа (рио. 5.З,а) дает наr,щцнре nредотаJ5:аеиие об li.11ro- • ритме. Чтобы обжегчкть изучение приведенной на рис. 5.3,б nporpaai- ю,i, поясн11u назначение ~сnодьзуем~.х переменных: /1{ .; ДJ1ина нулевого участка, на выходе - )l)lмна мапоищ.11ы,оrо ;участив; Nl, КJ - ооотеетственио индексы нач1ц1а и конца ну.цевоrо . участ1tа, на выходе - цаксЮ1ал~,ноrо по длине; _ 11 , !( - текущ11е ·значения индексов соответственно начав& JJ конца нужевоrо участив; L - счетчик ио:аичеотва нулей; Р - признак, сохраняющий вначение ~ . eoJ!.il очередной выбраи­ · ный элемент uассива отличен от~. и I - в противном случае. Eon11 очередной эJ1eveн•r массива равен нуа, то при Р " О 11н­ деис начала нулевого участка II nо.т.rагается paвl-/l:III! • i - 'i1t';lиytЦE!r.l1J значению индекса массива, а· Р становится равнl:N 1 (o~!ileч&e~. что "по111ди" нули) м в счетчик L прибавляется единица; пр11 Р ,t О в &той ситуации в счетuии L сразу добавляетм единица: это оэна­ чае,.., что обрабатывается У71е не nepвы:lf злеА1ент нулевого учМ>J:'х<а. !{аи тояьио А( i} 1с О N Р I О (налицо перэход от нулевого n нену:аевоwу учас'!'ку), 011редедяется инде1сс nонца .ну.11ееоrо yчac'i'ltll ( К= i -1 и щшзнак Р сбрасываетс я в иуль. Влаrодаря Jtоrичесиому б.11ову • L > Mi в конечион счете опредехпе~ся а~ахс~шмьный no диине нупевой участок. , Зас.J!У1ftивае'1' внимания: обработке ситуац1tи, когда максимаJiьный нуаевоЯ yчaC'l'Olt ("хвост") завершает массив (операторы 270-200) . Пример 5,4. Дана матрица А (M,N} (т .е. содер!IВJцая М строи: • N сто11dц ов). Требуется найти wнииа.11ьний эле:.rен'i' ~~'1'рrщы и за!Ul­ сеть нущ1 в ту строну и сто11бец, rде он нвходttтм. Текст nрогра~ощ и nрото:кол ее вwо,11нения nриведеw tra рис. 5. 4 . Исходная матрица задана четырьмя onepa-:ropawи .DA ТА (с'l'рохи 49-70) ~ Ммниыа.nьныи. э11емен•r находк·rси nосJiЕtдоватеяьнШi с:равнен,~еw ка11.цоrо ввементs матрицы о те1tуrцИ11 миниuу*ом /11 ., s качестве начаnноrо аnачения :ко•rорого •rхркня'l' элемент ( А ( f; t) . Ес,~и обнаруаиваетс,r, 'll'!'O А(1,J}<Mlo('1.',e. наЯден элемент, tJИCJIOSoe энацеиие 111отороrо Ш!НЬ!~8 'N:н~ущэrо wинимума} , то текущее значение /11 t эliменstетс.я на А ( 1" J).одно.:. Временно заndМИНаDТОЯ' номера строки'(1(,,,/) 1i С'l'ОЛбЦа ( L =.Т) • COO'l'- б8
(~ эчало) Рис. б.З • 69 а
!i!f REM ВЫБРАТЬ МАl{СИМАЛЬНЬlй! НУ/IЕВОй 2al REM УЧАСТОК МАССИВА . ОГ1РЕДЕ/\ИТЬ 3!0 RE~1 ИНДЕКСЫ Ero НАЦАЛ А IJI КОНЦА 41!1 DATr-< f,1 ,!11 ,0 ,25,31/lil,!l ,pj,fll ,9 , 55 ,0 50 INPUT "ВВЕДИ N";N:PRINT"N="N bl!i !НМ A\°N) 1'i! 1°0R I=l ТО N В~ PRINT"A<"I "t•"; 9;, READ А(I1 95 PRINT A(l) 1wjii r,1охт 1 11111 P=0:L~111:H=1 1·2f6 M•~:N1=!'6:Kl=!!I 130FOR1~1ТОN J4й lF A (J ) =r,i THEl'J 210 150 IF Р=0 THEN 26@ 160 P=w,K=I - 1 170' REM КОНЕЦ НУ /1ЕВОГ'О УЧАСТ КА 180 IF L<=!-11 1'HEN 26'J 190 t·11=L:N1=H:K1"'K:L=tiJ 206 GOTG 2ЫJ 210 IF P=t THF.N 25~ 220 н~1 230 RE~I ПОШЛИ l!Yflill Н-НАЧА/10 2110 P=l 2513 L=L+1 26@ NEXT I 27~ IF L<=M1 THEN 290 280 MI =L: Nl=H: 1<1 =N 2€15 PRINT "ХВОС Т " 290 fRINT"CAMЬlй ДflИННЫй УЧАСТОК ИЗ Н~'ЛЕй:" 3{6(!1 РRЩТ "НАЧ: " ;Nl; "КОН: ";К !. 31 flJ PRINT "АПИНА: "; H.t 320 END ПРОТОКОЛ РАБОТЫ: .N"' 11!$ А(11=е1 А(2)'71D А(3)=0 Д(4)=25 А( :5 '"' 31 At61"~ А<7)=а0 А(в)=0 А<9J=(ll Д( Uд '"' 9 СА1'1Ый дПИННЫй УЧАСТОК из НУЛЕй:. НАЧ: .. КОН: 9 ДЛИНА, 4 Продопею1е рис. б.З ?О б
" .. i'l~'i't.!'l'BYЦ!liiJ( IIpOMSJJ,YTOЧHOМ:.Y MJIH ИЭН\Jlbl!ON,Y еяементу. Ясно. что цос.ае a• - flf.'l(ilrlf.!ЩfR этоl! п:роцэд,vr,1~ в no.l!e переменноn ,A -ff будет нажодмт.ься зна­ Ч!'t11пе li•шк111а.11ьноrо sпеuента ,,0 1'рмt1ы. В nocJ1e.nyщиx операторах npor- Jm1'4МN от1юк11 r« с\•011бец матрицu, на пересечении nоторых наход11тс11 ее lil!IIHl'llf•.Нf.ЫШlt звемеtf\', Эl!IПOJIШUJ'l'CЯ Н)'.IJIJIIИ, 8 МЮIИМl!JIЬНЬIЙ 1'Jl9M!!ltT вoo­ lJ 'J' 8HB1!1R! P. B!le'! 'CR на своем месте. 10 REM НАйТИ ION Эf1Е11ЕН1" МАТРИЦЫ 20 REM И ЗАПИСАТЬ НУЛИ В ТУ СТРОКУ 3111 REM 11 СТO(1SЕЦ,ГДЕ ОН НАХОДИТСЯ 40 l)ATA 1,1,1,1,l 50 DATA 2,2,2 ,2 ,2 Ь0 РАТА 3,3 ,- 3,3,3 70 РАТА 4,4,4 ,4,4 80 M=4,N=5 9111 FOR !=1 ТОМ 1111@ FOR J=l TON 110 READ A<I,J) 1;;!0 NEXT J 13iil NЕХТ I 14111 Ml=A<l,11:IO=l:L=I 150 FQR 1"1 ТО 11 1Ь0 ~ORJ=tТОN 170' · !F АIIIJI>=Ml THEt,I 19QJ {8\З H1=A!1,Jl:K=t: L "'J 190 NEXT J 2W!if NE.XT I 210 fOR J•1 ТО N:A(K, Jl~liJ : NE.XT J • 2:-iliJ FOR I•l ТО M:Al l,1. J ,;0:NEXT I 23~' f H K,LlsMl ~40 FOR Jal ТОМ 250 FORJ=lТОN 2Ь0 PR1NT .А(I,J)1 270 NЕХТ J 28111 PRlNT 290 NЕХТ 1 30/D END ПРОТОКОЛ РА50ТЫ : 11liJ11 220:2:2 !i) liJ -3 riJ fl1 4404<1 71
f!~ц~_5. 5 . Снова рассwотр11111 матрицу. А ( N ; N) • Соо'tаво nporpa»- uy ее транс:nоР711рования (т.е. обмена местами ее О'l'рок 11 С'fО.1бцо11) •. Тецст nрограмw и nротоко11 ее аыnо.11нении nриведецн 1111 рмс. б.б. Пре,:,це всего, замечаем, что при '!'ранспортировани" eлeмelf'J'bl r.aatнoR диаrо11а.11и доJ111НЬ! остаnаться без даnении и t1адо тояько обJtенят11 меотамы е.иементы матрицы:,расположенные сиwwетрично относмеJJьно r11авной диаr•ома,111' (мы yr;.e •не rовориц о тоы, Ч'fО операция •обшзtt•" вид11 А (i,JJ = А (J,i) в принципе неверна): J)=0A(i,J):A (i,J)=A{J,i).'A(J,i)=д !lo REM ТРАНСПОНИРОВАНИЕ МАТРИЦ 2.0 DATA 11., 12 ,13,14 30 DATA 21,22 ,23,24 40 DATA 31,32,33 , 34 50 DATA 41,42,43,44 60 No4 70FPR1=1TDN 80 FOA J;l ·то· N 90 READ ACI,J) 100 PRINT A(i,J); 110 NEXT J 120 PAINT 130 NEXT I 140FOR I=2ТОN i~0 FOR J=l ТР 1-1 16//J . D=A<I,JJ 170 A<I ,J)•A(J,11 1 8'1J А(J,I)=D 190' NEXT J 200 NЕХТ I 210 РRJNТ:РRINТ"ТРАНСПОНИРОВАННАЯ" 220FOR1=1ТО~ 230 FORJ=IТОN 240 PAlNT А() ,J) 1 250 NEXT j 260 PRINT 270 NE.XT J 280 ENO ПРОТОКОЛ РАБОТЫ~ 11 12 1:S •14 21222324 31323334 41424344 TPAHCПOHI-IPOBAHHMI it21:SI41 12223242 1323334:S 14243444 Рис. б.6 ?2
Однако при более вниматепьноw рассмотрении этоl! процедуры становnоя очевидным, что ее нельзя выпоJiнл.ть дпя всех зн~чениl! j и J , иначе 1tа11,11ый элеwент wаrрмrцы будет учаотвоваrь в обмене два.ды: один раз · хаи А (i, J) -элемент, и еще одкн раз - иак А (J, I) -эпе11енr. В; Р8-: эу,rь'l'ате такоrо ,11.во"ного обмена исходная матрица оотане'l'с.я без из­ мене"ния. Таи что операuию обwеиа следует выпо.анять 'l'олько ,мя э.яе­ wентов, отоЯЩIQ{, например, нце гпавной диагонали (д.яя стоюцих вwе ,циаrонаJ1и расоуцени_я анапоrичны). Именно поэтому в 'l'eJ1e nporpaмww вне111ний цик.1 начинается с i ~ 2, а па\')аметр J иэwеняе'l'оя во Вttу'l'­ реннем цикке от 'I до I - 1. С.11011tНЬ1е цliкJtЫ на11бОJ1ее часто испо.иьзую'l' при обработке двумерных масоивов-м&'тркц. Но не с.ие.цует ,nywarь, что моксиuальная глубина вложенности циклов равна двум. В интерпретаторе описываемого ВЕйСИНа она равна семи. дрю,~ер 516. Наяти вое 'Ьчаотливые" автобуонwе бюrеты среди бме- ,с. тоr; с номерами от 000000 до NNNNNN и подсчитать их tto.1ичec''l'l!IO. ~ Программе д,11я решения зтой задачи и протокол ее выпожненм при N. 2 приведены на рис. 5.6. Упражнещ,1.я I. Что буд,.,1- вь~.n~що ва екран дисruе11 в резу.11ътате выпо.1нения сже,цующеА nроrр~,:ммы (дпn оnредепеннооти npинif'l'ь N . -• 6): 1fi.i INPUT N 21/J PlM A<N,N) 30FORI=IТОN 40FORJ•1TCiN :10 IF I•J THEN А(1,J>•1tGOTO 70 60 А(I,J)•0 7/ZI PRINT А(I,J)! В0 f.lEXT J 9/lJ PRINT 11/JIZJ NEX't I 11/ZI END 2. д,rя эаданноlt матрицы А (N, N) . ( N - константа) наllт•: а) liONep етроки . содержащей наибольшее ч110.10 ненужевых e.ireмeиto•i б) номер столбце~ 1 содер,аащеrо наименьшее чио.10 нулевых е.1емеН'l'ОJ 1 в) но1,1ер отроки t среднеарифt.1етичесиое по.1оuтельннх еJ1емента,в ICOTOpon JIIBJI.R8TOЯ HQHjjJ@HЬШIDf; r) номер столбца, в хотороu наибожьшеа хо.1ичео'1'10 в1емеtn'о1. вначение которых совпадает с ноwером столбца; д) mfx mJn / atj/; . е) "сп&д" ( cyмrq дмаrо11а.11ьных ~,,rементов) ~трJЩw. ?З
10 213 30 40' 45 46 :50 6(11 7'll Eil!I 90 100 110 13SiJ 140' 150' 16/Э 17(11' 18$11 19,J 2'lJ(il 210' 22(11 230 240 REM СЧАСТЛИВЫЕ БИЛЕТЫ СРЕДИ REM БИ/lЕТВ С НОМЕРАМИ ~-NNNNNN PRINT "ВВЕДИ N" INPUT N : PRINT"N= .' ";N E5=10(il0(il(il!:E4=100(il(il:E3=100 ~ E2=11/J0:E1"'10 KOL=0 FOR1=1ТОN FORJ~lТОN FOR К"'1 ТО N FORL=1ТОN FORМ=1ТОN FOR Nl=l ТО N IF (l+J+K) < >(L+M+Nl) THEN 170 KOL=KOL+J S=I*E5+J*E4+K~E3+L*E2+M*El+Nl PRINT"CЧACTflИBЫй:"S NЕХТ Nl NEXT М NEXT L NЕХТ К NEXT J NEXT i .PRINT " END BCEf'O :"KQL ПРОТОКОЛ РАБОТЫ: ВВЕДИ N N#2 СЧАСТЛИВЫй: 111111 СЧАСТЛИВЫй: 112112 СЧАСТПИВЫй: 112121 СЧАСТ/lИВЫй: 112211 СЧАСТЛИiЭЫй: 121112 СЧАСТ/lИВЫй: 121121 СЧАСТЛИВЫй: 121211 СЧАСТПИВЫй: 122122 СЧАСТЛИВЫй: · 122212 СЧАСТflИВЫй: •122221 СЧАСТЛИЭЫй: 211112 СЧАСТЛИВЫй: 211121 СЧАСТflИВЫй: 211211 СЧАСТllИВЫй: 2121 2 2 СЧАСТЛИВЫй: 2122i2 СЧАСТflИВЫй: 212221 СЧАСТЛИВЫй: 221122 СЧАСТllИВЫй: 221212 СЧАстnи·вый, 221221 СЧАСТЛИВЫй: 222222 BCEf'O: 2Ф Рио. 5.б ?4
... . з. Построи,ь матрицу аида Л П-1П-2....f /7+( Л п-I ....2 л~2 П+t П ....3 2п-f 2п-2 2п'-3..: .. п . 4. Дан 1еrстор .Х ( 1/!) • Построить матрицу У (IO, I0) cleдYl)lll$ro Bll,ltl: х(xflх$•••xio Х2Х,,,~... Х9 х.1~х,..~ xs Х1Х8Х1...Х2 х(оXg Хв... xf б. Построи,.:-1, ilaтpuцy а)I202I... 2 !9•22 ... з1823... .• ·•· .• . . 9 I2•29 10II30 Xr ~ •••• X.s )(10 ii) ~х.5... ; ~о Х'{ ХзХ+-.... xf х2 х10 ,xf• '8 Х9 У (I0~I0) вида: 81 100· б) Iз 82 99 24 83 90 .2I 23 . 82 84 89 92 00 9I б. Дана ма'l'ркца А (N,N} . Напечатать ее елёмен'l'ЬI, с А (1, tJ, в такоu nор.1щ11:е: 75 5 ... J9. 6 .... 20 26 ••• 39 • 86 ... -100 начина11
? • В матрице Х (М, N) t1aЯт!II четыре -,инщ,аnнщ 1:1~е"ен1а. 8. Среди а.11еwентрв wатрицы А (111,N) нall'l'И наиwень11ий ПОJ10,М'1'8.IЬ"" • ныll • наибо.11ьшиЯ отриuате.11ьН1,1А a.11eweнn1, 9. Дано чис.10 Х • Построить матрицу А (?,?) вим I I 1...I 6) I11 I - ,а) х х х...х Iххх х2 х2 х2... х, 1 х х2...х2 ,х6 х' х',..х' 1 хх2...х~ I0. В матр!Ще . А 00,5) поNенять "'естач11 оqседии~ стро~и ма'!'рицы (первую ер 11торой, третью - с чeт11eproll и т~д.). б. ВЫВОД ГРАФИКОВ, ТАВЛЩ\. УПРАWШiИЕ • ВЫВОДОМ В разд 2.2 yIJOUИH8.IOOЬ, ЧТО раэде)IИТ8.IИ JS ОПИОКе !:!ЫВОД8 ОЦ8- ра!Ора PR I N т - запятая и точка с за1111тоll - c,ry-. a·'l' и ДJIЯ эжеwен­ тарноrо управJJенs,я печатью. А 11111енно 1 зацятая как разде.11кте.11ь обеспечивает вы11од в зонном, а точка с з&Пf!'!'ОЯ - в . ПJ1отноw фоwате. Kpowe '!'ого, 11риwенение точкJI с зап11той в конце выводного списка всегда обусловливает (при повторении того же оператора PRJNT ижи при пе~ходе к новому оператору печати) продолжение 11ывода ца прежней строке. Церехода t1a новую строку можно достичь употреблением в nодходящеll! wесте· 11пустоrо" - оператора PRlNT (без сqиска вывода) . Рассмотрим боJ1ее r1tбкие средства в!,lвода чис.11ов.оf:1 и текотовоИ иt~­ форt,iации. • б. I, !Эывод числовоЯ информачии · Форwат печат~ чис-'а эав·исит О'!' ero вео.1ичины. Числа из диаruщо­ на (O.I,IO) печатаJQтС.R обuчно в естественной фор!о!е с фиисироваt1ноА десятичной точкой, Под знак чис.11а (юоос не пе~атаетс11) и деснтичну11 'l'Otщy O'l'BOДИ'l'CII по одноЯ позиции. Чисха . в таюоя. форме IIЫВОД.ЯТСЯ о I2-I4 цифрами пос.же десятичноl! точки. Ч~,с.11а, наход1mо1еся вне ука­ эанноrо выmе диаnаэона 9 в некоторых :ЭВМ автоматически печатаются в эксnоненuиаяьноА·форце (с маващеЯ деситичноА точкой): :r.mxt'+pp, rде ;fтх - W81iTNCCI ЧИСJlВ Х I f~ Пl)(</0. 76. " 1 1 1
- _Форм11рование т111t!Jiiщ с nщ,1oщьlil сиt1во.па ",.очка с заnятой• не деет удоб/fоrо воспроиэведеюtя результата: столбцы оказываются деформиро­ ванfЩМи, nоскояьиу вывод ч~сеR нередко осущес"вллетсл с раэяичЮ1м ко~ичеотвои цифр (рис . 6.I). 1111 PRINT "ТАВЛИЦА УМНОНIЕНII\Я" ! 5 PIНNT: PRINT ' 2- FDR1~2ТО6SТЕР4 3111 J:()R J=l ТО 1 fJ 4/11 I 1"1·1 -1: 12"1+2: 13"i +3 5, Pf\11\!T !"X "J" ="BliJ; Ь'11 PAINT 11"X"J "= "1HtJ 70 PRINT 12"X "J"• "l2XJ 00' PFIINT I3"X "J" ,o;" 13:КJ 85 PRINT 91iJ NЕХТ J i11J!l PRINt:PRINT 1Hif NEXT I 120 END 1 ПРОТОКОЛ РА60ТЫ : ТАSf\ИЦА УМНl).IКЕНИЯ 2Х1=23)(1"34Х1"43Х1"', 2Х2=43 2Х3=63 2)(4=.в3 2Х1:1 116 2Х6"12 2х7"'14 :zх8=16 2Х9-18 2Х1/jlс,:и, 6х1=67 6х2"12 6х3"18 ь1(4•24 оХ1:1-3" • Xi>"'- 36 ь1(7=42 ьх8"40 ·ЬJC9=:s4 ьх 1111:r6~ )12:;6 4Х2•8__б)(2=1111 х3.,_ Q4Х3"'12 :Jх;s"н:~ Х4"'124Х4 =1651(4"'20 3Х5=Н54Х3=2'11~Х5=25 3х6:с·184JI6•2"1ЭХ6=3No 3.)(7=21 4Х.7=28з)j7:::.35 3)(в=24 .i\)(8'"'325Х8:.413 31{9"274)(9=36$)(~•45 3хJ" - 304Хн,-48ОХ1/1"' х1"'711Хi"'в9х1-9 7Х:г"14ех2·= 16'i')(2 1IЗ 7Х3"'21 в1(3=::14 9х3.., 27 7Ji'4"2e в )( 4 "32 9,х 4=36 7Хб=3::Sвх:1=4.09Х5"45 7Х6"'42вх6~489)(6~::14 7)(7=498х7"'::S69х7=63 7хв-5Ьвхв3649)(в"'72 7)(9•63вХ9 '129х9"е1 7 1( 1,1!1 -· 7JJJQX18"'8(69Х1е= Рис. б. I 77 5/1 'lli'
6,2. Та б~~яторна• ~НШ\!Я, Гррфи•u C,.poAf!YII цечать таб~1щ. вывод rрафихов wоано оо;ущеота•ть О по­ мощью табу1,1яторноn фунtЩИИ ТАВ • Она обесnечкваеr намбоJJее rllбJIA& DOЗWOIIНOCTИ ПО упра 8./IC Hlfl) ВЫВОДОВ. YnoтpeбJfflSTM фуНJ!ЦИЯ ! А 8 '1'0.tЬ- ИО в операторе PRJN т • Формат фукицмн: • ТАВ (выражение) ЦеJiая часть задаваеuоrо II скобках проиэвояъноrо JpифJile'1'ИЧt:,OilOro вuраиенил (им, в частности, может быть ю,я nеременноЯ или константа) определяет ноuер позиции в neчaтaewolt строке. начиная с которой _выдается II nечатаеыую строку следущиlt за ТА8 зJ1е-,ент списка в~ вода. 'I'ем caNЬW фи1<сируется и поJ10111еиие остаnьных э.пементов из выво­ димой i1ос.11едов1:1тельностк. Номер необходиной nоз·ифtи всегда отсqи'М,f­ вается от начала печатной строки. Списоtt элементов вьmода одноrQ опе-' ps1opa PRINT может содержать нескоliЬКО ужаэателеЯ табу.11яторной • фушщии • отде.11ле14ЬIХ или неотде.11яеwых друr от друга и от другnх sже­ ман"!'ОВ вывода разделите.11ЯNИ {запятая. '1'.очиа с заnятоЯ). Надо то,rъио ищ1irь в виду, что задаваемые им1о1 иомера позиция вывода д011'11.1'1ЬI обра,.. завывать неубывающуJО последовательность. Рассмотр.им соотвеТС'I'Вующие приwеры. :ЧI!t-11:fep 6, !• Вывести на п.вчать равнобедренный треуrоJJьниtс за­ данной выс оты. Проаналиэишяте приведенную на рис. б.2 программу и резу.11ь~аfЫ ее работы nри Н " 14, Щ,имер б.2. Составить программу фор1<шрованиJ'! и выдвчи на печа'i'ь тргугоJ1ьюша 11аскаJJя, • Соответствующая программа и результат ее рабо'l'Ы приведены ив рис. б.З. в r2] rtриводятся 8.IJГОрИТМN решения этой задачи. основанные обычно на форьmрованиидвуwерного массива, в котором каждая nос.11е­ ,пующая строка въrсшс.11 яется на основе nреДЬ1дущей 110 TOJ(OJ'Y просто~ правилу: :каццый ее э_лемен•r (не счи•rвJ'! крs~lних, всегда равН1,1Х едмни- • це) равен cywe щ~ух над HIOII стоящих из nредцпущей строки. _ Мы эдесь даем алгоритм, основанный на том, что каждая строка треуго.~iькиJ<а -:- - б кноwив.пьные козффициен•rы раэложеш1я (а+ б) ", п • О, I... В про грамме nеремекная А -определяет позицию веf)llfины треугольнииа • Т - ширину nолл в~.вода для каждого чис.па, /.. - шаr "лестниuы" ( рекоwенцуется L :::: Т/ 2 ) . Перед зацускоw цроrранw но ми11роЭВМ " Эхе1<трониха ДЗ-28" с11едует выдать директиву PRJNT ! 5 •~ i v . ко•tорея в двльнеnmем обеспечит отсечение нуяевой дробной части при выводе целъrх чисел, ?8
Hil REM BЫBiJ!\ ТРЕУГ'ОЛЬНИКА 20 XNPUT Н 30 P~INT "ВЫСОТА Н="1" 33 PRINT ТАВ<20>"*" 40 FOR К=1 ТО Н-1 50 PRINT ТАВ<20-К>"*"ТАВ!20+К>"*" 60 NEXT К 70 FOR Xn20-H ТО 20+Н 80 PRINT TAB(Xl"*"I 911J NЕХ'Г Х '19 END ПРОТОКОЛ РАВОТЫа ВЫСОТА Н= 14 Рис. б.2 ?9
2111 PRINT ''РБ~ДИ 111" 3111 INPUT N: PRINT"N=";N 4111 A=18:L=3,T=6 50 PRINT iА8(А-7)"ТРЕУГ'Оf\ЬНИК ПАСКА/IЯ" 6411 PRINT 714 · PRINT ТАБ!А+1) "1'' 80FOR!=1ТОN 90 С=1 111J0 PR I NT TAB!A-UH)"l "; 1]111 FOR к~1 ТО 1 120 C=C*(I-K+1)/K 130 PRINT TA8(A-L~l+~K)C1 1~0 NEXt к:PRtNТ 1:50 NEXt 1 16/J END ПРОТОКОЛ РАБОТЧ: ВВЕДИ N N=6 ТрЕУrольник ПАСКАЛЯ 1 1 2 3 3 1 4 6 4 5 111 lfl :!! 6 1~ 2RJ 15 Рио, б,З 1 6 • На рис. 6,4 - б,б иэобра•еНЬI цporpama,1111ывод1 rраф1Qtов фущщиl . 3 • . . f"A,,r~ U:,АК , ь~=е--к. S'ili2.1i'X • Исnо.пьзуя приведенные ораэу пос,J1е текста ка-,nой проrраММЬI резу,J1ьтаты ее работы, разберите оамо­ С'l'ояте)lьные их аJ1rоритwы. Учтите только, цто ось Х нanpsi1J1eкa • аертииально, а ось ~ .,. горизонтально, Точки rрафииа выводя'l'·оя на печать no мере возрас•rания аргумента Х , яв,~яnцеrося napaмeirpoм цикма, и располаrа10'1'ся относитмьно оси Х II соответствии оо ака... ч~нием аргуuеН't'а '1'абу,J1лторноА фующки ГА8 (У) , б.З, Укр.vnненное начерт~ние сиuволов Укрупненное начер-rание какоrо-либо сиwвоJ1а (например, буквы руоокоrо а~фавИ'l'а) свяэаио с эаданием этого символа табличкой,~•­ nохненные клетки которой образуют контур (рис. 6,7) , СодеР*кмое такоR таd.аички мо11tно закодирова1ь с nо11ощью I (хJ1етка эааопне на ) и ~ (x.11eir- 1a не заполнена). 80 j!
10 REM rРАФик У=А11Ехл3 20 INPUT Б,H,A,PRINT"B="B"H="H"A-"A 30 PRIN T1PRINT ТАВ<18)"!Х" 40 FORХ=-8ТОВSTEPН ~0 У=А*Хл3+18 60 IF Х>0 THEN 130 70 IF Х<0 THl::N 150 80 FOR 1=1 ТО 36 90 • PRINT ТАВ I II "-•, 100 NEXT I 110 PRINT TAB<37>"V " 120 GOTO 160 130 PRINT ТАВ11В)"!"ТАВ(У)"*• 140 &ОТО 160 1.5111 PRINT TAB(Yl"!IE "TABOBI "! " 160 NEXT Х 170 END ПРОТОКОЛ PASOTЬl1 !Х - - --· --------- v 81
10 REM J"РАФИ~ У=АЭЕХЛ2 . 2flJ INPU"f В, А, H;PRJN"f"B ~ "B I "A•"AI "Н•"Н . 3И PRINT" ! Х" AllJ FOR Х=-В ТО В STEP Н 513 У=-АЭЕХ"2 i,liJ · 1F X<>liJ THEN 110 70 !=OR I•l то 35 8111 PRINT tAB {I) "- "; 90 Ni::XT 1 · 100 PRH,IT ТАВ(3Ь)"У"аб010 t:zgJ 110 PRI~T"! "TAB(Y)•~• • 120 NEXT Х 131lJ END ПРОТОКОЛ РАБОТЫ• в~4А•2Н=.5 !Х 1 * 1 * * Эt * * '* '*1 Э( * *~ IJf * 82 ,t у. * <д
... 5 • rРАФ~ ФУНКUМИ Y-EXPC-JO!EЗIN16.2S!EJO Hil М"28 . 2lil D=,013 ~в Р2=6. 2е::нв 41/J .7 =21/1' ~" FOR1•1ТО'1 bl!I )(w;I!ED 711 V•EXP (-X!,EStN СР2ЭIЕХ> 00 T•INTl1B!EY)+i 9r!i PR1111T ·rAJHT) "311" 1111111 IIIF.XT I HIIIENI> !Е 3lf * !Е !Е !Е !Е !Е !Е * !Е !Е Э1Е ~ !Е !Е * !Е JE 3Е вз * !Е !Е * !Е
~-+- -+,-k l----+ - -+- -k j 1 1 ~--"- --'-- --'-* Р'ис. 6.7 F.cnll исходная таб.1114чкв состоит из 7 Х 5 э.иеыентов (рис. б. 7) , -i •o д.ия по.11ноf.\ идентифика-­ ции с~wво.11в будет достаточно ПЯ'l'И семираэр~ц­ ных десятичНЪIХ чисел. KaJll'Дoe из них будет ко­ дировать один из пяти вертихаnьНЪJХ слое в и~од­ ноР. таблички•. Например, начерта ние симво.11а ,Ч (рис . 6 , 7) кодируется следующими пятью чиспа­ ми: IIIIIII (пврвыf.1 вер'l'I-Шальный слой исход.ной табличк~; IO (второй слой) ; IOO (трет ий спой); IO (четвертый сл ой); IIIIIII (пятый слой), nричем,nереход от 11.11адших разрядов к старшиw зквивален'l•е н просмо'1'ру исходной табпички сверху вниз. • Для по следовательной распечатки символа надо тоnько установить, какие 11ифры содержа1•ся в соответствующем разряде в сех пяти чисел. Если зто r;l, следует отпечат ать пробел, если I - какоР.-то выбранн1,1й ' символ (например 1r ) • Для опредепения uифры к-го разряда числа 8 нужно пре111Де всего переР.ти к числу !1 , которое содержит эту щ,фру в 1.1ладшем разряде . Это достигается путем деления /j . на IO степени K- J и выделении из результата цепой части. ПоспедуЮщая проверка делиыос~ w /1 на.цело на IO и позволяет установить цифру К-го разряда ч•щ­ ла В • В программе (рис. 6,8) числа, 1юдирующие табличку рис. б.7, присваиваю•rсл ~ J!ементам массива В • Затем в u.икJ1ах по nepeмe н!fl,11\:2 орrавизуетсл проверка цифр кацоrо из семи разрядов всех пяти t111ce a и печать соответ ствующего эна1<а • пробел и11и -Х- • Оп ера'l'ОР /JRJNT (посл.э NEKT L ) вr.,еден дnя перевода nечати на новую строку по за­ вершении работы внутреннего цю<ла no /.. , резуль-rатоw которой лв.11.я­ ется ьывод одного rоризонта.11ьноrо с11ол табпич1rи (с111. рис. б.?), Уnражненил I. Соо,а11ить nporpaw11ы выдачи на вкраи диОWl&Я ( на печать) с~ед,у,сщкх фиrур: а) б) ~ .,~,_,*,~~~* . "Н~><}(Jо4-У.Х*)'!· ~~*·~-1\'~'>i-~·~ ', - t)l:)<~~X~*;)(· - \(~* ~>4~X-j(-Jo\ , )\;(*~ ~ )(~~~ 84 ..,._ ,.,. >(* **~· · 1'-'1i '/("' ~ ~ * ,)о(- i'S **·~~)t ·""~""-'1' *--~~"-""1<""* '1<~~ - 'li-
в) ,,,,_ r) *"(,~*f ~ .,. ***-* "' 'll<- "11- 'k 'I<. ..,. 'i<- .. "" >/t, "'~ "" * **>А-*':,-* -11- -11- ~~** :у.. * ,,, "(, .1,. * 'f<. * * ~ f **~.У.-"1<.~1<*>/<* Реэ!:J9рн X&JQtott 11з фигур заранее не фиа сиров аиы II зедаю'l'си в опе­ раторе J NPIJT во время исnоJ1нен11я проrраwмы. 2. Coc'tRBl'l'l'Ь nporpaio,y ДJJ:Я у~сруnненного начер'l'аиия иачап:ьноf! буавм •вашеrо ю,ещ«. З. СоСТ88И't'Ь l'lporpaмwy Выдаци На ПВЧ8ТЬ (э,:ран ДИС11J!ел) граф.ИКОВ <!) VHIL\ilЙ: ) -х _,,,_ а) 11= cos.x; б v::е ·wtЛX. Hi1 DIH B(:S) 21iJ D~TA 1111111, 1f6, 111111, 1RJ, 1111111 3111 FOR L•t ТО~ • 4il READ В IL) 5D NOT L. 6/; Fdl\ K~I. ТО 7 7f6 FOR L.•1 ТО 5 е~ н~1нт1зсL1;1f6л1к-11 1 9!0 ,- i, ,11 -JNT (Н/11111 Jf18 • , 101/1 IF М=" ТН!:N PRINT •• •J '11111 IF H<>llf ТНLШ PRINT • ,t "J 12/il NEtT L • blliJ PRINT 14fJ NEXT К 150 END ПРОТОКD/1 РА601"Ы: ~* IШ~ lt*- *lt lf t( ,. •)f !f J(r Рис, 6.8
7, НF~CfAHДЛP'll-JНE ФУНКЦИИ И ПОД[lРОl'РАММ!:1 ,. 7. I. Фунmии похьзовате,ш. Удобств&, связанные с использованием стандартных фунIЩий BK.JiCИiц., известны, Язьm по:.нэоя ~е'i' пользоватето создавать свои, нестаида ртн-о1е фу1:~1.щии , Запи съ определя:эт не ст1ща.а ртну;о функцию. Здесь /J EF - мючевое сло:ео, !i0T0 poe CJ!j11ИT JJ)IFi описания нес танда ртн ой фуюш ии; FN d., = щ.т фун:щии, 1: ~еотором две первые бу1щът фиксированы; d., - одна из букв ла•r11нск ого а11фавита, выбираема .я: nроизr,ольно ; ){ - .аргумент (формаш,ньтй параметр) определяемой фунш-1ии (он может быть Щ!ЭДС'i;'Е.IJ­ лен ,!Юбой простой переменной); / - люб ое арифметическое выраmв11иG 1 з11дающее а ид фую:ции ( оно мо1i\ет coдej)'li(aт1, формальh1>11! napaмe•rp Х 11 ( ил и ) гл обальные переменные А,, А2 , ••• , А,,), В прогр&тiе мoi•y'li' быть опис а ны нес колыtо не с•гандарт11ЪIХ фуюший. Все описания nовещ8ю'i' обычно в на чале программы . При последовательном выпоnиении one pa 'X'O= ров описаю;я фун:щий игнорируrо•rся. Бычис~1ение значения функц ии про исходи •r в те моменты, 1соrда в программе встречае·r•ся ;'!!(~ J!. ~ фуню1ии f N о<. (А) , т.е. ее имя с заключенным в скобки факт иче с1см::1 n:араме'iром, Переменные 41 , А;г •. . ,, Ап • есля они есть в опреде- лении фу нкц ии,, доЛ11!'JiЪ! быть инициализиров аны до первого иоnою, з овЕШ М.fl. уI<аЗ а'l•едя функпии. УказатеJ1ь фушщии FNd (А) мо11tет встречаться :н~щ операнд выражени.R, ках элемент списка вывода оператора PRJN Т , т , е , в~щет себR на1< простая или инде1tси рованная переменная . В :ка­ чест.ве фа!(тического параметра доцус:<аю'rся выражения. Пыюt!!!.2.:1.• В 1(ачестве примера, юшюирирующего применение нестандар•той функции, рассмотрин задаqу 1JЫчисленю1 интеграл.~ r10 1t1Jаr.рат.урной фoptfYJJe Симпсона: 8 •J "'j f(,r)ct,r ~ ~;la (/о ;-f/) (f/1;,• ,..-f /n--,)12(t1..,-tf,,_~)1J~1 прэдст11nпmощеl1 1ш~·еr•ра11 через суuму значений под1,1нтегра11ьно!',1 фущщl!IК 1Э некО'rор1~х точках xt' - узлах 1н1 вдра,r-у рtiО Й формуm. Здесь /2-"".!(а"i/1), i ,.,, о,, 11 .. •., п; /1 :;(6-а);11-, п ::.2к. 1
Чис,ао узловых точек равно 17+ i ; I? - расстояние меж,цу двумя со­ седними уз.11онЮ1и •1•очю,мк. Значение интеграла аrшроксиш1руе·rси после­ ,1!.Овательиостью S, , S., , ~ ,., .. , S,.. , которая сходится, если функ­ ция / достаточно гладка.я и ес1111 арифметичес1<ие операции выполняют­ ся •rочно. Нз 11аждом шаге вычислений число узло~t-lХ точек удмивает..ся. Чтобы избежать выч!1сленил функции / {Х) 2к раз на 1<8J11ДОМ к -м шаге (поскольку в принципе можно использовать значения / i , nолучен­ т~е на предыд,i'ЩИХ шагах), воспользуемся прием ом, предл оженным в [4.J, Б сумме Sк три ЧJiена: КО'l'Орые об означают суммы в узловых точJ<аХ с весами I, 2 и 4, Их мо11шо ощ:1еделить о помощью следующих ре1rуррентных соотношений (ддя К> I): sм=2s(i) • к2к-,, причеы, Иlilчальные sначения равны соответственно: Составим программу вычисления оIIределенного интеграла методом Сиwпсона, n х<оторо /.! подынтегральная фующия оформлена как нестандарт­ ная футщня ВЕйСИКа fNf(X) . )).Jiя тестового примера возы,1е1,1 интеграл 1 fах f 1-:;с2 J иоторыl-!, на.к известно, ра~ен cacfjf=:li/4 :со ответствукхцая· - --. программn и резуль1•атlil ее работы приведены на рис. '7. I . Нестандарт­ нап функция, представлнющаR подынтегральное выражение, в програмwе определяется в строке 2i, используется ( вызывается) в стромх ~. ?fl , I~ (в цш1.11е), всяк~11-! роз с новыми значениями аргумента . 8?
10 REM ВЫЧИСЛЕНИЕ ИНТЕrРАЛА ПО СИМПСОН~' 20 DEF FNF(X)=1/(1+X*X> 25 INPUT А,В,Е • 3IZI РНINТ"ПРЕДЕ/IЫ ИНТЕrРИРОВАНИЯ:"tА; В 35 PRINT "ТОЧНОСТЬ,";Е 4IZI N=2:H=(B-A)*.5 5 0 Si=H*<FNF(A)+FNF<B)) м, S2=0 70 S4=4*H* FNF<A+HI 80 S=S1+S2+S4 90 SS=S:N=2*N•H=H/2 1011! S1= .5*S1 110 S2=.5*S2+.25*S4 120 5 4 =0:1=1 130 S4=S4+FNF(A+I*Hl:I=l+2 140 IF I<=N ТНЕN 130 150 S4=S4Э.:4*1~ t60 S=St+S2+54 170 IF ABS(S-SS>>E THEN 90 180 S=S/3 190 PRINT "ИHTErPA/1=",S 200 END ПРОТОКОЛ РАSОТЫ 1 ПРЕДЕЛЫ ИНТЕrРИРОВАНИЯ1 IZI 1 ТОЧНОСТЬ, 1Е-05 ' ИIПЕ:rРАЛ= . 7853981628062 Ч'1'обы внчис,sмть АР)'rой интеrрап, наnрмuор fVa'cos'x,":'sin 'X •' дост~точно заыенмть 2~ 01року nporpauw и& оже,цуrщу11: 2/1 JJEF FNF (x}= 1/SORT((a* C{)S(X))".2 .;(8 ~Sш(х)У'2). Пр..делы 11JН'i'&rрировани11 к 'l'очность ВJ,1Чt1сп:ени.я wнтеrрапа 1водя'l1с.11 й моwен-t выnопнениi~ 11porpaмw а оnератор _25. '7 ,2. !!.оJШроrраwмы ~ - ето оnециажънЮ! образом оформженная пос~едовц­ 'tеnьно,:ть оr1ерат-оров 11зЫJС11, l'!O't'opaя вьmоJWяет четко оnредеиеflную· фуИКЦiШ Ui хрt.ШИ'l·ОЯ только 8 ОДНОr:J -C'i'e nporp&Шlbl (.11ибо 8 сnзци JlbttOЙ 88
.. биб.11иотеке подпроrреwм), однацо ее мо.но вызывать дм вwожиения одной VI.,и нескольиих точек nроrраммы . За счет хранения подпрограмм отдежь- но от основной nporpaЪ!W объем последней уиеньmается. Вместо того, чтобы nовторпт~ всю поожедовательнооть операторов каliДЫЙ раз, когда !J это1- воа11икает н$обходиuость, ~з программу вк.11ючаrот один оператор мя выз ова требуеwоА nод11рограммы . Н о r11авное преимущество подпроr­ раr.щ nроявлпется в совреwеиной технол огии nрограммированмя больших и cлown,rx н~упно-техническ~rх npoб.11ew, По мере прогресса в искусстве nроrрею.1ирования програNМЬJ ст ми созда ваться методом пошаговой ,у_q­ таа!!З!!Ц._ИИ (пос11едовательноrо уточнения ), согласно 1шrорому npoгpaN­ iшpyeua я задача разбивается не не:соторое ч11сJ10 подзадач, ttоторые в пос ле,цующем проrраuмируютс я в в иде пр ограммы о отдельныuк под­ проr•рамwаr,ш. Такая орrанизашш об.пеrчает npoвep!fY правмльности nporpв I04 , YJIYЧmaeт их читаемос т ь . Начало nодпроrрамuы в ВЕйСИКе никак специально не офорw~яется: формально подпрограымоR явлю,1•ся любая последовательность операторов язЫJtа, которая завершается оперотороw RE TVRN. Он служит признаком хонцs по,цпрограwNo:.t . . О бращею1е к подпроrраwме осуществляется о поwощью оператора (JOSUB, ммею~его такоя формат: OOSUB <но~ер стро~си> Встретив в nрограмwе етот оператор, ЭВЫ выпо11няет с11еду-,щие деRотвк~: I) управление передается оператору той строки программы, номер " которой уnазан после служебного слова ()OSUB (первоа.у оператору подпрограммы); 2) выполняrJтся операторы подпрограммы; .- З) встретив оператор RE TURN , wаwина возвращает управ.11енке оператору, стоящему за последним выпо11}1ен»ым COSVB. Ortepaтop {JO$UВ - основноi' · инструмент структурного прогроu,,1111- рования в БЕйСИКе , Методоw нисходящего nроектировання програwкст расчпеняет программу на подпрограммы, испсrльзуя (J(}SUB для вuэоаа . кацоrо с.110111ного фрегwента (подпрограlоlМЫ). В качестве подпрограмw в стад~и отладки ыо111но_ вводить "з~г~уmхи" типа !!114 PRIN T "3Д1!:СЬ Wдь.,- ПОДПРОГРАJША" Щ1 RfTURN 89
Затем, бу,цучи уверенныы в правильности логического построения програ~~ мы в целом, програwиот детально разрабатыв~ет п "расписывает" кa~­ J.IYIO noдripoгpaмv,y-, заменяя ею СОО'l'ветствуlОЩУЮ "эaГ.lfYWJtY". il{!ИM0J2 ?,~ . Е!ыЧИОЛИ'l'Ь WIОЩВДЬ Че'l'Ьlрехугольника, eCJIJI ИЭВ00'l' IЩ д,11щыегос,rорон а,о,е,dибднаиздиагоналейt. Диагональ делит четырехугольюш на два треугольник& с изnест­ нюш сторона)l!и . Площадь иаждого из них ( SГ и S2 соответственно ) найдем по формуле Герона. Для вьrчислен ия площади состsвим под.r1рог­ ращ. В ней исnодьэуются в качестве сторон треугольника формальные пар1.1метры )( , {I , :С , которым nptt кnщ­ дом вызове IIОдпрограwмы nрисваива ютол нонире'!'НLlе значения. В основной програw­ ые r1pe,цycмoTJJ$ H ввод ксходНl:IХ да нных , t последоватоп ьное двукратное- обращение н подпрогра мме и вывод результатов (рис. 7.2) . 10' REM ИСПOflЬ3O0АНИЕ ПОДПРОrРАММ 20 INPUT A,B ,C ,D,L 30 PRINT"CTOPOHЫ: "А; В; С; D 4flJ PR INT"ДИAl"OHAЛb: "L 50 XvA :Y =D:Z=L:GOSlJB 120 t,0 . Sl=S 80 X=B:Y=C,GOSUB 121J 90 S=S,-61 10(~ PRINT"ПI\OЩAДb 4ЕТЫРЕХУrо11ьник,1""S t 10 STOP 120 REM 13~ REM ПОДПРОrРАММА 140 REM РЕАflИЗУЕТ ФОРМУЛУ rEPOHA 150" Р=(Х + У+:1.)/:7 160 S=SQR(P*(P-X)W!P-Y>*(P-Z)I 170 RETURN ПРОТОКОЛ РАБОТЫ: СТОРОНЫ:3434 ДИАrОНА/1Ь: 5 ПЛОЩАДЬ ЧЕТЫРЕХУГ'ОЛЬНИКАс 12 Ркс. 7.2 90 ,,,1
В подпрограммах можно вы,де.л:и.тъ че ·1·uре типа исп оль зуемых веюrчин: а) входные параметры по,nпрогре1ШЫ - переменные, · которые принк- 111а1У~:- раЗ.!!ИЧНЬ/е значения ПрИ ВЫЗОВ(! 1IОДl1рОГраWМЬ1 ИЗ р&ЗЛИЧН!.iХ М0СТ основной nрограмw; б) выхоДНЪ1е параметры - переменные, значения которых опреде­ ;umтся в ходе выпоl!нения подnрогра м~ы и явлl!Ются резулиатоw ее pa- бo'l'hl; в) внещние nеременНЪ1е - переменные, которые определтотся в ос­ новноn программе и о стаются неизNенw..ми при любом вызове подпрог­ раюш; г) внутренние переменные - пеооменные, используемые в под­ nрограыме как всnомоrательные ( пaptHJe•rpы циклов, счетчики). 8 Rачестве входных и вьr.<одных пара метров подпрограммы удобно 1tсnольэовать такие переменные, в<о•r•срые дщt других uелеЯ в основноА & nро1•рамме не используются. Пвред обращениеw к подпрограмме входным (форма.m,НЮ,1) параметрам по,пдрограммы щ:>ис ваивают некоторые началыrы~з значения, затем вызывают подпрограмму, li1 после ее заверwеюrя запо­ минают (используют в алгоритме ) ее вых одные параметры. В программе на рис. ? ,2 входные параме•1•ры подпрограммы - Х , {! • . 2 ; выходной параt.1етр - $ , ее внутренняя пере~.енная - р . Пыимеы 7 ~д , Рассмотрю• еще один способ построения треуI"олъника П8 скаля (см. i:rример 6, 2) , На.помним, что биномиальные коэ~МJициенты разложения (а" 8) '= (J/ а,:8. +с/а. <-t+Cfа/-282 :f ... - f{J/a·6•; из мторых формируется при ра зличных i.. с оо~•ветствущая t -л стро­ ка треугольника Паскаля, вьrчисляютсп по формуле j i/ . . . ~-== j/(i_,;)/ l"'О,1,2,.../j~t. Для вычисления к/ nред,усыотри14 подпрограмму Приведенная на рис, 7. З проrраныа демонстрирует wногократНlirЙ вызов подпрограыw в теле цикла, Подпрограмма имеет один входноА параметр - 1( , которому последовательно прис в аиваются значения величин i , j , (i -,;) , и для них подпрограмма· вычмляет 1(/ Вы­ ходной параметр - F , ко•rорый no заверmеню1 работы noдnporpaмw возвращает в основную программу соотве~•ствующиА факториал. В основной програыые вычисленные i/ ; J/ соответственно присваиваются вспомо­ гательным переменНЬ/Jd (Н , С2 • 9I
10 REM ВИНОМ 20 30 4w 50 60 7(!'; 00 INPIJТ N:PRINT "N=" N:PRINT FOR I=!IJ TQ N K=l: GOSUB 190 Cl =F FORJ=0ТОI K=J:GOSUB 190 C2=F 90 K=I-J:GOBUB 1 9!/J 1!/J!IJ C=C1/C2/F 110 PR INT TAB(4ЭEJICJ 120 NEXT J 130 PRINT 14@ "!ЕХТ I 150 END 1613 REM 170 REM подПРО~РАММА 190 F=1: L=2 200 1F LЖ THEN 23EI 210 F=F:l<L 22@ L =L+1,GCJТO 2011i" 230 RE TURN ПРотокоn РАSОТЫ: No9 1 1 1 1 21 133 1 146 4 1 15 1/iJ 10 5 l 6 152015 1 7 213535 18 285670 1 6 21 56 I 1 7 28 19368412612684 в Рис. 'l.З 36 . У пра жнгни11 1 91 Составить nporpaыuьt, исnопьэующие неотаидар~rные функциn и noд­ nporpaмw, дпл решения следующих эадr.:ч. I, Вычислить и вывести на печать табаицу значений фуНIО.\ИИ /(к)= Х1 - -?Х COSХ -1 /2. S и ее nроRэводноЯ II интерваJtе (-:Ji~ .:Ji) о 1111:1row О, I . 2. Вычиспить и напечатать максимапь ное значение фун:кц~и • 1/,) = /х-2•12 /)-(х-2) 2 8 (О 4) • оOI ,~1 1,1~ и нтервале , с точностью •. 92 ~tJI \ ·j
"' . • f -(l,X о. Э. !3ычимить ;~нтЕ'lrрал от фун:щии .. (х) :. е - u?(,J'+f} на отреэ~е [О, 2] no форнуле тt,аnеций: '6 ,,_( Jf(x)ax=J f [Jra+rioJhJ+ /(a+ihJ)1ri.в1n= 4f', . а, 4. Вычислить чиоло максимумов фун\Щии f(XJ,= Sin IOX Н8 ИH'IepвaJie (0,5), Эiiачени.я фуНJЩИИ ВЬIЧИСJIЯТЬ О ТОЧНОСТЫ) f :: 0,01. JОО'ЕРАТУРА 1, Голуdенцое А,Ф. 0 А.ни~ин В.М. Диалоговые алrорwt1,1ические ЩJЫIСИ БЭЙСИК и ФОКАЛ: В 2 q,/ Под ред, А,М,ВоrомоJ'(ова. - Copa'i'oa: Йэд-00 Сарат~. ун-та; I983, • 2. Дреt!фус м. • .\'англрф К. Прапти~а проrрамwировани.11 на ФОРl'РАНе. Уцражнения с комментариями. - М,: Мир . 1976. - 224 о. э. Ламуажье Ж,-П, Уiiра!IНОНИЯ по програwированмю на ФОРТРАНе-IУ~ - M,g Mttp,. 19'78, - lб2'с, 4. Вирт Н. Систематliчесttое цроrраиммрование. Введение. - 1!.: Мир, 1978, - P.i;': о. б. Oaнor:s,• ИfJформатики и вычисJ1ите,1ьной техники: Пробное учеб. flоообие для среднюс учебных эаведе11ий: В 2 ч. /Под ред . . А,Ц.Ерu1ова и З.М.Монаховn, - Х,: Рад. mk,, !985-1986. б. Введение в r1роrрвммированnе на алгоритмическо11 11э1:11tе ВЕйСИК: Методицескме рекомендации 1t мэуGеlfию П1Кольно1•0 курса "Ооно•­ iЭЬ! информатики и в1о1Ч1tслитеп:ьной техники• /Сост. N,П.ЛапчИtС. - 011c1t: ornи, 1005, - Ьd с. 7. Агафонов В.И., Поттосин И.В. м др, Сборниж упражнений по 11роrраммированJm на яэы~tе ПАСКАЛЬ, - Новосибирок, 1985, - 80 с. 8. Макоrои в.с. Основы 1лrоритмиз1щик в инфор~.!атике, - Оде,ооа: ОГУ, I98б. - 72 о. 93
ОГJIАВJШiИЕ Введение•••.•••.•fl ••••••••••••••••••••••••••••••••••••~~.... .... .. I, Оргвниэация БЕйСИК-програww , ОсновНЬ1е аонструJСЦИН язЫJСа • ••• • • I . I . Подготовка ВЕйСИ!{..програwмы •• •• • • • •• • • ••••••• ••• •• •• • • I,2:. Пр1,uер прогрвttw •••.••••.••••.•••,••••••,•••••••о•••е" IcЗ,Алфавит.языка ••е••••••••••о•••••••••••е•••••••••,•••а. !.4,Чис>~ао•••,.•••••••••••••••••••,•••••••••••••••••,••еlt•• Ie 51i! ПереNенные и N'В.ССИВЫ ·· · ~···• • cio••······•• o1 1 01 , , o ·o• •• C1 I.б,Стандартныефункцииязыке ••••,.•••.,,.,,•••.••••••,,.•,, I..,?еАрифме'1'Ичес1,иевырв.женияе.,•а,•сао,,,,,,о,,•,,,,,,о"о,•• 2 , Основ ные операторы язьша БЕЙСИК••• ••••• •••••••••••••••••••••• 2. I . Oпepar.rop 11рис:еаиевния ••• • ~, ." • • • •••••• , •••• • ,.,.••,;о fil 2 , 2 . Просте йши~ в вод и выв од информации••••••••••••••• ••••• 2.3 , Ол:ераторы управления npoгpai.wof.! ••••• • • • ••••••••• • • • • •• 2, 4, Дополнительные операторы ввода данных•••••••••••• ••••• З, Программирование цикличесlсих алгоритNоn ....• , .. . , ....• , , • , •. , ,зо1:rАOri~paтopциклаЬ•t$lli8f81.t8t8&11188•818888(1С,е.t••18888С,811, 4. О б работюз т абл1ш ( м ас сивов) в БЕй.СИК-програJ,\'1,jе . •,,•••., .•..., 4. I e 0nepa11.1op описания ивссиnов ••а 1) .,, о•••••е • • 11. ~ ... .,.о.,.сQ. " ,.. 4.2 . ВвDд и вывод массивов в БЕйСИК-програмwе •••• • •••• •• • •• 51)СложНtJ!ецин:лыD888t1•1t8•11&V11tt8188ti18"1~8.8881Q.8.81С11О,О81)1 б, Вывод графиков, таб;,Iиu. Управление . выводом •••• , •·, , ••• • , • •• •• , б,I, •.Вывод числовой ш,форм1щии . , ,•.•,,.•• .. ,.,,,,~.•.,, .,,.• б,2. Табуш,торная фуню~ия. f'рафин1:1 • , , •••• ••• , .. .. , •• , , •••• •• б,З.Уuрупненноеначер•rаниесиwволо1>.•,•.,,,,,,,•,••,..••,• 7, Нестандартные фуннuии и 110длрограмuн •••• , , , •. , , . .• . •.. ••• , ••. ?,I. Фун1<ции: nользоватепи •••• ,. е . ..... ...... • •• .,. Ct ••• ci. с* ••• ., • • ?0 2"1 IloдnpOi'p9~Mbl ... w••••••••••••• С!О о~ • •••••••• • ••• ., •• •• ••• • .Питер&ТJ.1р!:iе••~•о•••••••,•••••••••••;•••с•••••••("••••~•••••••о•..• з 4 5 ,, 8 9 IO II !2 I5 I5 I6 2I' 34 43 56 59 59 60 1. 65 76 76 78 80 86 86 88 93 1 1
Влвдииир Санович Макогон Практика проrраммкроnаниR на ВЕИ~ИКе Учебное пособие Редактор Jl.В.Беноусова l(орре11торы В.И. Щ~реwовв. • И . П.Ме)!tировокий н.н . савчеюtо Н •.::> .Слонина Св . доп. miaн, IOO?, поз, IЗ ·-·11-,;А:-~ ~;ч:"i15.t!7, 17 ·: 6t> 07f f> 6 . Формат 60 Х 841/1" Бу"аrа тнп. 16 t , Печать · офсетt1ая. )'ел. ntч. л,.5;.53 . )'ел . к5t.--отт. 5.6 .9, )'ч.•НЗА, 11. ц.,1 . llэд. No ~Ч~7 . Тнраж ,ооо Зак. 16 1оuчч U,oew.i. IS ко «. ОЛ:ссск"Цt -ордена Труд ового Кр ас ного З ttамешt rосудар..:твеttный у1-tl-f1.н·ропст нм. И. И. М.еч11нкоnа 270000, r. Одесса, ул. Петра Ве.,нкоrо, 2 Межвузовское полнrраф11 11еское n11rд п рия r11 е 252151 , r. Кнео, ул. Вол1,111ская, 60. /
15 к. .. Зак. 10044.