Главная » Просмотр файлов » Основы программирования

Основы программирования (947332), страница 28

Файл №947332 Основы программирования (Иванова Г.С. Основы программирования) 28 страницаОсновы программирования (947332) страница 282013-09-15СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 28)

7] ofinteger=((], J, /, 7,1),(2X2X2).(3X3,3,3));Var i:integer;Beginfor i:=Low(a) to Higlt(a) do WriteLn(sum(a[i]));end.Примечание. Обратите внимание, что допустимо лередавать в подпрограмму строку ма­трицы как одномерный массив, указав ее номер - a[i].В том случае, если необходимо разработать универсальную подпрограм­му с параметрами - многомерными массивами, следует применять нетипизированные параметры (см. параграф 5.5).Проблема разработки универсальных подпрограмм существует и длястрок.По правилам Borland Pascal, если строка передается в подпрограмму какпараметр-значение, то длина ее не контролируется. Контроль длины осуще­ствляется только для строк, передаваемых в подпрограмму как параметр-пе­ременная. Поэтому при написании универсальных подпрограмм, работаю­щих со строками произвольного размера, необходимо включать режим от­крытых строк {$Р+} или объявлять параметры-строки как openstring.Пример 5.7.

Разработать программу, которая формирует строку, содер­жащую буквы латинского алфавита.Для решения задачи будем использовать процедуру, которая добавляет кстроке символ, номер которого на единицу превышает номер последнегосимвола:Unit Stroka;InterfaceProcedure Add(var s: openstring);161Часть L Основы алгоритмизации и процедурное программированиеImplementationProcedure Add;begins:=^s+chr(succ(Ord(s[length(s)J)));end;EndПараметр s должен передаваться как открытая строка, так как в против­ном случае при попытке использовать процедуру в программе мы получимсообщение о том, что типы формального и фактического параметров не сов­падают (Error 26: Туре mismatch).Program ex;Uses Stroka;Var S:string[26]; i:integer;Begins:^'A\for i: =2 to 26 do Add(s);WriteLn(s);EndУвеличить область применения подпрограмм позволяет также использо­вание нетипизированных параметров и параметров процедурного типа.Задания для самопроверкиЗадание 1.

Разработайте универсальную подпрограмму, удаляющую из масси­ва элемент, номер которого передается в списке параметров. Поместите подпрофамму в модуль. Разработайте тестирующую программу.Задание 2. Разработайте универсальную подпрофамму, которая сортирует сло­ва строки по алфавиту. Слова в строке разделены одним пробелом. Поместите под­программу в модуль. Разработайте тестирующую программу.5.5.

Нетипизированные параметрыВ Borland Pascal допускается использовать параметры, тип которых неуказан. Такие параметры могут передаваться в подпрограмму только поссылке (как параметры-переменные), так как в этом случае в подпрограммуреально передается адрес параметра.Безусловно, для того чтобы подпрограмма могла выполнять какие-либодействия с этим параметром, она должна как-то назначить ему тип.Для приведения нетипизированного параметра к определенному типуможно использовать:1625. Модульное программирование• автоопределенное преобразование типов;• наложенное описание переменной определенного типа.При автоопределенном преобразовании типов тип выражения указыва­ют явно (см.

параграф 2.5), например:Procedure Proc(Var:a);......b:=Integer(a)-^IO;,..Для наложения переменной определенного типа используют описание сabsolute (см. параграф 2.3), например:Procedure Proc(Var:a);...Var r:real absolute a;...При этом переменная г оказывается в памяти размещенной в том же ме­сте, что и нетипизированный параметр а, и, соответственно, любое измене­ние г приведет к изменению а.Пример 5.8.

Разработать подпрограмму, которая может суммировать какэлементы массива целых чисел, так и элементы массива вещественных чи­сел.Тип массива подпрограмма будет определять по значению третьего па­раметра, для которого объявим специальный перечисляемый тип. В разделеописаний подпрограммы определим шаблоны для каждого случая. Шаблонпредставляет собой описание массива соответствующего типа максимальновозможного размера 64 Кб/<размер элемента>. Оба шаблону наложены поадресу нетипизированного параметра. Если значение третьего параметраподпрограммы treal, то используется шаблон mr, а если tinteger - шаблон mi.Unit Summa4;InterfaceType ttype=(treal, tinteger); {описание типа третьего параметра}Function sumfvar x;n:integer;t:ttype).real;ImplementationFunction sum;Var mr:array[L.maxint*2 div sizeof(real)] of real absolute x;mi: array[L.maxint^l div sizeof(integer)] of integer absolute x;s:real;i:integer;begin s:=0;if t=treal thenfor i:-I to n do s:=s+mr[ijelse for i:=I to n do s:-s+mifij;sum:=s;end;End163Часть I.

Основы алгоритмизации и процедурное программированиеТестирующая программа вызывает одну и ту же функцию для суммиро­вания массивов с разным типом элементов.Program ex;Uses Summa4;Var a:array[L.10] of integer;b:array[L.15] of real;i,n; integer;Beginfor i;=l to 10 do Read(a[iJ); ReadLn;WriteLnCCyMMa= \stim(a,10,tintegerJ:8:J);for i:=l to J 5 do Read(b[i]); ReadLn;WriteLn('CyMMa= \sum(b, 15jreal):8:l);end.Примечание. Вместо описания массива максимально возможного размера в подпрограм­ме можно описать массив длиной 1 элемент, но при работе с таким шаблоном необходимо от­ключать контроль индексов {$R-}.Нетипизированные параметры можно применить для написания универ­сальных подпрограмм, использующих в качестве параметров многомерныемассивы.

Поскольку невозможно в подпрограмме определить универсаль­ный шаблон многомерного массива, приходится обрабатывать многомерныймассив как одномерный, учитывая то, что элементы многомерных массивовв памяти располагаются так, что чем правее индекс, тем быстрее он воз­растает. Так, элементы трехмерного массива В(2,3,2) будут расположены впамяти в следующем порядке:bl,l,l' ^^1,1,2' bi,2,i, b | 2,2^ b] 3,1, b] 3 2, b 2 | j , ^2,\,b ^2,2,1' ^2,2,2^ Ь2Д1, Ь2зд.Пример 5.9.

Разработать универсальную подпрограмму транспонирова­ния матрицы.На рис. 5.9 показано, как в матрице А(Р,Р) расположены элементы реаль­ной матрицы размером пхп, где п<Р, и, соответственно, как те же элементырасположены в памяти.Таким образом, в одномерном массиве элемент с индексами i и j имеетиндекс (i-l)*P+j, т.е. индекс этого элемента зависит от размера строки заре­зервированной матрицы. В подпрограмму это значение передается через па­раметр Р.Чтобы транспонировать матрицу, меняем местами элементы, располо­женные ниже и выше главной диагонали.Примечание.

При разработке алгоритма процедуры учтено, что при транспонированииматрицы по аналогии с переворотом строки количество перестановок равно п*п div 2. Есливыполнить п*п перестановок, то матрица примет исходный вид, так как будет транспонирова­на дважды.1645. Модульное программирование1-я строкаи т.д.пНеопределенныеэлементыНеопределенныеэлементыРис. 5.9. Матрица А(Р,Р) {а) и ее внутреннее представление {б)Unit Matrica;InterfaceProcedure tran(Var x;n,P:integer);ImplementationProcedure tran;Var a:array[1..2*maxint div sizeof(real)] of real absolute x;ij: integer;t.real;beginfor i:=2 to n doforj:=l to i-I dobegin t: =a[(i-l) ''P+jJ;af(i-l) *P+jJ: =afO'l) *P+i];a[0'l)''P+i]:=t;end;end;End.Тестирующая программа выглядит следующим образом:Program ex;Uses Matrica;Var a:array[L .10J,.

10] of real;ij.'integer;BeginWriteLnCВведите матрицу a(5 *5);');for i:=l to 5 dobeginfor j:=l to 5 do Read(a[i,j]);ReadLn;end;165Часть I. Основы алгоритмизации и процедурное программированиеtran(a,5,10);WriteLn('Результат: *);for i:-l to 5 dobeginforj:=l to 5 do Write(a[iJ]:6:2);WriteLn;end;EndЗадания для самопроверкиЗадание 1. Разработайте универсальную подпрограмму, определяющую сред­нее арифметическое элементов матрицы размером nxm элементов.

Поместите подпрофамму в модуль. Разработайте тестирующую программуЗадание 2. Разработайте универсальную подпрограмму, удаляющую из матри­цы размером nxm заданную строку и столбец. Поместите подпрограмму в модуль.Разработайте тестирующую программу.5.6. Параметры процедурного типаПараметры процедурного типа используют тогда, когда нужно передатьв подпрограмму имена процедур и функций.Для объявления процедурного типа используют заголовок подпрограм­мы, в котором отсутствует имя, например:Туре proc=procedure (a,b,c:real;Var d:real):func=function(x: real): real;Значениями переменных процедурных типов являются идентификаторыпроцедур и функций с соответствующими заголовками:Var f:func;/:фп1;...Процедуры или функции, идентификаторы которых будут передаватьсяв качестве параметров процедурного типа, по правилам языка необходимокомпилировать в режиме дальнего вызова (с указанием директивы компиля­тора {$Р+}или служебного слова far).

В этом режиме при вызове подпро­грамм используются длинные 4-байтовые адреса (см. параграф 7.1) в отли­чие от коротких 2-байтовых адресов, которые применяются для адресацииподпрограмм, объявленных в основной программе или ее подпрограммах.1665. МодульноепрограммированиеПримечания: 1. Если процедуры или функции описываются в интерфейсной части моду­ля (см. параграф 5.2), то по умолчанию они вызываются в режиме дальнего вызова, поэтомуспециально это оговаривать не надо.2. Стандартные процедуры и функции, описанные в модуле System, по умолчанию явля­ются функциями ближнего вызова.

Характеристики

Тип файла
PDF-файл
Размер
13,06 Mb
Тип материала
Учебное заведение
Неизвестно

Список файлов книги

Свежие статьи
Популярно сейчас
Как Вы думаете, сколько людей до Вас делали точно такое же задание? 99% студентов выполняют точно такие же задания, как и их предшественники год назад. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6353
Авторов
на СтудИзбе
311
Средний доход
с одного платного файла
Обучение Подробнее