- •Билет №3. Особенности разработки программы с подпрограммой.
- •Билет №10. Структурный тип строка. Основы обработки строк.
- •Insert(subst, st, Npos) -вставка в строку st подстроки subst с позиции Npos.
- •Билет №13.Структурный тип маcсив. Описание мас и доступ к эл мас.
- •Var m1,m2: measure; {переменные-массивы измерений}
- •Var mt1,mt2: matr; {переменные типа matr}
Билет №3. Особенности разработки программы с подпрограммой.
Практически все используемые прикладные программы - это программы с подпрограммами (процедурами и функциями). Подпрограммы, как уже указывалось, позволяют преодолевать сложность, обеспечивая декомпозицию программы на более простые составные части. Разработка программ на Турбо-Паскале с подпрограммами имеет ряд отличий от той методики, которая изложена выше применительно с простым программам. Эти отличия касаются как этапа разработки проекта, так и разработки алгоритма задачи. Остановимся на них несколько более детально.
При разработке проекта программы с подпрограммами обычно определяется и состав основных подпрограмм, предполагаемых для использования, хотя для программ с небольшим количеством подпрограмм состав подпрограмм часто определяется на этапе разработки алгоритма. В проекте программы состав основных подпрограмм может быть указан в разделе входных и выходных переменных, предназначенном также и для описания новых типов данных, используемых в этих переменных. В остальном проект программы с подпрограммами создается также, как и для программ без подпрограмм.
При разработке алгоритма на псевдокоде для программы с подпрограммами возможны две стратегии (или их сочетание).
Первая стратегия предполагает, что состав подпрограмм определяется раньше фактического использования этих подпрограмм в разделе операторов программы. Для таких подпрограмм вначале указывается их заголовок (в разделе описаний программы), возможно с необходимыми комментариями и возможно без расшифровки реализации этих подпрограмм. Затем в разделе операторов используются вызовы этих подпрограмм. Если тела подпрограмм ещё отсутствуют, то они создаются в процессе последующих уточнений.
Вторая стратегия предполагает, что вызовы подпрограмм использованы раньше, чем появилось описание подпрограмм (даже в виде заголовка). Эта стратегия естественна для случаев, когда состав подпрограмм не определён на этапе проекта программы, и подпрограммы "зарождаются" непосредственно при создании алгоритма задачи. Использование "опережающего" вызова предполагает, что после этого будет уточнен раздел описаний и в нём будет спроектировано тело подпрограммы.Необходимо учесть также некоторые особенности проектирования подпрограмм по сравнению с обычными программами:
во-первых, заголовок подпрограммы, в отличие от заголовка программы, содержит, по сути, полную информацию о входных и выходных переменных подпрограммы в виде описания формальных параметров. Таким образом, заголовок подпрограммы выполняет функцию проекта подпрограммы, а именно разделов входных - выходных переменных и аномалий (поскольку аномалии следует отображать в виде специально предусмотренных параметров). Вся недостающая информация (например, функциональное назначение подпрограммы) может быть указана в комментариях заголовка подпрограммы.
во-вторых, многие подпрограммы непосредственно не используют операторы вывода на экран. В этих случаях нет необходимости в описании экранной формы.
Таким образом, при разработке подпрограмм во многих случаях нет необходимости в оформлении проекта подпрограммы иначе, чем в это предусмотрено в самом заголовке подпрограммы.
Методика разработки алгоритма подпрограммы не отличается от разработки алгоритма программы. Приведем пример разработки программы с функцией:
program letters; {проект}
1.Постановка задачи:
Для вводимой строки символов определить и вывести на экран все
повторяющиеся латинские буквы (не различая большие и малые буквы).
2. Входные и выходные переменные:
str: string; {входная строка}
j:char; {текущая латинская буква}
3. Аномалии:
if <отсутствуют повтор. латинские буквы> then ‘Нет повторяющихся букв’4. Экранная форма:
begin
‘Введите строку:’
<str>
‘Повторяющиеся буквы:’
[ {<j>}]
[ Нет повторяющихся букв]
end.
program letters; {0.1}
{Нахождение повторяющихся латинских букв во вводимой строке}
var str:string;j:char;alfa:Boolean;
{0* function count(s:string;k:char):byte;}
{число вхождений символа k в строку s}
BEGIN writeln('Введите строку:');readln(str); writeln('Повторяющиеся буквы:'); alfa:=true; for j:='A' to 'Z' do if count(str,j)>1 then begin write(j,' ');alfa:=false end;
if alfa then writeln('Нет повторяющихся букв');writeln;
END.
program letters;{0.2}
{Нахождение повторяющихся латинских букв во вводимой строке}
var str:string;j:char;alfa:Boolean;
function count(s:string;k:char):byte;
var c,j:byte;
begin c:=0;for j:=1 to length(s) do
if upcase(s[j])=k then c:=c+1;count:=c
end{count};
BEGIN writeln('Введите строку:');readln(str); writeln('Повторяющиеся буквы:'); alfa:=true; for j:='A' to 'Z' do if count(str,j)>1 then begin write(j,' ');alfa:=false end;
if alfa then writeln('Нет повторяющихся букв');writeln; End.