Студопедия  
Главная страница | Контакты | Случайная страница

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

Операторы вывода

Читайте также:
  1. Арифметические операторы
  2. Арифметические операторы и операторы присваивания
  3. Библиотека ввода/вывода
  4. Введение в OC Linux. Перенаправление ввода-вывода. Программные каналы (конвейеры).
  5. Введение в OC Linux. Перенаправление ввода-вывода. Программные каналы (конвейеры).
  6. Ввод-вывод чисел, символов и строк на консоль. Переключение ввода-вывода, работа с файлами.
  7. ВВОДА И ВЫВОДА ИНФОРМАЦИИ
  8. Вывода изображения, формируемого компьютером
  9. Для организации ветвлений в VBA используются операторы: условный оператор IF...THEN и IF...THEN …. Else
  10. ИСПОЛЬЗОВАНИЕ НЕСКОЛЬКИХ ШИН ДЛЯ ВВОДА-ВЫВОДА
Бейсик Паскаль
PRINT <Список вывода>   Write(<Список вывода>); Writeln(<Список вывода>);

Эти операторы позволяют выводить на экран монитора данные из списка вывода. Элементами списка вывода могут являться имена переменных, выражения, константы. Прежде чем вывести на экран значения выражений, компьютер сначала их вычислит. Элементы списка, также как и в операторах ввода, разделяются запятыми.Различие между двумя операторами вывода в Паскале таково: после выполнения оператора Writeln (от Writeline) происходит переход па новую строчку, а после выполнения инструкции Write переход на новую строчку не происходит и печать по последующим командам вывода Write или Writeln будет происходить на той же строчке. При вызове оператора Writeln без параметров просто происходит переход па новую строчку.В Бейсике каждый новый оператор PRINT выводит значения в новую строку. Переменные, составляющие список вывода, могут относиться к целому, действительному, символьному или булевскому типам. В качестве элемента списка вывода кроме имен переменных могут использоваться выражения и строки.Вывод каждого значения в строку экрана происходит в соответствии с шириной поля вывода, определяемой конкретной реализацией языка.Форма представления значений в поле вывода соответствует типу переменных и выражений: величины целого типа выводятся как целые десятичные числа, действительного типа — как действительные десятичные числа с десятичным порядком, символьного типа и строки — в виде символов, логического типа — в виде логических констант TRUE и FALSE.

Конспект урока на тему «Операторы ввода, вывода, присваивания на языке Pascal»

Понятие переменной

Это центральное в любом языке программирования. Для описания переменной (величины, которая изменяется в процессе работы программы) следует указать имя переменной, ее тип и значение. Следует соблюдать следующий принцип: «Использовать переменную можно лишь тогда, когда она описана и ей присвоено некоторое значение». Это позволит Вам избежать многочисленных ошибок в работе программ.Величина – это объект, который имеет имя и значение определенного типа.Константа – это постоянная величина, значение которой не изменяется в процессе работы программы. Значение константы определяет сам программист. Переменная – величина, которая в процессе выполнения программы может менять свое значение по необходимости.Команда присваивания используется для изменения значений переменных. В языке Паскаль эта команда обозначается так:

<имя переменной>:=<выражение> При этом значение выражения из правой части команды присваивания заменяет текущее значение переменной из левой части. Тип значение выражения должен совпадать с типом переменной.

Пример:

а:=2; b:=8;

S:=а+b;

После выполненных последовательно данных трех команд переменная S принимает значение равное 10.Команды вывода на экран текста или (и) значения переменныхWRITE (); - выводит на экран, указанные в скобках параметры, курсор остается в этой же строке.WRITELN (); - выводит на экран, указанные в скобках параметры, после вывода курсор переходит в начало следующей строки экрана.В качестве параметров в круглых скобках может быть указан текст сообщения (текст записывается в апострофах ' ') и имя переменной (записывается без апострофов), значение которой нужно вывести. Между выводимыми элементами ставится запятая. Команда WRITELN; без параметров только переводит курсор в начало следующей строки экрана.

Примеры

Writeln('Мне16лет'); На экране появится: Мне 16 лет

a:=11;

Writeln('Я учусь в ', а,' классе'); На экране появится: Я учусь в 11 классе

х:=3;у:=6;

Writeln(х+у,' рублей'); На экране появится: 9 рублей

Если в одной команде выводится несколько чисел подряд, то чтобы числа не сливались в одну строку, необходимо выводить между ними пробел ' ' или указывать количество позиций выделяемых под это число.

Пример

а:=1; b:=2; с:=3;

Writeln (а, b, с);

Writeln(а,' ', b,' ', с);

Writeln(a:3, b:3, c:3);

{Число, указанное после двоеточия, (в нашем примере это 3) обозначает количество позиций выделяемых под вывод значения переменной.Если переменная занимает меньше позиций, то в оставшихся позициях перед значением переменной выводятся пробелы}

На экране появится:

1 2 3

1 2 3

Структура программыProgram<имя программы>;

Const<имя константы>=<ее значение>;

Var<имя переменной>: <тип переменной>;

Begin

<выполняемые команды>;

End.

Заголовок

Раздел описания констант

Раздел описания переменных

Начало программы

Раздел операторов (команд) или тело программы

Конец программы

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

Задача. Найти сумму двух чисел

Program N1;

Var а, b: Integer; {переменные а и b целого типа}

S: Longint; {переменная S типа длинное целое}

Веgin

а:=7; {присваивание значения первому числу а}

b:=4; {присваивание значения второму числу b}

S:=а+b; {вычисление суммы S чисел а и b}

{вывод результата работы программы на экран}

Writeln (' сумма ', а,' и ', b,' равна ', S);

End.

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

Пример. Запросить с клавиатуры значение переменной а.

Var a: Integer;

Write (‘a=’);

Readln(а);

На экране появится а= и после знака равно будет мигать курсор в ожидании ввода с клавиатуры целого числа. После ввода числа необходимо нажать Enter.

Для того, чтобы не переходить к окну с результатами работы программы (alt+F5) после запуска программы на выполнение, последней командой в любой программе перед End. записывается команда Readln; (Программа ждет нажатия Enter).

Задача. Найти произведение двух чисел.

Program N2;

Var a, b:Integer;

p: Longint;

Begin

 

Writeln(' Введите два числа ');

Readln(а,b);

р:=а*b;

Writeln (' произведение ', а,' и ', b,' равно', р);

Readln;

End.

 

Упражнения

 

1. Какие значения приобретут переменные а, b и с после выполнения следующих операторов, если начальные значения а=1, b=2, с=39. Как изменится результат, если в приведенном фрагменте последний оператор переставить на первое место?

a:=b;

b:=c;

c:=a;

 

2. Сколько строчек появится на экране? Что в них будет отображено?

х:=2; у:=3;

Write(х); Write(х*х:3);

Writeln(х*х*х:3); Write(y);

Writeln(у*у:3); Writeln(у*у*у:3);

 

3. Что выведется на экран?

а:=12; b:=7;

Writeln(' Разность ', а,' и ', b,' равна ', а-b);

 

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

 

ProgramTask 8;

 

Var a; b; c: Integer;

Begin

Writeln (' Введите число', а);

Readln(a)

b=5

c:=ab;

Writeln(‘ произведение ’a и b ’ равно ’,S);

Readln(a);

End

 

5. Пусть х=2, у=3. Напишите оператор печати текста «2+3=5», используя только две переменные х и у.

 

6. Найдите формулу, вычисляемую программой:

Program Test3;

Var a,b,c:integer; {коэффициенты}

d,e:integer; {промежуточные переменные}

х:integer; {аргумент}

r: integer; {результат}

Begin

Write ('Введите коэффициенты');

Readln (а,b,с);

Write ('Введите значение аргумента');

Readln(x);

d:=a*x*x;

e:=b*x; {*}

r:=d+e+c;

Write ('результат=',г:5);

Readln;

End.

Что будет получено, если в операторе, отмеченном звездочкой, вместо операции умножения (*) использовать операцию деления (/)?

 

Задачи

 

1. Найти значение переменной X, если Х=(а+(d-12)*3)*(c-5*k), а значение переменных а, d, с, k задаются с клавиатуры.

 

2. Написать программу вывода на экран лесенкой трех последовательно идущих трехзначных чисел. Первое число вводит пользователь, остальные вычисляются в программе.

213 101

214 или 102

215 103

 

3. Составить программу, которая запрашивает у пользователя два целых числа и выводит квадрат суммы (а+b)2 и сумму квадратов а2+b2 этих чисел. Пример работы программы (данные, введенные пользователем, выделены полужирным шрифтом):

Введите два числа

а=5

b=2

квадрат суммы 3 и 2 равен 25

сумма квадратов 3 и 2 равна 13

Вопрос 11: Стандартные функции языка Pascal

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

Арифметические функции

Арифметические функции можно использовать только с величинами целого и вещественного типа.Функция Назначение Тип результата

abs (x) абсолютное значение аргумента совпадает с типом аргумента

sqr (x) квадрат аргумента совпадает с типом аргумента

sqrt (x) квадратный корень аргумента вещественный

cos (x) косинус аргумента вещественный

sin (x) синус аргумента вещественный

arctan (x) арктангенс аргумента вещественный

exp (x) ex вещественный

ln (x) натуральный логарифм вещественный

int (x) целая часть числа вещественный

frac (x) дробная часть числа вещественный

Функции преобразования типов

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

round (x) - округляет вещественное число до ближайшего целого.

trunk (x) - выдает целую часть вещественного числа, отбрасывая дробную.

 

Функции для величин порядковоготипаodd (x) - проверяет аргумент на нечетность. Аргумент функции величина типа longint, результат true, если аргумент нечетный, false – если четный.

pred (x) - определяет предыдущее значение величины x.

succ (x) - определяет последующее значение величины x.

ord (x) - возвращает порядковый номер величины x.
Вопрос12:Структура программы на языке Паскаль

Программа состоит из заголовка и блока. Заголовок программы

В заголовке указывается имя программы и список параметров. Общий вид:

programn (input, output, x, y,…); здесь n – имя программы; input – файл ввода; output – файл вывода; x, y – внешние файлы, используемые в программе.

Заголовка может и не быть или он может быть без параметров.

Блок

Блок программы состоит из шести разделов, следующих в строго определенном порядке:

аздел меток (label)

раздел констант (const)

раздел типов (type)

раздел переменных (var)

раздел процедур и функций

раздел действий (операторов).

Раздел действий должен присутствовать всегда, остальные разделы могут отсутствовать.

Каждый из первых четырех разделов начинается с соответствующего ключевого слова (label, const, type, var), которое записывается один раз в начале раздела и отделяется от последующей информации только пробелом, либо концом строки, либо комментарием.

Раздел меток (label)

Любой выполняемый оператор может быть снабжен меткой – целой положительной константой, содержащей не более 4-х цифр. Все метки, встречающиеся в программе, должны быть описаны в разделе label.

Общий вид:

label l1, l2, l3…;

здесь l1, l2, l3 – метки.

Пример. label 5, 10, 100;

Метка отделяется от оператора двоеточием.

Пример. Пусть оператор a:= b имеет метку 20. Тогда этот оператор выглядит так:

20: a:= b;

Раздел констант (const)

Если в программе используются константы, имеющие достаточно громоздкую запись (например, число пи с 8-ю знаками), либо сменные константы (для задания варианта программы), то такие константы обычно обозначаются какими-либо именами и описываются в разделе const, а в программе используются только имена констант. Это делает программу более наглядной и удобной при отладке и внесении изменений.

Общийвид:

const a1 = c1; a2 = c2; …

здесь a1 – имя константы, c1 – значение константы.

Пример. constpi = 3.14; c = 2.7531;

Раздел типов (type)

Если в программе вводится тип, отличный от стандартного, то этот тип описывается в разделе type:

type t1 = вид_типа;

t2 = вид_типа;

где t1 и t2 – идентификаторы вводимых типов.

Затем тип используется при объявлении переменных.

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

const

len=40;

type

year=1930..2010;

names=string[len];

var

empl: names;

y: year;

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

Раздел переменных (var)

Пусть в программе встречаются переменные v11, v12,…; все они должны быть описаны следующим образом:

var v11, v12,…: type1;

v21, v22,…: type2; …

здесь v11, v12,… - имена переменных; type1 – тип переменных v11, v12,…; type2 – тип переменных v21, v22,….

Пример. var k, i, j: integer; a, b: real;

Каждая переменная должна быть описана до ее использования в программе и отнесена к одному и только одному типу. Названия разделов (const, type, var…) указываются только один раз.

Пример.

var a: real;

b: real;

Таким образом, в разделе var вводится имя каждой переменной и указывается, к какому типу эта переменная принадлежит. Тип переменной можно задать двумя способами: указать имя типа (например, real, color и т.д.), либо описать сам тип, например: array[1..16] ofchar

Раздел процедур и функций

Здесь присутствуют заголовки и тела пользовательских процедур и функций.

Раздел действий (операторов)

Эта часть программы начинается с ключевого слова begin и заканчивается словом end, после которого должна стоять точка. Раздел действий есть выполняемая часть программы, состоящая из операторов.

Вопрос 13:Оператор условия if.

Операторы отношений сравнивают два значения, возвращая в результате булевское значение True или False. В Паскале реализуются операторы:

> – больше, чем;

>= – больше, чем или равно;

< – меньше,

= – равно;

<= – меньше, чем или равно;

<> – не равно;

in – является элементом.

Общий формат условного оператора:

if<условие>then<оператор1>else<оператор2>

где <условие> – любое булевское выражение (вырабатывающее в результате True или False); <оператор1> и <оператор2> – операторы Паскаля. Если выражение принимает значение True, то выполняется <оператор1>; в противном случае – <оператор2>.

Например:

if a > b then max:= a else max:= b;

Два важных момента, на которые следует обратить внимание при использовании if/then/else. Во-первых, оператор else не является обязательным, другими словами, допустимо использовать оператор if в следующем виде:

if выражение then оператор 1

В этом случае оператор 1 выполняется только тогда, когда выражение имеет значение True. В противном случае пропускается оператор 1 и выполняется следующий оператор. Во-вторых, если необходимо выполнить более одного оператора, в случае, когда выражение принимает значение, True или False, то следует использовать составной оператор. Составной оператор – это последовательность произвольных операторов программы, заключённая в операторные скобки – зарезервированные слова begin... end.

Например:

f B = 0 then

Writeln('Деление на нуль невозможно.')

else begin

Ratio:= A div B;

Writeln('Отношение =', Ratio)

end;

В Паскале есть четыре логических оператора – and, xor, or, not. Эти логические операторы работают с логическими значениями (True и False), позволяя комбинировать выражения отношений, булевские переменные и булевские выражения. Например:

if (a > b) and (a = 0) then writeln('a = ", a);

if (a > b) and (a = 0) then writeln('a = ", a);

Оператор перехода

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

goto 218; goto l1;

При использовании оператора перехода должны соблюдаться следующие правила:

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

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

Хорошая практика программирования требует минимального использования переходов.

Операторы выхода

Для завершения работы программ, процедур и функций без предварительного перехода по меткам к закрывающему end в Турбо Паскале введены процедуры Exit и Halt.

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

Вызов процедуры Halt, где бы она ни находилась, завершает работу программы и передает управление операционной системе.

Процедура Halt имеет структуру Halt(n), где n – код возврата, который может быть проанализирован операционной системой с помощью команды IF ERRORLEVEL. Значение n=0 соответствует нормальному завершению работы программы. Вызов процедуры Halt без параметра эквивалентен вызову Halt(0).

Вопрос14:Оператор case.

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

Общая форма записи следующая:

case выражение of

значение1: оператор (группа операторов);

значение2: оператор (группа операторов);

......................

значениеN: оператор (группа операторов)

else оператор (группа операторов);

end;

Оператор выбора работает следующим образом. Сначала вычисляется значение выражения, стоящее после зарезервированного слова case, а затем выполняется оператор (или составной оператор), соответствующий результату вычисления выражения.

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

Например,case NUMBER mod 2 of

0: writeln (NUMBER, ‘- числочетное‘)

else: writeln (NUMBER, ‘- числонечетное‘);

end;

Если один оператор выполняется при нескольких значениях, то их можно перечислить через запятую.case MONTH of

1, 2, 3:writeln (‘Первый квартал‘);

4, 5, 6:writeln (‘Второй квартал‘);

7, 8, 9:writeln (‘Третий квартал‘);

10, 11, 12:writeln (‘Четвёртый квартал‘);

end;

Оператором может являться не только простой оператор, но также составной и пустой операторы.case CODE of

1: for i:= 1 to 5 do

writeln (‘*******‘);

2:begin {составной оператор}

x:=sqr(y-1);

writeln (x);

end;

3: {пустой оператор}

end;

Любому заданному значению селектора соответствует лишь один вход в списке операторов. Константы должны принадлежать тому же типу, что и селектор. Если селектор принимает значение, которому не соответствует ни один вход, то будет выполняться оператор, следующий за словом else. Если же этого оператора нет, то никакие альтернативы не будут выполняться.

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

0..9:write (‘Это число является цифрой‘);

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

Задача. Написать программу преобразования цифр в слова.Program Number1;

Var

a, b, c: integer;

Begin

writeln(‘Введитецифру ‘);

readln(a);

if (a<0) or (a>9)

then

writeln (‘Это число не является цифрой‘)

else

case a of

0: writeln (‘ноль‘);

1: writeln (‘один‘);

2: writeln (‘два‘);

3: writeln (‘три‘);

4: writeln (‘четыре‘);

5: writeln (‘пять‘);

6: writeln (‘шесть‘);

7: writeln (‘семь‘);

8: writeln (‘восемь‘);

9: writeln (‘девять‘);

end;

readln;

End.

 

Program Number2;

Var

a, b, c: integer;

Begin

writeln(‘Введитецифру ‘);

readln(a);

case a of

0: writeln (‘ноль‘);

1: writeln (‘один‘);

2: writeln (‘два‘);

3: writeln (‘три‘);

4: writeln (‘четыре‘);

5: writeln (‘пять‘);

6: writeln (‘шесть‘);

7: writeln (‘семь‘);

8: writeln (‘восемь‘);

9: writeln (‘девять‘)

elsewriteln (‘Это число не является цифрой‘);

end;

readln;

End.

Вопрос15. Цикл счетчик.

В цикле со счетчиком тело цикла повторяется заранее определенное число раз. Общая форма записи цикла со счетчиком в языке Pascal

for i:=a to b do

begin

.

.

.

end;

 

for i:=a downto b do

begin

.

.

.

end;

Переменная i - это счетчик,

a - начальное значение счетчика,

b- конечное значение переменной цикла.

При переходе к обработке оператора цикла for счетчику присваивается начальное значение.

Затем в цикле выполняется исполнительный оператор.

Каждый раз при выполнении оператора счетчик увеличивается на 1 (для for...to) или уменьшается на 1 (для for...downto).

Цикл завершается при достижении счетчиком конечного значения.Счетчик не может быть вещественного типа.

Если начальное значение цикла for...to больше конечного значения, то никакие операции не выполнятся.

Таким образом, следующий оператор не приведет ни к каким действиям for j:= 1 to 0 dowriteln (j);

Однако цикл, представленный в такой форме, распечатает целые числа от единицы до десяти: for j:= 1 to 10 dowriteln (j);

Как можно догадаться, следующий цикл выполняет счет в обратном порядке: for j:= 10 downto 1 dowriteln (j);

Пример:

 

Вывести на экран числа от 1 до 10

Для решения данной задачи воспользуемся циклом со счетчиком for

 

Uses crt;

Var i:integer;

begin

For i:=1 to 10 do

begin

Writeln(i);

End;

Readln;

End.

Вопрос16. Оператор цикла с постусловием.

Цикл с постусловием – это цикл, в котором проверка условия выполняется в конце цикла.

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

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

Repeat

OP

Until L;

где:

Repeat - повторять;

Until – пока не;

L – выражение логического типа;

OP – тело цикла; оператор (простой или составной).

Работа оператора: Выполняется оператор OP после чего вычисляется значение логического выражения L, если вычисленное значение False, то снова выполняется оператор OP в противном случае осуществляется выход из цикла.

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

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

В операторе цикла с постусловием ключевые слова Repeat и Until играют роль операторных скобок.

Пример 9.4. Составить программу вычисления функции y для заданного значения x.

где: C=2,7; n=2; a=0.5; 0<t<1; Dt=0,1.

Program Ex_2;

Uses crt;

Var

y, C, a, t:real;

n:integer;

Begin

clrscr;

Writeln('Введите C, a, n');

Read(C, a, n);

Writeln('Результат:'); Writeln('t’:5,’y’:15);

t:=0;

Repeat

y:=C*exp(a*t)*cos(n*t);

Writeln(t:4:1,’ ‘:5, y:10);

t:=t+0.1;

Untile t>=1;

End.

Продолжим изучение цикла с предусловием на примере решения следующей задачи.

Задача. Найти сумму чисел в непустой последовательности.

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

3, -4, 0, 5, 19, -20, 6, 2

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

1 2 3 4 5 6 7 8

3, -4, 0, 5, 19, -20, 6, 2

Получилось, что всего у нас чисел восемь, на первом месте стоит число 3, на втором - число (-4), на третьем - число 0 и т.д. Тогда переменная цикла i будет пробегать числа от 1 до 8, становясь на каждом шаге больше на 1 и запрашивая каждый раз очередное число. Поэтому общая схема цикла будет выглядеть так:i:=1;

while i<=N do

begin

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

readln (x);

...

i:=i+1;

end;

Здесь N - количество чисел последовательности (в нашем случае 8), х - член последовательности, i - порядковый номер очередного члена последовательности. Просмотрим, как будет работать этот цикл.

1 шагi:=1;

while i<=N do {Проверяется условие 1<=8? Да. Значит выполняем тело цикла}

begin

write (‘Введите ‘,i,’-ое число’);{Вывод на экран “Введите 1-ое число”}

readln (x); {Считываем число 3 в переменную х}

...

i:=i+1; {Переходим к следующему по порядку числу: i=2}

end;

2 шагi:=1;

while i<=N do {Проверяется условие 2<=8? Да. Значит выполняем тело цикла}

begin

write (‘Введите ‘,i,’-ое число’);{Вывод на экран “Введите 2-ое число”}

readln (x); {Считываем число (-4) в переменную х}

...

i:=i+1; {Переходим к следующему по порядку числу: i=3}

end;

3 шагi:=1;

while i<=N do {Проверяется условие 3<=8? Да. Значит выполняем тело цикла}

begin

write (‘Введите ‘,i,’-ое число’);{Вывод на экран “Введите 3-ое число”}

readln (x); {Считываем число 0 в переменную х}

...

i:=i+1; {Переходим к следующему по порядку числу: i=4}

end;

 

и т. д.

8 шагi:=1;

while i<=N do {Проверяется условие 8<=8? Да. Значит выполняем тело цикла}

begin

write (‘Введите ‘,i,’-ое число’);{Вывод на экран “Введите 8-ое число”}

readln (x); {Считываем число 2 в переменную х}

...

i:=i+1; {Переходим к следующему по порядку числу: i=9}

end;

9 шагi:=1;

while i<=N do {Проверяется условие 9<=8? Нет. Значит цикл закончил свою работу и компьютер переходит к обработке следующего за end оператора}

Итак, у нас уже организован цикл считывания чисел. Осталось только вписать в тело цикла оператор, который бы суммировал все эти числа. Для этого опишем переменную Summa в разделе описания переменных и присвоим ей нулевое значение перед выполнением цикла. Тогда при каждом шаге нашего цикла значение этой переменной должно быть изменено на х. Это произойдет при выполнении оператора

Summa:=Summa+x;

Если Вам не совсем понятно, что происходит при выполнении этого оператора, Вам нужно вспомнить, как происходит присваивание значение переменной: сначала вычисляется значение выражения в правой части (в нашем случае Summa+x, т.е, значение переменной Summa увеличиваем на х), а затем присваиваем это значение переменной с именем, записанным в левой части (Summa). Таким образом, в переменной Summa собирается сумма всех считанных чисел.

Вопрос17. Оператор цикла с предусловием

оператор ───>│while├──>│выражение├──>│do├──>│оператор├──>while

Циклы с предусловием используются тогда, когда выполнение цикла связано с некоторым логическим условием. Оператор цикла с предусловием имеет две части: условие выполнения цикла и тело цикла.

При выполнении оператора while определенная группа операторов выполняется до тех пор, пока определенное в операторе while булево условие истинно. Если условие сразу ложно, то оператор не выполнится ни разу.

Общая форма записи следующаяwhile<булево выражение>do

begin

группа операторов

end;

На русском языке это звучит примерно так:

пока выполняется это условие делай

от начала

группа операторов

до конца;

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

При использовании цикла с предусловием надо помнить следующее:

значение условия выполнения цикла должно быть определено до начала цикла;

если значение условия истинно, то выполняется тело цикла, после чего повторяется проверка условия. Если условие ложно, то происходит выход из цикла;

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

Вернемся к нашей задаче вычисления суммы чисел. При вычислении суммы используем следующий прием: вначале, когда еще не задано ни одно слагаемое, сумму полагают равной нулю (S:=0), а затем, получая очередное слагаемое, прибавляют его к сумме (S:=S+x) (см. программу ниже).

Очень важное значение в операторе цикла имеет так называемая переменная цикла. В нашей программе она называется i. С ее помощью мы обращаемся к пользователю за очередным числом (write (‘Введите ‘,i,’-ое число ’)) и считаем количество уже введенных чисел (i:=i+1), чтобы не запросить лишнее. Одновременно переменная цикла участвует в булевом выражении (i<=N).

Рассмотрите внимательно программу, решающую нашу задачу.ProgramSumma;

Uses

Crt;

Var

i,

N: integer;

x, S: real;

Begin

ClrScr;

write (‘Сколько чисел для сложения? ‘);

readln (N);

S:=0;

i:=1;

while i<=N do

begin

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

readln (x);

S:=S+x;

i:=i+1;

end;

write (‘Сумма введенных чисел равна ‘,s:5:2);

readln;

End.

Хотелось бы, чтобы Вы смогли представить работу этой программы. Давайте попробуем вместе.

Пусть нам требуется сложить следующие числа: 5, 7, -4, 0, 8, 20. Посчитаем, сколько их всего – шесть. Это число мы введем, когда программа задаст вопрос: Сколько чисел для сложения? Теперь наша программа запросит ввести 1-ое число, т. к. на первом шаге переменная i равна 1. Мы введем число 5. Программа считает его в переменную х. Теперь число 5 сложим с числом 0 и результат присвоим переменной S (оператор S:=S+x). В этот момент S становится равной 5. Чтобы перейти к следующему числу, увеличим значение переменной i на 1 (оператор i:=i+1). Выполнение операторов тела цикла закончено. Теперь программа переходит опять к анализу условия вхождения в цикл (i<=N). Переменная цикла i=2, переменная N=6, поэтому значение логического условия 2<=6 равно True. Значит снова выполняется тело цикла:while i<=N do {2<=6}

begin

write (‘Введите ‘,i,’-ое число ’); {Введите 2-е число}

readln (x); {Считаличисло 7}

S:=S+x; {S:=5+7}

i:=i+1; {i:=2+1}

end;

Итак, мы сложили два числа и переходим опять к проверке условия. Ответим на вопрос: 3<=6? Да. Поэтому снова начинаю работать операторы тела цикла и мы переходим к третьему числу:while i<=N do {3<=6}

begin

write (‘Введите ‘,i,’-ое число ’); {Введите 3-е число}

readln (x); {Считаличисло -4}

S:=S+x; {S:=12 + (-4)}

i:=i+1; {i:=3+1}

end;

Аналогично, мы сложим и остальные числа. Но когда же операторы цикла выполнятся последний раз и остановится работа цикла? Когда сложим последнее число. Проверим это.while i<=N do {6<=6}

begin

write (‘Введите ‘,i,’-ое число ’); {Введите 6-е число}

readln (x); {Считаличисло 20}

S:=S+x; {S:=16+20}

i:=i+1; {i:=6+1}

end;

Проверяется опять условие 7<=6. Значение этого условия равно False, а значит тело цикла выполняться не будет. Цикл закончил свою работу. А мы получили результат: посчитали сумму всех шести чисел S=32.

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

Оператор цикла с предусловием реализует следующую базовую конструкцию:

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

While L do OP;

где:

While - пока не;

do – выполнить;

L – выражение логического типа;

OP – тело цикла; оператор (простой или составной).

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

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

Пример 9.3. Составить программу вычисления функции y для заданного значения x.

где: C=2,7; n=2; a=0.5; 0<t<1; Dt=0,1.

Program Ex_2;

Uses crt;

Var

y, C, a, t:real;

n:integer;

Begin

clrscr;

Writeln('Введите C, a, n'); Read(C, a, n);

Writeln('Результат:');

Writeln('t’:5,’y’:15);

t:=0;

While t<1 do

Begin

y:=C*exp(a*t)*cos(n*t);

Writeln(t:4:1,’ ‘:5, y:10);

t:=t+0.1;

End;

End.

Вопрос18. Одномерные массивы

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

Язык Pascal допускает описание в программах одномерных массивов в следующем виде:

TYPE <Имя_типа_массива>=ARRAY [<Диапазон_индексов>] OF <Тип>,

где TYPE - служебное слово, используемое для создания пользовательского типа данных;

ARRAY … OF - служебные слова для описания массивов (“Массив…из”);

<Имя_типа_массива> - задаваемое пользователем имя типа массива (требования к именам типов совпадают с требованиями к именам переменных);

<Диапазон_индексов> – диапазон изменения индексов массива. В качестве данного диапазона может выступить любой порядковый тип, кроме LONGINT. Чаще всего используют тип-диапазон, в котором задают границы изменения индексов;

<Тип> - тип элементов массива, например, REAL, INTEGER, CHAR и др.

Примеры описания типа массивов:

TYPE М=ARRAY [1..10] OF INTEGER;

TYPE AR=ARRAY [0..15] OF REAL;

TYPE VТ=ARRAY [-5..5] OF SINGLE;

TYPE GRUP=ARRAY [1..27] OF STRING[10].

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

Например:

VAR REZ:M;

VAR P:AR;

VAR A:VТ;

VAR STUD:GRUP.

Можно также описать переменную как непосредственно имеющую тип массива, например:

VAR REZ:ARRAY [1..10] OF INTEGER.

При обращении к элементам массива в тексте программы обязательно требуется указывать их порядковый номер в массиве, например, REZ[1], POLE[0], A[5], STUD[i] (где i принадлежит диапазону изменения индексов массива).

Одномерные массивы, диапазон индексов которых начинается с 1, также иногда называются векторами.

Например, если задан вектор V из 5 чисел (3, 0, 5, -7, 8), то второй элемент вектора равен 0 (т.е. V[2]=0), пятый элемент вектора равен 8 (т.е. V[5]=8) и т.д.

5.3 Примеры основных типов задач с использованием одномерных массивов

К стандартным типам задач на использование одномерных массивов относятся, прежде всего, задачи:

-нахождения суммы (произведения) элементов массива;

-определения наибольшего (наименьшего) элемента в массиве;

-нахождения количества элементов массива, удовлетворяющих определенным условиям;

-упорядочения массива в порядке возрастания (убывания) элементов.

Рассмотрим перечисленные типы задач на следующих примерах.

5.3.1 Нахождение суммы элементов массива

Пусть известно, что в автопарке, имеющем 18 машин марки КАМАЗ, каждый из КАМАЗов перевез за день определенный объем груза. Определить суммарный объем перевозок грузов за день.

При решении задачи будем использовать тип массива KAMAZ для описания всех КАМАЗов автопарка; переменную Р[i] для описания объема груза, перевезенной i-ой машиной за день (i меняется от 1 до 18).

Текст программы может иметь при этом следующий вид:

Program pr1;

Type KAMAZ =array[1..18] of real;

Var i:integer;

P:KAMAZ;

S:real;

Begin

S:=0;

For i:=1 to 18 do

Begin

Writeln (‘Введите объем перевозок ’, i, ‘–й машины, т’);

Readln (p[i]);

S:=S+p[i];

End;

Writeln (‘Суммарный объем перевозок S=’,S:8:2,’ т’);

End.

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

Аналогично реализуется и алгоритм нахождения произведения элементов массива (с заменой начального значения суммы S:=0 на начальное значение произведения S:=1, и с заменой операции сложения элементов массива «+» на операцию умножения «*»).

5.3.2 Нахождение наибольшего элемента в массиве

Известна среднемесячная зарплата всех 16 сотрудников одного отдела. Найти величину наибольшей среднемесячной зарплаты в отделе.

Для описания списка зарплат сотрудников воспользуемся типом массива ZARPL, для задания зарплаты каждого из сотрудников – переменной SOTR.

Текст программы к приведенному примеру:

Program pr2;

Type ZARPL=array[1..16] of real;

Var i:integer;

sotr:ZARPL;

Max: real;

Begin

For i:=1 to 16 do

Begin

Writeln (‘Введите зарплату ’, i,’ –го сотрудника, руб.’);

Readln(sotr[i]);

End;

Max:=sotr[1];

For i:=2 to 16 do if max<sotr[i] then max:=sotr[i];

Writeln(‘Наибольшая зарплата =’,max:10:2,’ руб.’);

End.

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

Аналогично может быть найден и наименьший элемент в массиве. Для этого достаточно заменить в изложенной программе условие max<sotr[i] на условие min>sotr[i], где i меняется от 1 до 1 до 16, min – переменная типа REAL.

5.3.3 Нахождение количества элементов массива, удовлетворяющих некоторому условию

Известны результаты экзамена 22 студентов одной группы по информатике. Определить, сколько студентов сдали экзамен на 4 и 5.

Один из вариантов решения поставленной задачи имеет следующий вид:

Program pr3;

Label 1;

Type INF=array[1..22] of integer;

Var stud:INF;

i,p:integer;

begin

p:=0;

for i:=1 to 22 do

begin

1: writeln(‘Введите оценку ’,i,’-го студента’);

readln(stud[i]);

if (stud[i]<1) or (stud[i]>5) then goto 1;

if stud[i]>3 then p:=p+1;

end;

writeln(‘На 4 и 5 сдали экзамен ’,p:2,’ студентов’);

end.

В данной программе для обозначения списка оценок по информатике использовался тип массива INF, для обозначения оценок конкретных студентов – переменная stud. Программа предусматривает проверку корректности вводимых данных: при попытке ввода несуществующей по пятибалльной системе оценки, программа повторяет ее ввод. Для этого используется оператор перехода GOTO, где имя метки, к которой осуществляется переход (в данном случае 1), описывается в разделе описания меток LABEL.

5.3.4 Сортировка массива по возрастанию

Известны результаты соревнования 9 участников по стрельбе. Расположить данные результаты в порядке возрастания набранных при стрельбе очков.

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

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

Программа реализации изложенного алгоритма может иметь следующий вид:

Program pr4;

Type STREL=array[1..9]of integer;

Var rez:strel;

i,j,s:integer;

Begin

For i:=1 to 9 do

begin

writeln(‘Введите результаты ’,i,’-го участника’);

readln(rez[i]);

end;

for i:=1 to 8 do

for j:=i+1 to 9 do

if rez[i]>rez[j] then

begin

s:=rez[j];

rez[j]:=rez[i];

rez[i]:=s;

end;

writeln(‘Отсортированные по возрастанию результаты:’);

for i:=1 to 9 do write (rez[i]:5,’ ‘);

end.

Здесь STREL – тип массива результатов стрельбы участников, rez[i] – переменная для описания результатов i-го участника (i меняется от 1 до 9). Вспомогательная переменная s используется при перестановке местами элементов массива.

Вопрос19. Двумерные массивы

Массив, для задания элементов которого требуется использовать два индекса, называется двумерным. Примеры двумерных массивов: места в зрительном зале театра, где каждое место характеризуется номером ряда и номером кресла в ряду; таблица результатов спортивного чемпионата, где все команды характеризуется результатом игры с каждым из соперников и др.

Двумерные массивы, в которых диапазоны индексов начинаются с 1, также называются иногда матрицами. Размерность каждой матрицы определяется как MxN, где М – число строк в матрице, N – число столбцов.

Например, задана матрица А размерностью 3х4 следующего вида:

Здесьэлемент A[2,1]=5, A[1,2]=-7, A[3,2]=5, A[3,3]=-8. Первый индекс элемента двумерного массива задает номер строки матрицы, в которой расположен элемент, второй индекс – номер столбца.

Если число строк матрицы равняется числу столбцов, то матрицы данного типа называются квадратными. Элементы квадратной матрицы вида B[1,1], B[2,2], B[3,3]… составляют главную диагональ матрицы. Иногда вводят понятие побочной диагонали квадратной матрицы для элементов вида B[1,N], B[2,N-1], B[3,N-2]…B[N,1], где N – число строк (столбцов) матрицы.

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

Примеры:

TYPE MATR=[1..4,1..5] OF INTEGER;

TYPE B=[2..9,0..6] OF REAL;

TYPE C=ARRAY[-1..4,-1..4] OF CHAR.

Также допускается указание имени другого типа массива в качестве типа элементов массива, например:

TYPE VEC=ARRAY[1..4] OF REAL;

MAS=ARRAY[1..5] OF VEC.

В результате приведенного выше описания тип массива MAS будет объявлен как тип двумерного массива, первый индекс которого будет меняться от 1 до 5, а второй индекс – от 1 до 4, т.е. размерность массива составит 5х4 элементов.

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

5.5 Примеры задач с использованием двумерных массивов

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

5.5.1 Нахождение наибольшего элемента в заданной строке матрицы

Пусть задана матрица А из действительных чисел размера 3х4. Найти наибольший элемент во второй строке данной матрицы.

Приведем программу решения задачи в виде:

Program max_st;

Type Matr=array[1..3,1..4] of real;

Var max:real;

a:Matr;

i,j:integer;

begin

for i:=1 to 3 do

for j:=1 to 4 do

begin

writeln(‘Введите элемент а[‘,i,’,’,j,’]’);

readln(a[i,j]);

end;

max:=a[2,1];

for j:=2 to 4 do

if max<a[2,j] then max:=a[2,j];

writeln(‘Наибольший элемент второй строки=’,max:8:2);

end.

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

5.5.2 Нахождение элементов массива, удовлетворяющих определенному условию

Известны результаты 5 студентов по итогам экзаменов по химии и информатике. Найти фамилии студентов, сдавших оба экзамена на отлично.

Для решения поставленной задачи может быть использована следующая программа:

program Sessia;

type PR=array [1..5,1..2]of integer;

Fam=array[1..5]of string[10];

var r:pr;

st:fam;

i,j:integer;

begin

for i:=1 to 5 do

begin

writeln('Введите фамилию ',i,'-го студента ');

readln(st[i]);

writeln('Введите оценку данного студента по химии (от 2 до 5)');

readln(r[i,1]);

writeln('Введите оценку данного студента по информатике (от 2 до 5)');

readln(r[i,2]);

end;

for i:=1 to 5 do

if (r[i,1]=5) and (r[i,2]=5) then writeln('Студент-отличник - ',st[i]);

end.

В данной программе для хранения фамилий студентов используется одномерный строковый массив st типа Fam, для хранения оценок студентов – двумерный целочисленный массив r типа PR, причем первый столбец матрицы r используется для хранения результатов экзамена по химии, второй столбец – экзамена по информатике. Если у некоторого студента оценки за оба экзамена составили 5 баллов, то его фамилия будет выведена на экран с сообщением «Студент-отличник».

5.5.3 Нахождение сумм элементов строк матрицы

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

Пусть задана таблица результатов игр 5 команд футбольного чемпионата размера 5х5. На диагонали таблицы стоят значения 0, другие элементы таблицы равны 0, 1 или 2, где 0 баллов соответствует проигрышу команды в игре, 1 балл – ничьей, 2 балла – выигрышу. Определить сумму баллов каждой команды по результатам чемпионата.

Легко заметить, что для построения матрицы R результатов игр достаточно ввести лишь стоящую выше (или ниже) главной диагонали половину матрицы, т.к. результаты остальных игр могут быть рассчитаны из известного соотношения: если, например, первая команда обыграла вторую, то элемент R[1,2]=2, а элемент R[2,1]=2-R[1,2]=0; аналогично, если вторая команда сыграла в ничью с третьей, то R[2,3]=1, R[3,2]=2-R[2,3]=1. Таким образом, нетрудно получить вид взаимосвязи элементов матрицы: R[i,j]+R[j,i]=2, где i и j меняются от 1 до 5 (кроме элементов главной диагонали). На главной диагонали матрицы R по условию задачи всегда стоят числа 0.

Перейдем к написанию программы решения поставленной задачи.

Program foot;

Type tab=array[1..5,1..5] of integer;

Var r:tab;

i,j,s:integer;

begin

{ввод стоящих выше диагонали элементов матрицы}

for i:=1 to 4 do

for j:=i+1 to 5 do

begin

writeln (‘Введите результат игры ‘,i,’–й команды с ’,j,’ –й: 0, 1 или 2 балла’);

readln(r[i,j]);

end;

{заполнение стоящих на диагонали элементов нулями}

for i:=1 to 5 do r[i,i]:=0;

{вычисление стоящих ниже диагонали элементов матрицы}

for i:=2 to 5 do

for j:=1 to i-1 do r[i,j]:=2-r[j,i];

{вывод на экран матрицы результатов игр}

writeln(‘Таблицачемпионата’);

for i:=1 to 5 do

begin

for j:=1 to 5 do write(r[i,j]:4);

writeln;

end;

{вычисление сумм элементов строк матрицы}

for i:=1 to 5 do

begin

s:=0;

for j:=1 to 5 do s:=s+r[i,j];

writeln(i,‘-ая команда набрала ’,s:3,’ очков’);

end;

end.

Вопрос20. Тип данных char. Операции над символами

Символьный тип данных

 

Идентификатор типа Допустимые значения

Char Множество символов кодовой таблицы ASCII.

Каждому символу приписывается целое число в диапазоне от 0 до 255.

Пример описания величины символьного типа:

var

letter, symbol, ch: char;

В программе значения для переменных типа Char должны быть заключены в апострофы: ch:= '*'; a:= '3'; letter:= 'G'.

Кроме того, имеется возможность задавать значения указанием непосредственного числового значения ASCII-кода:

kd:= #65 {символ 'A'}; s:= #10 {клавиша <Enter>}.

 

Операции для данных символьного типа

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

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

Функции для данных символьного типа

Для данных символьного типа определены следующие стандартные функции:

Функция Назначение

chr(x) Преобразует выражение x типа byte в символ и возвращает значение символа

ord(ch) Преобразует символ ch в его код типа byte и возвращает значение кода.

pred(ch) Возвращает предыдущий символ.

succ(ch) Возвращает следующий символ.

Примеры использования функций:

ord(':') = 58

ord('A') = 65

chr(128) = Б

pred('Б') = A

succ('Г') = Д

Пример 1. Определение кода по символу и символа по коду.

Program primer_1;

var

c: char;

code: integer;

begin

writeln('Введитесимвол: ');

readln(c);

code:= Ord(c);

writeln('Код символа ',c,' равен ',code);

writeln('Введите код символа: ');

readln(code);

c:= Chr(code);

writeln('Символ с кодом ',code,' - это ',c);

end.

 

Пример 2. Напишите программу для вывода на экран всех символов таблица ASCII.

program primer_2;

var

ch: char;

i: byte;

begin

for i:= 0 to 255 do begin

if (i mod 5) = 0 then writeln;

write (i:3,' - ', chr(i), '; ')

end;

end.

 

Пример 3. Вывести в одну строку:

ABBCCC...ZZ...Z

Переменные:

i - переменная цикла; определяет, какая буква будет выводиться;

k - количество повторений буквы;

j - переменная цикла, счетчик количества уже выведенных букв.

program primer_3;

var

i: char;

k, j: integer;

begin

k:=1;

for i:= 'A' to 'Z' do

begin

for j:=1 to k do write(i);

k:=k+1;

end;

writeln;

 

end.

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

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

 

Так же, как переменная типа integer может хранить одно целое число, переменная типа char может хранить один символ.

 

Например,Var

Alpha: char;

Begin

Alpha:='p';

Alpha:='+';

Alpha:='3';

Alpha:=' ';

Alpha:='''';

Первый оператор присваивания записывает в переменную Alpha литеру р.

Второй делает Alpha равной литере плюса (+).

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

Четвертый оператор присваивания делает Alpha равной литере пробела. Хотя литера пробела при печати не изображается, она является обыкновенным значением типа char.

Последний оператор присваивания делает Alpha равной литере апострофа, это специальный случай, так как знак апострофа используется для ограничения значения типа char.

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

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

 

'A' < 'B' < 'C' <... < 'X' < 'Y' < 'Z' '0' < '1' < '2' <... < '7' < '8' < '9'

Для проверки равенства или неравенства переменных типа char могут использоваться операторы булевого сравнения.

Задача. Написать программу, которая считывает две литеры и печатает больше, равна или меньше первая литера второй.ProgramSravnenie;

Var

First, Second: char;

Begin

write ('Введите две литеры через пробел ');

readln (First, Second);

write ('Первая литера ');

if First > Second

then

write ('больше второй. ');

else

if First = Second

then

write ('равна второй. ');

else

write ('меньше второй. ');

Еnd.

 

Так как char - порядковый тип, то к его значениям применимы следующие функции.

Succ - возвращает следующий символ литерного множества;

Pred - возвращает предыдущий символ литерного множества;

Ord - возвращает значение кода литеры;

Chr - возвращает значение литеры, является обратной по отношению к функции Ord.

Например,

Succ('0')='1' - символ, следующий за символом 0, равен символу 1.

Pred('3')='2' - символ, предшествующий символу 3, равен 2;

Chr(65)='A' - символ, соответствующий коду 65, равен А;

Ord('A')=65 - код символа А равен 65

Вопрос21. Тип данных string. Операции над строками

Строка (string) - это последовательность литер. Литерные строки уже использовались нами в качестве аргументов операторawrite при изучении темы "Ввод-вывод". Теперь познакомимся с ними подробнее.

Тип данных (string) определяет строки с максимальной длиной 255 символов. Переменная этого типа может принимать значения переменной длины.

Например,MaxLine:string;

City:string[30]

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

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

Выражения, в которых операндами служат строки, называются строковыми выражениями.

Над строками определены две операции:

1. Операция сцепления (+) применяется для сцепления нескольких строк в одну.

Например,

SumStr:= 'Турбо'+'Паскаль'+'7.0'

2. Операции отношения (=, <>, >, <, >=, <=) проводят сравнение двух строк слева направо до первого несовпадающего символа, и та строка считается больше, в которой первый несовпадающий символ имеет больший номер в стандартной таблице обмена информацией. Результат выполнения операций отношения над строками всегда имеет булевой тип.

Например, выражение 'MS-DOS'<'MS-Dos' имеет значение True

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

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

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

Допускается смешение в одном выражении операндов строкового и символьного типа.

К отдельным символам строки можно обратиться по номеру (индексу) данного символа в строке.

Например, чтобы обратиться к третьему символу строки SumStr надо записать SumStr[3]. Запись SumStr[0] дает значение текущей длины строки.

Для эффективного программирования алгоритмов обработки текстов необходимо хорошо понимать внутреннюю структуру представления строк в памяти. Строки реализованы достаточно просто. Для хранения строковых переменных выделяется память, на единицу большая максимальной длины строки. Начальный байт этой памяти отводится для хранения текущей длины строки, следующие байты - для символов самой строки. Так как элементы строк стандартно нумеруются целыми числами, начиная с единицы, байт с длиной строки можно считать нулевым ее элементом. Такая структура памяти допускает прямой доступ к ее элементам.




Дата добавления: 2014-12-19; просмотров: 113 | Поможем написать вашу работу | Нарушение авторских прав




lektsii.net - Лекции.Нет - 2014-2024 год. (0.227 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав