авторефераты диссертаций БЕСПЛАТНАЯ БИБЛИОТЕКА РОССИИ

КОНФЕРЕНЦИИ, КНИГИ, ПОСОБИЯ, НАУЧНЫЕ ИЗДАНИЯ

<< ГЛАВНАЯ
АГРОИНЖЕНЕРИЯ
АСТРОНОМИЯ
БЕЗОПАСНОСТЬ
БИОЛОГИЯ
ЗЕМЛЯ
ИНФОРМАТИКА
ИСКУССТВОВЕДЕНИЕ
ИСТОРИЯ
КУЛЬТУРОЛОГИЯ
МАШИНОСТРОЕНИЕ
МЕДИЦИНА
МЕТАЛЛУРГИЯ
МЕХАНИКА
ПЕДАГОГИКА
ПОЛИТИКА
ПРИБОРОСТРОЕНИЕ
ПРОДОВОЛЬСТВИЕ
ПСИХОЛОГИЯ
РАДИОТЕХНИКА
СЕЛЬСКОЕ ХОЗЯЙСТВО
СОЦИОЛОГИЯ
СТРОИТЕЛЬСТВО
ТЕХНИЧЕСКИЕ НАУКИ
ТРАНСПОРТ
ФАРМАЦЕВТИКА
ФИЗИКА
ФИЗИОЛОГИЯ
ФИЛОЛОГИЯ
ФИЛОСОФИЯ
ХИМИЯ
ЭКОНОМИКА
ЭЛЕКТРОТЕХНИКА
ЭНЕРГЕТИКА
ЮРИСПРУДЕНЦИЯ
ЯЗЫКОЗНАНИЕ
РАЗНОЕ
КОНТАКТЫ


Pages:     | 1 || 3 |

«ФЕДЕРАЛЬНОЕ АГЕНСТВО ПО ОБРАЗОВАНИЮ РОССИЙСКОЙ ФЕДЕРАЦИИ МОСКОВСКИЙ АВТОМОБИЛЬНО-ДОРОЖНЫЙ ИНСТИТУТ ...»

-- [ Страница 2 ] --

( ) Forward – поиск вниз по тексту;

( ) Backward – поиск вверх по тексту;

Scope:

( ) Global – искать во всём тексте;

( ) Select text – искать в выделенном тексте;

Origin:

( ) From cursor – начать поиск от текущего положения курсора;

( ) Entire scope – начать поиск от начала текста.

В Replace можно сделать выбор между кнопками [OK] – поиск и замену одной строки, с повторением действий функцией Search Again или выполнить эти действия по всему тексту сразу [Change All].

5.6. Меню Run и Compile – запуск программы на выполнение и её компиляция В каждом из этих меню мы рассмотрим только по одной функ ции.

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

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

5.7. Меню Window – работа с окнами При работе в среде Turbo можно открыть несколько окон ре дактора (например, два файла с программами и два файла с исход ными данными к ним), окно буфера Clipboard, окно со справочной информацией, окно вывода, окна наблюдения и вычисления. С по мощью функций этого меню их можно разместить на экране стан дартным или своим способом, можно перемещаться вверх и вниз по окнам, открыть дополнительные, или закрыть ненужные. Только од но окно в двойной рамке является активным, именно его можно кор ректировать или запускать на выполнение.

Tile - стандартное размещение всех окон экрана черепицей.

Cascade – стандартное размещение всех окон каскадом.

Close all – удаляет с экрана все окна.

Size/Move CtrlF5 - позволяет изменить положение и раз меры активного окна. Рамка становится одинарной и меняет свой цвет. Клавиши,,, перемещают (Move) окно по эк рану, а эти же клавиши при нажатой клавише Shift позволяют ме нять его размер (Size). Когда положение и размер окна установле ны, нажимается клавиша Enter и окно снова становится активным в двойной рамке.

Zoom F5 - распахивает активное окно во весь экран, или возвращает его к прежнему размеру.

Next F6 - активным становится следующее окно.

Previous ShiftF6 - активным становится предыдущее ок но.

Close AltF3 - удаляет с экрана активное окно.

List... Alt0 - показывает список всех открытых окон.

Каждое окно справа вверху имеет номер от 1 до 9, вместо функций Next и Previous для вызова нужного окна можно воспользо ваться клавишами Altномер окна.

5.8. Меню Help – справочная служба Contents F1 - открытие окна справочной службы.

Index ShiftF1 - вызов оглавления справочной службы.

Topic Search CtrlF1 - вызов контекстной справки по язы ку.

Previous Topic AltF1 - вывод предыдущего справочного окна.

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

• About On line Help •… • Borland Pascal Menu – по меню, • The Editor – по командам редактора, • Function – по стандартным функциям, • Procedure – по стандартным процедурам, •… 5.9. Задание на лабораторную работу по меню и редактору среды Turbo Работа в среде Turbo, использование команд редактора этой среды и функций меню FILE, EDIT, SEARCH, WINDOW.

1. Загрузить среду Turbo Pascal (c:\bp\bin\turbo.exe).

2. Сменить текущую папку c:\bp\bin, например, на c:\1acy (File / Change Dir...).

3. В двух окнах редактора (File / Open...) набрать по 4- строк текстов двух файлов. Тексты могут не иметь смысла, но луч ше, чтобы в одном были только латинские буквы, в другом русские буквы или цифры.

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

P1.pas Clipboard ASDEF HJU XSER N MUY AAAADDDDFG P2.pas 123 5467 5. Проверить работу всех функций меню Edit (Cut, Copy, Paste, Clear, Undo, Redo). Скопировать фрагмент из одного файла, добавить в него что-то прямо в буфере и записать этот фрагмент в другой файл. Записать фрагмент одного файла в отдельный файл, дать ему имя, например sms.pas, а потом вставить его в другой файл.

6. Сохранить файлы один под тем же именем, другой под другим именем и в другой папке (File /Save, File / Save as...).

7. Используя функции меню Search (Find, Replace, Search again), назначать различные режимы зависимым и независимым пе реключателям диалогового окна («заменить все заглавные буквы D на символы xxz, по одному, все сразу, подтверждая каждую замену»

и пр.).

8. Сдать работу преподавателю 6. СХЕМЫ АЛГОРИТМОВ 6.1. Циклический сдвиг элементов массива вправо Продолжим рассмотрение различных схем алгоритмов, кото рое было начато алгоритмами значение и индекс максимального элемента в массиве. Первый алгоритм, который мы подготовим – это циклический сдвиг всех десяти элементов массива А вправо на один элемент. Новый массив заводить не будем.

A1 A2 A3... A8 A9 A10 A10 A1 A2... A7 A8 A После ввода всех элементов массива, следует в какой-то об ласти памяти (Р) запомнить значение последнего элемента, так как он выпадает из общего алгоритма. Теперь десятому можно присво ить значение девятого, девятому – восьмое и так далее, последнее присвоение в этом цикле на второе место поместить значение пер вого, таким образом, номера элементов массива меняются от деся ти до двух с шагом минус единица. После завершения цикла перво му элементу присваиваем значение Р и можем вывести перегруппи рованный массив. На рис. 6.1 приведена эта схема.

Начало Вывод ai=ai- i= ai i=i- Ввод ai i=i+ i=i+ i= i= a1=p i= i=1 Конец p=a i= ПопробуйтеСдвиг элементов массива на сдвиг вправо Рис. 6.1. самостоятельно выполнить один влево.

6.2. Циклические участки в вычислениях без массивов Циклические участки в вычислениях встречаются и в задачах, где массивы не присутствуют. Пусть для всех a= X =b, в n точках найти y=sinx+cosx. Шаг изменения Х от a до b найдём по выраже нию (b-a)/(n-1). Схема алгоритма приведена на рис. 6.2.

6.3. Сумма элементов массива чётных по значению или индексу Два похожих по звучанию задания, реализация которых – раз ная.

В массиве из 20 элементов целых чисел найти сумму Начало Вывод Ввод x,y a,b,h x=x+h x=a Рис. 6.2. Циклический участок без массива y=sinx+cosx x=b Конец сначала чётных по значению, потом по порядковому номеру эле мента. В первом случае, следует проверять, делится ли число на два. В схеме не нужно задавать конкретную реализацию этого алго ритма, так как для разных языков она может быть разной, но мы рассмотрим несколько.

• возьмём частное от деления ai на два (div или, при отсутст вии такой операции, следует взять целую часть от результата), за тем умножим на два, если результат равен элементу массива, то элемент – чётный;

• возьмём остаток от деления ai на два (mod), если он равен нулю, то число – чётное;

• в Паскале есть специальная функция (odd), если её значе ние - true, то число – нечётное.

Для второго алгоритма следует в сумму включать элементы массивов a2, a4,..., a20, то есть значение переменной i менять с ша гом два, а не один и циклические вычисления начинать со второго элемента. Схемы этих алгоритмов приведены на рис. 6.3. Не за будьте задать начальное значение сумме, и обратите внимание, что в первом случае ввод элементов массива совмещён с алгоритмом, а во втором случае используются два цикла.

6.4. Индексы последнего и первого отрицательного элемента в массиве В двух следующих алгоритмах будем находить индекс К, в Начало Начало S=0 i= i=1 Ввод ai Ввод ai i=i+ ai чёт- i= ное?

S= S=S+ai i= i=i+ S=S+ai i=i+ i= i= Вывод S Вывод a) б) S Конец Конец Рис. 6.3. Сумма элементов массива четных по значению (а) и индексу (б) первом случае последнего отрицательного элемента, а во втором – первого. На рис. 6.4 приведены эти две схемы. В первом случае ввод и алгоритм в одном цикле, во втором случае сначала вводим все элементы, а потом в цикле от а20 до а1 находим первый отрица тельный элемент. Начальное присвоение К=0 позволяет зафикси ровать случай, когда в массиве нет отрицательных элементов. Схе ма алгоритма представлена на рис. 6.4.

6.5. Досрочный выход из цикла при накоплении суммы и фор мирование нового массива из всех элементов исходного На рис. 6.5.а показана схема алгоритма задачи, когда сумми рование элементов следует прекращать, и выдавать сообщение о номере элемента, при котором это событие происходит (в качестве Начало Начало k=0 i= i=1 Ввод ai Ввод ai i=i+ i= ai k= k=i i= i=i+ ai i= k=i i=i- k Вывод k Вывод отр. нет i= a) б) Конец k Рис. 6.4. Индекс последнего (а) и первого (б) отрицательного элемента Вывод k Вывод отр. нет Конец условия возьмём отрицательное значение суммы). Во втором при мере на рис. 6.5.б по заданному условию из исходного массива формируется новый массив.

1, если xi 0, Yi = 0, если xi =0, -1, если xi 0.

Начало Начало i= i= Ввод xi Ввод ai i=i+ xi i= yi= xi= S= i= yi=- yi= Вывод S= xi,yi i=i+ Вывод i S=S+ai i=i+ i= i= Конец Конец Рис. 6.5.a. Номер элемента, при котором Рис. 6.5.б. Новый массив сумма - отрицательна формируется из исходного 6.6. Формирование нового массива из части элементов исходного Подготовим последнюю схему алгоритма: заданы значения элементов массива А. Определить количество элементов, которые меньше величины (а1+а20)/2. Сформировать новый массив В, в ко торый войдут те элементы исходного, которые больше среднего арифметического всего массива. В первом циклическом участке бу дем вводить элементы исходного массива, и накапливать их сумму.

Во втором цикле можно выполнить все остальные действия. Счёт чик K используется для нахождения количества элементов меньших заданной величины, а счётчик L для формирования массива В и оп ределения количества элементов в нём (рис. 6.6).

Начало Вывод k i= s= i=1 i= ait Ввод ai Вывод bi k=k+ s=s+ai i=i+ i=i+ ais i=L i= L=L+ Конец s=s/ bL=ai t=(a1+a20)/ Вывод k=0 bL L= i=i+ i= Рис. 6.6. Формирование нового массива из части элементов исходного 6.7. Задания на контрольную работу по схемам алгоритмов Вариант Заданы значения элементов двух массивов x1, x2,..., x30 и y1, y2,..., y30;

найти S= (xi*yi).

Вариант Заданы значения элементов массива c1, c2,..., c17;

определить каких элементов в массиве больше – положительных или отрица тельных.

Вариант Заданы значения элементов массива g1, g2,..., g50;

определить среднее арифметическое этого массива и создать новый массив fi=gi-s, элементы обеих массивов вывести.

ЛИТЕРАТУРА Основная 1. Острейковский В.А. Информатика. - М.: Высшая школа, 2000.

2. Иванова Г.С. Основы программирования. - М.: Изд-во МГТУ им. Н.Э. Баумана, 2002.

3. Вирт Н. Алгоритмы и структуры данных. - СПб.: Невский диалект, 2001.

Дополнительная 4. Милов А.В. Основы программирования в задачах и при мерах. - М.: ООО «Изд-во АСТ»;

Харьков: «Фолио», 2003.

5. Минакова Н.И., Невская Е.С. и др. Методы программиро вания. Под редакцией Угольницкого Г.А. - М.: Вузовская книга, 1999.

МОДУЛЬ АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ 1. ЗАПИСЬ АЛГОРИТМА РЕШЕНИЯ ЗАДАЧИ НА ВНЕШНИХ АЛГОРИТМИЧЕСКИХ ЯЗЫКАХ В последние годы программирование для ПК выделилось в не которую дисциплину, владение которой стало основным и ключевым моментом, определяющим успех многих инженерных проектов, а сама она превратилась в объект научного исследования и из ре месла перешла в разряд академических наук. Крылатое определе ние К. Вирта «программа = структура данных + алгоритм» как нель зя лучше подходит к этому разделу. Решение о том, как представ лять данные, невозможно принять, не зная, какие алгоритмы будут к ним применяться и наоборот, выбор алгоритма часто очень сильно зависит от строения данных, к которым он применяется. Изложение этих вопросов может идти на общераспространённом языке (рус ском, английском) или с помощью абстрактных нотаций (металин гвистические формулы Бэкуса – Науэра), но лучше всего для этой цели подходит язык Паскаль, который первоначально был предло жен Н. Виртом, как язык описания алгоритмов и только потом поя вились трансляторы с этого языка и варианты его реализации на компьютерах. Объяснение синтаксических конструкций языка будем давать в словесном описании, хотя для этой цели могут использо ваться и специальные синтаксические диаграммы.

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

I. ЗАГОЛОВОК ПРОГРАММЫ:

PROGRAM идентификатор;

II. РАЗДЕЛ ОПИСАНИЙ:

A. Описание меток:

LABEL целое или идентификатор [,целое или идентифи катор]...;

B. Описание констант:

CONST идентификатор=значение;

[идентификатор =значение;

]...

C. Описание типов:

TYPE идентификатор=описание типа;

[идентификатор =описание типа;

]...

D. Описание переменных:

VAR идентификатор [,идентификатор]... : тип;

[идентификатор [,идентификатор]... : тип;

]...

E. Описание процедур:

PROCEDURE идентификатор [( список параметров с указанием типа )];

РАЗДЕЛ описаний {LABEL,VAR,CONST,...};

РАЗДЕЛ операторов ;

END;

F. Описание функции:

FUNCTION идентификатор [(список параметров с ука занием типа)] : тип функции ;

РАЗДЕЛ описаний {LABEL,VAR,...};

РАЗДЕЛ операторов ;

идентификатор функции:=Значение;

END;

III. РАЗДЕЛ ОПЕРАТОРОВ:

BEGIN оператор [;

оператор]...

END.

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

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

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

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

Раздел операторов начинается со слова BEGIN, заканчивается словом END, после которого обязательно ставится точка. Между этими двумя словами с помощью специальных инструкций (опера торов) записываются все действия, которые следует выполнить подготовленному Вами алгоритму. Цель наша, изучая метод опера торного программирования, теоретически и практически познако миться со всеми операторами.

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

Правильные идентификаторы: AKA5, aka5, _prog_my_1, 123, a, abc99.

Неправильные идентификаторы: Лима5, 5aka, aka 5, prog-my-1,, begin, and, in, do, repeat. В Паскале прописные и строчные буквы не различаются, поэтому идентификаторы AKA5, aka5 – одинако вые, также как способ написания слова end, END, End, eNd роли не играет. Последние пять слов в списке неправильных идентификато ров относятся к зарезервированным в Паскале служебным словам, мы с ними постепенно будем знакомиться.

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

Рассмотрим сразу эти две темы. К символам и знакам операций Паскаля относятся:

• буквы латинского алфавита (A, B, C,..., Y, Z, a, b, c,..., y, z);

• специальные символы (@, $, #, _);

• цифры (0, 1, 2, …, 9);

• разделители или ограничители (,. ;

: пробел ( ) [ ] { });

• знаки операций:

1. арифметические операции (+, -, *, /, div, mod);

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

7/2 3,5;

7 div 2 3;

7 mod 2 1.

2. операции отношения (, =,, =, =, );

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

3. логические операции (not, and, or, xor);

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

4. выражения над строками: операция + объединяет две строки символов в одну строку;

5. операция присвоения (:=) эта операция обозначает: вы числить то, что записано справа от неё, и переслать в область памяти, которая определена переменной слева от этой операции. Не путать две совершенно разные операции равенства (=) и присвоения (:=);

6. операции над множествами (+ - объединение множеств;

-дополнение к множеству;

* - пересечение множеств;

IN – наличие в множестве);

7. адресные операции (&, ^) (структуры данных - множество и указатели в пособии не рассматриваются).

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

К константам, прежде всего, относятся числа, которые делятся на целые со значениями от -2147483648 до 2147483647 и вещест венные. Вещественные числа, записываемые в программе и зада ваемые в качестве исходных данных, можно представлять в двух форматах с фиксированной точкой (-1123.4567, 1.0, 0.0001) и с пла вающей точкой (1.0е2, -1е-5, 0.12345Е20, -1е10). В формате с фик сированной точкой целая часть от дробной отделяется точкой, нельзя задавать константы без целой или дробной части (записи 1.

и.1 – неверны). В формате с плавающей точкой число состоит из двух частей мантиссы (она либо целая, либо с фиксированной точ кой) и порядка (целого числа со значениями от -39 до 38) между ни ми находится буква е (Е), числа записываются без пробелов, и имеют значения:

1.0е2=1*102=100, -1е-5= -1*10-5 = -0.00001.

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

Константы типа строка символов – это последовательность любых символов Паскаля, заключённая в апострофы. Количество символов от нуля (пустая константа) до 255. Кроме рассмотренных выше символов Паскаля, в строке могут задаваться буквы нацио нального алфавита (русские) и символы псевдографики (специаль ные символы, позволяющие красиво оформлять всевозможные таб лицы). Если в качестве символа задаётся апостроф, то в программе он удваивается, но лишний байт ему не выделяется. Строки симво лов в программе могут записываться и другим способом, для него необходимо знать десятичный код символа и строка задаётся #код#код…#код. Так строки ‘A a’ и #65#32#97 – идентичны.

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

label 1, kon;

... begin...1: оператор;

…;

kon: end.

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

const gr=57.3;

t=1e6;

buk=’A’;

zv=’***************’;

Недостатком такого способа является невозможность изме нить это значение, т.е. записать gr:=gr+5;

или zv:=zv+’***’ нельзя. В этом случае следует объявить типизированную константу.

const идентификатор: тип = значение;

(о типе будет рассказа но в следующем разделе). Например, const s: real=0;

теперь запись s:=s+10;

вполне допустима.

В Паскале есть несколько заранее объявленных (предопреде лённых) констант:

1. pi=3.1415...

2. maxint=32767.

3. maxlongint=2147483647.

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

Все простые переменные в программе записываются своими идентификаторами, которые обязательно объявляются в разделе описаний:

var список идентификаторов: тип;

список идентификаторов: тип;

… Если несколько переменных принадлежит к одному типу, их идентификаторы записываются через запятую и после двоеточия задаётся тип, аналогично поступают с переменными другого типа (можно переменные задавать по одной, или многократно использо вать описание var).

Типы данных языка Паскаль Простые Сложные Ссылки Массив (array) pointer Ограниченные Перечисление Множесто (set) ^тип Запись (record) нач.значение Type color=(идент. Файл (file)..кон.знач [,идент.]...);

Динамические массивы Стандартные Списки Целый (integer, shortint, longint) Очереди Целый без знака (byte, word) Деревья Вещественный (real, single, double, extended) Логический (boolean) Символьный (char) Строковый (string [k]) Текстовый (text) Рис. 1.1. Типы данных Паскаля Тип можно задать следующими способами:

стандартный идентификатор идентификатор типа ТИП идентификатор из описания TYPE описание типа Тип определяет количество байт, выделенных для перемен ной, её допустимые значения и операции, в которых она может уча ствовать. К стандартным (предопределенным) относятся типы:

• для целых переменных табл. 1.1.

Таблица 1. Целые типы идентификатор типа количество байт значения integer 2 -32768… word 2 0… byte 1 0… shortint 1 -128… longint 4 -2147483648… • для вещественных переменных табл. 1.2.

Таблица 1. Вещественные типы идентификатор количество значения типа байт до 12 цифр в мантиссе, порядок real - 39.. до 8 цифр в мантиссе, порядок single - 45.. до 16 цифр в мантиссе, порядок double - 324.. до 20 цифр в мантиссе, порядок extended - 4951.. • для логических переменных идентификатор boolean, вы деляется под значения true или false 1 байт.

• для символьной переменной, в которой может храниться только один символ (код от 32 до 255), идентификатор char и один байт в памяти.

• для переменной типа строки символов (в ней может хра ниться от нуля до 255 символов), в качестве идентификаторов мо жет использоваться string;

- это идентификатор типа, и в значении такой переменной может находиться до 255 символов или string[k];

где 1=k=255, тогда это называется описание типа и выделяется К байт памяти. Примите к сведению, что объявление строки подразу мевает массив из К+1 элементa, каждый из которых имеет тип char (array[0..k] of char).

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

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

Примеры объявления переменных:

var i, j: integer;

{две переменные целого типа} r, s: real;

{две переменные вещественного типа} fam: string[15];

{строка символов с количеством символов не более 15} txt: string;

{строка символов с количеством символов не бо лее 255} c1, c2: char;

{две переменные символьного типа} n, m: 1..50;

{две переменные ограниченного типа от целого} buk: ‘A’..’Z’;

{ограниченный тип от символьного с кодами от 65 до 90} zif: ‘0’..’9’;

{ограниченный тип от символьного с кодами от до 57} 1.5. Массивы Скорость внедорожника на 10 участках трассы Мурманск – Владивосток можно записать как десять простых переменных V1, V2, V3,..., V10 (кстати, она достигала на отдельных участках и км. час). Для того чтобы определить среднюю скорость нужно будет эти переменные просуммировать, а теперь представим, что таких переменных 100.

Удобней всем переменным дать одно имя V, а к его десяти элементам обращаться по индексу (V1, V2,..., V10), тогда в сумме бу дет участвовать один элемент S=S+Vi, а значение i будет меняться от единицы до 10. Об этом говорил ещё Фон Нейман в своём «Принципе программного управления» (свойство переадресации).

В Паскале индекс элемента записывается в квадратных скоб ках, а не как подстрочный символ. V[1], V[2], S:=S+V[i] и т.д. Запом ните, что V1- простая переменная, а V[1] - первый элемент в масси ве, имя (идентификатор) которого V.

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

matr[2,5] – элемент двухмерного массива, находящийся во второй строке и пятом столбце;

tenz[3,6,2] – элемент с третьей страницы, номер строки – шестая, столбец – второй;

fam[5][1] – такое обращение используется для «массив мас сива», объяснение приведено ниже.

Идентификатор массива объявляется в разделе описания пе ременных var. Следует задавать количество измерений, тип индек сов (обычно задаётся ограниченный тип с минимальным и макси мальным значениями индекса) и тип элемента массива. Тип индек сов должен относиться к упорядоченному типу, а тип элемента – любой.

var идентификатор: array [тип первого индекса, тип второго ин декса, …] of тип элемента массива;

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

Примеры объявления массивов:

type matr=array [1..10,1..10] of real;

{объявлено имя типа двухмер ного массива из 100 вещественных чисел, именно столько областей будет резервироваться для переменных такого типа в памяти} var a,b : array[1..20] of integer;

{два массива целых чисел, по два дцать элементов в каждом} d : array[0..255] of real;

c : array[byte] of real;

{объявление массивов c и d – одинако вое, выделяется по 256 областей памяти, способ объявления для d – более нагляден} e : array[-3..5] of boolean;

{выделяется девять областей па мяти, в каждой из которых может размещаться значение true или false} fam : array[1..25] of string[20];

{массив из 25 элементов для размещения строк символов, в каждом элементе количество симво лов от нуля до 20} g1: matr;

{объявление имени типа приведено выше, поэтому проще сделать объявление, аналогичное g2} g2 : array[1..10,1..10] of real;

Если мне нужно обратиться к первому символу пятой пере менной fam, следует записать fam[5][1] – «массив массива», верни тесь к теме простые переменные (тип – string) и объясните, почему.

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

Обращение к функции: идентификатор функции [(список аргу ментов)]. Аргументы передаются в функцию и их значения исполь зуются в её алгоритме для вычисления результата. Список может отсутствовать.

Рассмотрим некоторые стандартные функции Паскаля.

1.6.1. Математические функции SIN(X) - синус (аргумент задается в радианах);

COS(X) - косинус (аргумент задается в радианах);

ARCTAN (X) - арктангенс (результат в радианах);

ABS (X) - абсолютное значение от X;

EXP (X) - Е возводится в степень X;

LN (X) - натуральный логарифм от числа X;

0.4343*LN(X)-десятичный логарифм от числа X;

SQRT (X) - квадратный корень из числа X;

SQR (X) - число X, возведенное в квадрат;

TRUNC(X)- отбрасывает дробную часть от числа X;

INT (X) - отбрасывает дробную часть от числа X, в первой результат – целый, во второй результат - вещественный;

ROUND (X) - округляет число X до ближайшего целого;

RANDOM (X) - датчик случайных чисел, X-целое, 0= случайное число X;

RANDOM - датчик случайных чисел, результат вещественный, 0= случайное число 1;

ODD (X) - результат- TRUE, если целое Х - нечётное, и FALSE - если Х чётное;

SUCC(X) - возвращает следующее значение упорядоченной пере менной X;

PRED(X) - возвращает предыдущее значение упорядоченной пере менной X.

1.6.2. Функции для работы со строками символов:

CONCAT (s1 [,s2,...,sn]) - функция, возвращающая строку после сце пления строк параметров s1,s2,...,sn (аналог операции s1+s2+...+sn);

COPY (st, k, l) - функция, копирующая из строки st, начиная с пози ции k, l символов;

LENGTH (st) - функция, возвращающая длину строки st (длина стро ки хранится так же в элементе st[0] в символьном виде);

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

CHR(x) - функция, преобразующая код символа (32= X = 255) в символ;

ORD(ch) - функция, возвращающая код символа ch.

1.7. Выражения Запись для вычисления значения называется выражением. В зависимости от типа результата в Паскале определены следующие типы выражений:

• арифметические выражения (ав), результатом является число;

• символьные выражения (св), результат - один символ или строка символов;

• логические выражения (лв), результат – логическая константа true или false;

• выражения над множествами;

• адресные выражения.

Два последних типа в этом пособии не рассматриваются;

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

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

• вычисление функций;

• знак числа +, -;

• NOT;

• *, /, DIV, MOD, AND;

• +, -, OR, XOR;

•,, =, =, =,, IN.

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

• Если Y – целое, то с помощью математических преобра зований и функции возведения в квадрат надо получить X9=((X2)2)2*X приемлемую запись выражения = sqr(sqr(sqr(X)))*X.

• Если Y – вещественное, то воспользоваться такой фор мулой XY=ey*lnx =exp(Y*ln(X)).

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

sin2x3 = sqr(sin(sqr(x)*x)), x2 + lnx 3 lgx = exp(1/3*ln(sqr(x) +sqrt(abs(ln(x) 3*0.4343*ln(x))))) Обратите внимание на расстановку круглых скобок – аргумен ты каждой функции обязательно заключаются в круглые скобки.

В символьном выражении можно использовать операцию со единения двух строк в одну (const fam=’Akatnova’;

... ‘ Фамилия:

‘+fam);

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

В логическое выражение могут входить:

• логические константы (TRUE, FALSE), • логические переменные (var PR:boolean), • отношения (два выражения, объединенные операциями отно шения,, =, =, =, );

• их последовательность, объединённая логическими опера циями (NOT- ”НЕ”, AND- “И”, OR- “ИЛИ”, XOR- “исключающее ИЛИ”) Результат логических операций приведён в табл. 1.3.

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

Таблица 1. Результат логических операций a TRUE TRUE FALSE FALSE b TRUE FALSE TRUE FALSE NOT a FALSE FALSE TRUE TRUE a AND b TRUE FALSE FALSE FALSE a OR b TRUE TRUE TRUE FALSE a XOR b FALSE TRUE TRUE FALSE Из-за того, что операция отношения имеет самый низкий уро вень, в логических выражениях часто используются круглые скобки:

1= X 5 (X=1) AND (X5).

1.8. Контрольная работа по теме выражения. Контрольная работа проводится по теме арифметические и логические выражения. Напоминаю Вам, что при записи ав исполь зуются буквы только латинского алфавита ( - это не латинская бук ва);

прописные и строчные буквы считаются одинаковыми (A и a – одинаковое имя);

записи A5 и A5 – разные (простая переменная - A и элемент массива - A[5]);

A3j – элемент двухмерного массива A[3, j];

для корня квадратного есть функция sqrt, а для кубического исполь зуется специальная формула (ав1/3);

для десятичного логарифма должна использоваться формула зависимости его от натурального логарифма;

если в задании приведено выражение типа 80,3*10-6 – это записывается в Паскале, как 80.3е-6. Будьте внимательны при использовании скобок:

x x/ (1-x/ (2-x/ ( 3-x ))) x x 3x Запишем на Паскале арифметическое выражение:

10 *(yi2 - y2i-1 - b*eab+ lg yi2 ) 1e5*(sqr(y[i]) – y[2*i-1]+b*exp(a*b) + 0,4343*ln(sqr(y[i]))).

Математическая запись логического выражения отличается от записи на Паскале не только представлением логических операций, но и тем, что операции отношения имеют уровень выше, чем логи ческие, поэтому в заданиях отношения не заключаются в круглые скобки. Основная ошибка – неумение найти в записи отношение (два арифметических выражения, между которыми стоит операция отношения) и заключить его в скобки. Логические операции: ¬ - not, - and, - or. В задании на контрольную работу требуется сначала записать логическое выражение, потом вычислить его значение. В логических выражениях требуется иногда вычислять значения арифметических выражений, калькулятор для этой цели использо вать не надо, так как придётся только сделать вывод, равны ли они, какое из них больше и пр. Запишем и найдём значение следующего выражения:

с – 1=b2 c=0 bc true, при b=0.99, c= -607.1e-2.

1 3 2 64 5 порядок выполнения операций (c-1=sqr(b)) and (c=0) or (b c) and true 1. false, 2. true, 3. false, 4. false, 5. false, 6. false.

Более наглядно это решение можно представить так:

(c-1=sqr(b)) and (c=0) or (bc) and true false true false false false false Задания на контрольную работу Вариант 1. Записать на Паскале арифметическое выражение:

xy [sinx] + x + 25,3 + e3.

2 z3 3, y z 2. Записать на Паскале и вычислить значение логического выра жения:

c f r=t, при r=20, t=0, c=true, f=false.

Вариант 1. Записать на Паскале арифметическое выражение:

sin2 x (x 2 + 1) + cos2 (x 3 + 2,5).

2. Записать на Паскале и вычислить значение логического выра жения:

p=q s p ¬ f x, при p=0.1e4, q=60.27e03, s=1070.2, f=true, x=false.

Вариант 1. Записать на Паскале арифметическое выражение:

0,3 ln x x 2 sinx + 0,12 10 1 + sin 2 x 2. Записать на Паскале и вычислить значение логического выра жения:

¬ (3(x+y) =15) (i=1 false), при x=4, y=3, i=0.5.

1.9. Тесты Вариант 1. Правильной записью арифметического выражения a+ b2 - c является:

a+sqr(b) - sqrt abs(c) a + b*b – sqrt(c) a+sqr(b) –sqrt(abs(c)) 2. Правильной записью логического выражения ¬(EF) R=T является:

not E or F and (R=T) not(e or f) and (r=t) not(e or f) and r=t 3. Для каждой операции отношения и логической операции, вы бранной Вами записи логического выражения, проставьте поряд ковый номер её выполнения и результат (t или f) при следующих значениях переменных:

R20, T20, Efalse, Ftrue.

Порядок Результат выполнения операции операции not or = and Вариант 1. Правильной записью арифметического выражения x y z 1,5 t является:

x*sqr(y)/2/exp(1.5*ln(z))/t x*y*y/2*exp(1.5*ln(z))*t x*sqr(y)/(2*exp(ln(1.5*z))*t) 2. Правильной записью логического выражения B-1=C2 C= является:

B-1=C*C and C= (B-1=sqr(C)) and (C=0) (B-1=sqr(C)) or (C=0) 3. Для каждой операции отношения и логической операции, выбранной Вами записи логического выражения, проставьте по рядковый номер её выполнения и результат (t или f) при следую щих значениях переменных:

C-600E-2, B37.

Порядок Результат выполнения операции операции = = and Вариант 1. Правильной записью арифметического выражения sin 2 x x 4 + 1 является:

sin(x)*sin(x)*sqr(x*x*x*x+1) sin(sqr(x)*sqrt(x*x*x*x+1) sqr(sin(x))*sqrt(sqr(sqr(x))+1) 2. Правильной записью логического выражения 2a=4b k true является:

2*a =4*b or k and true (2*a =4*b) or k and true 2*a =4*b and k or true 3. Для каждой операции отношения и логической операции, выбранной Вами записи логического выражения, проставьте поряд ковый номер её выполнения и результат (t или f) при следующих значениях переменных:

A-1, B-3, Kfalse.

Порядок Результат выполнения операции операции = or and Вариант 1. Правильной записью арифметического выражения sin236°+cos(36° -)+1 является:

sqr(sin(36/180)) + cos(36/180- pi)+ sqr(sin(36)) + cos(36- 3.14)+ sqr(sin(36)) + cos(36- pi)+ 2. Правильной записью логического выражения (a+b)=0 i L является:

(a+b)=0 and (i or L) (a+b=0) and i or L (a+b)=0 and i or L 3. Для каждой операции отношения и логической операции, выбранной Вами записи логического выражения, проставьте поряд ковый номер её выполнения и результат (t или f) при следующих значениях переменных:

A10, B-30, Lfalse, itrue.

Порядок Результат выполнения операции операции = and or Вариант 1. Правильной записью арифметического выражения 3sinx + 4cos2x3 -103,7*102 является:

3*sin x+4*cos (x*x*x)*cos (x*x*x) – 103.7*10* 3*sin (x)+4sqr(cos (x*x*x)) – 3*sin (x) + 4*sqr(cos (sqr(x)*x)) – 103.7e 2. Правильной записью логического выражения p=q s p ¬ F является:

p=q and s not = p or not F (p=q) and (s p) or not f p=q and s p or not F 3. Для каждой операции отношения и логической операции, выбранной Вами записи логического выражения, проставьте поряд ковый номер её выполнения и результат (t или f) при следующих значениях переменных:

p0.1e4, q60.27e3, s100, Ffalse.

Порядок Результат выполнения операции операции = and or not 2. ОПЕРАТОРНОЕ ПРОГРАММИРОВАНИЕ В дальнейшем в дисциплинах кафедры или при самостоятель ном изучении ВЫ узнаете, что в программировании существует не сколько методов это - операторное программирование (именно та ким мы занимаемся в этой дисциплине), процедурное (запись от дельных алгоритмов в виде блоков, называемых функциями и про цедурами), функциональное (использование рекурсивных алгорит мов), модульное (создание по какой – то теме библиотек, с опреде лением в них своих типов, переменных, процедур, функций), визу альное (создание дружественного интерфейса с пользователем, ко торый реализуется набором на форму готовых блоков – кнопок, ме ню, окон сообщений и пр.).

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

2.1. Оператор присваивания Оператор присваивания позволяет значение выражения, запи санное справа от операции присвоения (:=) переслать в область па мяти, отведённую для простой переменной, элемента массива или поля записи.

простая переменная элемент массива := выражение;

поле записи Основных правил для этого оператора два: слева должно на ходиться одиночное (скалярное данное) и соответственно выраже ние должно быть скалярным;

тип выражения и тип переменной дол жен быть одинаковым. Почти у всех правил бывают исключения, не избежали этой участи и правила оператора присваивания, они будут рассмотрены в примерах var i, k: integer;

r, t :real;

type sp=array [1..10] of string[15];

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

c: array [1..5] of real;

gr1, gr2: sp;

fam: string[15];

s: string[2];

...i:=10;

k:=i;

r:=1;

{исключение из правила – вещественной перемен ной можно присвоить вещественное и целое выражение} i:=k/2;

{не допустимый оператор: выражение – вещественное, а переменная – целая} i:=k div 2;

i:=round (k/2);

r:=i;

s:=t;

{недопустимый оператор:

выражение – вещественное, а переменная – строка символов} s:=’no’;

a:=b;

gr1:=gr2;

{два оператора представляют собой второе ис ключение из правил и выражение и переменная не являются ска лярными, но, при таком объявлении, они относятся к одному типу и это присвоение возможно} a:=c;

{недопустимый оператор, хотя опи сание массивов полностью совпадают, такое объявление не относит их теперь к одному типу} c[3]:=0;

r:=3;

c[r]:=0;

{недопустимый опера тор: индекс массива не относится к упорядоченному типу} c[trunc(r)]:=0;

fam:=’Akathova’;

gr1[8]:=fam;

k:=pos(‘t’, gr1[8]);

{какое значение получит переменная K?} 2.2. Оператор вызова подпрограмм Оператор вызова подпрограмм предполагает обращение к от дельному блоку, в котором при вычислении заданного алгоритма результат присваивается не имени (abs, sin и др.), а одной или не скольким переменным из списка параметров. Обращение к подпро грамме выполняет оператор: идентификатор [(список аргументов)];

список может отсутствовать.

В Паскале существуют стандартные процедуры, а свой алго ритм можно задать в блоке procedure идентификатор (список пара метров);

... end;

Некоторые стандартные процедуры Паскаля:

• read(список ввода);

readln(список ввода);

write(список вывода);

writeln(список вывода);

– операторы ввода и вывода, им будет посвящен раздел 2.12.

• inc(i);

inc(i,k);

dec(i);

dec(i,k);

– переменные i и k должны быть целого типа;

значение i увеличивается (inc) или уменьшается (dec) на величину k, если k не указано, то на единицу.

• delete (строка, k, L);

– результатом является новое значение строки, в которой, начиная с позиции k, удалено L символов.

• insert (строка_1, строка_2, k);

- в строку_2, начиная с позиции k, вставляется строка_1.

• str(число, строка);

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

• val (строка, число, k);

строка символов, если это возможно, преобразуется в число;

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

i:=2;

inc(i, 5);

dec(i);

writeln(i);

i 6.

var slovo: string[10];

a: real;

k: byte;

...slono:=’пароход’;

insert(‘воз’, slovo, 8);

delete(slovo,5,3);

wrteln(slovo);

slovo’паровоз’.

str (123, slovo);

writeln(slovo);

slovo ‘123’.

val (‘12E3’, a, k);

k 0, a 12е3.

val (‘12A3’, a, k);

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

2.3. Лабораторная работа «Линейные участки в вычислениях»

(выполняется Ваш вариант по заданию № 1 задачника [7]) Обычная линейная программа содержит в себе:

I. операторы ввода (правильней называть операторы вызова процедур ввода и вывода) - read(список ввода);

и readln(список ввода);

II. операторы вывода - write(список вывода);

и writeln(список вы вода);

Окончание ln означает, что после ввода или вывода списка происходит переход на новую строку. Допустимы конструкции без списка ввода/ вывода, их назначение: readln;

- задержка экрана, до нажатия на клавишу ENTER,writeln;

- вывод на экран пустой строки. Эти действия произойдут только в случае, если последний оператор ввода/ вывода заканчивался на LN, в противном случае соответствующий оператор записывается дважды.

III. операторы присваивания - переменная := выражение;

Следует учесть, что при операциях присваивания переменные и выражения должны иметь одинаковый тип. Однако если в правой части оператора записано целое выражение, то пере менная в левой части может быть как типа integer, так и типа real;

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

IV. арифметические выражения, которые записываются с помо щью:

A. констант и переменных арифметического типа;

B. арифметических операций: +, -, *, /, DIV - целочисленное деление, MOD - остаток от целочисленного деления;

C. стандартных арифметических функций.

Порядок выполнения лабораторной работы:

• Загрузить среду Turbo Pascal (c:\bp\bin\turbo.exe).

• Сменить текущую папку, например, на c:\1acy (File / Change Dir).

• Открыть новый файл, в диалоговом окне задать имя этого файла, рекомендуется, чтобы оно совпадало с именем про граммы, тип.PAS можно не набирать (File / Open...

prog1a[.pas]).

• Набрать текст программы: program prog1a;

... end.

• Откомпилировать программу для поиска и исправления оши бок (Compile / Compile AltF9), это действие можно прово дить и после набора двух- трёх строк программы.

• Сохранить программу (File / Save F2), это действие так же желательно повторять после набора нескольких строк, чтобы при сбоях в работе ПК не потерять набранную информацию.

• Выполнить программу (Run / Run CtrlF9), если всё прошло успешно (нет сообщений об ошибках), на чёрном экране на брать значения исходных данных (полная информация об этом приведена в разделе 2.12.).

• Чтобы посмотреть результат (а после завершения задачи пе ред Вами экран редактора с текстом программы, а не чёрный – экран пользователя) следует выполнить функцию меню (Win dow / User Screen AltF5).

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

• Завершение сеанса работы (File / Exit AltX).

В качестве примеров рассмотрим подготовку и оформление двух задач.

Пример Вводится фамилия студента, номер варианта, координаты двух точек P1(X1,Y1) и P2(X2,Y2). Вывести номер варианта, фамилию и расстояние между точками.

program prog1a;

var X1,Y1,X2,Y2,R: real;

NVAR : integer;

FAM : string[15];

Begin writeln(‘ВВОДИТЕ ДАННЫЕ’);

readLN(FAM);

readLN(NVAR,X1,Y1,X2,Y2);

R:=sqrt(sqr(X1-X2)+sqr(Y1-Y2));

writeln(‘ВАРИАНТ #’:15,NVAR:5,FAM:20);

writeln(‘ R=’,R) end.

Исходные данные:

AKATHOBA 35 2 1 5 На экране будет представлен результат:

ВАРИАНТ # 35 AKATHOBA R= 0.3000000000E Для наглядности пробел заменён символом.

Пример,, Заданы значения c, d. Определить c k = 2 + lg;

f(k) =.

k d Для выбора допустимых идентификаторов подготовим таблицу с именами переменных и выбранными для них идентификаторами.

переменная идентификатор a b c c d d k k f(k) f program prog1b;

var A, B, C, D, K, F: real;

begin read(A, B, C, D);


K:=sqr(A)+0.4343*ln(B);

F:=sin(K)+C/(D*K);

writeln(‘ОТВЕТ: K=’, K, ’ F(k)=’, F) end.

Исходные данные:

1 0.5 -7 1e2enter В программе на Паскале идентификаторы (пользователя или стандартные) можно записывать прописными или строчными буква ми, они идентичны. Вся программа может быть записана в одну строку без отступов, но это снижает её наглядность. Жирным шриф том выделены три раздела программы (заголовок, разделы описа ний и операторов). В списке оператора вывода четыре элемента:

две строки символов (для «красоты») и значения двух переменных k и f.

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

2.4. Оператор перехода Оператор перехода позволяет обратиться к любому оператору программы, если перед ним стоит метка: goto метка;

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

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

• В качестве метки можно брать идентификатор или целое число от 1 до 9999.

• Все метки объявляются в разделе описаний label.

Следует отметить, что современные языки программирования имеют средства описания алгоритмов, которые позволяют совер шенно исключить использование операторов перехода. При объяс нении многовариантных расчётов и подготовке к лабораторным ра ботам по заданиям 2 и 3, операторы перехода будет применяться, но после темы «описание циклических участков» они с успехом должны быть заменены операторами циклов.

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

begin оператор_1;

оператор_2;

…;

оператор_n end;

{перед end точ ка с запятой может не ставиться}. Вся группа от begin до end – один составной оператор.

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

if лв then оператор;

- короткий условный оператор.

if лв then оператор_1 else оператор_2;

- полный условный оператор.

ЛВ – логическое выражение, рассматривалось в теме выражения, следует ещё раз просмотреть этот материал. После then и else раз решается записать только один оператор, но мы узнали возмож ность несколько операторов представить, как один – составной опе ратор. На рис. 2.1 показаны фрагменты схем алгоритмов для этих двух конструкций.

да да лв лв оператор оператор1 оператор Рис. 2.1. Условный оператор Работают эти операторы следующим образом: проверяется лв, если оно истинно, то выполняется или оператор в первом слу чае, или оператор1 во втором;

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

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

1) Если x0, то изменить его знак.

if x 0 then x:= -x;

{этот результат можно получить и без провер ки: x:=abs(x);

} 2) Если xy, то их значения поменять, т.е. значение первой переменной всегда должно быть больше второй.

if x y then begin p:=x;

x:=y;

y:=p end;

3) 1, если xy, a= 0, если x=y. if xy then a:=1 else a:=0;

1, если xy, 4) a= 0, если x=y, -1, если xy.

if xy then a:= else if x=y then a:= else a:=-1;

Обратите внимание, что третья проверка не нужна. Ступенча тая запись используется для того, чтобы подчеркнуть правило: else всегда относится к ближнему then. Поэтому короткий условный опе ратор, записанный после else, никогда не приведёт к ошибке, а за писанный после then – может привести.

Другой вариант из трёх коротких операторов имеет лишнюю проверку:

if xy then a:=1;

if x=y then a:=0;

if xy then a:=-1;

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

a:=0;

if xy then a:=1;

if xy then a:=-1;

Подумайте, правильна ли такая запись: a:=0;

if xy then a:= else a:=-1;

5) Заданы значения двух переменных x и y, следует выдавать сообщения, когда обе переменные отрицательны и когда перемен ная X – не отрицательна.

if x0 then if y0 then writeln (‘X and Y 0’) else writeln (‘X = 0’);

- оператор – некорректен.

if x0 then if y0 then writeln (‘X and Y 0’) else else writeln (‘X = 0’);

- оператор – корректен.

6) Задание для последнего примера представлено следующим образом:

y=0 y= x y=x/2 y= 5 50 100 X if (x=5) or (x=100) then y:= else if x=50 then y:=sqrt(x) else y:=x/2;

2.7. Оператор выбора Если проверок в условном операторе слишком много, то вме сто него следует воспользоваться оператором выбора. Оператор выбора записывается так:

case выражение of значение1, значение2, …, значениеN : оператор_1;

...

значениеМ, значениеМ+1, …значениеM+N : оператор_М else оператор_L end;

Не забывайте, что каждому case должен соответствовать свой end;

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

перед end точка с запя той может не ставиться, перед else она никогда не должна ставить ся. Группа else оператор_L – может отсутствовать.

Работа этого оператора похожа на работу условного (без else – короткого), вычисляется выражение и в списке значений находит ся равное ему, после чего выполняется оператор, записанный после двоеточия. Если равное значение отсутствует, то либо выполняется оператор, записанный после else, либо весь оператор выбора про пускается.

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

var ch: char;

...

case ch of ‘A’, ‘a’, ‘E’, ‘e’, ‘I’, ‘i’, ‘O’, ‘o’, ‘U’, ‘u’, ‘Y’, ‘y’ : writeln(‘It is ‘, ch, ‘-vowel’) else writeln(‘It is ‘, ch, ‘-consonant’) end;

Второй пример: у 1. -10 -5 0 var x, y: real;

...

case trunc (x) of -9..-5: y:=1.5;

-4.. 50: y:= else y:= end;

2.8. Многовариантные расчёты Рассмотрим вопросы, связанные с организацией многовари антных расчётов.

В лабораторных работах по заданиям 2 и 3 следует преду смотреть расчёты при нескольких наборах исходных данных. Поря док работы за ПК был рассмотрен в разделе 2.3. После нажатия на клавиши CtrlF9 мы задавали один набор исходных данных.

Чтобы провести вычисления при втором, третьем и т.д. наборах придётся снова выполнять CtrlF9. Нам следует организовать циклический алгоритм от ввода исходных данных до вывода ре зультата:..BB: read(...);

...writeln (...);

goto BB;

... Такой бесконечный цикл не может использоваться, следует предусмотреть условие прекращения вычислений, т.е. выхода из цикла. Различные способы будут рассмотрены на примере задачи из раздела 2.3 prog1b (...read(A,B.C.D);

... writeln(..., F);

end.).

• Счётчик вариантов. Переменная nv будет хранить текущий но мер варианта и будет его сравнивать:

1. с константой (например, требуется всегда проводить расчёт с тремя наборами исходных данных).

var...;

nv: integer;

label bb;

begin nv:=1;

bb: read(A, B, C, D);

...

writeln(...,F);

inc(nv);

if nv=3 then goto bb;

end.

2. с переменной n, значение которой будет вводиться пе ред началом расчётов, и значение nv будет теперь срав ниваться не с константой, а с переменной.

var...;

nv, n: integer;

label bb;

begin read(n);

nv:=1;

bb: read(A, B, C, D);

...

writeln(...,F);

inc(nv);

if nv=n then goto bb;

end.

2 1 0.5 -7 1е2 1 2 3 4enter {2 – это количество вариантов, самая распространённая ошибка - забываете его задавать} • Проверочное значение. Одна из переменных выбирается в ка честве проверочной, и ввод значения, которое она никогда не может иметь, будет являться признаком завершения вычисле ний.

var...;

label bb, kon;

begin bb: read(A, B, C, D);

if A=1e5 then goto kon;

...

writeln(...,F);

goto bb;

kon: end.

1 0.5 -7 1е2 1 2 3 4 1e5 1 1 1enter Приведены исходные данные для трёх наборов, расчёт бу дет проведён только для двух, обратите внимание, что в третьем, проверочном наборе, задаются все четыре числа, так как в операторе ввода четыре переменные, и только по сле их ввода значение первой проверяется.

• Использование стандартной функции eof (End Of File). С таким вариантом познакомимся в разделе 2.12. и будем им часто пользоваться.

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

2.9. Лабораторная работа «Описание разветвлений»

(выполняется Ваш вариант по заданию № 2 задачника [7]) Требования к лабораторной работе по заданию №2:

1. Предусмотреть многовариантный расчёт.

2. Провести отладочный просчёт хотя бы двух наборов данных.

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

Вводится несколько значений переменной X, переменная Y вычис ляется по формуле:

x 2 + 3 3 x, если x 0, y = (x 2 + 3) 2 + 0,5 + x, если 0 x 1, x (x + 3) + ln( + x) в остальных случаях.

Выводить номер варианта и значения переменных X и Y.

Отладочный просчёт:


x= -1 x=0 x= Y=4-4,141/32,4 Y=9+sqrt(1,57) 10,25 Y=4+ ln 4,14 5, На рис. 2.2 показаны три отрезка по оси X, где должны исполь зоваться разные формулы.

Формула 1 Формула 2 Формула 0 Рис. 2.2. Отрезки по оси X Анализ этого рисунка показывает, что не требуется использо вание сложного логического выражения для проверки второго усло вия:

if x0 then else if (x=0) and (x1) then else После проверки первого условия (X0), на ветвь else попадают все X=0, остаётся только проверить X1 или нет. Это показано на схеме алгоритма рис. 2.3.

Начало nv= Ввод x Вывод nv,x,y t=x + nv=nv+ x nv= y =t 3 x x Конец y=t*x+ln(П+x) y = t 2 + 0.5 + x Рис. 2.3. Схема алгоритма по заданию № Текст программы:

program prog2;

label 1;

var nv : byte;

x, y, t : real;

begin nv:=1;

1: read (x);

t:=sqr(x) + 3;

if x0 then y:=t-exp(ln(pi – x)/3) else if x1 then y:=sqr(t) + sqrt (0.5*pi+x) else y:= t*x+ ln(pi+x);

writeln(‘# :’, nv:3, x:8:2, y:8:2);

inc(nv);

if nv = 4 then goto 1;

end.

Исходные данные:

-1 0 1 1.75Enter Выражение x2+3 повторяется в программе несколько раз, его лучше вычислить один раз.

2.10. Лабораторная работа «Строковые переменные»

(выполняется Ваш вариант по заданию № 3 задачника [7]) Требования к лабораторной работе по заданию № 3 – много вариантный расчёт и отладочные данные.

В качестве примера рассмотрим такую задачу: вводится любое количество строк символов, признаком, что строк больше нет - стро ка со значением END. Количество символов в каждой строке не больше 60. Определить по каждой строке количество латинских букв, цифр, знаков операций (учитывать только +, -, *. /) и прочих символов.

program prog3;

var st: string[60];

i, n, kl, kv, ko, kp: byte;

{при поиске во всём большом тексте – word} label 1, 2;

begin 1: readln (st);

if st’END’ then begin n:= length(st);

kl:=0;

kv:=0;

ko:=0;

kp:=0;

{обнуление счётчиков} i:=1;

{первый символ в строке} 2: case st[i] of ‘A’..’Z’,’a’..’z’: inc (kl);

‘0’..’9’: inc (kv);

‘+’, ‘-‘, ‘*’, ‘/’: inc(ko) else inc (kp);

end;

inc(i);

if i=n then goto 2;

writeln (st, ‘:’, ‘ Букв:’, kl, ‘ Цифр:’, kv, ‘ Операций:’, ko, ‘ Прочих:’,kp);

goto 1;

end;

end.

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

слову (goto 1), а перебор i–тых символов в слове (goto 2).

Отладочные данные:

Azk1+7-20br.;

я END kl 5, kv 4, ko 2, kp 3.

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

to 1. for параметр цикла := начальное значение конечное значение downto do оператор;

Оператор состоит из двух частей: заголовка (for...do) и тела цикла, где может находиться только один оператор (составной – это тоже один).

Параметр цикла – скалярная переменная любого упорядочен ного типа, по которой должно быть известно начальное и конечное значение. От начального к конечному значению параметр цикла из меняется, беря каждый раз следующее (succ) значение, если в за головке цикла стоит to или предыдущее (pred), если – downto. Для параметра цикла целого типа это увеличение на единицу или уменьшение на единицу. Значения другого шага задавать нельзя.

Цикл завершает свою работу, когда параметр цикла выйдет за своё конечное значение. Многовариантный расчёт задачи prog2 мог быть реализован так:

for nv:=1 to 4 do begin read(x);

...;

writeln(‘# :’, nv:3, x:8:2, y:8:2);

end;

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

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

2. while лв do оператор;

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

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

• Эти значения в теле цикла должны изменяться, иначе получим «бесконечный» цикл.

...x:=30;

while x= 275 do begin writeln ((sin(x/57.3) + cos(x/57.3)):8:4);

x:=x+30;

end;

...

3. repeat оператор;

оператор;

… until лв;

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

Все три варианта продемонстрируем на примере получения суммы 20 элементов массива... s:=0;

for i:=1 to 20 do begin read (a[i]);

s:=s+a[i] end;

...

... s:=0;

i:=1;

while i=20 do begin read (a[i]);

s:=s+a[i];

inc(i) end;

...

... s:=0;

i:=1;

repeat read (a[i]);

s:=s+a[i];

inc(i) until i 20;

...

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

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

read ([идентификатор файла,] список переменных);

readln write ([идентификатор файла,] список выражений);

writeln Для ввода и вывода используются по два служебных слова, окончание ln означает строка (line). В квадратные скобки помещены необязательные конструкции, и в тексте они записываться не будут, зачем при вводе и выводе нужен идентификатор файла, мы разбе рём в шестом правиле. Элементы в списках разделяются запятыми.

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

Правило Окончание ln означает, что после ввода или вывода списка пе ременных или выражений происходит переход к новой строке, т.е.

исходные данные для следующего списка надо задавать с новой строки или список выражений следующего оператора вывода попа дёт на новую строку экрана.

Правило Readln;

и writeln;

могут записываться в программе без своих списков. Readln;

вызовет задержку экрана с результатами (не нужно нажимать клавиши AltF5), до тех пор, пока не будет нажата клавиша Enter.

Если оператор ввода, предшествовавший readln;

был readln(...), то задержка экрана произойдёт;

в противном случае для задержки экрана надо записать readln;

readln;

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

Операторы, например, writeln(...);

writeln;

вызовут вывод пустой строки после порции информации первого оператора вывода, не сколько writeln;

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

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

• булевские переменные;

• данные перечисляемого типа;

• элементы множеств;

• указатели.

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

Числа при вводе задаются в десятичной системе счисления, друг от друга отделяются хотя бы одним пробелом;

операторы read(a);

read(b);

read(c);

и оператор read(a, b, c);

- идентичны, при этом второй компактней и наглядней. Исходные данные и в первом и во втором случае задаются одинаково, причём варианты могут быть различны: каждое значение с новой строки, все три числа на одной строке, два числа на одной, третье на другой и пр. Операторы readln(a);

readln(b);

readln(c);

предполагают, что каждое значение задаётся с новой строки (а Вам это нужно?). Совершенно не имеет смысла использовать окончание ln при вводе элементов массива.

for i:=1 to 20 do read(a[i]);

Двадцать чисел задаёте в любом ви де: все в одной строке, на двадцати строчках, по пять элементов в одной строке и пр. Оператор readln(a[i]);

будет работать только в случае, если каждое число задавать на новой строке.

Исходные данные типа char и string[k] следует задавать пер вое на одной, второе на k позициях и друг от друга пробелами и прочими символами не отделять. Пусть имеется две фамилии: Цой и Домогарова.

var fam1, fam2: string[10];

... readln(fam1, fam2);

... исходные данные:

Цой ДомогароваEnter Для оператора ввода …readln(fam2, fam1);

… исходные дан ные:

ДомогароваЦойEnter В первом случае фамилия Цой найдена не будет, так как зада на фамилия с семью пробелами в конце. В разделе 3.2. эти про блемы будут сняты. Объявление строки символов string, вместо string[k] может вызвать, при неправильном использовании операто ров ввода, различные неудобства и ошибки.

В одном операторе ввода задавать слова и числа следует ос торожно. Можно рекомендовать два варианта:

• в одном операторе все переменные – числа, в другом все пе ременные - слова....readLN (число, число,…);

readln (слово, слово, …);

• весь список задавать в одном операторе, но сначала в нём должны следовать все переменные – слова, потом – числа.

...readln(слово, слово, …, число, число, …);

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

В табл.2.1 приведено правильное и неправильное использова ние операторов ввода для задачи, имеющей объявление:

var n: integer;

a,b: real;

sl1, sl2: string[5];

Таблица 2. Операторы ввода для слов и чисел запись – некорректна запись правильная read(n, a, b);

readln(sl1, sl2);

readLN(n, a, b);

readln(sl1, sl2);

readln(n, a, b, fam1, fam2);

или readln (fam1, fam2, n, a, b);

readln (fam1, n, a, fam2, b);

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

Правило Выражения, которые задаются в списке вывода, могут являть ся константами (‘A=’, ‘Результат’. 2005, true и пр.), скалярными пе ременными (n, sl2, r[i] и пр.), выражениями (abs(r[i]), sin(x/57.3)+cos(x/57.3), sl1+’ ‘+ sl2, ab и пр.).

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

Пусть три целых числа k, l, m имеют значения 1, 2, 34, опера тор writeln(k, l, m);

выведет последовательность 1234, конечно, мож но вставлять между переменными пробелы (k,’ ‘,...), но это непра вильное решение задачи.

Вещественные числа (real) выводятся на 18 позиций в форма те с плавающей точкой и нормализацией 1=|мантисса|10, что не всегда удобно.

При выводе больше четырёх чисел в одной строке в середине пятого значения будет выполнен переход на новую строку экрана (в строке вывода размещается 80 символов, а 18*5=90). Формат выво да с фиксированной точкой, конечно, в большинстве случаев – предпочтительней.

Данные типа char выводятся на одну позицию, а строки string[k] – на k позиций. Здесь тоже возникают вопросы, как, например, вы вести слово ТАБЛИЦА с 60 позиции. Свой, а не стандартный фор мат вывода, задаётся очень просто:

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

writeln (k:3, l:3, m:3);

writeln (‘ТАБЛИЦА’ : 30);

Результат будет таким:

1 2 ТАБЛИЦА • для вещественных типов после выражения ставится двоето чие и задаётся всё поле, которое отводится для данного, за тем ставится второе двоеточие и указывается количество цифр в дробной части, если они Вам не нужны, следует за дать ноль. Число в заданном поле прижимается вправо. Пусть переменная А= -12,35. Три оператора вывода дадут разный вид результата.

writeln(a);

writeln(a:6:2);

writeln(a:6:0);

-1.23500000000E -12. - Правило Следует отметить, что при использовании массивов или даже, при отладке программы с пятью – шестью данными, приходится многократно задавать одни и те же значения, поэтому исходные данные удобнее вводить не с клавиатуры при каждом прогоне про граммы, а из заранее подготовленных Вами внешних «текстовых»

файлов.

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

Файлом называется набор данных, который имеет свое имя и размещается в каком-либо месте: на винчестере, дискете, экране или вводится с клавиатуры. Текстовым называется файл, состоя щий из символов (числа - это тоже последовательность символов!).

Данные, вводимые с клавиатуры или выводимые на экран дис плея, являются текстовым файлом, называемым стандартным.

Файлы на винчестере и дискете будем называть внешними.

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

• Объявить файловые переменные:

var f, ff: text;

{text-это файл из символов, f, ff - идентификаторы файлов};

• Записать связь логического и физического имени:

assign (идентификатор файла, 'физическое имя');

Например, assign (f, 'fam.id');

assign (ff, 'a:\p7.rez');

{fam.id или A:\p7.rez - это имена реально существующих в файловой системе файлов}.

• "Открыть" файл и объявить, для чего он открыт (для ввода Reset;

для вывода - Rewrite;

для ввода, корректировки и по следующего вывода -Append):

reset (идентификатор файла);

reset (f);

rewrite (идентификатор файла);

rewrite (ff);

append (идентификатор файла);

append (f);

• В операторах ввода-вывода указать идентификатор файла:

read[ln] (идентификатор файла, список ввода-вывода);

write[ln] Readln(f, a, b, c);

Writeln(ff, a+b, c/a);

• "Закрыть" файл в конце программы:

close (идентификатор файла);

close (f);

close (ff);

• Функция EOF (идентификатор файла) - позволяет вводить любое количество данных, после последнего данного нажи маются клавиши Ctrlz. EOF- end of file. Функция eof может использоваться и при вводе исходных данных из стандартного файла (клавиатуры), тогда круглые скобки с идентификатором файла опускаются.

2.13. Тесты Вариант 1. Оператор присвоения позволяет:

вычислить выражение, записанное справа от операции := и запи сать результат в область памяти, заданную переменной или эле ментом массива, которые находятся слева от этой операции поменять местами выражения, записанные справа и слева от операции := изменить все элементы массива, идентификатор которого запи сан слева от операции :=, на значение выражения, записанного справа от неё 2. Если значение A3, то t=1;

если A3, то t=-1;

если A=3,то t=0. Это можно записать так:

if a3 then t:=1 else t:=-1;

if a=3 then t:=0;

t:=0;

if a3 then t:=1 else t:=-1;

t:=0;

if a3 then t:=1;

if a3 then t:=-1;

3. При значении элементов массива 3 0 -6 5 2, оператор с заго ловком цикла i:=1;

while a[i] 0 do … выполнится два раза три раза ни одного раза Вариант 1. Для объявления: var a,b :integer;

c :real;

d:string[3];

e,f :array [1..6] of string[3];

g :array[1..6] of string[3];

следующие операторы присвоения являются корректными a:=c;

c:=b;

e:=f;

e:=g;

e:=d;

d:=e[2];

c:=2;

d:=e[c];

2. Информация о каждом из трёх объектов содержит два числа (r, u) и строку символов (txt). Для ввода в цикле для трёх объектов двух чисел и одной строки символов должен использоваться один опе ратор ввода, какой вариант записан правильно...readln (r, u, txt);

...

...readln (txt, r, u);

...

...read (txt, r, u);

3. По алгоритму требуется чётные по индексу элементы массива A обрабатывать от конца к началу массива (n – чётный индекс) for i:=n downto 1 do...;

for i:=n step -2 downto 2 do...;

i:=n;

while i=2 do begin...;

dec(i, 2);

end;

Вариант 1. Составной оператор используется для:

описания любых действий в условном операторе и операторе вы бора записи алгоритма в виде самостоятельного блока в программе объединения нескольких любых операторов в один и записи тако го «одного» оператора после then, else;

в ветвях оператора case;

в качестве тела цикла для операторов for и while 2. Оператор перехода может организовать вход в тело цикла, минуя его заголовок переход в раздел описаний программы выход из тела цикла 3. Операторы тела цикла, заданные многоточием, при любом N вы полняются хотя бы один раз i:=1;

repeat... until in;

i:=1;

while i=n do begin... end;

for i:=1 to n do begin... end;

Вариант 1. Оператор присвоения целой переменной K значения от -50 до следует записать так:

K := random (100)- 50;

K := - random (50);

K :=-50 + random (101);

2. Алгоритм: в новом массиве должны отсутствовать элементы, равные нулю в исходном массиве, правильно записан в варианте:

for i:=1 to 20 do if a[i]0 then b[i]:=a[i];

k:=1;

i:=1;

repeat if a[i]0 then begin b[k]:=a[i];

inc(k);

end;

inc(i);

until i=1;

k:=0;

for i:=1 to 20 do if a[i]0 then begin inc(k);

b[k]:=a[i];

end;

3. В цикле по обработке 10 элементов массива A, действия, пока занные многоточием, следует выполнять только при значениях Ai 10. i:=1;

while (i=20) and (a[i]10.5) do begin...;

inc(i);

end;

for i:=1 to 20 do if a[i]10.5 then begin...;

end;

for i:=1 to 20 do begin if a[i]=10.5 then...;

end;

Вариант 1. Оператор присвоения, при объявлении переменной K с типом in teger, записан правильно в случае:

K := sqr(101 mod 50 + 101 div 50);

K := sqr(101 + 101/50);

K :=sqrt (101 mod 50 + 101 div 50);



Pages:     | 1 || 3 |
 





 
© 2013 www.libed.ru - «Бесплатная библиотека научно-практических конференций»

Материалы этого сайта размещены для ознакомления, все права принадлежат их авторам.
Если Вы не согласны с тем, что Ваш материал размещён на этом сайте, пожалуйста, напишите нам, мы в течении 1-2 рабочих дней удалим его.