Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Паскаль для учеников.doc
Скачиваний:
6
Добавлен:
05.12.2018
Размер:
1.02 Mб
Скачать
  1. Основные особенности языка Pascal

  1. Pascal является традиционным алгоритмическим языком программирования, продолжающим линию Algol-60. Это означает, что программа на языке Pascal представляет собой специально организованную последовательность шагов по преобразованию данных, приводящую к решению некоторой задачи.

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

  3. Набор операторов языка Pascal отражает принципы структурного программирования и позволяет записывать достаточно сложные алгоритмы в компактной и элегантной форме.

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

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

  1. TURBO PASCAL

Язык Turbo Pascal - мощное расширение американского стандарта (ANSI Pascal), учитывающее архитектурные особенности операционной обстановки (MS-DOS) и снабженное внушительными по объему и разнообразию пакетами стандартных процедур.

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

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

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

Программирование на языках программирования высокого уровня

Структура программы в Паскале

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

1

Название программы

Program <Имя программы>;

2

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

Label <описание меток>;

3

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

Const <описание констант>;

4

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

Туре <описание типов>;

5

Раздел подключения модулей

Uses <название модуля>;

6

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

Var <описание переменных>;

7

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

Procedure (Function) <описание подпрограмм>;

8

раздел операторов

Begin

<раздел операторов>;

9

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

End.

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

Правила написания имен в Паскале

  1. Все имена пишутся на латинице.

  2. Длина имени может быть до 256 символов.

  3. Имя нельзя начинать с цифры.

  4. В именах нельзя использовать знаки пунктуации.

  5. В именах вместо пробела используется нижнее подчеркивание_.

  6. В именах можно использовать цифры.

Стандартные модули в Паскале

Turbo Pascal имеет восемь стандартных модулей. Зарезервированное слово uses дает возможность подключать к программе библиотечные модули.

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

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

              • System

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

              • Dos

Модуль Dos содержит средства доступа к операционной системе и по существу является программным представлени­ем системного интерфейса MS-DOS.

              • Crt

Модуль Crt обеспечивает практически полный спектр возможностей для доступа к экрану дисплея в текстовом ре­жиме. Кроме того, в данный модуль включены средства чте­ния информации с клавиатуры (включая расширенные коды клавиш) и простейшего управления звуком.

В модуле Crt находится процедура ClrScr, которая используется для очистки экрана (подключается в теле программы).

              • Printer

Модуль Printer содержит единственный интерфейсный злемент – переменную Lst стандартного типа text, системно связанную с логическим устройством PRN (то есть с печатающим устройством, если оно имеется в конфигурации). Использование этой переменной в стандартных процедурах Write и WriteLn приводит к выводу информации на печать.

              • Overlay

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

              • Graph

Модуль Graph объединяет многочисленные программные средства управления графическим режимом работы дисплея. Данный модуль обеспечивает использование всех возможностей наиболее распространенных типов дисплейных адаптеров CGA, EGA, VGA, Hercules и т.п. как для монохромных, так и для цветных дисплеев и позволяет создавать разнообразные и эффективные графические программы.

Модули Turbo3 и Graph3 обеспечивают совместимость с данной версией системы Turbo Pascal тех программ, которые были разработаны для ранней версии 3.0.

Пример

Program moduli;

Uses crt; {Подключение модуля crt}

var <описание переменных>;

begin

clrscr; {Процедура очистки экрана}

<инструкции>;

end.

Типы переменных в Паскале

Тип

Диапазон

Объем памяти

Целые типы

Shortint

-128..127

8 бит

Integer

-32768..32767

16 бит

Longint

-2147483648..2147483647

32 бит

Byte

0..255

8 бит

Word

0..65535

16 бит

Логический тип

Boolean

False, True

1 бит

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

Char

Символы из расширенного набора символов кода ASCII

 1 байт

Вещественные типы

Real

-1,7*1038..-2,9*10-39;

2,9*10-39..1,7*1038

6 байт

Single

-3,4*1038..-1,5*10-45;

1,5*10-45..3,4*1038

7 байт

Double

-1,7*10308..-5,0*10-324;

5,0*10-324..1,7*10308

8 байт

Extended

-1,1*104932..-1,9*10-4951;

1,9*10-4951..1,1*104932

10 байт

Comp

-263+1..263-1

8 байт

Операции в Паскале

        1. Арифметические операции бывают унарными и бинарными. К унарным относится операция изменения знака.

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

Выражение

Типы операндов

Тип рез-та

Операция

А + В

R, R

R

Сложение

I,I

I

I, R R, I

R

А - В

R,R

R

Вычитание

I,I

I

1, R R, I

R

А * В

R, R

R

Умножение

I,I

I

I, R R, I

R

А/В

R, R

R

Вещественное

I,I

R

деление

I,R R, I

R

A div В

I,I

I

Целое деление

A mod В

I,I

I

Остаток от целого деления

        1. Стандартные математические функции Паскаля представ­лены в следующей таблице:

I – integer – целый тип; R – real – вещественный тип.

Обращение

Тип аргумента

Тип рез-та

Функция

abs (х)

I, R

I, R

Модуль аргумента

arctan (х)

I, R

R

Арктангенс( радианы )

cos (х)

I, R

R

Косинус (х в радианах)

ехр(х)

I, R

R

ех — экспонента

ln(x)

1, R

R

Натуральный логарифм

random

R

Псевдослучайное число в интервале [0, 1 ]

random (х)

I

I

Псевдослучайное число в интервале [0,х]

sin(x)

I, R

R

Синус (х — в радианах)

sqr(x)

I, R

R

Квадрат х

sqrt(x)

1, R

R

Корень квадратный

Старшинство операций

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

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

Операция

Приоритет

not

Первый

*, /, div, mod, and, shl, shr

Второй

+, -, or, xor

Третий

-, o, <, >,<=, >=, in

Четвертый

При определении порядка выполнения операций следует учитывать следующее:

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

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

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

Операции с равным приоритетом выполняются слева направо, если этот по­рядок не изменен с помощью круглых скобок.

Дополнительные функции в Паскале

              • Inc (Dec)

Функции Inc и Dec используются для увеличения и уменьшения значения аргумента на единицу.

Пример

Inc(7) = 8;

Dec(7) = 6;

              • Odd

Логическая функция Odd из модуля System принимает значение «истина» только в том случае, когда аргумент — нечетное число.

Пример

Odd(7) = true;

Odd(6) = false;

              • Trunc

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

Пример

Trunc(7,2856) = 7;

Trunc(4,99) = 4;

              • Round

Функция Round преобразует вещественное значение в ближайшее к нему значение типа LongInt, т. е. округляет аргумент до целого числа.

Пример

Round(7,2856) = 7;

Round(4,99) = 5;

              • Int

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

Пример

Int(7,2856) = 7,0000;

              • Frac

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

Пример

Frac(7,2856) = 0,2856;

Линейное программирование на языке Pascal

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

Тело программы, или раздел инструкций, начинается со служебного слова begin, на алгоритмическом языке оно обозначается словом начало, блок-схема же выглядит как овал:

После слова begin никогда не ставится точка с запятой.

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

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

На алгоритмическом языке end обозначается словом конец, а в блок-схемах – овалом, как и begin.

Команда вывода данных на экран

Для вывода информации на экран используются две команды: Write (вывод данных на экран) и WriteLn (вывод данных на экран, начиная с новой строки).

Окончание -Ln означает переход в новую строку.

Эти команды позволяют выводить на экран текст: write('текст'); writeln('текст') (пользователь увидит на экране надпись, заключенную в одиночные кавычки, в данном случае слово текст). Если использовать эти команды без одиночных кавычек: write(x), writeln(x), на экран выведется значение переменной x.

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

Команда ввода данных

Здесь также используются две команды: Read (загрузка введенных пользователем данных в переменную) и ReadLn (загрузка введенных пользователем данных в переменную и перевод каретки в новую строку).

Пример Read(x); readln(x) - переменная x приобретет значение, введенное пользователем с клавиатуры.

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

Математическое действие

Присваивание переменной некоторого вычисляемого значения обозначается следующей записью: <перем.1>:=F (переменная 1 задается некоторой формулой, которая может быть как арифметическим выражением, так и функцией от других переменных соответствующего типа).

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

Frame1

Пример

Найдем сумму некоторых натуральных чисел a и b.

Решение задачи оформим в виде блок-схемы, на алгоритмическом языке и на Паскале.

Алгоритм

Алгоритм: сумма;

Целые:a, b, s;

Начало

Ввести: a, b;

s:=a+b;

Вывести: s;

Конец.

Блок-схема

Pascal

Program summa;

Uses crt;

Var a,b,s: integer;

Begin

clrscr;

Writeln(‘введите числа’);

Read(a,b);

s:=a+b;

writeln(‘сумма равна ‘,s);

end.

Комментарии

  • Вводим переменные целого типа.

  • Надпись «введите числа» пользователь увидит на экране.

  • Числа a и b вводятся с клавиатуры

Вопросы для самостоятельной работы

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

  2. Какие из следующих заголовков можно использовать в Паскале в качестве имен программы: «Задача», «Zadacha1», «1zadacha», «zadacha 1», «zaDAcha_1», «zadacha1: summa»

  3. Что входит в состав модуля?

  4. Что нужно сделать, чтобы включить в программу процедуру очистки экрана?

  5. Какой тип включает в себя наибольший диапазон вещественных значений?

  6. Чем отличаются функции div и mod?

  7. Расставьте функции в порядке убывания их приоритета: xor, div, in, not.

  8. Какая функция могла быть использована в выражении: f(18,759)=1,70000000000E+1

  9. Чем отличаются команды write и writeln; read и readln?

  10. В каком элементе блок-схемы содержалась бы запись: «inc(n)»?

Задачи

Уровень A

    1. Даны числа x и y. Вычислить их разность, произведение и частное.

    2. Написать программу вычисления площади прямоугольника со сторонами a и b.

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

    4. Написать программу вычисления площадь поверхности куба по длине ребра.

    5. Написать программу вычисления объема цилиндра по радиусу основания и высоте.

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

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

    8. Вычислить длину окружности и площадь круга радиусом r.

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

    10. Дано действительное число x. Написать программу вычисления значения выражения 2x4 – 3x3 + 4x2 – 5x + 6.

Уровень B

    1. Вычислить расстояние между точками с координатами (x1, y1) и (x2, y2).

    2. Найти произведение цифр заданного четырехзначного числа.

    3. Найти площадь кольца, ограниченного окружностями радиусами R и r (R>r).

    4. Вычислить корни квадратного уравнения ax2 + bx + c = 0, заданного коэффициентами a, b, c (a ≠ 0 и D>0).

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

    6. Написать программу пересчета величины временного интервала, заданного в минутах, в величину, выраженную в часах и минутах.

Уровень С

    1. Найти сумму первых n членов арифметической прогрессии, если известны ее первый член и знаменатель.

    2. Найти площадь равнобедренной трапеции с основаниями a и b и углами при основании u (в радианах).

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

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

Ветвящиеся алгоритмы

Оператор условия

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

Если <условие>, тогда <действие 1>, иначе <действие 2>

На языке Pascal эта конструкция записывается аналогично:

If <условие> then <действие 1> else <действие 2>;

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

Иногда под каждой ветвью алгоритма нужно провести несколько действий:

В таком случае конструкция в Паскале остается прежней, но блоки действий ограничиваются служебными словами begin и end, причем перед командой else слово end употребляется без точки с запятой:

If <условие> then begin

<действие k1>;

<действие kn>;

end

else begin

<действие m1>;

<действие kn>;

end;

Запись на алгоритмическом языке остается неизменной:

Если <условие>, тогда <действие k1>;

<действие kn>,

иначе <действие m1>;

<действие kn>;

Неполное ветвление

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

Если <условие>, тогда <действие 1>

Подразумевается, что иначе никакие действия не производятся. Блок-схема тоже несколько упрощается.

Аналогично и на языке Паскаль мы просто отбрасываем часть конструкции (else…) и получаем:

If <условие> then <действие 1>

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

If <условие> then begin

<действие k1>;

<действие kn>;

end;

Пример

Определить, является ли треугольник со сторонами a, b, c равносторонним.

Решение

Алгоритм: треугольник;

Целые:a, b, c;

Начало

Ввести: a, b, c;

Если a=b=c, то вывод ‘да’, иначе вывод ‘нет’

Конец.

Program treugolnik;

Uses crt;

Var a,b,s: integer;

Begin

clrscr;

Writeln(‘введите стороны’);

Read(a,b,c);

if (a=b) and (b=c) then writeln(‘равносторонний‘) else writeln(‘неравносторонний’);

end.

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

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

case Выражение of

Константа 1: begin

<Инструкции 1>;

end;

Константа 2: begin

<Инструкции 2>;

end;

Константа N: begin

<Инструкции N>;

end;

end;

Если это не так, то выполняются инструкции, следующие после else:

case Выражение of

Константа 1: begin

<Инструкции 1>;

end;

Константа 2: begin

<Инструкции 2>;

end;

Константа N: begin

<Инструкции N>;

end

else <Инструкции>;

end;

Пример

По номеру дня недели определить его название.

Решение

Program dni_nedeli;

uses crt;

var k: integer;

begin

clrscr;

writeln(‘введите номер’);

read(k);

case k of

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

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

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

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

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

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

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

else writeln(‘не существует’);

end;

Вопросы для самостоятельной работы

  1. Для чего используются ветвящиеся алгоритмы?

  2. Сколько ветвей может быть у условного алгоритма? Что такое неполное ветвление?

  3. Как записывается на языке Pascal оператор условия с двумя ветвями, под каждой из которых выполняется одно действие; несколько действий?

  4. Как записывается на языке Pascal оператор условия с неполным ветвлением? (2 варианта)

  5. Как можно включить в алгоритм несколько условий одновременно?

  6. В чем отличие применения оператора выбора от оператора условия?

  7. Как записывается на языке Pascal оператор выбора? Какие варианты существуют в записи?

  8. Как обозначается сложное условие в блок-схеме? На алгоритмическом языке?

  9. В каком случае знак препинания после слова end не ставится?

Задачи

Уровень A

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

    2. Составить программу, позволяющую получить словесное описание школьных отметок (1 – плохо, 2 – неудовлетворительно и т.д.)

    3. Даны три действительные числа. Возвести в квадрат те из них, значения которых неотрицательны, и в четвертую степень – отрицательные.

    4. Даны целые числа m и n. Если числа не равны, то заменить меньшее число большим, оставив большее неизменным, а если равны, то заменить оба числа нулями.

    5. Дано трехзначное число N. Проверить, будет ли сумма его цифр четным числом.

    6. Написать программу, которая запрашивает у пользователя номер дня недели и выводит одно из сообщений: "Рабочий день", или "Выходной".

    7. Подсчитать количество целых чисел среди чисел a, b, c.

    8. Составить программу-результат гадания на ромашке – «любит – не любит», взяв за исходное данное количество лепестков.

    9. Определить правильность даты, введенной с клавиатуры (число – от 1 до 31, месяц – от 1 до 12).

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

Уровень B

    1. Даны три стороны одного и три стороны другого треугольников. Определить, имеют ли эти треугольники равные площади.

    2. Даны координаты трех вершин треугольника. Определить, будет ли этот треугольник равносторонним.

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

    4. Написать программу, которая после введенного с клавиатуры числа (в диапазоне от 1 до 999), обозначающего денежную единицу, дописывает слово "рубль" в правильной форме. Например, 12 рублей, 21 рубль и т. д.

    5. Заданы размеры a, b прямоугольного отверстия и размеры x, y, z кирпича. Определить, пройдет ли кирпич через отверстие.

    6. Написать программу, которая вычисляет дату следующего дня.

Уровень C

    1. Написать программу решения системы линейных уравнений:

a1x + b1y = c1

a2x + b2y = c2

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

    2. Пусть элементами равностороннего треугольника являются 1) сторона; 2) площадь; 3) высота; 4) радиус вписанной окружности; 5) радиус описанной окружности. По одному из элементов вычислить остальные.

    3. Найти координаты точек пересечения прямой y = kx + m и окружности радиусом R с центром в начале координат.

Циклические алгоритмы

Цикл – многократное повторение последовательности действий по некоторому условию Известны три типа циклических алгоритмических структур:

  • Цикл с предусловием;

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

  • Цикл с параметром.

В Паскале существуют операторы, реализующие все три типа циклов.

Цикл с предусловием

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

начало цикла

Пока <условие>, повторяй

<действие 1>;

<действие 2>;

<действие n>;

конец цикла;

На языке Паскаль эта структура реализуется оператором While:

While <условие> do <действие>;

Так же, как и в ветвящихся конструкциях, если необходимо произвести несколько действий, используются служебные слова begin и end.

While <условие> do begin

<действие 1>;

<действие 2>;

<действие n>;

end;

Пример

Одноклеточная амеба каждые 3 часа делится на 2 клетки. Сколько амеб будет через n часов?

Алгоритм амеба;

Целые: a,t,n;

Начало

Ввести: n;

a:=1;

t:=0;

Начало цикла

Пока t<=n повторяй

a:=2*a;

t:=t+3;

Конец цикла;

Вывести: ‘через ‘,n,’ часов будет ‘,a,’ амеб’;

Конец.

Program ameba;

uses crt;

Var a,t,n: integer;

begin

clrscr;

a:=1;

t:=0;

writeln(‘Введите время (в часах)’);

read(n);

while t<=n do begin

a:=2*a;

t:=t+3;

end;

writeln(‘через ‘,n,’ часов будет ‘,a,’ амеб’);

end.

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

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

Повторяй <действие 1>;

<действие 2>;

<действие n>

Пока не <условие>;

Аналогичным образом эта структура записывается на языке Паскаль:

Repeat <действие 1>;

<действие 2>;

<действие n>

until <условие>;

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

Пример

Одноклеточная амеба каждые 3 часа делится на 2 клетки. Сколько амеб будет через n часов?

Алгоритм амеба;

Целые: a,t,n;

Начало

Ввести: n;

a:=1;

t:=0;

Повторяй

a:=2*a;

t:=t+3

Пока не t>n;

Вывести: ‘через ‘,n,’ часов будет ‘,a,’ амеб’;

Конец.

Program ameba;

uses crt;

Var a,t,n: integer;

begin

clrscr;

a:=1;

t:=0;

writeln(‘Введите время (в часах)’);

read(n);

repeat

a:=2*a;

t:=t+3;

until t>n;

writeln(‘через ‘,n,’ часов будет ‘,a,’ амеб’);

end.

Цикл с параметром

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

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

              • Прямой цикл с параметром

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

Для i:= Kначальное до Kконечное повторяй

начало цикла

<действие 1>;

<действие 2>;

<действие n>;

конец цикла

Kначальное и Kконечное – некоторые значения целого типа, определяемые только один раз в начале цикла, причем Kначальное < Kконечное; параметр цикла принимает поочередно все целые значения, находящиеся в промежутке от Kначальное до Kконечное включительно.

В Паскале это записывается таким образом:

for i:= Kначальное to Kконечное do begin

<действие 1>;

<действие 2>;

<действие n>;

end;

Пример

Найдем сумму чисел от 1 до n, где n – натуральное число.

Алгоритм: числа;

Целые: i,n,s;

Начало

Ввести: n;

Для i:=1 до n повторяй s:=s+i;

Вывести: s;

Конец.

Program Chisla;

uses crt;

var i,n: integer; s: longint;

begin

clrscr;

Writeln(‘Введите натуральное число’);

read(n);

for i:=1 to n do s:=s+i;

writeln(‘Сумма равна ’,s);

end.

              • Обратный цикл с параметром

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

Для i:= Kконечное до Kначальное повторяй

начало цикла

<действие 1>;

<действие 2>;

<действие n>;

конец цикла

В записи на Паскале, кроме этого, слово to меняется на downto:

for i:= Kконечное downto Kначальное do begin

<действие 1>;

<действие 2>;

<действие n>;

end;

Если между begin и end находится только одна инструкция, то слова begin и end можно не писать.

Пример

В стаде 100 овец, каждая из которых за месяц дает 5кг шерсти. Ежемесячно волк крадет одну овцу из стада. Сколько шерсти состригут со всего стада за m месяцев?

Алгоритм: овцы;

Целые: o,sh,m;

Начало

Ввести: m;

sh:=0;

Если m>99, то m:=99;

Для o:=100 до (100-m) повторяй sh:=sh+5*o;

Вывести: sh;

Конец.

Program ovtsy;

uses crt;

var o,m,sh: integer;

begin

clrscr;

Writeln(‘Введите количество месяцев’);

read(m);

if m>99 then m:=99;

for o:=100 to (100-m) do sh:=sh+5*o;

writeln(‘Состригут ’,sh,‘ кг шерсти’);

end.

Принудительный выход из цикла

Иногда бывает удобно проводить проверку на возможный выход из цикла где-нибудь в его середине, а не в начале или конце. Такой выход из цикла обеспечивается процедурой break модуля System, которая прерывает выполнение самого внутреннего вложенного цикла, будь то for, while иди repeat. Указанный модуль подключается к программе автоматически, если в этом есть необходимость.

Пример

Ребенок каждую неделю покупает 2 мороженых по 5 рублей. Каждую неделю мороженое становится дороже на 1%. Сколько денег он потратит за n недель, с учетом, что у него есть только 200 рублей?

program morozhenoye;

uses crt;

var n,i: integer; ts,d: real;

begin

clrscr;

ts:=5;

writeln(‘введите количество недель’);

read(n);

for i:=1 to n do begin

ts:=ts*1.01;

d:=d+ts*2;

if d>200 then begin

break;

repeat d:=d-ts until d<200;

end;

end;

writeln(‘Ребенок потратит ’,d,‘ руб. за’,n,‘ недель’);

end.

Вопросы для самостоятельной работы

  1. Что такое цикл?

  2. Какие существуют виды циклов? В чем особенности применения циклов каждого вида?

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

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

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

  6. Как выглядит блок-схема для цикла с постусловием?

  7. Какие разновидности цикла с параметром существуют? В каких случаях они применяются?

  8. Как задается каждая из разновидностей цикла с параметром на алгоритмическом языке? На языке Паскаль?

  9. Как выглядит блок-схема для цикла с постусловием? Как отличается блок-схема для разновидностей цикла?

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

Задачи

Уровень A

    1. Начав тренировки, спортсмен в первый день пробежал 10 км. каждый день он увеличивал дневную норму на 10% нормы предыдущего дня какой суммарный путь пробежит спортсмен за 7 дней?

    2. Одноклеточная амеба каждые три часа делится на две клетки. Определить, сколько амеб будет через 3, 6, 9, …, 24 часа.

    3. Ежемесячная стипендия студента составляет A руб., а расходы на проживание превышают стипендию и составляют B руб. в месяц. Рост цен ежемесячно увеличивает расходы на 3%. Составьте программу расчета необходимой суммы денег, которую надо единовременно попросить у родителей, чтобы можно было прожить учебный год (10 месяцев), используя только эти деньги и стипендию.

    4. Написать программу, которая выводит на экран таблицу стоимости, яблок в диапазоне от 100 г до 1 кг с шагом 100.

    5. Написать программу, которая выводит таблицу значений функции у = |х|. Диапазон изменения аргумента — от -4 до 4, шаг приращения аргумента — 0,5.

    6. Написать программу, которая определяет максимальное число из введенной с клавиатуры последовательности положительных чисел (длина последовательности не ограничена, для завершения ввода вводится ноль).

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

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

    9. Написать программу, которая "задумывает" число в диапазоне от 1 до 10 и предлагает пользователю угадать число за 5 попыток.

    10. Написать программу проверки знания таблицы умножения. Программа должна вывести 10 примеров и выставить оценку: за 10 правильных ответов — "отлично", за 9 и 8 —"хорошо", за 7 и 6 — "удовлетворительно", за 6 и менее — "плохо".

Уровень B

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

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

    3. Найти сумму всех n-значных чисел (1 ≤ n ≤ 4).

    4. Найти сумму всех n-значных чисел (1 ≤ n ≤ 4), кратных m.

    5. Написать программу, которая вычисляет наибольший общий делитель двух целых чисел.

    6. Составить программу проверки утверждения: «Результатами вычислений по формуле x2 + x + 41 при 0 ≤ x ≤ 40 являются простые числа». Все результаты вывести на экран.

Уровень C

    1. У гусей и кроликов вместе 64 лапы. Сколько могло быть кроликов и гусей (указать все возможные варианты)?.

    2. Написать программу, которая преобразует введенное пользователем десятичное число от 1 до 255 в двоичное.

    3. Сколько можно купить быков, коров и телят, платя за быка 10 р., за корову – 5 р., а за теленка – 0,5 р., если на 100 р. надо купить 100 голов скота?

    4. Покупатель должен заплатить в кассу S рублей. У него имеются купюры достоинством в 1, 2, 5, 10, 50, 100, 500 руб. Сколько купюр отдаст покупатель, если он начинает платить с самых крупных?

Работа с массивами

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

Существует два вида массивов: линейные (одномерные) и многомерные (матрицы n-ного порядка)

Одномерные массивы

Одномерным называется массив, состоящий из простых переменных. Он задается с помощью команды такого вида:

<имя массива>: array[<нижний индекс>..<верхний индекс>] of <тип элементов>;

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

Если необходимо обратиться к компоненте с определенным номером (индексом), прибегают к записи вида:

<Имя массива>[<индекс>]

Индекс – выражение порядкового типа, идентификатор компоненты массива.

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

Пример

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

program massiv;

uses crt;

var m: array[1..20] of integer; n,i,: integer;

begin

clrscr;

for i:=1 to 20 do m[i]:=random(100);

writeln(‘введите номер элемента’);

read(n);

writeln(‘На позиции ’,n,‘ находится число ’,m[n]);

end.

Многомерные массивы

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

Многомерный массив задается аналогично линейному:

<имя массива>: array[<нижний индекс1>..<верхний индекс1>, <нижний индекс2>..<верхний индекс2>, … ,<нижний индекс n>..<верхний индекс n>] of <тип элементов>,

где nпорядок матрицы.

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

Пример

Составим и выведем на экран таблицу умножения.

program umnoheniye;

uses crt;

var u: array[1..10,1..10] of integer; i,j: integer;

begin

clrscr;

for i:=1 to 10 do begin

for j:=1 to 10 do u[i,j]:=i*j;

end;

for i:=1 to 10 do begin

for j:=1 to 10 do writeln(u[i,j]:3);

writeln;

end;

end.

Вопросы для самостоятельной работы

  1. Что такое массив? Из чего он состоит?

  2. Какие виды массивов существуют?

  3. Что есть одномерный массив? В каком виде он используется в жизни?

  4. Из чего состоит многомерный массив?

  5. Какие многомерные массивы существуют? Какой вид чаще всего используется?

  6. Какая команда в Паскале задает массивы?

  7. В чем отличие записей одно- и многомерных массивов?

  8. Как можно обратиться к отдельной компоненте массива в ходе программы?

  9. Как вводятся элементы массивов?

  10. Как вывести массив на экран? Какой прием для этого используется?

Задачи

Уровень A

    1. Составить массив из псевдослучайных чисел [0; 1] и отобразить значение и номер наименьшего элемента.

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

    3. В целочисленной последовательности есть нулевые элементы. Составить массив из номеров этих элементов.

    4. Составить массив из псевдослучайных чисел в диапазоне [-10; 10], вывести его на экран. Подсчитать, сколько в нем положительных, отрицательных и нулевых элементов.

    5. Дан массив натуральных чисел. Найти сумму элементов, кратных данному k.

    6. Дана последовательность действительных чисел. Заменить все ее члены, большие числа-предела z, значением z.

    7. Написать программу, которая вычисляет среднее арифметическое ненулевых элементов введенного с клавиатуры массива целых чисел.

    8. Написать программу, которая проверяет, находится ли в одномерном массиве введенное с клавиатуры число. Массив должен вводиться во время работы программы.

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

    10. Создать массив из действительных чисел. Поменять местами наибольший и наименьший элементы.

    11. Записать элементы данного одномерного массива в другой в обратном порядке.

    12. Каждый солнечный день улитка, сидящая на a-метровом дереве, поднимается вверх на 2 см, а каждый пасмурный день опускается вниз на 1 см. В начале наблюдения улитка находилась в b см от земли. Имеется 30-элементный массив, содержащий сведения о том, был ли соответствующий день пасмурным или солнечным. Написать программу, определяющую местоположение улитки на дереве к концу 30-го дня наблюдения.

    13. Последовательность чисел оканчивается нулем. Найти количество членов этой последовательности.

    14. Сформировать и вывести на экран матрицу второго порядка размером m×n по заданному образцу:

1 1 1 ... 1 1 1

1 0 0 ... 0 0 1

. . . . . . . . . . .

1 0 0 ... 0 0 1

1 1 1 ... 1 1 1

    1. Построить квадратную матрицу со стороной 2n таким образом:

n n

1 1 … 1 2 2 … 2

1 1 … 1 2 2 … 2 n

………………..

1 1 … 1 2 2 … 2

3 3 … 3 4 4 … 4

3 3 … 3 4 4 … 4 n

………………...

3 3 … 3 4 4 … 4

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

    2. Дана квадратная матрица. Записать вместо отрицательных элементов нули, а вместо положительных – единицы и вывести матрицу на экран.

    3. Создать прямоугольную матрицу и вывести на экран. Записать данные из нее в новый массив, поменяв местами строки и столбцы.

    4. Найти наибольший и наименьший элементы матрицы размером m×n и поменять их местами.

    5. Дана прямоугольная матрица. Найти строки с наибольшей и наименьшей суммами элементов. Вывести на печать найденные строки и суммы их элементов.

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

    7. Дана действительная матрица размером m×n, все элементы которой различны. В каждой строке выбирается элемент с наименьшим значением, затем среди этих чисел выбирается наибольшее. Указать индексы элемента с найденным значением.

    8. Для заданной квадратной матрицы сформировать одномерный массив из ее диагональных элементов и вывести его на экран.

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

Уровень B

    1. Дан одномерный массив a[n]. Найти

max(a[2], a[4], …, a[2k]) + min(a[1], a[3], …, a[2k+1]).

    1. Дана последовательность действительных чисел. Указать номера тех ее элементов, которые принадлежат отрезку [c, d].

    2. Последовательность чисел состоите из нулей и единиц. Поставить в начало этой последовательности нули, а затем единицы.

    3. Дана неубывающая последовательность действительных чисел. Вставить в нее действительное число b так, чтобы последовательность осталась неубывающей.

    4. Дан массив натуральных чисел. Найти среди них те, которые являются квадратами целых чисел.

    5. Дан массив из n натуральных чисел. Образовать новый массив, элементами которого будут числа из исходного, оканчивающиеся на k.

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

    7. Задан массив, содержащий несколько нулевых элементов. «Сжать» его, выбросив эти элементы. Дополнительный массив не использовать.

    8. Дан целочисленный массив с количеством элементов n. «Сжать» массив, выбросив из него каждый второй элемент. Дополнительный массив не использовать.

    9. Составить программу, которая заполняет квадратную матрицу со стороной n числами 1, 2, 3, …, n2, записывая их в нее по спирали.

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

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

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

    13. Дана действительная квадратная матрица 2n×2n. Получить новую матрицу, переставив ее блоки n×n по часовой стрелке.

    14. Дана вещественная матрица размером m×n. Переставляя ее столбцы и строки, добиться того, чтобы наибольший элемент оказался в левом верхнем углу.

    15. Определить, является ли заданная целая квадратная матрица симметричной относительно главной диагонали.

Уровень C

Сортировка массива

    1. Сортировка выбором. Требуется расположить элементы последовательности по убыванию. Для этого в массиве, начиная с первого, выбирается наибольший элемент и ставится на первое место, а первый – на место наибольшего. Затем, начиная со второго, эта процедура повторяется.

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

    3. Сортировка вставками. Требуется расположить элементы последовательности по возрастанию. Делается это так. Пусть a1, a2, …, ai – упорядоченная последовательность. Следующее число вставляется в последовательность так, чтобы новая последовательность была также возрастающей. Процесс производится до тех пор, пока все оставшиеся элементы не займут нужные места.

    4. Сортировка Шелла. Требуется расположить элементы последовательности по возрастанию. Для этого сравнивается пара соседних чисел ai и ai+1. Если ai ai+1, то пара продвигается на один элемент вперед, иначе производится перестановка, и пара сдвигается на один элемент назад.

    5. Алгоритм фон Неймана. Требуется расположить элементы последовательности по убыванию с помощью алгоритма сортировки слияниями: каждая пара соседних элементов сливается в одну группу из двух элементов (последняя группа может состоять из одного элемента); каждая пара соседних групп сливается в одну четырехэлементную группу и т.д. При каждом слиянии новая группа упорядочивается.

    6. Расположить элементы матрицы в порядке возрастания с помощью сортировки выбором.

    7. Расположить элементы матрицы в порядке возрастания с помощью сортировки обменами.

Работа со строковыми переменными

Строковые переменные

Строковыми называют константы и переменные, значением которых служит набор символов, заключенный в апострофы, обозначающие начало и конец набора (сами апострофы в состав набора не входят). Строковые константы и переменные имеют тип string. Этот тип данных относят к структурированным.

Формат этого типа данных – string[n], где n - константа из диапазона 0...255.

Например, '2%', '12345', 'Коля'. В данном случае '12345' не число, а набор символов - цифр, математические операции с таким набором проводить нельзя.

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

Пример

const

с = 'созидание';

k = '1993';

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

var

a: char;

b: string[20];

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

Строковая переменная может быть «пустой», т.е. не содержать ни одного символа, например, s:=".

Строковые переменные можно получать, соединяя значения переменных типа char:

П

Строковая переменная s собирается из

символов, вводимых с клавиатуры,

ример

For i:=1 to 10 do begin

read(z);

s:=s+z;

end;

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

Пример

'пролив'> Результат операции: true.

'11111 '>'111' Результат операции: true.

'11111 '>'2' Результат операции: false.

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

              • Length(st)

- значением функции является длина строковой переменной st.

Пример Length ('Привет!'); Результат: 7 (типа integer).

              • Copy(st,m,n)

- значением функции является подстрока из n символов, вырезанных из строки st, начиная с позиции, указанной параметром m

Пример сору('водопровод',6,3); Результат операции строка 'ров'

              • Delete(st,m,n)

- данная процедура удаляет n символов из строки st, начиная с позиции, указанной параметром m.

Пример

х:= 'abcdef;

Delete(x,2,3); Результат: переменной х типа string присвоено значение 'aef'.

              • Concat(st1,st2,...stn)

- соединение строк. Можно использовать конструкцию st1+st2,+...+stn.

Пример f := 'пи'; d := 'лот'; s := f + d; или s:=Concat(f,d) . Результат: s='пилот'

              • Insert(stl,st2,m)

- вставка в строку st2 строки st1, начиная с позиции m. Общая длина строки не превышает длину строки st2.

Пример

х:= 'aef';

Insert(x,'bcd',2); Результат: переменной х типа string присвоено значение 'abcdef'.

              • Pos(st1,st2)

- значением функции будет номер позиции, в которой в строке st2 первый раз встречается строка stl.

Пример pos('cd','abcdef); Результат: 3 (типа integer).

              • Str(x,st)

- заданное числовое значение преобразуется в строку символов. Значение присваивается переменной st.

Пример

х:=7;

Str(x,s); Результат: переменная s приобрела значение '7' (string).

Y:=7.0;

Str(y,s); Результат: переменная s приобрела значение '7.0000000000Е+00' (string).

              • Val(st,x,c)

- строка символов st, состоящая из цифр, преобразуется в число. Значение передается переменной х. Параметр определяется средствами Турбо Паскаля.

Пример

s:='27';

Val(s,x,p); Результат: переменная х приобрела значение 27 (integer), переменная р значение 0.

s:='7.6';

Val(s,y,p); Результат: переменная у приобрела значение 7.6000000000Е+00 типа real, переменная р значение 0.

              • UpCase('текст')

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

Пример

UpCase('p') = 'P'

UpCase('B') = 'B'

UpCase('+') = '+'

              • LowCase('текст')

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

ASCII коды клавиш

Символам и некоторым командам присвоены десятичные ASCII коды (ASCII – American Standard Code for Information Interchange – американский стандартный код для обмена информацией), которые очень удобно использовать при решении некоторых задач в Паскале, особенно задач со строковыми переменными.

Для работы с ASCII кодами используются переменные типа char и специальные функции:

              • Readkey

  • считывание кода клавиши

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

              • Ord(x)

- возвращает код символьного аргумента

              • Chr(x)

- возврат клавиши по числовому коду

0

NUL

1

SOH

2

STX

3

ETX

4

EOT

5

ENQ

6

ACK

7

Звуковой сигнал динамика

8

Возврат курсора на одну позицию

9

Горизонтальная табуляция

10

Перевод строки

11

VT

12

Прогон страницы

13

Возврат каретки

14

SO

15

SI

16

DLE

17

DC1

18

DC2

19

DC3

20

DC4

21

NAK

22

SYN

23

ETB

24

CAN

25

EM

26

Конец файла

27

Символ Escape

28

FS

29

GS

30

RS

31

US

32

SP

33

!

34

"

35

#

36

$

37

%

38

&

39

'

40

(

41

)

42

*

43

+

44

,

45

-

46

.

47

/

48

0

49

1

50

2

51

3

52

4

53

5

54

6

55

7

56

8

57

9

58

:

59

;

60

<

61

=

62

>

63

?

64

@

65

A

66

B

67

C

68

D

69

E

70

F

71

G

72

H

73

I

74

J

75

K

76

L

77

M

78

N

79

O

80

P

81

Q

82

R

83

S

84

T

85

U

86

V

87

W

88

X

89

Y

90

Z

91

[

92

\

93

]

94

^

95

_

96

`

97

a

98

b

99

c

100

d

101

e

102

f

103

g

104

h

105

i

106

j

107

k

108

l

109

m

110

n

111

o

112

p

113

q

114

r

115

s

116

t

117

u

118

v

119

w

120

x

121

y

122

z

123

{

124

|

125

}

126

~

127

DEL

128

А

129

Б

130

В

131

Г

132

Д

133

Е

134

Ж

135

З

136

И

137

Й

138

К

139

Л

140

М

141

Н

142

О

143

П

144

Р

145

С

146

Т

147

У

148

Ф

149

Х

150

Ц

151

Ч

152

Ш

153

Щ

154

Ъ

155

Ы

156

Ь

157

Э

158

Ю

159

Я

160

а

161

б

162

в

163

г

164

д

165

е

166

ж

167

з

168

и

169

й

170

к

171

л

172

м

173

н

174

о

175

п

176

177

178

179

180

181

182

183

184

185

186

187

188

189

190

191

192

193

194

195

196

197

198

199

200

201

202

203

204

205

206

207

208

209

210

211

212

213

214

215

216

217

218

219

220

221

222

223

224

р

225

с

226

т

227

у

228

ф

229

х

230

ц

231

ч

232

ш

233

щ

234

ъ

235

ы

236

ь

237

э

238

ю

239

я

240

Ё

241

ё

242

Є

243

є

244

Ї

245

ї

246

Ў

247

ў

248

249

250

.

251

252

253

¤

254

Вопросы для самостоятельной работы

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

  2. Как задаются строковые переменные?

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

  4. Для чего используются функции length, copy, delete?

  5. Какая функция позволяет соединить строки; вставить одну строку в другую; найти символы одной строки в другой?

  6. Какие функции используются для перевода значений строкового типа в числовой и наоборот?

  7. Какие функции позволяют изменять регистр символов? Как ограничена область их применения?

  8. Что такое ASCII коды клавиш?

  9. Какой тип используется для ASCII кодов клавиш? Вспомните особенности этого типа (раздел «Типы переменных в Паскале»).

  10. Какие функции применяются для работы с ASCII кодами клавиш?

Задачи

Уровень A

    1. Написать программу, которая запрашивает имя пользователя и здоровается с ним.

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

    3. Дана строка. Подсчитать, сколько в ней слов.

    4. Дана строка. Подсчитатать количество вхождений букв k, r, t.

    5. Дана строка. Подсчитать, сколько различных символов встречаются в ней. Вывести их на экран.

    6. Дана строка (без знаков препинания). Удалить те слова, которые содержат хотя бы одну букву k.

    7. Имеется строка, содержащая буквы латинского алфавита и цифры. Вывести на экран длину наибольшей последовательности идущих подряд цифр.

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

    9. Определить, сколько раз в строке встречается заданное слово.

    10. Упорядочить данный массив строчных английских букв по алфавиту.

Уровень B

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

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

    3. Строка содержит слово. Определить, является ли оно палиндромом.

    4. В данном тексте слова зашифрованы – каждое слово записано наоборот. Расшифровать сообщение.

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

    6. Дана строка. Подсчитать, какие символы и сколько раз в ней встречаются.

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

Уровень C

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

    2. Упорядочить строку русских слов по алфавиту.

    3. Дана строка с текстом, в котором некоторые слова записаны подряд несколько раз. Получить новую строку, удалив из исходной все лишние слова.

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

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

Подпрограмма-функция

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

Function <имя функции>(var <параметры - аргументы>: <тип>): <Тип результата>;

const <описание локальных констант>;

var <описание локальных переменных>;

begin

<инструкции подпрограммы>;

end;

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

Обращение к подпрограмме-функции является операндом в выражении и осуществляется посредством имени подпрограммы.

Пример

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

Program naibolshie_tsifry;

uses crt;

var ch: array[1..20] of longint; s,k,h: integer;

function maxts(n: longint): integer;

var ts: array[1..10] of integer; i,j: integer;

begin

for i:=1 to 10 do begin

ts[i]:=n mod 10;

n:=n div 10;

if n=0 then break;

end;

for j:=1 to (i-1) do begin

if ts[j]>ts[j+1] then maxts:=ts[j] else maxts:=ts[j+1];

end;

end;

begin

clrscr;

writeln(‘введите количество чисел’);

readln(k);

for h:=1 to k do begin

writeln(‘введите ’,h,‘ число’);

readln(ch[h]);

s:=s+maxts(ch[h]);

end;

writeln(s);

readkey;

end.

Подпрограмма-процедура

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

Procedure <Имя процедуры>(<параметры-аргументы>: <типы>; var <параметры-результаты>: <типы>);

const <описание локальных констант>;

var <описание локальных переменных>;

begin

<инструкции подпрограммы>;

end;

Обращение к процедуре – отдельный оператор.

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

Пример

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

Program naibolshiye_tsifry_2;

uses crt;

var n,m: longint; nt,mt,mr,nr: integer;

procedure maxnum(a: longint; var t,r: integer);

var p,i,ts: integer;

begin

t:=0;

while a<>0 do begin

ts:=a mod 10;

a:=a div 10;

inc(p);

if ts>t then begin

t:=ts;

r:=p;

end;

end;

for i:=1 to (r-1) do r:=r*10;

end;

begin

clrscr;

writeln(‘Введите первое число’);

read(n);

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

read(m);

maxnum(n,nt,nr);

maxnum(m,mt,mr);

m:=m-mt*mr+nt*mr;

n:=n-nt*nr+mt*nr;

writeln(n,‘ ’,m);

readskey;

end.

Вопросы для самостоятельной работы

  1. Что такое подпрограммы?

  2. Какую роль исполняют подпрограммы? В каких случаях удобно их использовать?

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

  4. Чем характеризуются подпрограммы-функции?

  5. Как задается подпрограмма-функция в Паскале?

  6. Как осуществляется обращение к подпрограмме-функции?

  7. Чем характеризуются подпрограммы-процедуры?

  8. Как задается подпрограмма-процедура в Паскале?

  9. Как осуществляется обращение к подпрограмме-функции?

  10. В чем важнейшее различие двух видов подпрограмм?

Задачи

Во всех задачах этого раздела использовать подпрограммы.

Уровень A

    1. Написать программу нахождения наибольшего и наименьшего из трех чисел.

    2. На плоскости заданы своими координатами n точек (координаты занесены в массив). Составить программу, определяющую между какими точками расстояние наибольшее.

    3. Даны две дроби и (A, B, C, D – натуральные числа). Составить программу: деления, умножения дроби на дробь, сложения и вычитания дробей. Ответ должен быть несократимой дробью.

    4. Сформировать массив x(n), n-ый член которого определяется по формуле .

    5. Составить программу вычисления суммы факториалов всех четных чисел от m до n.

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

    7. Дано натуральное число. Найти следующее за ним простое число.

    8. Дано натуральное число n. Составить программу формирования массива, элементами которого являются цифры числа n.

    9. Составить функцию нахождения наименьшего нечетного натурального делителя k (k≠1) для любого заданного натурального числа.

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

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

Уровень B

    1. Треугольник задан координатами своих вершин. Составить программу вычисления его площади.

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

    3. Два натуральных числа называют «дружественными», если каждое из них равно сумме всех делителей (кроме его самого) другого. Найти все пары «дружественных» чисел, которые не больше данного числа n.

    4. Натуральное число, в записи которого n цифр, называется числом Амстронга, если сумма его цифр, возведенная в степень n, равна самому этому числу. Найти все такие числа от 1 до k.

    5. Найти все натуральные n-значные числа, цифры в которых образуют строго возрастающую последовательность.

    6. Найти все натуральные числа, не превосходящие заданного n, которые делятся на каждую из своих цифр.

    7. На части катушки с автобусными билетами номера шестизначные. Составить программу, определяющую количество счастливых билетов на катушке, если меньший номер билета – n, больший – m (билет считается счастливым, если сумма первых трех цифр равна сумме трех последних).

Уровень C

    1. Дано четное число n>2. Проверить для него гипотезу Гольдбаха: каждое четное число представляется в виде суммы двух простых чисел.

    2. Составить программу перевода данного натурального числа в p-ичную систему счисления (2 ≤ p ≤ 9).

    3. Дана символьная строка, представляющая собой запись натурального числа в p-ичной системе счисления. Составить программу перевода этого числа в десятичную систему счисления.

Графика в Паскале

Графический экран работает в двух режимах:

              • Текстовой режим (каждый символ занимает 6 пикселов по горизонтали и 8 по вертикали);

              • Графический режим (экран рассматривается как последовательность точек. Каждый пиксел характеризуется координатами X, У.Начало координат находится в левом верхнем углу. Пиксел определяют следующие атрибуты: координата по X, координата по У, цвет).

Переход в графический режим

До начала составления программы необходимо подключить графический драйвер (программа, которая обслуживает адаптер дисплея) ***.bgi - расширение файла драйвера.

InitGraph (Driver, Mode,' <полный путь>');

Путь к папке BGI (C:\BP\BGI).

Обязательно Driver, Mode должны быть определены в области описания переменных Var.

Пример: Var driver, mode: Integer;

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

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

Цветовое оформление

SetColor (<цвет>); – установка цвета элемента

SetBkColor (<цвет>); – установка цвета фона

SetFillStyle (<стиль заполнения>,<цвет>); – установка способа закраски элемента

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

Константа

Цвет

Имя

Значение

Black

0

Черный

Blue

1

Синий

Green

2

Зеленый

Cyan

3

Бирюзовый

Red

4

Красный

Magenta

5

Малиновый

Brown

6

Коричневый

Lightgrey

7

Светло-серый

Darkgrey

8

Темно-серый

Lightblue

9

Светло-голубой

Lightgreen

10

Светло-зеленый

Lightcyan

11

Светло-бирюзовый

Lightred

12

Светло-красный

Lightmagenta

13

Светло-малиновый

Yellow

14

Желтый

White

15

Белый

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

Константа

Тип

Имя

Значение

EmptyFill

0

Заполнение цветом фона

SolidFill

1

Заполнение текущим цветом

LineFill

2

Заполнение линиями -----

LineSlashFill

3

Заполнение линиями /////

SlashFill

4

Заполнение линиями /////

BkSlashFill

5

Заполнение линиями \\\\\

HatchFill

7

Заполнение вертикально-горизонтальными тонкими штриховыми линиями ++++++

XHatchFill

8

Заполнение ХХХХХ

InterLeaveFill

9

Штриховка по горизонтали частыми тонкими линиями

WideDotFill

10

Заполнение редкими точками

CloseDotFill

11

Заполнение частыми точками

Пример

SetFillStyle (11,2); (11- стиль, 2 - цвет)

Графические примитивы

              • MoveTo(x,y)

– перемещение указателя в точку с координатами (x, y)

              • PutPixel(x,y,z)

– вывод точки (z – цвет)

              • Line(xl,yl,x2,y2)

– отрезок с заданными координатами конца и начала.

              • RecTangle(xl,yl,x2,y2)

– xl,yl,x2,y2 - координаты концов главной диагонали прямоугольника

              • Bar(xl,yl,x2,y2)

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

              • Circle(x,y,r)

– окружность радиусом r

              • Ellipse(x,y;ul,u2;xr,yr)

х,у – центр эллипса; ul,u2 – угол. Отсчитывает против часовой стрелки и указывается в градусах; дуга вычерчивается от заданного начального угла ul до конечного u2 ; xr, yr – полуоси.

              • FloodFill(x,y,z)

– заполнение внутренней или внешней области замкнутой фигуры стилем, заданным процедурой SetFillStyle ранее, (х, у) – точка внутри или снаружи фигуры, z - цвет.

              • Delay(x)

– установка паузы перед выполнением следующей команды в миллисекундах. 1 секунда = 1000 миллисекунд.

              • x:=GetMaxX

– определение максимального значения по оси ОХ

              • y:=GetMaxY

– определение максимального значения по оси OY

Пример

Нарисовать возникающую из центра экрана окружность, увеличивающуюся и меняющую цвет от 0 до 15 с шагом 5 до границы экрана.

program circ;

uses graph, crt;

var driver, mode, i, с : integer;

begin

clrscr;

initgraph (driver, mode, ' c: \bp\bgi ');

while i<=400 do begin

inc (c) ;

if c=16 then c:=l;

setcolor (c) ;

circle (320, 240, i) ;

delay(l000) ;

setcolor (0) ;

circle (320, 240, i) ;

i:=i+5;

end;

closegraph;

readln;

end.

Активация графического модуля

Переход в графический режим экрана

с – цвет очередного круга

Закрытие видеорежима

Вопросы для самостоятельной работы

  1. Чем характеризуется экран, находящийся в графическом режиме?

  2. Как осуществляется переход в графический режим? Какие нюансы при этом надо учитывать?

  3. Какие основные действия возможны в графическом режиме?

  4. Как обозначаются цвета в Паскале?

  5. С помощью каких команд задается цветовое оформление в Паскале?

  6. Какие еще варианты цветового оформления, кроме заливки цветом, существуют?

  7. Какие геометрические фигуры можно изобразить в Паскале? Как они задаются?

  8. Как задается цвет контура фигуры; цвет и стиль заливки?

  9. Какая команда позволяет пользователю увидеть результат программы, т. е. задерживает на некоторое время выполнение инструкций программы?

Задачи

Уровень A

    1. Написать программу, которая вычерчивает на экране домик.

    1. Написать программу, которая выводит на экран флаг Олимпийских игр. Изображение флага приведено ниже (одной клетке соответствует пять пикселов).

    1. Написать программу, которая вычерчивает на экране кораблик.

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

    2. Написать программу, которая вычерчивает на экране шестиугольник.

    3. Написать программу, которая рисует на экране Государственный флаг России.

    4. Написать программу, которая рисует на экране веселую рожицу желтого цвета.

    1. Написать программу, которая выводит на экран узор, изображенный ниже.

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

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

Уровень B

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

    2. Написать программу, которая выводит на экран точечный график функции у = 0,5х2 + 4х — 3. Диапазон изменения аргумента — от —15 до 5, шаг аргумента — 0,1. График вывести на фоне координатных осей, точка пересечения которых должна находиться в центре экрана.

    3. Написать программу, которая рисует окружность, движущуюся по экрану.

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

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

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

Уровень C

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

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

    3. Написать программу, которая выводит на экран график функции у — 2 Sin(x) е*/5.

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

Работа с файлами

с расширением txt

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

  1. Установление связи с файлом

Файл связывается с программой через переменную типа text (integer, char).

assign(<переменная>, 'полный путь к файлу');

  1. Определение цели открытия файла

  • Только чтение

    reset(<переменная>);

    • Перезапись (старые данные в файле стираются).

    rewrite(<переменная>);

    • Дописывание в конец файла

    append(<переменная>);

    1. Загрузка данных из файла в переменную в Паскале

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

    while not eof(<переменная>) do begin

    end;

    EOF – end of file – конец файла.

    Собственно загрузку каждого символа из файла в переменную осуществляет оператор:

    readln(<переменная>,<переменная2>);

    Откуда? Куда?

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

    1. Запись данных в файл

    write(<переменная>,<переменная3> ИЛИ '<текст>');

    Куда? Что?

    Также может использоваться оператор writeln (запись начнется с новой строки).

    writeln(<переменная>,<переменная3> ИЛИ '<текст>');

    Куда? Что?

    1. Закрытие файла

    Любой открытый (assign) файл нужно закрыть:

    close(<переменная>);

    Последовательность закрытия роли не играет.

    Пример

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

    Program faily;

    uses crt;

    var inf,outf: text; t: string; ch: longint; o: boolean; i: integer;

    begin

    clrscr;

    assign(inf,‘c:\in_f.txt’);

    assign(outf,‘c:\out_f.txt’);

    reset(inf);

    rewrite(outf);

    while not eof(inf) do read(inf,t);

    val(t,ch,o);

    if o=true then write(outf,‘не является’) else write(outf,‘является’);

    close(inf);

    close(outf);

    end.

    Вопросы для самостоятельной работы

    1. С чего начинается работа с файлом с расширением txt? Какая команда при этом используется?

    2. Как зависит выбор команды для работы с файлом от цели его открытия?

    3. Какая команда делает возможной обработку данных, хранящихся в файле?

    4. Какая команда позволяет заносить данные в файл?

    5. Какой командой завершается работа с файлом?

    Задачи

    Уровень A

      1. Написать программу, которая на сменном диске компьютера (А:) создает файл numbers.txt и записывает в него 5 введенных пользователем целых чисел (каждое число – в отдельную строку).

      2. Напишите программу, которая дописывает в файл a:\numbers.txt 5 введенных пользователем целых чисел. Убедитесь при помощи редактора текста, что в файле находятся 10 чисел.

      3. Написать программу, которая выводит на экран содержимое файла a:\numbers.txt.

      4. Написать программу, которая вычисляет среднее арифметическое чисел, находящихся в файле a:\numbers.txt.

      5. Написать программу, которая позволяет просматривать текстовые файлы (выводит на экран содержимое файла), например, файлы исходных программ Turbo Pascal. Имя просматриваемого файла должно вводиться во время работы программы.

      6. Написать программу, которая дописывает в файл phone.txt, находящийся на диске C:, фамилию и номер телефона, например, вашего товарища. Если файла на диске нет, то программа должна создать его.

      7. Написать программу, используя которую можно за один сеанс работы добавить информацию о нескольких людях в файл a:\phone.txt.

      8. Написать программу, которая позволяет найти нужные сведения в телефонном справочнике (a:\phone.txt). Программа должна запрашивать фамилию человека и выводить его телефон. Если в справочнике есть одинаковые фамилии, то программа должна вывести список всех людей, имеющих эти фамилии.

      9. Напишите программу, которая объединяет возможности программ Добавление в телефонный справочник И Поиск в телефонном справочнике.

      10. Написать универсальную программу тестирования. Тест, последовательность вопросов и варианты ответов должны находиться в текстовом файле. Количество вопросов теста не ограничено. Однако предлагается ввести следующее ограничение: текст вопроса и альтернативных ответов не должен занимать более одной строки экрана. Программа должна выставлять оценку по следующему правилу: ОТЛИЧНО — за правильные ответы на все вопросы, ХОРОШО — если испытуемый правильно ответил не менее, чем на 80% вопросов, УДОВЛЕТВОРИТЕЛЬНО — если правильных ответов более 60%, и ПЛОХО — если правильных ответов меньше 60%.

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