Ввод/вывод данных

В стандартном Паскале для целей ввода данных с клавиатуры и вывода результатов на экран существуют специальные команды ввода/вывода – read и write, которые актуальны при работе в среде DOS. Под ОС Windows необходимо пользоваться визуальными компонентами Delphi такими как Edit – поле редактирования и Label – текстовое поле из палитры системных компонент.

Свойство Caption компонента Label и Text компонента Edit (типа string) доступны из программы для записи и чтения, поэтому если выполнить команду:

Label1.Caption:= ‘Это вывод строки текста’;

то в месте размещения компонента Label1 на форме мы увидим текст: “ Это вывод строки текста ”. Таким образом, если необходимо вывести числовые результаты работы программы можно воспользоваться визуальным компонентом текстовое поле и соответствующей функцией преобразования числового значения в строку символов. Например, если переменная а – integer, то команда вывода будет выглядеть следующим образом:

Label1.Caption:= IntToStr(a); // преобразование к строковому типу

Если b – real, то используем функцию FloatToStr(b);

В отличии от тестового поля компонент Edit позволяет пользователю программы набирать данные в поле Text. Но с учетом того, что свойство Edit.Text имеет тип string, числовые данные надо преобразовывать к соответствующему типу:

Var a: integer; b: real;

begin

a:= strtoint(Edit1.text); // преобразование к целому типу

b:= strtofloat(Edit2.text); // преобразование к вещественному типу

end;

3.6. Ветвления

Логическое выражение — это способ записи на языке программирования условий для поиска необходимых данных. Логи­ческое выражение может принимать значения true (истина) или false (ложь). Логические выражения бывают простые и сложные. Простое выражение — это два арифметических выражения, соеди­ненных символом отношения, а сложное — это простые логиче­ские выражения, соединенные логическими операциями not, and или or. Приоритет выполнения логических операций такой:

1- not, 2 - and, 3 - or

Двойное неравенство 1 < х < 5 как сложное логическое выра­жение записывают так: (1 < х) and (x < 5). Совокупность нера­венств вида х < 1; х > 5 так: (х < 1) or (x > 5). Простые логиче­ские выражения, из которых состоят сложные, всегда берут в круглые скобки.

Команда ветвления if. Команду ветвления if иначе называ­ют условной командой. Она имеет две формы: полную и корот­кую.

Полная форма команды ветвления выглядит так:

If <логическое выражение> then <оператор 1> else < оператор 2>;

Действие команды. Если логическое выражение истинно, то выполняется оператор 1, в противном случае - оператор 2. Операторы 1 и 2 могут быть простыми или составными.

Пример: if a>0 then x:=a*b else X:=0;

Короткая форма команды ветвления if выглядит так:

If <логическое выражение> then < оператор 1>;

Действие команды. Оператор 1 выполняется только тогда когда логическое выражение истинно.

Пример. Пусть х=20.

if х > 12 then у:= 2 * х;

z:= 10;

if x < 5 then z:= 10 + x / 2;

Результат: y = 40, z = 10.

Другие команды ветвления: GOTO, CASE.

Вопросы для самопроверки:

1.Опишите действие команд GOTO и CASE

2. Запишите условный оператор, который эквивалентен следующему оператору присваивания: X:= a or b and c;

3. Дайте определение пустого оператора; примеры.

4. Задача: необходимо значения переменных а, b и с поменять местами так, чтобы выполнялось условие a ≥ b ≥ c.

3.7. Циклы

Цикл это выполнение определенного набора команд некото­рое количество раз. Различают три вида команд циклов: с пара­метром, с предусловием и с после условием.

Команда цикла с параметром (for). В языке программиро­вания Паскаль есть два вида команды for. Рассмотрим первый

For < параметр >: = <выражение 1> to < выражение 2> do < оператор 1>;

Параметр – это переменная целого, символьного, логического или перечислимого типов, а выражения 1 и 2 задают начальное и конечное значения параметра.

Действие команды. Параметру цикла присваивается значение вы­ражения 1. Если оно меньше (равно), чем значение выражения 2, то выполняется оператор 1. После этого значение параметра автома­тически увеличивается на единицу, и оно снова сравнивается со значением выражения 2 и т. д. Когда значение параметра станет больше, чем значение выражения 2, то выполняется следующий после цикла оператор.

Пример.Пусть s = 0.После выполнения команды

for i:= 4 to 6 do begins:= s + i; z:= 2 * i end;

переменная s получит значение 0+4+5+6=15, а переменная z -12.

Рассмотрим второй вид команды цикла for:

for <параметр>:= <выражение 1> downto <выражение 2> do <оператор 1>;

Эта команда действует, как и предыдущая, но шаг изменения параметра равен -1.

Значение параметра в середине цикла изменять нельзя!

Команда цикла с предусловием (while). Команда while вы­глядит так:

while <логическое выражение> do <оператор 1>;

Действие команды. Пока значение логического выражения ис­тинно, выполняется оператор 1. Истинность логического выражения определяет условие продолжения цикла.

Пример. Пусть переменные х, s равны х = 4, s = 0. После вы­полнения команды

while х <= 8 do begin s:= s + x; x:= x + 1 end;

они получат значения s=4+5+6+7+8= 30, x = 9.

Вопросы для самопроверки:

1.Вычислите x = 10! (факториал) с помощью трех различных операторов цикла.

2. Дано 100 вещественных чисел. Вычислить разность между максимальным и минимальным из них.

3. Вычислить S- сумму порядковых номеров всех букв, входящих в слово «Delphi»; в слово, введенное пользователем.

4. Подсчитать k-количество цифр в десятичной записи целого неотрицательного числа n.

3.8. Массивы

Массив (array) - это конечный набор элементов одного (ба­зового) типа, которые сохраняются в последовательно размещён­ных ячейках оперативной памяти и имеют общее имя.

В математике понятию массив соответствуют понятия вектора и матрицы. Различают одно- и многомерные массивы. Двумерный массив данных — это таблица, которая состоит из нескольких строк.

Общий вид конструкции описания типа массива такой:

array [<размер>] of <имя базового типа>;

Размер (количество элементов) массива чаще всего задают в виде диапазона или именем некоторого перечислимого типа дан­ных.

Описать массив можно в разделе описания типов type,в разде­ле констант constили в разделе объявления переменных var.Имена типов массивов и переменных-массивов указывает пользо­ватель.

Пример.Опишем тип массива mymas, объявим постоянный массив (массив-константу) zatraty типа mymas и переменные — массивы A, al типа mymas и массив B, состоящий из 7 элемен­тов целого типа, массив C — из 100 элементов-символов.

type mymas = array [1..10] of real;

day = (mon, tue, wed, the, fri, sat, sun);

const zatraty: mymas =(1.2, 1, 1, 2, 8, 2.4, 8.7, 3, 7, 1.3);

var a, al: mymas;

b: array[day] of integer;

с: array [1..100] of char;

Над массивами определена единственная команда присваива­ния. Например, команда а:= al все значения массива al присвоит соответствующим элементам массива а. Все остальные опера­ции определены только над элементами массива. Доступ к элементам массива осуществляется так:

<имя массива> [ <номер элемента> ]

Номер (его часто называют индексом) записывают в квадрат­ных скобках, например, а[1] - первый элемент массива a, b[tue] -второй элемент массива B.

Пример.Элементам описанных выше массивов можно присво­ить значения так:

а[1]:= 15.1;b[tue]:= 3; с[1]:= ‘V’; с[2]:= ‘b’

Элементы массива zatraty имеют такие значения:

zatraty[l] = 1.2; zatraty[2] = 1;...; zatraty[10] =1.3.

Пример.Создать массив из первых ста положительных целых чисел и вычислить сумму всех его элементов (5050) можно так:

s:= 0;

for i:= 1 to 100 do

Begin

a[i]:= i;

s:= s + a[i]

end;

label1.caption:=inttostr(s);

Задачи поиска в массиве конкретных данных решают методом сканирования всех элементов массива при помощи команд цикла for, while или repeat и команды ветвления, в которой указывают условие поиска.

Двумерные массивы. Двумерные массивы предназначены для работы с табличными данными. В двумерном массиве элемен­ты определяются именем массива и двумя индексами: первый ин­декс указывает на номер строки, а второй - на номер столбца, на пересечении которых находится элемент. Например, р[1, 2] - вто­рой элемент первой строки массива р.

Рассмотрим примеры объявления массива-константы bal, кото­рый состоит из 2 строк и 4 столбцов, массива sutki, содержащего 24 строки по 60 элементов целого типа, двухмерного массива р размером 9 на 9 (т.е. с 9*9=81 элементом).

const n = 9;

bal: array [1..2, 1..4] of integer=((4, 3, 5, 3), (4, 4, 5, 3));

var sutki: array [0..23] of array [0..59] of integer;

p: array [l..n, l..n] of integer;

Элементы массива bal принимают такие значения:

bal[l, 1] = 4, bal[l, 2] = 3,..., bal[2, 3] - 5, bal[2, 4] = 3.

Равносильны следующие команды:

sutki[16][20]:=5; и sutki[16,20]:=5;

Вопросы для самопроверки:

1. Может ли массив содержать один элемент? А ни одного?

2. Можно ли во время выполнения программы изменять размер массива (количество элементов в нем)?

3. Приведите пример инициализации двумерного массива -константы.

4. Какие из приведенных операций допустимы в Паскале, если дано такое объявление переменных:

var A,B: array[1..15,0..8] of real; t: Boolean;?

а) A:= B; б) A:= A + B; в) t:= A <> B; г) A[1]:= B[1]; д) A[1]:= A[15];

е) A[2,3]:= B[4][8] + B[1,1];

3.9. Подпрограммы

Понятие о структурном программировании. Структурное программирование – методология разработки программного обеспечения, в соответствии с которой любая программа представляет собой структуру, построенную из трёх типов базовых конструкций:

  • последовательное исполнение — однократное выполнение операций в том порядке, в котором они записаны в тексте программы;
  • ветвление — однократное выполнение одной из двух или более операций, в зависимости от выполнения некоторого заданного условия;
  • цикл — многократное исполнение одной и той же операции до тех пор, пока выполняется некоторое заданное условие (условие продолжения цикла).

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

Разработка программы ведётся пошагово, методом "сверху вниз". Сначала пишется текст основной программы, в котором вместо каждого связного логического фрагмента текста вставляется вызов подпрограммы, которая будет выполнять этот фрагмент. Вместо настоящих, работающих подпрограмм, в программу вставляются "заглушки", которые ничего не делают. Полученная программа проверяется и отлаживается. После того, как программист убедится, что подпрограммы вызываются в требуемой последовательности (то есть общая структура программы верна), подпрограммы - "заглушки" последовательно заменяются на реально работающие, причём разработка каждой подпрограммы ведётся тем же методом, что и основной программы. Разработка заканчивается тогда, когда не останется ни одной "заглушки", которая не была бы удалена. Такая последовательность гарантирует, что на каждом этапе разработки программист одновременно имеет дело с обозримым и понятным ему множеством фрагментов и может быть уверен, что общая структура всех более высоких уровней программы верна. При сопровождении и внесении изменений в программу выясняется, в какие именно процедуры нужно внести изменения, и они вносятся, не затрагивая непосредственно не связанные с ними части программы. Это позволяет гарантировать, что при внесении изменений и исправлении ошибок не выйдет из строя какая-то часть программы, находящаяся в данный момент вне зоны внимания программиста.

Процедуры и функции. В языке Паскаль имеется два вида подпрограмм - процедуры и функции. Синтаксическая структура и смысл обоих видов подпрограмм аналогичен, но назначение и способы их использования различны. Процедуры служат для задания совокупности действий, направленных выполнение внешних или внутренних программных изменений. Например, в процедуре можно определить последовательность действий при возникновении какого-либо события (нажатие кнопки). Функции содержат алгоритмы вычисления некоторого нового значения.

Описание подпрограммы в общем случае состоит из трех частей:

- заголовок (интерфейс), позволяющий выполнить активизацию подпрограммы;

- локальное описание, содержащее объявление внутренних (рабочих) типов, объектов и переменных;

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

Или другими словами заголовок содержит информацию о том, что делает подпрограмм, а тело – описывает, как она это делает.

Общий вид процедуры:

Procedure <имя> ( <список формальных параметров> ); [<директивы >];

<локальное описание >;

Begin

<тело процедуры>

end;

Функцию описывают так:

Function <имя> ( <список формальных параметров> ): <тип функции>;[<директивы>];

< локальное описание >;

Begin

<тело процедуры, содержащее хотя бы одну команду вида:

имя:= выражение >

end;

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

В Object Pascal существует два способа передачи параметров в подпрограмму: по значению и по имени.

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

В локальном описании могут быть реализованы необходимые локальные подпрограммы, которые, как и прочие локальные описания могут быть использованы только в подпрограмме, где она объявлена. Уровень вложенности подпрограмм не ограничен.

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

Вызов подпрограммы может быть осуществлен из любого места программы. Для вызова достаточно указать имя (идентификатор) подпрограммы и перечислить в соответствующем порядке фактические параметры. Например, вызов процедуры с двумя целочисленными параметрами может быть таким:

MyProc(3, 6);

А функции:

X:= Myfunc(3, 6);

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

Вопросы для самопроверки:

1. Даны три натуральных числа. Напишите функцию определения наибольшего делителя.

2. В чем отличия передачи аргументов в подпрограмму по имени и по значению.

3. Как в списке формальных параметров можно задать значения по умолчанию?


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: