Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Примеры бесконечных циклов






y: =0; i: =1;

while i< =n do y: =y+1/i; i: =i+1;

while true do < оператор>

{Вычислить площадь под параболой f(x)=x2 от a=0 до b=10 по формуле трапеции S=h*[f(a)/2+f(a+h)+f(a+2*h)+...+f(b-h)+f(b)/2], где h=(b-a)/n }

 

h: =(b-a)/n;

S: =h*(a*a+b*b)/2;

x: =a;

repeat

x: =x+h;

S: =S+x*x*h

until x=b-h; {Нужно x> =b-h, иначе равенство может и не выполниться}

 

Тема 6. ПРОГРАММИРОВАНИЕ ВВОДА-ВЫВОДА МАССИВОВ. СТРОКОВЫЕ ДАННЫЕ. БИБЛИОТЕКА СТАНДАРТНЫХ ПОДПРОГРАММ. (1 часа)

План лекции 8:

1. Программирование обработки числовых массивов

2. Задачи упорядочения компонент массивов.

3. Ввода-вывод строковых данных.

4. Программирование задач обработки сим­вольных данных.

5. Использование библиотеки подпрограмм для решения задач.

 

Элемент массива считается переменной:

· он может получать значения (например, в операторе присваивания);

· он может участвовать в выражениях там, где может присутствовать переменная данного типа.

Напечатать матрицу построчно.

for i: =1 to n do

begin

for j: =1 to m do

write(s[i, j], ' ');

writeln

end;

Строковый тип обобщает понятие символьных массивов, позволяя динамически менять длину строки.

Строковый тип данных определяет множество символьных цепочек произвольной длины от нуля символов до заданного их числа.

< описание строкового типа>:: =

string | string[< максимальная длина строки> ]

Максимальная длина строки, если не указана, то подразумевается равной 255, иначе может быть любое целое от 0 до 255.

Пример:

type

line=string[80];

var

myLine: line;

myLineShort: string[10];

Описание

Var St: string[80];

резервирует для St 81 байт памяти. Если учесть, что на каждый символ отводится один байт, возникает естественный вопрос, а откуда взялся еще один байт, 81-й, а точнее, нулевой байт? Дело в том, что после того как переменной St присвоено какое-то значение, нулевой байт содержит фактическую длину строки St. Длина строки в байтах при этом равна значению кода символа, находящегося в St[0].

Например, присваивание

St: = ‘abcdefgh’;

дает такой результат:

 

St[0] = Chr(8).

St[1] = ‘a’.

St[8] = ‘h’.

Фактическая длина строковой переменной St равна Ord(St[0]). Значение 255 для верхнего предела длины строки объясняется тем, что одиночный байт может принимать 256 различных значений от 0 до 255.

Символьный массив, в отличие от строки, может быть очень большим!

Операция конкатенации (сцепления) применяется для соединения (сцепления) нескольких строк в одну результирующую строкуНапример, выражение 'Т ' + 'у' + 'р' + +'бо' + 'паскаль' дает 'Турбо паскаль'.

Пример:

myLine: ='Короткая строка'; {длина 15}

myLine: =MyLine+' стала длинее'; {длина 28}

myLine: =''; {длина 0}

Операции сравнения =, < >, >, <, > =, < =

При сравнении строк используется лексикографический порядок:

а) сравнение строк производится с первых символов (слева направо) до первого несовпадающего символа, и та строка считается больше, в которой первый несовпадающий символ больше;

б) если строки имеют различную длину и одна строка полностью входит во вторую, то более короткая строка меньше, чем более длинная.

Пример:

'abcd'> ='abc'

'abcde'> 'aacde'> 'aacdd'

Элементы строки нумеруются целыми числами, начиная с 1.

Строковые выражения могут использоваться там, где используется строковый тип. В операторах присваивания, если значение переменной после выполнения присваивания превышает по длине максимально допустимую величину, то все лишние символы отбрасываются! значение

a: string[6] a: ='группа 1'; 'группа'

a: string[8] a: ='группа 1'; 'группа 1'

a: string[2] a: ='группа 1'; 'гр'

Стандартная функция Length(< выражение строкового типа>). Значение функции есть текущая длина строки – фактического параметра.

Пример:

var myLine: string;

i: integer;

.....

for i: =1 to Length(myLine) do

myLine[i]: =chr(ord(myline[i])+1);

 

Нет полной идентичности между строковыми типами и символьными массивами, поэтому возможна ошибка при работе с элементами строки без учета ее текущей длины.

Пример:

var

str: string[26];

i: integer;

begin

str: ='A';

for i: =1 to 26 do

str[i]: =chr(ord('A')+i-1);

writeln(str)

end.

Предполагается, что данная программа сформирует строку из 26 букв латинского алфавита, но печать writeln(str) дает просто A! Объяснение: присваивание значений элементам строки не влияет на ее текущую длину (здесь текущая длина = 1).

Правильная программа:

var

str: string[26];

i: integer;

begin

str: ='';

for i: =1 to 26 do

str: =str+chr(ord('A')+i-1);

writeln(str)

end.

Стандартные процедуры и функции для работы со строковыми типами

Процедура

delete(var St: string; Poz: integer; N: integer)

производит удаление N символов строки St, начиная с позиции Poz. Если Poz> 255, то осуществляется программное прерывание.

St: ='abcdef';

delete(St, 4, 2);

writeln(St); ====> abcf

St: ='река Волга';

delete(St, 1, 5);

writeln(St); ====> Волга

Процедура

insert(Source: string; var S: string; Index: integer)

осуществляет вставку строки Source в строку S, начиная с позиции Index.

S: ='Золотойключик';

insert(' ', S, 8);

writeln(S); =====> Золотой ключик

Функция copy(S: string; Index: integer; Count: integer): string

Функция выделяет из строки S подстроку длиной Count символов, начиная с позиции Index.

Если Index > length(S), то возвращается пустая строка.

Если Count+Index > length(S), то возвращается конец строки.

Если Index > 255, то диагностируется ошибка при выполнении.

copy('abcdefg', 2, 3)='bcd'

copy('abcdefg', 4, 10)='defg'

Функция

concat(S1, S2,..., SN: string): string

производит соединение последовательности строк, эта функция равносильна операции конкатенации +.

Функция

pos(Substr: string; S: string): integer

обнаруживает первое появление в строке S подстроки Substr. Результат равен номеру той позиции, где начинается подстрока Substr. Если подстроки нет, то результат равен 0.

pos('de', 'abcdef')=4

pos('z', 'abcdef')=0

Имеются две процедуры преобразования числовых значений в строковые и наоборот: Str и Val. Процедура Str при обращени к ней вида

Str(num, strnum);

где num – значение числового типа, а strnum – переменная строкового типа, присваивает переменной strnum строковое значение. Процедура Val выполняет обратное преобразование. Обращение к ней имеет вид:

Val(strnum, num, errcode);

Третий параметр в этой процедуре равен нулю при успешном выполнении преобразования. В том случае, когда первый параметр содержит символы, недопустимые при записи числа, значение параметра errcode равно номеру позиции с ошибочно заданным символом.

Пример использования процедур Str и Val дается ниже:

var

i, errcode: Integer;

S: String;

begin

Str(2000, S);

Writeln('Строковое значение ', S);

Readln;

Val(S, i, errcode);

If errcode < > 0 then

Writeln('Ошибка ввода в позиции: ', errcode)

else

Writeln('Числовое значение = ', i);

Readln;

End.

В этом примере вначале выполняется преобразование целочисленного значения 2000 в строковое (обращение к процедуре Str), а затем, наоборот, строка символов «2000» преобразуется в значение типа Integer (процедура Val).

 

 

Тема 7. ПОДПРОГРАММЫ, ИХ КЛАССИФИКАЦИЯ. (1 часа)

План лекции 9:

1. Способы оформления подпрограмм.

2. Обращение к подпрограммам.

3. Передача фактических параметров.

 

Интерфейс подпрограммы или, иными словами, та информация, которая «представляет» подпрограмму и достаточна для корректного ее вызова, сосредоточена в заголовке.

Синтаксически любая программа выглядит следующим образом

< необязательный заголовок программы> < блок>.

< необязательный заголовок программы>:: =

program < идентификатор>;

< блок>:: =

< описания типов, переменных, подпрограмм и т.п.>

begin < операторы> end

Два вида подпрограмм – процедуры и функции – одинаковый смысл и аналогичная структура, но различие в назначении и способе их использования.

Функции служат для определения алгоритма вычисления нового значения некоторого простого типа, и вызов функции должен быть операндом в выражении.

Процедуры служат для задания совокупности действий, направленных на изменение внешней по отношению к ним программной обстановки и, как следствие, определение новых значений переменных в программе. Вызов процедуры играет роль оператора.

Синтаксические диаграммы Пример:

Выходной параметр S у процедуры str4 имеет вещественный тип, поэтому лучшим решением является использование не процедуры, а функции.

var AB, BC, CD, AD, BD: real;

function str4(a, b, c: real): real;

{функция вычисляет площадь треугольника со сторонами a, b и c} var p: real;

begin p: =(a+b+c)/2;

S: =sqrt(p*(p-a)*(p-b)*(p-c)) end;

begin read(AB, BC, CD, AD, BD);

writeln('площадь=', str4(AB, AD, BD)+str4(BC, CD, BD)); end.

Имеются два различных способа передачи фактических параметров в подпрограммы. Если в описании формального параметра ему предшествует var, то этот способ называется передачей параметра по ссылке, а сам параметр называется параметром-переменной. Если var отсутствует, то такой параметр называется параметром-значением, а способ – передачей параметра по значению.






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.