А.А. Белеванцев, С.С. Гайсарян, Л.С. Корухова, Е.А. Кузьменкова, В.С. Махнычев - Алгоритмы и алгоритмические языки (1113416), страница 9
Текст из файла (страница 9)
эат е, 1!3т Зкс м год применяется ко Всем элсмснтач ма!ЖИВЯ, КРОМС ПОСЛС)Н)С О (ОН УЖС НЗХОДИТСЯ Нй СВОСМ ОКОН~)ЗТСЛЬИО' месте), и т,д. Ь) сортировка Обменом (метод пузырьыа НОследОВатсльно сравниваются пары соссднйх элсмсн " Мйееявй Х) И Х;,1 ф =- О, 1, ...„ П - 2) и, ССЛИ Хк > ХЫ.), ТО О ' псрсстйвлеотсй; В результате нйибольц)ий элемент окйв1ь на своем месте В кОнцс мйссиВВ; затем тот жс мезт) ПРНМСНЯ1,",ГСЯ КО ВССМ ЭЛСМСНЗВМ МЗССИВЗ, КРОМС ПОСЛСДНСГО'; Т Д' 6.4.6. Опнсйть функцию, которйв ЛЛЯ цело~)исленно., массива из и элсмсптов Определяет: а) присутсгвуют ли в массиве Одинаков " :)ЛЕМСНТЫ (В СЛУЧЗЕ ПОЛОЖНТСЛЬНОГО ОТВСТЗ ВГГЗВРЗЩЗС, знйчение 1 Н 0 В Противно~ Случйе), Ь) КОЛИЧССТВО раЗЛНЧНЫХ ЭЛСМСНТОВ В МЗССИВС.
6.4.7. Ре)анть ярсдыдуЩу)О задачу в предположени что значения элементов мйссивй нйходятся В дийпйзояс 1-1 Сер))КЯ 6.4.3. 1)рявестя реализацию Описанных вы)пе фупкця 141 6,4,9. Описать функцию. Которйв изменяет ззэьзнну строку слсдующим ОбрйзОМ: сначала ззписыВЗСТ В нес в. элементы с четными индексами, а затем все элементы,' НСЧСТНЫМИ ИНДСКСймИ (С СОХРЗНСНИСМ ИХ ОТНОСИТСЛЬНО п01эядкй В каждоЙ Группе), НЗПРИЫСР) ЗЬсбеб01'.
=-> Зсе0ЬОЙ)), «)ихуз => чхвму. 6,4.10. Описать функцию, которая в ззданноя строк',, меняет местами ее первую и вторую Гкэловины, 11)йпря 14 С Р н.'01 ЗЬ *б ч«1ку. '"'=-' Ма«Гкя 6 4,11. Описз)ь фун)ц1ию, к)тсреворвчивщощук«Я ,с экимое строки, 0«прим) р; ЗЬ. —, ..Ьй. 6.4.12. Описан фуниьчю, получаквцую в качестве арзь)стРОБ ДВС СТ)К)ьи и ОТВВЧВ)ОЩу10 На В)Н100С, яВЛя1".ТСЯ Ля 1)е«ВЗЯ С1рокй нрсфнксом В)орой. 6 4.1.«. Оппсзть фут)яцик«, НОлучаю1цук) В качсс'1'Вс парамс«Р«ОВ ДВС строки И ОТВСЧЗЮЩую) на ВОПЙОС, ЯВЛяСТСЯ Ля ..
Осрвав с1'1х)кй суффиксОм ВторОЙ, '(К):.~)С))1)Ы4.11011 011Г)Ы 1Э11))«)Р)1ДЫ) 6,4.14. Описать функция)„которйЯ В целочислснной МЗТРИ1ГЕ НЗ П С)РОЬ И 1З 010ЛОЦОВ МСНЯСТ МССП1МИ максик)альный н ы))ниьильный элементы мгтрья1«1 (Очи)ать, '1тй Вес )леме)ГГы матрицы различны). 6.4.15, Описать функцию, котораЯ в всЩественной мзт)лщс пз я строк и Гл столбцов Определяет номер строки. СОДСР)КЗН)СЙ МЗКСИЬГЗЛЬНОС КОЛИЧССТВО ПОЛОЖИТСЛЬНЫХ ГВ1СМГИ1тов 1СЧИТЗТЬ, ЧТО Такйя СТЙОКЗ ТОЛЬКО ОЛНЗ). 6.4.11), Описать фупю)и)0, которйЯ нйходит ПРОИЗВСДСНИС ДВУХ ВСП)ССГВСННЫХ МЗТРПЦ )ЮРЯДКЗ П «: Л) И ж х к, соответственно.
6.4.17. Описать функщас, которав длв квадратной целочислсннОЙ матрицы и-Го порядка Опрсдс.чяет, являстся Ля )МН)еая Мйтрнцй: з1 сяь)мс)ри«)нои 1)тиос)ГГелыи) 1")звнои чиз))я)зли «) кч1Гнчсскнм кВздрйтом (суммы ээсментОВ ВО Всех стрОкйх и столбцах ОдинакОВы). с))у 1йс положнтсльнОГО ответа функций воза(ьз1цйет ЗНЗЧ.
" зчс)н)с 1 и 0 в противном случае. 6.4,13. Описать фзнеци1О, еоГОРая в целочисленно матоице нз и ст)зое н Л1 столбцов подсчитывасг ьоличест'" СТРОЕ', а) нълевых (Все злементы стрОеи Равны н)я1О); Ь) асе злементы еотооых имегот одинаеоаый зи ' (считать, что все элементы матрицы отличны от О); с) у11орядоченн1ях по аозрасганив. Рассм11ТРИМ Основные стан11ЯРзные ф)пецин для Тннамп'1есеоЙ и Я1ятыо Для выделения Лииямнчесеой па~яти поедусыотоеггы фянецнн Я1П11.ос н са11ОО. ЯОГГ1 "1аа)1.1ос (з1яе Г и); ф) Пения 1ва11ос выделяет в е)" 1е Область памяти Размейа и ЙЯ11тов н аозаРЯ1пает теазатсль на на~ало зтой Области или Й111,.'... если выделить память не Удалось, Выде11енная Область памяти 1ье ннйциализи(1)етсЯ.
ЯО111 'са11ос 1з(ве '< и, в1ае ФГИ1П1ИЯ са11ОС ВЫДЕЛЯет В ЕУНЕ Ооластв ПЯМЯТИ Для размьппьн1ия Г1 О(гьеетов Разме(ЗЯ п1зе и возвРаьцает теазагЕЛЬ На НЯЧЯЛО зтой Области нли Й1)ьь, если выделить память не )далось. Выделенная Ооласть Ггамяти инипнализи(1)ется нулямн. Дяя еОРРеетной Работы НРограммы пои использовании дан1ьь1х ф)нкций всеГда следует НРОаеРягь воза)1агцаемый нин РезтльтатЗ Фтнецин л1а11ос и ОП11ос ЯозвРапьзвзт )еазатель ОЙО61лепнОГО типа ( УО1й *), Пои поисвоении такОГО Ухазателя )еазаге111О 1га копеРетный '1нп б)Дет выполненО неявное НРиведенне *Гипов, напРимео: не менее, инОГда НРОГРаммисты используОт явное '1Р1гаедение типа: Оно моГло быть необходимо, если код с"злавался для сирых версий Языеа Си (до стандарта СН89), лиро '(ля 1(ослслу)ОВ1его испОль)оваиия кода таьж(' и лллз Языка С'.и+--, ь котором требуется Явн()е приведение, )з качсс гвс примс1)а )щзмс1цсния данных н:, д((намическо)1 памЯти рассмотрим следу)ощу)О задачу.
1(к)(т«1(1 1', 11щ)исать фрагьгент г(рог1)а««(мы, В Кот~ро~ из стапдартног0 1)Стока ВВода ВВО,'н(тся строгц1 длиной нс более 166 «*.НмвОЛОВ и размещав)ся В дипймнческой памяти. Олм(;з)Й)зтно)-О 1 / У " ЫЛС )«С «««1 11 Й м '" 7')1 "~'ОП Е )ЛН О В1 тору 1Р ее 1'1 „" ) 1)братитс внимание иа то, «)то в Динамической иаыят(Т::,' строка ')анимаст ровно стОлькО места, сколько реа)1ьно( треб*; ется для сс размещения. Далы(с)1(л)(и Доступ к1 ')лсментам строки может Осущ(',ствляться как ЦО указа)слк),,' так и с помощьк) Опсрщщи щ(д((кснровапия, 11асто треб;,стоя увеличить размер )щмяти, выделенный под конкретны)1 указатель, например, если заполнился некоторый буфеч(.
Б гаком случае использустсЯ, фУИКЦНЯ; ОО" 6 ".' са 1 0«з (чо)(1 '«РС1«а ' во *.. Б (в( Функция Геа) ).Ос Изменя('.Т размЕР выДслснной ОолЙСти до а( ве байт 1«щ(пс всего используется для увелнченпя) и вгмв1 .)Йщает указатель на новую область или (ч'(11.Ь. если „щслить память указанного размера не удалось. Содср)кимов 06 )асз.и от качала ло меиылсго из старого и нового размеров изменяется. Указатель Р Г г Должен быть рйнсс оформи;)ОВЙИ функцнямн ьза1)сс, оа1100 или геа110«з с«ли )тоз' указатсль раасн ь((11 ь, то вь(зол зкВивйлеитсн ' ~а1"„Ос«а сслн размер равен нулю — то вызову' тгес, Часто удастся увеличить Область без изменения самого указателя на . 0«г)ласть 1т,с, се адрссй), В таком слу«ис фупкцнси возчнкццйстся то же самос з1ьачснне «лгазйтсля.
)то на зто нельзя полагаться и всегда нужно абио вляз ь значение кказЙТС;1Я, 1ИЛРимср; Р 1'С (Р, Ч Й об Функци10 ге а1)ос ие рекомеидус1ся часто вызьжйть, поскольку она достаточно "затратная" по времени Вызове, 101да нси(ве тно точно сколько трсОуется памяти РЕКОМСНГ)УСТОЯ УДВЙИВЙТЬ ЗЙНЯТУЮ ПЙМЯТЬ. ОсвобоЖДСИИС динймичссщ)и памяти Вьщолняет фУ'НКЦИЯ: Функция ОсВобождйст В куч(".
Область гимяти, на кОтору(О р 1 "л 0 «н~ ' (еун н) н( ' ' 'Й ае )' Оорати'гс В1Н1мйние иа тот факт, что размер ОсВобождасмой 0.1«ЧСТИ ПЙМЯТИ НС НЙДО ПСРСДЙВЙТЬ В фуНКЦИГО«ПОСКОЛЬКу ФУН)щня 6гее автоматически нзвлекйсг его из сл)жсбной ИФОРМЙЦИИ, СфОРМИРОВЙНИОЙ фУИКЦИЯМИ ВЫДСЛСНИЯ НЙМЯТН Кренящейся непосредственно перед данной областью. 0«г(гму для корректно10 Освооождения Памяти указатель с до)(жсп указывать на область памяти, ранее выделепнуго одной из Фупкцин ка11ОС, са110с или 1ее1.
Ос. В') 1)рот))ином слуиас резуль)й1' 1)аботы Функ))ии ис Онрс))слеп. При Г)аботс с Динамннеской памятью ВссГДВ слелуст'„ соо)НОдать правило Освооождать Выдсленну)О раисе намять;Й если ОГ1)ж)а необходимость в ес исиоль)1)ванин, нтобь) дать) Возможность б)иблио1екс снова Выде)н)зь зту намять под,' после;)узои)ис Запросм. Инане во)никак)т ).н, )~)всяка ьсь))л)лн„':;) которыс приводят к невозможности Выделить дннаминсску1О," намять., ко1 да на самом дслс насть се не используется, Есл)1,„ приложение работает длн)сльнос время, то оно может зеи)ятьб вск) сво1)одняО намять. Б канестве примера обработки массива, размен)енн))ГО'-' В дннамичсскОЙ памяти„рассмотрим следукз)нлО задан* .
)Г)дол ~ ". На с Гандартном потоке В~ела задается 11с,)ое' ч))сл)) и и массив из и Вещественных ниссл, Используя .ъзя' размен)ения массива 1)ннам)н)сск)зо н~мя~ь. Иайлн сумму;: злемс1пОВ ы)1ссива, значения КОТОрых менььос знанення; послсднсГО ")лем)'.Ита массива. 1,'" ГС11)ое .В б1О.1)ь ; 1. ГВН1111-~'О о) ' и".."., и,' ао))1) ' е "х) + /Г нь)деление Гамлтн над мзос))Б 1! к',) '; У! ъылолнссь намнть но улалось ) С1.ОГО 1; В ВОД н Осюа) босска )иа Оонн 3 'о-. 1':-'б ' ' < 1б !х111 < к1п — 1,) ~ в += к1! ); оо 1х) 1/У Освобожцение намя ЛР1 От мессина -; СОГП 0; В массиве указа млей все злемен Гы массива прс')с1ВВ 1Яьот сОбоЙ указатсзи на )бьскты нскои)рОГО (с)1НИОГО для Всех )лсмснтов массива) типа.
Например, определение мас(:,ивз из 1б ука~з)елен на Обьекты 'сина ) 1) с." Наиболее исто массивы указателей нрименяизз Для ОЙГаннзеи)нн хранения строк кОГда каждый злсыснт массива лрсд)навляст собоЙ указатель на соответсзвук)1нук) строку, СОДсржит ВДрсс на~ила зтой строки. Прсиму)нсствоы нс1тользовьн)ия массива указателей в Данном слуиае ЯВЯЯется ТО. Т1О СТРОКИ МОГ;-'Т ИМСТЬ Различную Данну'. Рассмо)рнм Ма~~ив указателей на строки.
Нанальнук) :Ииииализацнк) такОГО массива прОилл)острирусм на примере киассива указателей на строкОвь)с константы, с')))Вс сйаГ "'рс с [) = 1 "Геб"', "ус11оь", злсмси~ами данно~о ма~ сика яаляк1тся ицзс строковых копстипт, после тиий лемеит масси ' иииЦиссп1зируется нулевым указателсм И".б~ (см. рйсуцОк) .,Я:::.'. 1ОС "й~ ~ геене ~ 1 3с пр «й1 П) :опали па11ос (и я и "' в1кесб ((.и(:) ),* З~д~~~~ 3. Описатв фуикцикк котороб В каиеств параметров передастся массив указателей ца строки (призна конца массива " указатслв иб1 ) ) и сцмвол.
Ф ~икци возврац(ае1 колииество ст(зок, иаиииакяцихся с указанного! пцпблсг ',скат "'л(), сбат сЬ) 1п". 1 "- С, г. - 0; иг.11с (а(() !:= К(1" з ) ' ('а "' ): .= с':) Зй~)йил,4. Описатв фуикцика которая ВЫЛСЛЯСТ ' дииамиисской ИВМЯТИ МССТО Под ЦСЛОИВСЛСЦИуКЗ МВТРиЦу размера и к и. Функция Возвраизает указатель иа матрицу или и,и ы сели Выделитв памятв иужиого размера ие удалосы уже упомииалосв В стацдарте г'и-((9 для з гого Обьи1ио ВылслЯлсЯ спл01ииОЙ у'част'ок памЯти.