ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 16.03.2025
Просмотров: 707
Скачиваний: 1
СОДЕРЖАНИЕ
11) Структурный тип строка, как специальная форма массива
10)Структурный тип строка, основы обработки строк
7)Функции: описания и вызовы функций.
8)Процедуры: описание и вызовы процедур.
6)Особенности использования параметров в процедурах и функциях.
25)Общая конструкция языка Паскаль.
24)Алфавит языка, ключевые слова, идентификаторы.
22)Стандартные типы данных, операции, выражения.
18)Композиция условий и операторов.
17) Операторы итерационных циклов.
4)Области действия имён в программах.
2)Понятие о типе Множество в Турбо Паскале.
1)Запись как объединение неоднородных данных.
27)Понятие о языках программирования.
26)Система программирования turbo pascal 7.0.
28)Аппаратное и программное обеспечение компьютера.
repeat
writeln(' Введите координаты вершин A,B,C:');
writeln('A[1] A[2] B[1] B[2] C[1] C[2] '); readln(A[1],A[2],B[1],B[2],C[1],C[2]);
writeln(' Длины сторон треугольника АВС:');d(A,B,AB);d(B,C,BC);d(A,C,AC);
writeln(' AB=', AB:2:2,' AC=', AC:2:2,' BC =', BC:2:2); readln(ch)
until ch=' ';
END {triangle1}.
6)Особенности использования параметров в процедурах и функциях.
Параметры являются основным механизмом связи процедур и функций с вызывающей подпрограммой, поэтому важно иметь возможность использовать в качестве параметров широкий класс конструкций программыПараметры-массивы. При использовании массивов в качестве параметров необходимо учитывать одно ограничение при описании формальных параметров: типом любого формального параметра может быть только либо стандартный тип, либо тип, который объявлен ранее в вызывающей подпрограмме. Это означает, что нельзя использовать описание типа array непосредственно в списке формальных параметров. Например:
procedure state(m:array [1..8] of byte); {Неправильное описание параметра m}
type byte_st = array [1..8] of byte;
. . . .
procedure state(m:byte_st); {Правильное описание параметра m}
Это ограничение, конечно, справедливо и для строк. Для строк также важно, что объявленные длины формального и фактического строкового параметра-переменной должны совпадать (это ограничение, правда, можно обойти, если отключить контроль совпадения длин строк с помощью опции компилятора {$V-}).
Нетипизированные параметры-переменные. Формальный параметр-переменная может быть описан без указания типа. Такой параметр называется нетипизированным. Соответствующий ему фактический параметр может быть переменной любого типа.
Этот случай полезен, если тип данных несущественен, например, при копировании данных из одной области памяти в другую. Нетипизированные параметры можно использовать также для передачи в подпрограммы одномерных массивов переменной длины (до 64 КБайт).
Параметры - открытые массивы. В качестве параметров подпрограмм можно использовать открытые массивы, т.е. одномерные массивы, указываемые без описания их размера (а только с указанием типа элементов). Открытые массивы позволяют передавать как параметры статические массивы любого размера.
Параметры-процедуры и параметры-функции. Процедуры и функции также могут быть параметрами других процедур или функций, что часто используется, особенно в задачах вычислительной математики. В Турбо Паскале имеется весьма гибкий механизм передачи процедур и функций в качестве параметра. Он основан на введении процедурных типов.
Процедурный тип - тип, представляющий семейство процедур или функций для их использования в программе. Как и любой тип Турбо Паскаля, процедурный тип должен быть описан, а затем может быть использован для работы с переменными процедурного типа (или константами). Описание процедурных типов имеет форму заголовка процедуры (или функции) с опущенным её именем:
type < имя процедуры-типа> = procedure ( <список формальных параметров>);
type < имя функции-типа> = function( <список формальных параметров>):<тип>;
Например: type fun =function (x:real):real;
При описании подпрограммы с процедурными параметрами такие параметры указываются формальным именем и соответствующим процедурным типом.
Пример процедуры, использующей описанный выше процедурный тип fun:
procedure print_f (n:byte; f:fun);
const count = 20;
var X:real; j:integer;
begin window(n, 1, n+20, 25);
for j:=1 to count do begin X:=j*(2*pi/count);writeln(X:5:3, f(x):5:5) end
end {print_f};
В программе, где описаны процедурные типы, могут быть объявлены переменные этих типов, которым можно присваивать имена соответствующих подпрограмм, описанных в данной программе, либо эти имена можно использовать как константы при вызове подпрограмм с процедурными параметрами. Стандартные процедуры и функции нельзя непосредственно передавать таким способом, но их можно "подменить" подпрограммами с другими именами, как показано в следующем примере программы на Турбо Паскале:
program grid_functions; { Печать таблицы значений 2-х функций }
uses CRT;
type fun =function (x:real):real;
function sint(x:real):real; {функция sin(x) }
begin sint:=sin(x)
end {sint};
function expcos(x:real); {функция (cos(x)+1)*exp(-x)}
begin expcos:= (cos(x)+1)*exp(-x)
end {expcos};
procedure print_f (n:byte; f:fun); { печать значений функции f}
const count = 20;
var X:real; j:integer;
begin window(n, 1, n+20, 25);
for j:=1 to count do begin X:=j*(2*pi/count);writeln(X:5:3, f(x):5:5) end
end {print_f};
BEGIN { Основная программа } ClrScr;
print_f(1, sint); writeln;
print_f(30, expcos);writeln
END { grid_functions}.
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.
25)Общая конструкция языка Паскаль.
Язык Паскаль в его современном воплощении -это весьма мощный язык, содержащий многие десятки различных и весьма полезных конструкций. Одним из фундаментальных свойств Паскаля является его сильная типизация. Это означает, что каждый элемент обрабатываемых данных жёстко связан с соответствующим типом данных, т.е. каждый элемент данных имеет один и только один тип, а каждая операция имеет фиксированные типы для своих операндов и результата. Типизация данных помогает контролировать (в том числе автоматически) многие ошибки в данных и операциях, оптимально распределять память, что упрощает создание высокоэффективных трансляторов. Не все языки программирования поддерживают сильную типизацию (например, Basic, C её игнорируют). Для того чтобы использовать преимущества, которые даёт сильная типизация, необходимо в программе описывать все вводимые программистом имена обрабатываемых структур данных и других объектов до того, как они используются в процессах обработки. Для этого в структуре программы предусмотрен раздел описаний. Транслятор Паскаля устроен таким образом, что он не позволяет использовать данные, которые предварительно неописаны.Другой важной стороной типизации является наличие в Паскале развитого механизма создания новых типов самим программистом, что также отличает Паскаль от многих других языков. Собственно этот механизм является сердцевиной Паскаля, обеспечивая чрезвычайную гибкость языка. Паскаль имеет хорошо структурированные средства для композиции и декомпозиции алгоритмических действий (операций и операторов). Всё это упрощает разработку программ на Паскале, делая её удобной и доступной для программирования практически любых задач.Но для программирования необходимо овладеть основами языка и методики разработки программ. Необходимо научиться "читать" программы (понимая смысл написанного!), а затем и "писать" собственные (пусть вначале и несложные) программы. Паскаль, как язык программирования, - это язык записи действий (алгоритмов и структур данных). Каждой его конструкции приписывается однозначный смысл, а правила записи конструкций во многом сходны с императивами (командами, указаниями, инструкциями) естественного языка. При чтении программ на Паскале ключевым принципом является принцип программного управления. Важно помнить, что за исключением описаний каждая законченная конструкция программы - это оператор, представляющий некоторое алгоритмическое действие. Операторы отделяются друг от друга точкой с запятой (в специальных случаях этот разделитель может опускаться) и выполняются в той последовательности, в которой они записаны (если сам оператор не изменяет эту последовательность). Операторы обрабатывают данные, размещенные в памяти компьютера и идентифицируемые по именам. По сути, операторы и имена - это та модификация, которую претерпел программный принцип управления при переходе от машинного языка к языку программирования высокого уровня. Можно считать, что оператор - это аналог команды, а имя - аналог адреса памяти. Конечно, отличие имеется и в том, что состав возможных операций резко расширен по сравнению с машинным языком и приближен по форме к их выражению на естественном языке.