ОСНОВНЫЕ КОНСТРУКЦИИ ЯЗЫКА

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

Реализация последовательности действий (т.е. структуры следования) производится при помощи ОСНОВНЫЕ КОНСТРУКЦИИ ЯЗЫКА составного оператора:

begin end

Раздел операторов в программке всегда является составным оператором. Служебные слова begin и end нередко именуют операторными скобками.

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

Структура и действиеусловного оператора таковы:

If

then ОСНОВНЫЕ КОНСТРУКЦИИ ЯЗЫКА

else

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

Пример: составим программку, которая определяет длину общей части 2-ух отрезков числовой оси, данных координатами собственных концов соответственно а, b и с ОСНОВНЫЕ КОНСТРУКЦИИ ЯЗЫКА, d (а < b, с < d). Если отрезки имеют общую часть, то левая координата общей части отрезков m равнамаксимальному из чисел а и с, а правая n - наименьшему из чисел b и d.

Программка 3

program cross;

var a,b,c,d,m,n,l:real;

begin

writeln('введите координаты концов отрезков') ;

read(a,b ОСНОВНЫЕ КОНСТРУКЦИИ ЯЗЫКА,с,d) ;

writeln;

if a

if b

if m

writeln("длина общей части отрезков=',1:6:2)

end.

Оператор варианта имеет последующую форму:

case of

: ;

: ;

…………………………

:

end.

Выражение, стоящее меж служебными словами case и of, обязано ОСНОВНЫЕ КОНСТРУКЦИИ ЯЗЫКА иметь значение ординального типа. Хоть какой перечень констант может состоять из одной константы.

Оператор варианта вычисляет значение выражения, записанного после case. Если его значение совпадает с одной из констант в неком перечне, то производится оператор, стоящий после чего перечня. Если значение выражения не совпало ни с одной константой во ОСНОВНЫЕ КОНСТРУКЦИИ ЯЗЫКА всех вариантах, то оператор варианта ничего не делает.

В качестве примера приведем программку, которая зависимо от номера месяца выдает сообщение о времени года.

Программка 4

program seasons;

var k:integers

begin

writeln('введите номер месяца') ;

readin(k);

case k of

1,2,12:writeln('зима');

3, 4,5:writeln('весна') ;

6, 7,8:writeln('лето');

9,10,11:writeln('осень')

end

end.

Для реализации циклов в Паскале имеются ОСНОВНЫЕ КОНСТРУКЦИИ ЯЗЫКА три оператора Если число повторений понятно заблаговременно, то комфортно пользоваться оператором цикла с параметром. В других случаях следует использовать операторы цикла с предусловием (цикл «пока» ) либо с постусловием (цикл «до»).

Цикл с предусловием является более массивным в Паскале. Другие операторы цикла можно выразить через него. Его форма такая:

while ОСНОВНЫЕ КОНСТРУКЦИИ ЯЗЫКА - do

Действие: рассчитывается значение логического выражения. Если оно равно true, то производится оператор, после этого опять рассчитывается значение логического выражения, в неприятном случае действие завершается.

В качестве примера использования такового цикла решим последующую задачку. На склад привозят однородный груз на машинах различной грузоподъемности. На компьютер, управляющий работой склада ОСНОВНЫЕ КОНСТРУКЦИИ ЯЗЫКА, поступает информация о весе груза очередной машины. Составить программку подсчета количества машин,прибывшихна склад до его наполнения, если вместимость склада менее 100 тонн.

Введем обозначения: sum - сумма веса груза, лежащего в этот момент на складе; num - число разгруженных машин; w - масса груза очередной машины. Сначала величины sum и num равны нулю ОСНОВНЫЕ КОНСТРУКЦИИ ЯЗЫКА. Цикл разгрузки длится, пока производится неравенство sum < 100.

Программка 5

program store;

var sum,w:real;

num:integer;

begin

num:=0;sum:=0;

while sum<100do

begin

writeln('введите вес груза машины');

readln(w);

sum:=sum+w;

if sum<=100 then num:=num+l

else writeln('груз уже не поместится')

end;

writeln('число разгруженных машин =',num;3)

end.

Операторцикла с постусловием имеет форму ОСНОВНЫЕ КОНСТРУКЦИИ ЯЗЫКА:

repeat

until

Действие: производится последовательность операторов. Дальше рассчитывается значение логического выражения. Если оно равно true, то действие завершается, в неприятном случае опять производится последовательность операторов и т.д.

Решим предшествующую задачку, применяя цикл с постусловием. Цикл разгрузки завершается, если производится условие: sum > 100.

Программка 6

program store2;

var sum,w ОСНОВНЫЕ КОНСТРУКЦИИ ЯЗЫКА:real; man:integer;

begin

num: =0; sum: =0;

repeat

writeln('введите вес груза машины');

readln(w); sum:=sum+w;

if sum<=100 then num:=num+l .

else writeln('груз ухе не поместится')

until sum>=100;

writeln('количество разгруженных машин =',num:3)

end.

Операторцикла с параметром предугадывает повторное выполнение некого оператора с одновременным конфигурацией по правилу арифметической прогрессии ОСНОВНЫЕ КОНСТРУКЦИИ ЯЗЫКА значения управляющей переменной (параметра) этого цикла. Оператор цикла с параметром имеет две формы.

Форма1:

for := to do

Параметр, выражение 1, выражение 2 должны быть 1-го ординального типа;

Параметр в этом цикле увеличивается. Действие эквивалентно действию последующего составного оператора:

begin

:=;

while <= do

begin

;

:=suсс()

end

end.

Если в этом описании отношение = , а функцию succ на pred, то параметр ОСНОВНЫЕ КОНСТРУКЦИИ ЯЗЫКА в цикле будет убывать, в данном случае цикл с параметром воспринимает форму 2.

Форма 2:

for := downto do

Пример: составим программку, по которой будет написана таблица перевода км в мили (1 миля = 1,603 км). Параметром цикла можно считать целую величину k - количество км. Пусть данная величина меняется от 1 до 10 (с шагом ОСНОВНЫЕ КОНСТРУКЦИИ ЯЗЫКА 1, очевидно).

Программка 7

program mili;

const a=1.603;b='км'; с='мили';

var k:integer; m:real;

begin

writeln(b:5,c:7); writeln;

for k:=l to 10 do

begin

m:=k/a; writeln(k:5,m:6:3)

end

end.

Запишем в этой программке цикл с параметром в форме 2:

for k:=10 downto 1 do

begin

m:=k/a; writeln(k:5,m:6:3)

end.

Тогда значения ОСНОВНЫЕ КОНСТРУКЦИИ ЯЗЫКА k в таблице будут убывать от 10 до 1 с шагом 1.

Контрольные вопросы

1. Как в Паскале реализуется развилка?

2. В чем различие в назначениях условногооператора и оператора варианта? Как реализуется оператор варианта?

3. Какого типа циклы реализуются в языке Паскаль? каким образом?

СТРУКТУРЫ ДАННЫХ

Мы уже познакомились с ординарными типами real, integer, boolean, byte ОСНОВНЫЕ КОНСТРУКЦИИ ЯЗЫКА,char.

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

Описание перечисляемого типа производится в разделетипов по схеме:

type =

Примеры:

type operator = (plus,minus,multi, divide);

color = (white,red,blue,yelow,purple,green);

В перечне ОСНОВНЫЕ КОНСТРУКЦИИ ЯЗЫКА должно быть менее 256 имен.

Так как перечисляемый тип относится к ординальным, то к его элементам можно использовать функции ord(x), pred(x), succ(x) и операции дела. Отметим, что данные этого типа не подлежат вводу и выводу при помощи функций ввода/вывода и могут употребляться снутри программки для увеличения ее ОСНОВНЫЕ КОНСТРУКЦИИ ЯЗЫКА читабельности и понятности.

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

Программка 8

programweek;

type days=(mon,tue,wed,thu,fri,sat,sun);

var d:days;

begin

for d:=mon to sun do

case d of

mon: writeln("пн");

tue writeln("вторник");

wed writeln ОСНОВНЫЕ КОНСТРУКЦИИ ЯЗЫКА("среда");

thu writeln("четверг");

fri writeln("пятница");

sat writein("суббота") ;

sun writeln("воскресенье")

end

end.

Интервальный тип - это подмножество другого уже определенного ординального типа, именуемого базисным. Интервал можно задать в разделе типов указанием меньшего и большего значений, входящих в него и разделяющихся 2-мя поочередными точками, к примеру:

type days=(mon,tue ОСНОВНЫЕ КОНСТРУКЦИИ ЯЗЫКА,wed,thu,fri,sat,sun);

workday s=mon.. fri;

index=1..30;

letter='a'..'z';

Можно задать интервал и в разделе переменных:

vara:1..100;b:-25..25;

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

Пример ОСНОВНЫЕ КОНСТРУКЦИИ ЯЗЫКА: если k - номер месяца в году, то заместо описания

var k:integer;

можно написать

vark:1..12;

Интервальный тип тоже относится к обычным ординальным типам.

СОСТАВНЫЕ СТРУКТУРЫ. Данные, с которыми имеет дело ЭВМ, являются абстракциями неких реальных либо имеющихся в воображении людей объектов. Мы уже познакомились с некими типами данных: стандартными, перечислимыми, интервалами. Этими ОСНОВНЫЕ КОНСТРУКЦИИ ЯЗЫКА типами можно было обойтись при решении обычных задач. Но естественно и нередко очень комфортно группировать однотипные данные в последовательности - массивы, строчки знаков, соединять воединыжды разнотипные данные об одном и том же объекте в виде записей. Значимые удобства представляются юзеру в Паскале при организации однотипных величин в виде огромного количества ОСНОВНЫЕ КОНСТРУКЦИИ ЯЗЫКА с подходящим набором операций: объединения, скрещения и т.д. В конце концов, последовательность однотипных величин переменной длины можно представить в Паскале в виде файла данных и хранить на наружных носителях, используя его в различных программках.

Таким макаром, подобно составному оператору, содержащему несколько других операторов, составные типы образуются ОСНОВНЫЕ КОНСТРУКЦИИ ЯЗЫКА из других типов, при всем этом существенную роль играет способ образования либо структура составного типа.

Нередко применяемый составной тип - массив. Массив - это последовательность, состоящая из фиксированного числа однотипных частей. Все элементы массива имеют общее имя (имя массива) и различаются индексами. Индексы можно вычислять, их тип должен быть ординальным. При описании ОСНОВНЫЕ КОНСТРУКЦИИ ЯЗЫКА массивов употребляются служебные слова array и of. В описании массива указывается тип его частей и типы их индексов.

Схема описания такая:

type = array [] оf

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

К примеру ОСНОВНЫЕ КОНСТРУКЦИИ ЯЗЫКА:

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

table = array ['A'..'Z',1..5] of integer;

var a,b : vector;

с: table;

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

К примеру:

а[7]:=3.1; b[k*k+l]:=0; с['М ОСНОВНЫЕ КОНСТРУКЦИИ ЯЗЫКА',3]:=-14;

Если массивы имеют одно и то же описание, то в почти всех версиях Паскаля допустимо их копирование, к примеру b:=а;

Описание массива можно скооперировать с описанием соответственных переменных:

var a,b : array [1.. 10] of real;

d : array [byte] of char;

В Турбо-Паскале разрешена инициализация исходных значений составных переменных ОСНОВНЫЕ КОНСТРУКЦИИ ЯЗЫКА при помощи, так именуемых, типизированных констант. Типизированные константы употребляются как переменные такого же типа. Их применение сберегает память, но они не могут быть применены для определения других переменных такого же типа.

Схема описания констант массива:

const : = ()

Тип массива может быть описан ранее:

type digits = array [1 ..5] of char;

const a : digits ОСНОВНЫЕ КОНСТРУКЦИИ ЯЗЫКА =('0';2','4';6';8');

Пример: используя массив, составим программку, которая напечатает на дисплее 20 чисел Фибоначчи.

Последовательность Фибоначчи определяется равенствами

а[1]=а[2]=1; a[k]=a[k-l]+a[k-2] прик>2.

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

Программка 9

program fibon; "''

const n=20;

var a: array[l..n] of ОСНОВНЫЕ КОНСТРУКЦИИ ЯЗЫКА integer;

k: integer;

begin

a[l]:=l;a[2]:=l;

for k:=3 to n do a[kl:=a[k-l]+a[k-2];

for k:=l to n do write(a[k]:5);

writeln

end.

Разглядим нередко встречающуюся задачку упорядочения членов числовой последовательности по какому-либо признаку.

Пример: упорядочить члены числовой последовательности по ОСНОВНЫЕ КОНСТРУКЦИИ ЯЗЫКА возрастанию.

Используем способ упорядочения, носящий имя «пузырек». Будем просматривать пары примыкающих частей поочередно справа влево и переставлять элементы в

паре, если они стоят некорректно:

5,3,2,4,1 → 5,3,2,1,4 → 5,3,1,2,4 →5,1, 3,2,4 → 1,5,3,2,4

Сначала просмотра присвоим некой логической переменной значение true:

p:=true; если во время просмотра пар была хотя бы одна перестановка, изменим значение логической переменной на обратное: p:=false ОСНОВНЫЕ КОНСТРУКЦИИ ЯЗЫКА; это значит, что последовательность еще не была упорядочена и просмотр пар нужно повторить. Цикл просмотров завершается, если после еще одного просмотра производится условие: p=true. Последовательность зададим в программке как константмассивиз 10 частей - целых чисел.

Программка 10

program bubble; '

const a:array[l..10] of integer=(19,8,17,6,15,4,13,2,11,0);

var b,i:integer; p :boolean;

begin ОСНОВНЫЕ КОНСТРУКЦИИ ЯЗЫКА c1rscr;

for i:=l to 10 do write(a[i]:3);writeln;writeln;

repeat p:=true;

for i:=10 downto 2 do

if a[i]

then begin

b:=a[il;a[i]:=a[i-l]; ali-1]:=b;p:=false

end

until p=true;

for i:=l to 10 do write(a[i]:3);

writeln

end ОСНОВНЫЕ КОНСТРУКЦИИ ЯЗЫКА.

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

При решении задач на ЭВМ нередко появляется необходимость в использовании последовательностей знаков. Такую последовательность можно обрисовать как массив знаков, но в Паскале для таких целей имеется особый тип ОСНОВНЫЕ КОНСТРУКЦИИ ЯЗЫКА - string[n] -строчка из n знаков, где n <= 255. Методы описания переменных - строк - подобны описанию массивов.

1. Строковый тип определяется в разделе описания типов, переменные этого типа - в разделе описания переменных:

type word : string[20];

var a,b,c : word;

2. Можно скооперировать описание строкового типа и соответственных переменных в разделе описания переменных:

var a,b,c ОСНОВНЫЕ КОНСТРУКЦИИ ЯЗЫКА : string[20];

d : string[30];

3. Можно найти строковую переменную и ее изначальное значение какконстант-строку:

const l:string[l 1]='информатика';

Знаки, составляющие строчку, занумерованы слева вправо; к ним можно обращаться при помощи индексов, как к элементам одномерного массива.

Для переменных 1-го строкового типа определен словарный порядок, являющийся следствием ОСНОВНЫЕ КОНСТРУКЦИИ ЯЗЫКА упорядоченности символьного типа:

'fife' < 'tree' (таккак 'f'< 't'); '4' > '237' (потому что '4' > '2').

Не считая логических операций<, >, =, для величин строкового типа определена некоммутативная операция соединения, обозначаемая знаком плюс:

а:='кол'+'о'+'кол'; (в итоге а='колокол').

Для строковых величин определены последующие четыре стандартные функции.

1. Функция соединения - concat(sl,s2,...,sk). Значение функции - итог соединения строк ОСНОВНЫЕ КОНСТРУКЦИИ ЯЗЫКА sl ,s2,...sk, если он содержит менее 255 знаков.

2. Функция выделения - copy(s,i,k). Из строчки s выделяется k знаков, начиная с i-того знака:

а:=сору('крокодил',4,3); (в итоге а='код*).

3. Функция определения длины строчки - length(s). Рассчитывается количество знаков, составляющих текущее значение строчки s:

b:=length('каникулы'); (b ОСНОВНЫЕ КОНСТРУКЦИИ ЯЗЫКА=8).

4. Функция определения позиции - pos(s,t). Рассчитывается номер позиции, начиная с которого строчка s заходит 1-ый раз в строчку t; итог равен 0, если строчка s не заходит в t:

с:=роs('ом','компьютер'); (с=2).

В Паскале определены также четыре стандартные процедуры для обработки строковых величин:

1. Процедура удаления ОСНОВНЫЕ КОНСТРУКЦИИ ЯЗЫКА delete(s,i,k).Из строчки s удаляется k знаков, начиная с i-того знака.

s:='таракан'; delete(s,5,2); (в итоге S='таран').

2. Процедура вставки - insert(s,t,i). Строчка s вставляется в строчку t, начиная с позиции i:

t:='таран'; insert ('ka',t,5); (t='таракан').

3. Процедура преобразования числа в ОСНОВНЫЕ КОНСТРУКЦИИ ЯЗЫКА строчку знаков - str(k,s). Строчка s выходит «навешиванием» апострофов на число k:

str(564,s); (s='564').

4. Процедура преобразования строчки из цифр в число - val(s,k,i). Число i=0, если в строке s нет знаков, хороших от цифр, в неприятном случае i=позиции первого знака, хорошего от числа ОСНОВНЫЕ КОНСТРУКЦИИ ЯЗЫКА:

val('780',k,i); (k=780; i=0).

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

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

Тут комфортно найти констант-строку, состоящуюиз всех 18 строчных и больших российских букв, и в цикле проверить, будет ли очередной знак данного текста элементом констант ОСНОВНЫЕ КОНСТРУКЦИИ ЯЗЫКА-строки.

Программка 11

program vowel;

const с:зtring[18]='аеиоуыэюяАЕИОУЫЭЮЯ' ;

var a :string[100]; k,n:integer;

begin

writeln('введите текст'); readln(a);n:=0;

for k:=l to length(a) do

if pos(a[k],c)>0 then n:=n+l;

writeln('кол. гласных=',n) end.

2. Поменять в арифметическом выражении функцию sqr на ехр. Подмена выражения sqr ОСНОВНЫЕ КОНСТРУКЦИИ ЯЗЫКА на ехр достигается поочередным применением процедур delete и insert:

Программка 12

program stroka;

var a,b:string[40]; k:integer;

begin

writeln('введите строчку <= 40 знаков');

readin(a);b:=a;

repeat k:=pos('sqr',b);

if k>0 then

begin

delete(b,k,3);insert('ехр',b,k) ;

end

until k=0;

writein('древняя строчка=',a); writein('новенькая строчка ОСНОВНЫЕ КОНСТРУКЦИИ ЯЗЫКА"',b);

end.

3. Ввести и упорядочить по алфавиту 10 латинских слов. В программке определим массивиз 10 элементов-строк и упорядочим его элементы способом пузырька.

Программка 13

program order;

const s=10;

type word=string(20] ;

var i, j, k: 1. . s;

b:word; p:boolean; list :array[l..s] of word;

begin

clrscr;writeln<'введите перечень слов');

for i:=l to s ОСНОВНЫЕ КОНСТРУКЦИИ ЯЗЫКА do readln(list[i]);

repeat p:=true;

for i:=s downto 2 do

if list[i]

begin

b:list[i);list[i]:=list[i-l]; list[i-l]:=b;p:=false end

until p=true;

writein('упорядоченныйсписок слов:');

for i:=l to s do writeln(list[i])

end.

Огромное количество в ОСНОВНЫЕ КОНСТРУКЦИИ ЯЗЫКА Паскале имеет таковой же смысл, как и в алгебре - это неупорядоченная совокупа хороших друг от друга однотипных частей. Число частей огромного количества не должно превосходить 255. В качестве типа частей может быть хоть какой скалярный тип, не считая типа integer и его интервалов, содержащих числа > 255. Тип частей огромного количества ОСНОВНЫЕ КОНСТРУКЦИИ ЯЗЫКА именуется базисным. При описании множественного типа употребляются служебные слова set и of. Задание определенного огромного количества определяется правилом (конструктором) - перечнем частей либо интервалов, заключенным в квадратные скобки. Пустое огромное количество обозначается 2-мя знаками [].

Множественный тип можно найти в разделе описания типов по схеме:

type = set of

К примеру:

type t ОСНОВНЫЕ КОНСТРУКЦИИ ЯЗЫКА=set of byte;

var a:t;

Можно скооперировать описание множественного типа и соответственных переменных:

var code: set of0..7;

digits: set of'0'..'9';

Можно обрисовать переменную множественного типа и задать ее первоначальное значение в разделе описания констант, как константмножество. Тип огромного количества можно обрисовать ранее, к примеру,

type up=setof ОСНОВНЫЕ КОНСТРУКЦИИ ЯЗЫКА'A'..'Z';

low=set of'a'.. "z";

const upcase : up=['A'. . 'Z'];

vocals :low=['a', 'e', 'i', 'o', "u", 'y'];

delimiterset of char=[ '..' /',':'..' ? '];

Для данных множественного типа определены операции объединения, скрещения и дополнения множеств, обозначаемые в Паскале соответственно знаками +, * и -, также дела равенства множеств (А=В), неравенства (АВ ОСНОВНЫЕ КОНСТРУКЦИИ ЯЗЫКА), включения (А=В).

Логическая операция принадлежностих in А воспринимает значение true, если элемент х принадлежит огромному количеству А и false в неприятном случае. Потому что к элементам огромного количества прямого доступа нет, то операция in нередко употребляется для этой цели.

Заметим, что операции дела на огромных количествах производятся резвее ОСНОВНЫЕ КОНСТРУКЦИИ ЯЗЫКА, чем надлежащие операции на числах, потому их прибыльно использовать в программках.

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

Пусть alfa - огромное количество всех букв латинского алфавита. Будем вводить данный текст с клавиатуры знак за эмблемой, сразу формируя ОСНОВНЫЕ КОНСТРУКЦИИ ЯЗЫКА огромное количество Е -множество латинских букв текста. В конце текста введем знак *. Потом при помощи операции in будем инспектировать, какие буковкы алфавита имеются во огромном количестве Е. Огромное количество N - ненайденных букв в тексте - определяется оператором: N := alfa - Е .

Программка 14

program search;

const alfa:set of char=['a ОСНОВНЫЕ КОНСТРУКЦИИ ЯЗЫКА'. .'z'];

var c:char;E,N:set of char;

begin

cirscr; E:=[]; writeln('введите текст, конец ввода -*'); read(c);

while c '*' do

begin

if с in alfa then E:=E+[c]; read(c)

end;

writeln;

if E=alfa then writeln('найдены все латинские буковкы')

else begin

N:=alfa-E;

writeln('найдены:');

for c:='a ОСНОВНЫЕ КОНСТРУКЦИИ ЯЗЫКА' to 'z' do if с in E then write(c);

writeln; writeln('не найдены:');

for c:='a' to 'z' do if с in N then write(c);

writeln

end

end.

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

Пример ОСНОВНЫЕ КОНСТРУКЦИИ ЯЗЫКА: составить программку «спортлото 5 из 36», которая позволяет человеку ввести с клавиатуры 5 натуральных чисел из интервала 1..36, потом генерирует случайным образом 5 разных чисел из такого же интервала и заявляет величину выигрыша по правилу: если угаданы человеком 0, 1 либо 2 числа, объявляется проигрыш; если угаданы 3 числа, объявляется выигрыш 3 рубля; если угаданы 4 числа, объявляется выигрыш 100 рублей; если ОСНОВНЫЕ КОНСТРУКЦИИ ЯЗЫКА угаданы 5 чисел, объявляется выигрыш 1000 рублей.

В программке употребляются обозначения: mn — огромное количество натуральных чисел из интервала 1 . . 36, а - огромное количество чисел, загаданных человеком, х - огромное количество чисел, . генерируемых компом, z=a*x - скрещение множеств а и х; i, k, s - переменные, значения которых принадлежат интервалу 1..36. Случайное число из этого ОСНОВНЫЕ КОНСТРУКЦИИ ЯЗЫКА интервала генерируется оператором: s:=random(35)+l. Программка поначалу выводит на экран сообщение о выигрышных номерах, потом определяет величину выигрыша.

Программка 15

program lottery;

type mn = set of 1 . . 36;

var x,a,z: nm; i, k, s: 0 . . 36;

begin

writeln; a:=[];

for i:=l to 5 do

begin write('введите ',i,' -тое число '); readin(k);a:=a+[k ОСНОВНЫЕ КОНСТРУКЦИИ ЯЗЫКА] end;

randomize;

k:=0; x:=[];

whilek<5 do

begin

s:random (35) +1;

if not(s in x) then begin k:=k+l; x:=x+[s]

end

end; writeln;

writeln('выигрыш выпал на последующие номера : ');

for i:=l to 36 do if (i in x) then write(i,' ');

writeln; z:=a*x; k:=0;

for i:=l to 36 do ОСНОВНЫЕ КОНСТРУКЦИИ ЯЗЫКА if (i in z) then begin writeln('угадано: ',i); k:=k+l

end;

case k of

0, 1, 2 : writeln('вы проиграли ');

3 : writeln('получите 3 руб') ;

4 : writeln('получите 100 руб');

5 : writein('получите 1000 руб')

end

end.

Записи (комбинированный тип) - одна из более гибких и комфортных структур данных, применяющихся при описании сложных объектов, которые характеризуются разными качествами, также ОСНОВНЫЕ КОНСТРУКЦИИ ЯЗЫКА при разработке разных информационных систем. Запись - это последовательность, состоящая из фиксированного числа величин различных типов, именуемых полями либо компонентами записи. Так же, как и массив, запись содержит ряд отдельных компонент, но компонентами записи могут быть данные разных типов. К примеру, адресные данные (индекс, город, улица, номер дома, квартиры) можно ОСНОВНЫЕ КОНСТРУКЦИИ ЯЗЫКА представить как запись (record):

type address = record

index : string[6];

city: string[20];

street : string[20];

haus.ilat: integer

end;

Из примера видно, что тип «запись» описывается по схеме

type имя типа записи = record

имя поля 1 : тип;

имя поля 2 : тип;

имя поля N: тип

end;

Как и при описании массивов, можно скооперировать описание типа записи и соответственных переменных. К ОСНОВНЫЕ КОНСТРУКЦИИ ЯЗЫКА примеру, данные о 2-ух студентах можно обрисовать так:

fio :string[20];

fas :string[10]

grup :string[8]

end

Переменную типа «запись» и ее первоначальное значение можно найти как констант-запись в разделе констант по схеме

const: =

Постоянное значение - это перечень имен полей и соответственных значений, заключенный в круглые скобки. Элементы перечня делятся знаком «точка с запятой ОСНОВНЫЕ КОНСТРУКЦИИ ЯЗЫКА». К примеру, запись о начале координат можно найти так:

type point = record

х, у, z: integer

end;

const o: point = (x:0; y:0; z:0);

С компонентами записи можно обращаться как с переменными соответственного типа. Воззвание к компонентам записи осуществляется при помощи указания имени поля через точку. Пусть, к примеру, переменная х имеет ОСНОВНЫЕ КОНСТРУКЦИИ ЯЗЫКА тип address, т.е. в программке имеется описание var x: address. Тогда допустимы последующие присваивания:

x.haus := 52; х.street:='пр.Мира'; x.city:= 'Красноярск';

x.flat:= 135; x.index :='б60049'

Проиллюстрируем работу с записями на задачке, в какой требуется отыскать сумму и произведение 2-ух всеохватывающих чисел:

zl=al ОСНОВНЫЕ КОНСТРУКЦИИ ЯЗЫКА+i*blиz2=a2+i*b2.

Программка 16

program cornpl;

type compi =record

re : real;

im : real

end;

var zl,z2,s,p : compl;

begin

writeln('компл.число a+i*b вводите 2-мя числами а и Ь: 'it-write('введи 1 число: '); readln(zl.re,zl.im);

write('введи 2 число: '); readin(z2.re,z2.im);

s.re ОСНОВНЫЕ КОНСТРУКЦИИ ЯЗЫКА := zl.re + z2.re;

s.im := zl.re + z2.im;

p.re := zl.re * z2.re - zl.im * z2.im;

p.im := zl.re * z2.im + z2.re * zl.im;

writeln('s=',s.re:4:2,' + i *',s.im:4:2);

write('p=',p.re:4:2,' + i *',p.im:4:2)

end.

Громоздкость ОСНОВНЫЕ КОНСТРУКЦИИ ЯЗЫКА обозначений в программке компенсируется большей наглядностью метода за счет структуризации данных. В почти всех случаях, если требуется создавать операции с полями фиксированной записи, можно для сокращения обозначений использовать оператор присоединения with. Его структура такая:

with do ;

В данном случае в операторе, написанном после служебного слова do, имена полей обозначенной записи ОСНОВНЫЕ КОНСТРУКЦИИ ЯЗЫКА описываются без имени записи и точки. К примеру, печать суммы s в прошлом примере можно организовать с внедрением оператора with так:

with s do writeln('s=',re:4:2,'+i*',im:4:2);

В операторах присваивания разрешается использовать не только лишь имена полей, да и имена записей.

Тип поля может быть записью.

К примеру:

man ОСНОВНЫЕ КОНСТРУКЦИИ ЯЗЫКА = record

fio:record

fam, im,otch: string[10];

end;

data : record

day: 1..31;

mes:1..12;

god:integer

end;

pol: char;

telef: record

dom,rab : string[10];

end;

end;

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

Разглядим пример действенного использования записей в программке начисления стипендии студентам по шаблону:

N ФИО ОСНОВНЫЕ КОНСТРУКЦИИ ЯЗЫКА Эк1 Эк2 ЭкЗ Балл Сумма Проф Итого

1 Васнецов Н.В. 4 4 3 11 50.00 0.25 49.75

Представим, что вводится перечень группы с надлежащими оценками за экзамены. Графа «Балл» вычисляет суммарную оценку за семестр. Графа «Сумма» определяет размер стипендии по облегченному правилу: если нет двоек и балл равен 15, то стипендия 75 руб.; при условии, что 12 < «Балл ОСНОВНЫЕ КОНСТРУКЦИИ ЯЗЫКА» < 15 стипендия 62 руб 50 коп., а если 9 < «Балл» < 12 , то - 50 руб. (в других случаях сумма равна нулю). В графе «Проф» указывается профсоюзный взнос в размере 0,5% от стипендии, а графа «Итого» определяет сумму средств к выдаче.

В программке перед распечаткой итоговой ведомостиможно предугадать упорядочение записей по убыванию в графе «Балл».

Программка 17

program spisok ОСНОВНЫЕ КОНСТРУКЦИИ ЯЗЫКА;

type stud = record

fio :string[20];

ex1, ex2, ex3 : 2 . . 5;

bal :6 . . 15;

sum :real;

nalog :real;

itog :real;

end;

var x : array[1..30] of stud;

i,k,m,n :integer;

у : 6..15;

z : stud;

begin write('введи число студентов: '); readln(n);

for i:= 1 to n do with x[i] do

begin write('введи ФИО ',i,'-ro студента ОСНОВНЫЕ КОНСТРУКЦИИ ЯЗЫКА: ');

readln(fio); write('Bведи его три оценки: ');

readin(exl,ex2,ex3);

end;

for i:= 1 to n do with x[i] do

begin bal:=exl+ex2+ex3;

if (exl=2) or (ex2=2) or (ex3=2)

then sum:=0

else if bal=15 then sum:=75

else if bal>12 then sum:=62.5

else if bal>9 then sum:=50

else ОСНОВНЫЕ КОНСТРУКЦИИ ЯЗЫКА sum:=0;

nalog:=sum*0.005; itog:=sum-nalog;

end;

for k:= 1 to n-1 do

begin y:=x[k].bal; m:=k;

for i:=k+l to n do if y

begin y:=x[i].bal; m:=i

end; z:=x[k]; x(k]:=x[m]; x(m]:=z;

end ОСНОВНЫЕ КОНСТРУКЦИИ ЯЗЫКА;

writeln; writeln ('СТИПЕНДИАЛЬНАЯ ВЕДОМОСТЬ ');

for i:=l to 64 do write('-'); writeln;

write ('N | ФИО | эк1 | эк2 | эк3 | балл | сумма | проф | итого |') ;

for i:=l to 64 do write('-'); writeln;

for i:=l to n do with x[i] do

begin write(i:3,fio:20,exi:4, ex2:4,ex3:4);

writeln(bal:5,sum:9:2,nalog:8:2,- itog ОСНОВНЫЕ КОНСТРУКЦИИ ЯЗЫКА:7:2);

end

end.

Контрольные вопросы и задания

1. Как определяется перечислимый тип данных?

2. Зачем может пригодиться интервальный тип данных?

3. Как вводятся и употребляются в программках массивы?

4. Какие деяния вероятны над величинами строкового типа?

5. Какие операции допустимы над огромными количествами?

6. В чем принципные различия меж одномерными массивами и записями?

7. В усеченном конусе длина диагонали ОСНОВНЫЕ КОНСТРУКЦИИ ЯЗЫКА осевого сечения равна d, образующая составляет с плоскостью основания угол х и равна а. Вычислите площадь боковой поверхности конуса.

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

9. Числа а и b выражают длины катетов 1-го прямоугольного треугольника, числа с и d ОСНОВНЫЕ КОНСТРУКЦИИ ЯЗЫКА - другого. Обусловьте, являются ли треугольники схожими.

10. Напечатайте числа а, b, с в порядке возрастания.

11. Обусловьте все пары двузначных чисел, владеющих свойством: (20+25^2 = = 2025.

12. Вычислите в числовом массиве а1,а2,...,аn суммы положительных и отрицательных частей.

13. Вычислите скалярное произведение 2-ух десятимерных векторов Х и Y.

14. Упорядочите массив х1,х2,...,хn по ОСНОВНЫЕ КОНСТРУКЦИИ ЯЗЫКА неубыванию, используя способ сортировки вставками: пусть 1-ые k частей уже упорядочены по неубыванию; берется (K+1)-й элемент и располагается посреди первых k частей так, чтоб упорядоченными оказались уже (k+1) первых частей.

15. Составьте программку решения треугольной системы уравнений порядка n.

16. Поменяйте в данном арифметическом выражении все вхождения sin на cos и sqrt на ОСНОВНЫЕ КОНСТРУКЦИИ ЯЗЫКА абс.

17. Для данного текста обусловьте длину содержащейся в нем наибольшей последовательности цифр 0, 1,2,..., 9.

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

19. Найдите и напечатайте в порядке убывания все обыкновенные числа ОСНОВНЫЕ КОНСТРУКЦИИ ЯЗЫКА из спектра [2..201].

20. Опишите тип «запись» для последующих данных:

а) адресок(город, улица, дом, квартира);

б) дата(число,месяц.год);

в) студент(фио,факультет,курс,группа).

21. Заданы N точек на плоскости. Найдите точку, ближайшую к началу координат. Используйте тип «запись».

ПРОЦЕДУРЫ И ФУНКЦИИ

Описание и вызов. В Паскале подпрограммы именуются ОСНОВНЫЕ КОНСТРУКЦИИ ЯЗЫКА процедурами и функциями и описываются в разделе с этим же заглавием.

Процедура имеет такую же структуру, как и программка, но с 2-мя отличиями:

• заголовок процедуры имеет другой синтаксис и включает служебное слово procedure;

• описание процедуры завершается точкой с запятой (а не точкой). Все имена, описанные в программке до процедуры, действуют во ОСНОВНЫЕ КОНСТРУКЦИИ ЯЗЫКА всей программке и в хоть какой ее подпрограмме (если они там не описаны поновой). Они именуются глобальными, в отличие от локальных имен, обрисованных в процедуре и действующих только в ней.

Данные для обработки могут передаваться процедуре через глобальные имена либо через аргументы процедуры. В процедуре каждый аргумент имеет свое ОСНОВНЫЕ КОНСТРУКЦИИ ЯЗЫКА имя -формальный параметр, описываемый в заголовке процедуры по схеме

procedure () Описание формальных характеристик может иметь вид

: либо var :

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

Оператор вызова процедуры имеет вид

();

Обозначенные выражения именуют фактическими параметрами. Их перечень ОСНОВНЫЕ КОНСТРУКЦИИ ЯЗЫКА должен точно соответствовать списку описаний формальных характеристик процедуры. Во время вызова процедуры каждому параметру-значению присваивается значение соответственного фактического параметра и потому их обычно употребляют для передачи входных данных.

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

Пример: составим программку, которая при помощи строчки знаков поделит экран ОСНОВНЫЕ КОНСТРУКЦИИ ЯЗЫКА на части, где напечатает таблицу квадратных корней для чисел 1, 2,..., 10 и таблицу натуральных логарифмов для чисел 1, 2,..., 5.

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

Заметим, что процедура в программке производится 5 раз ОСНОВНЫЕ КОНСТРУКЦИИ ЯЗЫКА.

Программка 18

program section;

var x:integer;

procedure line(a:integer;c:char) ;

var j:integer;

begin

for j:=l to a do write (c);

writeln

end;

begin

line(35,'-'); writeln('таблица квадратных корней');

line(35,'-');

for x:=l to 10 do writeln(x:8,sqrt(x):8,4);

line (35,'-'); writein('таблица натуральных логарифмов');

line(35,'-');

for x:=l ОСНОВНЫЕ КОНСТРУКЦИИ ЯЗЫКА to 5 do writein(x:8,In(x):8:4);

line(35,'*')

end.

Функция - это подпрограмма, определяющая единственное скалярное, вещественное либо строковое значение. Отличия подпрограммы-функции от процедуры:

• заголовок функции начинается со служебного слова function и завершается указанием типа значения функции:

function (перечень описаний формальных характеристик): ;

•раздел операторов функции должен содержать хотя бы один ОСНОВНЫЕ КОНСТРУКЦИИ ЯЗЫКА оператор присваивания имени функции;

• воззвание к функции - не оператор, а выражение вида

().

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

Пример: составим программку, которая для данных 4 натуральных чисел а, b, с, d напечатает самые большие общие делители первой и 2-ой пар чисел ОСНОВНЫЕ КОНСТРУКЦИИ ЯЗЫКА и сравнит их по величине.

В программке определим рекурсивную функцию nod(x,y) по формулам

| x, если у = 0

nod(x,y) = | nod(y.x). если х < у

| nod(x mod у,у), если х > у

Применяя эти формулы к числам 21 и 15, поочередно находим nod(21,15) = nod(6,15) = nod(15,6) = nod(3,6) = nod(6,3) = nod(0,3) = nod(3,0) = 3.

Программка 19

program four;

var ОСНОВНЫЕ КОНСТРУКЦИИ ЯЗЫКА a,b,c,d,m,n:integer;

function nod(x,у:integer):integer;

var h:integer;

begin

if y=0 then h:=x

else if x

else h:=nod(x mod у, у);

nod: =h end;

begin

writeln('введите 4 натуральных числа');

read(а,Ь,с,d); writeln;

m:=nod ОСНОВНЫЕ КОНСТРУКЦИИ ЯЗЫКА(a,b); n:=nod(c,d);

writeln('нод(',а,',',b,')=',m);

writeln('нод(',c,',',d,')=',n);

if m>n then writeln('1-ый > второго')

else if m

else writeln('нод пар равны') end.

Наружные библиотеки. Как понятно, подпрограммы (процедуры и функции) употребляются в программках с целью ОСНОВНЫЕ КОНСТРУКЦИИ ЯЗЫКА их структурирования, также при неоднократных повторениях неких частей программки. Процедуры и функции описываются в программных единицах в разделе описания подпрограмм. Они являются внутренними для этих программных единиц.

Бывают случаи, когда одни и те же подпрограммы могут употребляться в разных программках 1-го и даже нескольких юзеров. В схожих ситуациях ОСНОВНЫЕ КОНСТРУКЦИИ ЯЗЫКА целенаправлено создавать наружные подпрограммы, которые можно в нужный момент подключать в любые программки. Обычно, наружные подпрограммы объединяют в отдельные пакеты, так именуемые, библиотеки наружных подпрограмм. Могут создаваться личные библиотеки, спец библи


osnovnie-napravleniya-deyatelnosti-minekonomrazvitiya-rossii-zadachi-dlya-resheniya-kotorih-dannaya-organizaciya-sushestvuet.html
osnovnie-napravleniya-deyatelnosti-ovd.html
osnovnie-napravleniya-deyatelnosti-rezultati-i-perspektivi-passazhirskie-perevozki.html