ТОП 10:

Процедуры ввода-вывода. Операторы ветвления



Процедуры ввода-вывода

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

I. Ввод данных:

 

Read [(<список ввода>)];

Readln [(<список ввода>)];

Read обеспечивает ввод данных в память ЭВМ, при этом курсор остается на месте.

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

II. Вывод данных:

 

Write [(<список вывода>)];

Writeln [(<список вывода>)];

Write предназначена для вывода значений на экран.

Writeln выводит значения данных на экран и переводит курсор в начало следующей строки.

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

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

 

Пример 4:

program 2;

var

b, c: integer;

v: real;

begin

write(‘b=’);

readln(b);

write(‘c=’);

readln(c);

v:=(b+c)/3.56;

writeln(‘v=’,v:8:4)

end.

Для переменной v определено для вывода поле шириной 8 позиций, в том числе 4 позиции для знаков после десятичной точки, которая так же займет одну позицию из 8.

Операторы ветвления

I. Оператор условия предназначен для реализации простого ветвления алгоритма.

 

If <условие> then <оператор - да> else <оператор - нет>;

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

program 3;

var a, b, c, d: real;

begin

writeln(‘Введите коэффициенты квадратного уравнения А, В и С’);

readln(a, b, c);

d:=sqr(b)-4*a*c;

if d>0 then writeln(‘Вещественные корни существуют’) else writeln(‘Нет вещественных корней’);

end.

II. Оператор выбора используется при множественном разветвлении алгоритма, например, если необходимо по числовому значению дня недели указать его название (1 - понедельник, 2 - вторник, 3 – среда и т.д.).

 

Case <селектор> of

<значение1>:<оператор1>;

<значение2>:<оператор2>;

………………………………;

<значениеN>:<операторN>

Else <оператор - нет>; 12

 

Пример 6: По числовому значению дня недели указать его название.

program 4;

var n: 1..7; {перечисляемый тип, здесь допускает только значения от 1 до 7}

begin

writeln(‘Введите числовое значение дня недели’);

readln(n);

case n of

1: writeln(‘понедельник’);

2: writeln(‘вторник’);

3: writeln(‘среда’);

4: writeln(‘четверг’);

5: writeln(‘пятница’);

6: writeln(‘суббота’)

7: writeln(‘воскресенье’);

end.

Циклы. Цикл с предусловием.22.Циклы. Цикл с постусловием.

Циклы

Циклы (операторы повтора) используются в программе при необходимости неоднократного повторения какого-либо оператора или группы операторов. В Pascal различают три вида циклов: цикл с параметром For, цикл с предусловием While, цикл с постусловием Repeat.

Оператор повтора For применяется, когда заранее известно число повторений. Переменная, хранящая количество повторений называется параметром цикла. Существует две структуры данного оператора.

Счет по возрастанию: For <параметр цикла>:=<целочисленное выражение1 > to < целочисленное выражение2> do <оператор цикла>;

Счет по убыванию: For <параметр цикла>:=<целочисленное выражение2 > downto < целочисленное выражение1> do <оператор цикла>;

Пример 7: Вывести на экран результат умножения 7 на числа от 11 до 25.

program 5;

var i: byte; {i- параметр цикла}

r: integer;

begin

writeln (‘Таблица умножения для 7’);

for i:=11 to 25 do begin {при выполнении в цикле более одного оператора ставятся операторные скобки Begin end;}

r:=7*I;

write(r:5); {вывод результата в строку с промежутком в 5 позиций}

end;

end. 13

 

Формат цикла с предусловием While <условие> do <тело цикла>; Проверка условия осуществляется перед циклом, цикл выполняется, если условие принимает значение True (истина).

Пример 8: Посчитать сумму 10 произвольно введенных чисел.

program 6;

const limit=10; {константа ограничения ввода чисел}

var i: integer;

sum, ch: real;

begin

i:=0; {счетчик чисел}

sum:=0; {переменная накапливающая сумму чисел}

while i< limit do

begin

i:=i+1;

write(‘введите ’,i,’-е число: ’);

readln(ch);

sum:=sum+ch;

end; {конец цикла}

writeln(‘Сумма равна ’,sum:5:2); {переменную sum вещественного типа выводим в 5 позиций с 2мя знаками в дробной части}

end.

Цикл с постусловием Repeat

<тело цикла>

Until <условие>;

Первоначально условие принимает значение False (ложь). Цикл выполняется до тех пор, пока условие не станет True (истина).

Пример 9: Подсчитать количество чисел, введенных до первого отрицательного.

program 7;

var ch: real;

n: byte;

begin

writeln (‘Подсчитать количество чисел, введенных до первого отрицательного’);

writeln; {оформление подсказки}

repeat

write (‘Введите число ’);

readln(ch);

n:=n+1;

until ch<0;

writeln(‘Количество не отрицательных чисел равно ‘,n);

end.

23. Типы данных, определяемые пользователем (массивы, записи, множества). Файлы.

Типы данных, определяемые пользователем

Язык Pascal имеет мощные возможности для конструирования пользователем собственных типов данных. Описание типов данных позволяет создавать такие структуры данных, которые позволяют решать задачи более оптимальными способами, делать решение более наглядным, установить соответствие между принятыми в теоретических исследованиях и реализуемыми в программировании структурами данных.

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

Основными типами структурных данных являются массивы (array) и записи (record).

Массивы

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

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

Type <имя типа>=array [тип индекса] of <тип компонента>;

Var <идентификатор,…>: <имя типа>;

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

Var <идентификатор,…>: array [тип индекса] of <тип компонента>;

Массивы различают по количеству индексов: одномерные (1 индекс), двумерные и N-мерные (N индексов).

Пример 10: Даны два массива целых чисел. Вычислить произведение максимального элемента первого массива на минимальный элемент второго массива. Удалить максимальный элемент из первого массива и добавить его во второй массив после минимального.

program 8;

type massiv=array [1..40] of integer;

var a, b: massiv;

i, n, k, p, j, min, Imin, max, Imax: integer;

begin

{ввод массива с клавиатуры}

write('Введите размерность массива А n=');

readln(n);

writeln('Введите элементы массива А');

for i:=1 to n do begin 15

 

write('a[',i,']=');

readln(a[i]);

end;

{ввод массива случайным образом}

write('Введите размерность массива В k=');

readln(k);

randomize; {подключение генератора случайный чисел}

for i:=1 to k do

b[i]:=random(16); {заполнение массива случайными числами от 0 до 15}

{Вывод массива на экран}

Writeln('Массив В');

for i:=1 to k do write(b[i],' ');

writeln; {пустой оператор вывода}

{Поиск максимального элемента}

max:=a[1];

Imax:=1;

for i:=2 to n do

if a[i]>max then begin

max:=a[i]; {максимальный элемент}

Imax:=i; {индекс максимального элемента}

end;

{Поиск минимального элемента}

min:=b[1];

Imin:=1;

for i:=2 to n do

if b[i]<min then begin

min:=b[i]; {минимальный элемент}

Imin:=i; {индекс минимального элемента}

end;

{вычисление произведения и его вывод на экран}

p:=min*max;

writeln('Произведение max и min равно ',p);

{Удаление элемента из массива с позиции Imax}

for i:=Imax to n-1 do

a[i]:=a[i+1];

n:=n-1; {Уменьшение количества элементов массива на 1}

{Вставка элемента в массив после элемента равного min}

i:=1;

while i<k do

begin

if b[i]=min then begin

for j:=k+1 downto i+1 do b[j]:=b[j-1]; {смещение элементов на один вправо, начиная с последнего} 16

 

k:=k+1; {Увеличение количества элементов на один}

b[i+1]:=max; {Вставка элемента на позицию i+1}

end;

i:=i+1; {Увеличение счетчика итераций}

end;

{Вывод массивов А и В на экран в строку}

writeln(‘Массив А: ‘);

for i:=1 to n do write(a[i],' ');

writeln;

writeln(‘Массив В: ‘);

for i:=1 to k do write(b[i],' ');

end.

Записи

Запись представляет собой наиболее общий и гибкий структурированный тип данных, так как она может быть организована из не однотипных компонентов и в ней явным образом выражена связь между элементами данных, характеризующими реальный объект. Широко используется при программировании информационно-поисковых систем.

Формат записи:

Type <имя_типа>=record

<имя_поля1>: тип;

<имя_поля2>: тип;

…………………;

<имя_поляN>: тип

end;

Элементы записи называются полями, а обращение к ним производится через использование их имен – идентификаторов полей. Отличие от обычной переменной записи в том, что имена полей должны предваряться ссылкой на идентификатор записи и отделяться от него точкой. Такая запись называется уточняющий идентификатор: <имя_записи>.<имя_поля>

Пример 11: Описание личных данных учащегося.

Type svedenia=record

f: string[40];

dat_r: string[8];

pol: char;

gruppa: string[4]

end; 17

 

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

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

program anketa;

type svedenia=record

f: string[40];

dat_r: string[8];

pol: char;

gruppa: string[4]

end;

var student: array [1..100] of svedenia;

i, j: integer;

begin

{Последовательно вводим каждую запись}

for i:=1 to 100 do begin

writeln(‘введите сведения о’, i, ‘-м студенте’);

write (‘введите фамилию и имя ’);

readln (student[i].f);

write(‘введите дату рождения’);

readln (student[i].dat_r);

write(‘введите группу’);

readln(student[i].gruppa);

end;

writeln(‘ввод закончен’);

writeln;

{Просматриваем массив записей и выбираем только студентов 3-ей группы}

for i:=1 to 100 do begin

for j:=1 to Length(student[i]. gruppa) do

if student [i]. k gruppa[j]=9 then

writeln(‘фамилия студента: ’, student[i].fio);

end.

Множества

Множество – это структурированный тип данных, представляющий собой набор взаимосвязанных по какому-либо признаку объектов. В отличие от массивов порядок расположения элементов во множестве не важен.

В выражениях на языке Pascal значения элементов множества указываются в квадратных скобках: [1, 6, 3, 7, 2, 4], [‘a’..’z’]. Множество, не имеющее элементов, называется пустым и обозначается [].

Формат записи множественного типа:

Type <имя типа>=set of <элемент1,…, элементN>;

Var <идентификатор>:<имя типа>; 18

 

Допустимыми операциями над множествами являются: «=», «<>», «>=», «<=», объединения (+), пересечения (*), разности (-) множеств и операция включения (in). Операция in позволяет проверить принадлежность значения множеству.

Пример 13: Посчитать количество гласных и согласных букв в предложении.

program Glasn_Sogl;

Type mnoj= set of 'A'..'я'; {Задаем множество букв русского алфавита}

var glasn, sogl: mnoj;

sr: string; {строковая переменная sr хранит вводимый текст}

i: byte; {параметр цикла}

g, s: byte; {переменные накапливающие количество гласных и согласных букв соответственно}

begin

{Задаем множества гласных букв перечислением, а множество согласных вычитанием из всего алфавита гласных букв, мягкого и твердого знаков}

glasn:=['A','a','O','o','E','e', 'И','и','Ё','ё','У','у', 'Ы','ы','Э','э','Я','я','Ю','ю'];

sogl:=['A'..'я'] – glasn - 'Ъ' - 'ъ' - 'Ь' - 'ь';

write('Введите предложение: ');

readln(sr);

{Обнуляем счетчики количества}

g:=0;

s:=0;

{Просматриваем все элементы предложения и смотрим, содержаться ли они во множествах glasn и sogl}

For i:=1 to Length(sr) do begin

if sr[i] in glasn then g:=g+1;

if sr[i] in sogl then s:=s+1;

end;

writeln('В данном предложении ',g,' гласных и ',s,' согласных букв');

end.

Файлы

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

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

Целесообразность применения файлов диктуется следующими причинами: 19

 

 

 ввод больших объемов данных, подлежащих обработке, утомителен и требует большого времени. Гораздо удобнее создать определенный файл данных, который может быть подготовлен заранее и, самое главное, применяться неоднократно;

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

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

 

Формат записи файла:

Type <имя типа>=<тип компонентов>;

var <F> : File of <имя типа>; {F – файловая переменная, представитель файла в паскале}

<R> : <имя типа>; {переменная доступа к полям записи}

Средства обработки файлов:

Процедура Assign(<Файловая переменная>; <полный путь к файлу >) – связывает файловую переменную с конкретным файлом на внешнем устройстве.

Процедура Reset(<файловая переменная>) – открывает уже существующий файл.

Процедура Rewrite(<файловая переменная>) – создает и открывает новый файл.

Процедура Close(<файловая переменная >) – закрывает открытый файл.

Процедура Rename(<файловая переменная >;<новое имя файла>) – переименование любого неоткрытого файла.

Процедура Erase (<файловая переменная >) – удаление неоткрытого файла.

Условно файлы можно разделить на текстовые, типизированные и нетипизированные.

Текстовый файл – последовательность символов, разбитая на строки длиной от 0 до 256 символов. Для описания используется стандартный тип Text:

var F: text;

К типизированным файлам относят файлы строго определенного типа. Чаще всего это файлы, состоящие из записи.

Type FR= record

………

end;

var F: file of FR;

Нетипизированные файлы рассматриваются в Pascal как совокупность символов или байтов. для определения в программе нетипизированного файла служит зарезервированное слово File: 20

 

var F: file;

Пример 14: Прочитать последовательность 6 символов из первой строки текстового файла Input.txt, записать их в обратном порядке в файл Output.txt. Файл Input.txt создан на c:\temp\

program text_file;

var F, R: text;

st, ts: string[6];

i: byte;

begin

assign(F, 'c:\temp\Input.txt'); {связывает переменную F с файлом Input.txt}

reset(F); {открывает F для чтения}

assign(R, 'c:\temp\Output.txt'); {связывает переменную R с файлом Output.txt}

rewrite(R); {создает и открывает R для записи}

while not Eoln(F) do read(F, st); {Проверка конца файла, чтение из F в переменную st}

for i:= 6 downto 1 do ts:=ts+st[i]; {Создание строки перевертыша}

writeln(R, ts); {Запись в R значения переменной ts}

close(F); {закрывает F}

close(R); {закрывает R}

end.







Последнее изменение этой страницы: 2017-01-26; Нарушение авторского права страницы

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.234.97.53 (0.029 с.)