Предисловие дорогие друзья !

Вид материалаДокументы

Содержание


§9. Назначение и порядок работы в среде программирования.
9.3. Работа в окне редактирования.
9.4. Работа в многооконном режиме.
Window -> tile
§10. Операторы ввода-вывода.
10.1. Оператор ввода.
10.2. Оператор вывода.
Загрузка программы.
Очистка экрана.
Управление местом вывода сообщений.
Цветовое оформление вывода.
Program Ex12
Program Ex12_1; Uses
§11. Составление простейших программ. Порядок работы в режиме отладки.
11.2. Порядок работы в режиме отладки.
Синтаксические ошибки
Логические ошибки
Watches, âûïîëíèâ êîìàíäó Watch
Watches). Äëÿ ýòîãî íàäî ïðîèçâåñòè ñëåäóþùèå äåéñòâèÿ: à) íàæàòü
§12. Организация ввода-вывода данных с использованием текстовых файлов.
...
Полное содержание
Подобный материал:
1   2   3   4   5   6   7   8   9   10   ...   29

§9. Назначение и порядок работы в среде программирования.


Важно не количество знаний, а качество их.

Можно знать очень многое, не зная самого нужного.

( Л. Н. Толстой )

9.1. Íàçíà÷åíèå ñèñòåìû ïðîãðàììèðîâàíèÿ. Прежде чем переходить к непосредственному приобретению навыков программирования, необходимо познакомиться со средой, в которой придётся работать.

Как запустить программу Turbo Pascal вам объяснит учитель. Так как в каждом конкретном случае это делается по-своему.

Но сразу после загрузки программы на экране появится картинка, как показано на рисунке 5.

Если нет тёмносинего окна NONAME00.PAS, то поле будет сиреневого цвета. Для открытия файла необходимо выбрать пункт NEW в разделе FILE.

Ñèñòåìà ïðîãðàììèðîâàíèÿ Òóðáî Ïàñêàëü ïðåäñòàâëÿåò ñîáîé èí­òåãðèðîâàííóþ ñðåäó, âêëþ÷àþùóþ â ñåáÿ: ýêðàííûé многооконный текстовый ðåäàêòîð, êîìïè­ëÿòîð, ðåäàêòîð ñâÿçåé, îòëàä÷èê.

Рис. 5.

Èíòåãðèðîâàííàÿ ñðåäà ïîçâîëÿåò íàáèðàòü òåêñòû ïðîãðàìì ñ èñ­ïîëüçîâàíèåì âñòðîåííîãî ðåäàêòîðà òåêñòîâ, êîìïèëèðîâàòü èõ, âû­ïîëíÿòü ïðîãðàììû, ïðîâîäèòü èõ îòëàäêó. Óïðàâëåíèå âñåìè ýòèìè ôóíêöèÿìè âîçìîæíî è â ðåæèìå ìåíþ, è ñ ïîìîùüþ ñîîòâåòñòâóþùèõ ôóíêöèîíàëüíûõ êëàâèø.

9.2. Ãëàâíîå ìåíþ. Ïåðâàÿ ñòðîêà ýêðàíà ñîäåðæèò âñå êîìàíäû ãëàâíîãî ìåíþ.  ïîñëåäíåé ñòðîêå ýêðàíà ïðèâåäåíû îñíîâíûå äîñòóïíûå â êàæäûé òå­êóùèé ìîìåíò ôóíêöèîíàëüíûå êëàâèøè ñ óêàçàíèåì èõ íàçíà÷åíèÿ. Âòîðàÿ ñòðîêà óêàçûâàåò ìåñòîïîëîæåíèå êóðñîðà, à òàêæå âêëþ÷åííûå ðåæèìû ðåäàêòèðîâàíèÿ.

Äëÿ âõîäà â ãëàâíîå ìåíþ ñëåäóåò íàæàòü êëàâèøó , äëÿ âûõîäà èç íåãî - . Управлять работой турбо среды можно и с помощью мыши. Подробное описание главного меню приведено в Приложении 6.

9.3. Работа в окне редактирования. Для начала работы после загрузки программы Турбо Паскаль необходимо открыть окно редактирования. Для этого следует войти в меню File и выбрать пункт New. Работать в текстовом редакторе вы уже умеете. Описание некоторых приёмов работы и отличительных особенностей текстового редактора среды Турбо Паскаль приведены в приложении 7.


Çàäàíèе 1

1. Íàáðàòü â îäíîé ñòðîêå ñâîþ ôàìèëèþ, èìÿ è îò÷åñòâî.  ñëå­äóþùåé ñòðîêå — ñâîé äîìàøíèé àäðåñ, íîìåð òåëåôîíà.

Ïðèìå÷àíèå. Ó÷èòåëü äîëæåí ïîêàçàòü, êàê ïåðåõîäèòü â ðåæèì ââîäà ðóññêèõ áóêâ, êàê íàáèðàòü çàãëàâíûå áóêâû, öèôðû è çíàêè ïðåïиíàíèÿ.

2. Íàáðàòü в следующей строке ïðåäëîæåíèå: "Øëà ñîáàêà ïî ðîÿëþ è ñëîæèëà ïåñíþ". Â ýòîì ïðåäëîæåíèè çàìåíèòü âñå áóêâû "î" íà "å", à ïîñëå êàæäîé áóêâû "à" âñòàâèòü áóêâó "ñ".

9.4. Работа в многооконном режиме. При работе в среде Турбо Паскаль можно открывать несколько окон одновременно, íî àêòèâíûì ÿâëÿåòñÿ òîëüêî îäíî îêíî, â êîòîðîì íàõîäèòñÿ êóðñîð. Àêòèâíîå îêíî íàõîäèòñÿ íàä âñåìè äðóãè­ìè îêíàìè. Номер окна располагается на верхней границе ограничительной рамки справа. ×òîáû ñäåëàòü îêíî ñ íîìåðîì N àêòèâíûì, íåîáõîäèìî íà­æàòü êîìáèíàöèþ êëàâèø [Alt] è íîìåð îêíà (êëàâèøó ñ öèôðîé N).

Âñå êîìàíäû äëÿ ðàáîòû ñ îêíàìè íàõîäÿòñÿ â ïóíêòå Window ãëàâíîå ìåíþ. Ïðè îòêðûòèè íåñêîëüêèõ ôàéëîâ îíè çàãðóæàþòñÿ â îê­íà, êîòîðûå íàêëàäûâàþòñÿ îäíî íà äðóгîå.

×òîáû ïîñìîòðåòü ñïèñîê îòêðûòûõ îêîí, ìîæíî âîñïîëüçîâàòüñÿ êîìáèíàöèåé êëàâèø [Alt]+[O] èëè êîìàíäîé List ìåíþ Window.

Äëÿ çàêðûòèÿ îêíà ìîæíî âîñïîëüçîâàòüñÿ êîìàíäîé Close ìåíþ Window (èëè êîìáèíàöèåé êëàâèø [Alt]+[F3]). Äëÿ çàêðûòèÿ âñåõ îêîí íóæíî âûáðàòü êîìàíäó Close all ìåíþ Window.

Ïðè âûáîðå ïóíêòà Size/Move ìåíþ Window îãðàíè÷èâàþùèå ëèíèè îêíà ìåíÿþò öâåò.  ýòî âðåìÿ ñ ïîìîùüþ êëàâèø óïðàâëåíèÿ êóðñîðîì è êëàâèøè [Shift] ìîæíî èçìåíÿòü ðàçìåðû îêíà, áåç íàæàòèÿ êëàâèøи [Shift] ìîæíî èçìåíÿòü ïîëîæåíèå îêíà íà ýêðàíå. Ïîñëå âûáîðà íóæ­íîãî ðàçìåðà è ïîëîæåíèÿ íàæìèòå êëàâèøó [Enter]. Âûáîð êîìàíäû Zoom óâåëè÷èâàåò ðàçìåðû àêòèâíîãî îêíà äî ìàêñèìàëüíîãî.

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

Рис. 6.

Çàäàíèе 2
  1. Открыть дополнительно три окна, используя команду меню File New.
  2. Âûâåñòè íà ýêðàí ñïèñîê îòêðûòûõ îêîí.

3. Расположить на экране все окна так, чтобы они были одновременно максимально видны (как показано на рисунке 6). (Можно воспользоваться командой WINDOW -> TILE.)

4. Скопировать первую строку из окна 1 в окно 2.

5. Скопировать вторую строку из окна 1 в окно 3.

6. Скопировать третью строку из окна 1 в окно 4.

7. Ïåðåéòè â îêíî ñ íîìåðîì 2.

8. Ïåðåéòè â îêíî ñ íîìåðîì 3.

9. Çàêðûòü îêíà ñ íîìåðàìè 1 è 2.

Вопросы и задания.

1. Как начать и как закончить работу со средой Turbo Pascal?

2. Как перейти на новую строку при наборе текста?

3. Как удалить символ слева от курсора; символ над курсором; строку?

4. Как осуществить откатку?

5. Как скопировать фрагмент текста? Как его переместить на другое место?

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

Вот дом,

Который построил Джек.

А это пшеница,

Которая в темном чулане хранится

В доме,

Который построил Джек.

А это веселая птица-синица,

Которая ловко ворует пшеницу,

Которая в темном чулане хранится

В доме,

Который построил Джек.

Вот кот,

Который пугает и ловит синицу,

Которая ловко ворует пшеницу,

Которая в темном чулане хранится

В доме,

Который построил Джек.

Вот пес без хвоста,

Который за шиворот треплет кота,

Который пугает и ловит синицу,

Которая ловко ворует пшеницу,

Которая в темном чулане хранится

В доме,

Который построил Джек.

А это корова безрогая,

Лягнувшая старого пса без хвоста,

Который за шиворот треплет кота,

Который пугает и ловит синицу,

Которая ловко ворует пшеницу,

Которая в темном чулане хранится

В доме,

Который построил Джек.

А это старушка седая и строгая,

Которая доит корову безрогую,

Лягнувшую старого пса без хвоста,

Который за шиворот треплет кота,

Который пугает и ловит синицу,

Которая ловко ворует пшеницу,

Которая в темном чулане хранится

В доме,

Который построил Джек.

Перенесите теперь по одному куплету в каждое открытое окно.

§10. Операторы ввода-вывода.


Красота везде весьма желанный гость

(И.В. Гете)

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

10.1. Оператор ввода. Äëÿ ââîäà данных èñïîëüçóеòñÿ îïåðàòîð ввода. Оператор ввода состоит из идентификатора read (read по-английски означает читать) и следующего за ним в круглых скобках списка переменных. Число переменных может быть любым: если их больше одной, то они разделяются запятыми. Например: READ (I, J). Иногда используют вариант оператора ввода readln (READ LINE — по-английски означает читать строку). Например: READLN(A, M, K). Отличие оператора READLN от оператора READ состоит в том, что после его выполнения автоматически осуществляется переход к новой строке данных.

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

Ïðèìåð 10.

VAR A,B,C: real;

I,K: integer;

...

Begin

Readln(A,B,C);

Read(I,K);



END.

 äàííîì ïðèìåðå çíà÷åíèÿ ïåðåìåííûõ ââîäÿòñÿ â ñëåäóþùåì ïî­ðÿäêå:

0.5 6.25 12.34

1 5

при этом значения переменных станут следующими: А=0.5, В=6.25, С=12.34, I=1. K=5.

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

10.2. Оператор вывода. Âûâîä íà ýêðàí îñóùåñòâëÿåòñÿ ñ ïîìîùüþ оïåðàòîðа âûâîäà. Оператор вывода состоит из идентификатора wri­te (wri­te по-английски означает писать) и следующего за ним в круглых скобках списка выражений. Существует вариант оператора вывода wri­teln (wri­te line по-английски означает писать строку). Отличие оператора wri­teln от wri­te заключается в том, что после выполнения оператора wri­teln очередной оператор вывода вызывает печать результатов с новой строки.

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

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

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

Пример 11. Вернёмся к примеру сложения двух чисел. Язык программирования нам необходим для того, чтобы написать текст программы, т.е. перечень инструкций, необходимых для решения поставленной задачи. Какие инструкции необходимо написать для машины? перечислим их:
  1. инструкция ввода значений переменных;
  2. инструкция «сложить» и запомнить сумму;
  3. инструкция вывода результата.

Мы уже знаем, как записываются эти инструкции. Напишем их на языке Паскаль:
  1. Ввод данных: READLN(A,B);
  2. инструкция сложения: C:=A+B;

Фраза C:=A+B на русском языке звучит так: к значению переменной а прибавить значение переменной b и полученный результат присвоить переменной с.
  1. инструкция вывода результата:

WRITELN(‘Значение суммы равно ’,C);

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


Рис. 7



PROGRAM EX9; {Заголовок программы}

VAR {Раздел описания переменных, слово VAR записано отдельной строчкой для наглядности}

A, B: INTEGER; {Первое и второе слагаемые}

C: INTEGER; {Результат}

BEGIN {Начало раздела операторов. Собственно программа}

WRITE(‘Введите значения слагаемых:’);

{С помощью оператора WRITE можно выводить на экран текст. Текст обязательно заключается в апострофы. Мы вывели подсказку, при этом курсор останется в этой же строке}

READLN (A,B); {Ввод данных}

C:=A+B; {Суммирование чисел}

WRITELN(‘Значение суммы равно ’, C); {Вывод результата}

Readln { этот оператор задерживает на экране результаты работы программы, для продолжения необходимо нажать Enter}

END. {Конец программы}
  1. Çàïóñê ïðîãðàììû. Äëÿ òîãî ÷òîáû çàïóñòèòü ïðîãðàììó, íåîáõîäèìî âûéòè â ãëàâíîå ìåíþ (íàïðèìåð, ïîñðåäñòâîì êëàâèøè [F10]) è âûáðàòü ðåæèì Run (или нажать Ctrl+F9). Ïîñëå çàïóñêà ïðîãðàììû íà ýêðàíå ïîÿâèòñÿ ñîîáùåíèå:

Введите значения слагаемых:

Êóðñîð îстàнåòñÿ â той же ñòðîêå. Ýòî ñîîáùåíèå îñòàíåòñÿ íà ýêðàíå äî òåõ ïîð, ïîêà íå áóäуò введены данные. Для этого нужно набрать два числа через пробел и нажать клавишу ВВОД. Например:

12 25 

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

Значение суммы равно 37

и компьютер перейдёт в режим ожидания, пока вы не нажмёте ещё раз клавишу ВВОД.

Çàäàíèе. Âûâåäèтå íà ýêðàí â îäíîé ñòðîêå ñâîþ ôàìèëèþ, èìÿ è îò÷åñò­âî, â ñëåäóþùåé ñòðîêå — äàòó ðîæäåíèÿ.
  1. Ñîõðàíåíèå ïðîãðàììû. Äëÿ òîãî ÷òîáû ñîõðàíèòü ïðîãðàììó, íåîáõîäèìî âûéòè â ãëàâíîå ìåíþ è âûáðàòü ïóíêò File. Çàòåì â ïîÿâèâøåìñÿ âåðòèêàëüíîì ìåíþ íàäî âûáðàòü ïóíêò Save as... Ïîÿâèòñÿ îêíî, â êîòîðîì ìîæíî ââåñ­òè èìÿ ôàéëà. Íàïðèìåð, prim1_1 — èìÿ ôàéëà (îíî ìîæåò ñîäåðæàòü íå áîëåå 8 ñèìâîëîâ), ðàñøèðåíèå pas, óêàçûâàþùеå, ÷òî ôàéë ñîäåðæèò ïðîãðàììó, íàïèñàíóþ íà ÿçûêå Ïàñêàëü, Турбо Паскаль добавит автоматически.

Ïðèìå÷àíèå. èìåíà ôàéëîâ формируются также как и идентификаторы на языке Паскаль.

Ïîñëå òîãî êàê èìÿ ôàéëà íàáðàíî, íàæìèòå êëàâèøó [Enter]. Äëÿ áûñòðîãî ñîõðàíåíèÿ ôàéëà ìîæíî âîñïîëüçîâàòü­ñÿ êîìàíäàìè Save èëè Save all ìåíþ File.
  1. Âûõîä èç ñèñòåìû ïðîãðàììèðîâàíèÿ Òóðáî Ïàñêàëü. Äëÿ òîãî ÷òîáû çàêîí÷èòü ðàáîòó, íåîáõîäèìî âûáðàòü ïóíêò Quit â ìåíþ File èëè ïðîñòî íàáðàòü êîìáèíàöèþ êëàâèø [Alt]+[X].
  2. Загрузка программы. Для того чтобы загрузить программу с диска, необходимо войти в главное меню и выбрать пункт File. Затем вы брать пункт Open. Ïîÿâèòñÿ îêíî, â êîòîðîì ìîæíî ââåñ­òè èìÿ ôàéëà или выбрать его из списка. Ïîñëå òîãî êàê èìÿ ôàéëà выáðàíî, íàæìèòå êëàâèøó [Enter].
  3. Очистка экрана. Для того чтобы результат работы программы выдавался на чистом экране, после слова Begin необходимо поставить оператор ClrScr; при этом обязателен оператор Uses Crt;, который нужно записать сразу после заголовка программы.
  4. Управление местом вывода сообщений. Gotoxy(x, y); — этот оператор позволяет управлять местом вывода сообщений на экране. Весь экран разделяется для вывода информации на 25 строк по 80 позиций в каждой. Поэтому 1Х80; 1У25. Левый верхний угол экрана имеет координаты (1, 1). при использовании оператора Gotoxy(x,y); обязателен оператор Uses Crt;
  5. Цветовое оформление вывода. При выводе на экран информации различные данные можно выдавать различным цветом на различном фоне. Для этой цели используются команды установки цвета и фона.

textbackground(farbe) уñòàíàâëèâàåò öâåò ôîíà. Àòðèáóòîì farbe ìîæåò áûòü îäíà èç ñëåäóþùèõ êîíñòàíò:

black (÷åðíûé) = 0

blue (ãîëóáîé) = 1

green (çåëåíûé) = 2

cyan (âàñèëüêîâûé) = 3

red (êðàñíûé) = 4

magenta (ôèîëåòîâûé) = 5

brown (êîðè÷íåâûé) = 6

lightgray (ñâåòëî-ñåðûé) = 7

Команда ClrScr;, заданная после установки цвета фона, очищает экран цветом фона.

Textcolor(farbe) уñòàíàâëèâàåò òåêóùèé öâåò. Àòðèáóò farbe ìîæåò ïðèíèìàòü îäíî èç çíà÷åíèé 0..7 èç textbackground è êðîìå òîãî:

darkGray (òåìíî-ñåðûé) = 8

lightBlue (ñâåòëî-ãîëóáîé) = 9

lightGreen (ñàëàòîâûé) = 10

lightGyan (светло-бирюзовый) = 11

lightRed (àëûé) = 12

lightMagenta (ñèðåíåâûé) = 13

yelloy (æåëòûé) = 14

white (áåëûé) = 15

blick (мерцание) +128

Пример 12. Выведем в центре экрана приветствие: «Привет друг!»

Program Ex12;

Uses Crt; {Подключение модуля, ответственного за работу с клавиатурой и дисплеем}

Begin

Clrscr; {Очищает экран чёрным цветом}

Gotoxy(25,15); {Переводит курсор в 15 строку и 25 позицию}

TextBackGround(3); {Устанавливает васильковый цвет фона того квадратика, где будет выведена буква}

TextColor(12); {Устанавливает алый цвет самой буквы}

Writeln('Привет, друг!'); {Выводит сообщение алыми буквами на васильковом фоне}

Readln;

End.

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

Program Ex12_1;

Uses Crt; {Подключение модуля, ответственного за работу с клавиатурой и дисплеем}

Begin

TextBackGround(3); {Устанавливает васильковый цвет фона }

Clrscr; {Очищает экран цветом фона}

TextColor(12); {Устанавливает алый цвет самой буквы}

Gotoxy(25,15); {Переводит курсор в 15 строку и 25 позицию}

Writeln('Привет, друг!'); {Выводит сообщение алыми буквами на васильковом фоне}

Readln;

End.

Вопросы и задания.

1. Назовите стандартные процедуры ввода/вывода в языке Pascal.

2. В чем отличие процедур Read и ReadLn, Write и WriteLn?

3. Что такое "форматный вывод"?

4. Как напечатать вещественное выражение с требуемой точностью?

5. Почему параметрами процедуры ввода read могут быть только переменные, а не числа или выражения, скажем, х+1?

6. В процедуре ввода указывается имя переменной, которой надо присвоить введённую величину, но не указывается, какую именно из набранных с клавиатуры величин надо ввести; как же становится известным, какую величину надо вводить?

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

8. Что будет выведено на экран, если в списке вывода записано:

а) число; в) текст в кавычках;

б) имя величины; г) арифметическое выражение?

8. Что будет напечатано программой

Program prim;

Var a, b:integer;

Begin

Read(a,b,a);

Writeln(a,b,a);

End.

9. Имеется программа

Program prim;

Var a:integer;

Begin

A:=2;

Writeln(‘a+1’);

End.

Что она напечатает?

10. Когда процедура вывода Writeln(х1,х2, …, хn) осуществляет перевод строки: до печати первого параметра х1 или после печати последнего параметра хn?

11. Нарисовать расположение чисел, напечатанных следующей последовательностью процедур:

Write(1); Write(2,3); Writeln(4); Write(5,6); Writeln; Writeln(7,8).

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

a) write(x,y); б) write(x, x+1, x+2); в) read(a); г) write(50);

д) write(x; y; z); е) write(y+2.2); ж) write(y+2,2); з) write x, y, z?

13. Всегда ли выполнение последовательностей операторов

read(x,y); x:=x*x; write(x,y) и read(x,y); write(sqr(x)); write(y)

при одних и тех же исходных данных приводит к выводу одних и тех же чисел?

14. Какие числа будут выведены в результате выполнения последовательности операторов:

read(x); x:=x-1.2; x:=sqrt(x-1)*x+1; write(x, 2-3*x)?

§11. Составление простейших программ. Порядок работы в режиме отладки.


11.1. Составление простейших программ. Рассмотренных операторов достаточно для записи программ, реализующих линейные алгоритмы.

Пример 13. Составить программу нахождения периметра прямоугольника, длина и ширина которого вводятся с клавиатуры.

Решение. При заданных длинах сторон периметр прямоугольника вычисляется по формуле P=2(a+b). Здесь a и b — исходные данные, Р — результат. Значения a и b могут быть как целыми, так и вещественными. Поэтому тип величин a, b и Р определим как вещественный. Блок-схема решения задачи приведена на рисунке 7, а рядом приведена программа, написанная на языке Паскаль.





program Ex13;

var A,B,Р:real;

begin

Write ('Ââåäèòå длины сторон прямоугольника’);

Readln(A,B);

Р:=2*(A+В);

Writeln('Р=',Р);

Readln;

end.


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

Ââåäèòå длины сторон ÷åðåç ïðîáåë:

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

Ââåäèòå длины сторон ÷åðåç ïðîáåë:12.5 18.4

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

Р=3.09Е+01

Число выведено в стандартном виде, так как все вещественные числа представлены в машине именно так. Буква Е и следующее за ней число говорят о том, что число 10 надо возвести в первую степень. Читать такие числа сложно. Для того, чтобы получить число в привычной для нас форме, используются шаблоны вывода, с помощью которых мы можем указать количество выводимых цифр, как для целой, таки для дробной части числа. Для этого при выводе значения переменной после имени переменной мы набираем двоеточие, затем количество цифр для всего числа, ещё раз двоеточие и количество цифр дробной части. например, в операторе Writeln('Р=',Р:5:2); указано два десятичных знака после запятой. Заменим в программе оператор Writeln('Р=',Р); оператором Writeln('Р=',Р:5:2);. Тогда на экране появится сообщение:

Р=30.90

Оператор Readln; служит для задержки системного экрана. Для возврата в режим редактирования необходимо нажать клавишу Enter.

Пример 14. составить программу вычисления значения выражения .

Решение. Значение а может быть как целым, так и дробным. Значение у — вещественное. введём промежуточную величину pr, для вычисления выражения а2+1, так как его нужно вычислять дважды. Определим все переменные как вещественные.

Блок-схема решения задачи приведена на рисунке 8, а рядом приведена программа, написанная на языке Паскаль.




program Ex14;

var A, PR,Y:real;

begin

Write ('Ââåäèòå значение величины А:');

Readln(A);

РR:=SQR(A)+1;

Y:=PR/(1+SQRT(PR));

Writeln('Y=',Y:6:3);

Readln;

end.


После запуска программы введём значение переменной А равное 1. на экране появится сообщение:

Y= 0.828

11.2. Порядок работы в режиме отладки. За исключением очень простых программ, сразу написать правильную программу не удаётся даже опытным программистам. В поиске ошибок вам поможет система Òóðáî Ïàñêàëü.

Различают три вида ошибок: синтаксические ошибки (неправильное использование языка Паскаль), семантические ошибки (ошибки выполнения команд) и логические ошибки (ошибки в алгоритме программы).

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

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

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

Перечень основных ошибок приведён в приложении 8, в конце учебника.

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

11.3. Ïîñëåäîâàòåëüíîñòü äåéñòâèé ïðè ðàáîòå ñ Òóðáî-îòëàä÷èêîì. Äëÿ âûïîëíåíèÿ ïðîãðàììû â ïîøàãîâîì ðåæèìå òðåáóåòñÿ âûïîëíèòü êîìàíäó Step Over ìåíþ Run èëè íàæàòü ôóíêöèîíàëüíóþ êëàâèøó [F8] (или [F7]).

Ïðèìå÷àíèå. Ïðåæäå ÷åì ïðîâîäèòü ïîøàãîâóþ îòëàäêó ïðîãðàììû, íåîáõîäèìî óáåäèòüñÿ, ÷òî îïöèÿ Options/Debugger/Integrated àêòè­âèçèðîâàíà.

×òîáû ïîñëåäèòü çà âûïîëíåíèåì ïðîãðàììû, íóæíî çíàòü, êàê èç­ìåíÿþòñÿ çíà÷åíèÿ ïåðåìåííûõ. Àêòèâèçèðóåì îêíî Watches, âûïîëíèâ êîìàíäó Watch ìåíþ Debug. ×òîáû ââåñòè â îêíî Watches, êàêóþ-ëèáî ïåðåìåííóþ, âîñïîëüçóåìñÿ êîìáèíàöèåé êëàâèø [Ctrl]+[F7] (èëè âûïîë­íèì Add Watch ìåíþ Debug, или нажмём Insert, находясь в окне Watches), ïîñëå ÷åãî îòêðîåòñÿ äèàëîãîâîå îêíî Add Watch, â êîòîðîå íåîáõîäèìî ââåñòè èìÿ ïåðåìåííîé.

Ïðèìå÷àíèå. ×òîáû îáëåã÷èòü ïðîöåññ ââîäà ïåðåìåííûõ â îêíî Watches, ìîæíî ïåðåä íàæàòèåì êîìáèíàöèè êëàâèø [Ctrl]+[F7] óñòàíî­âèòü êóðñîð на èìåíè ïåðåìåííîé, êîòîðóþ âû õîòèòå ââåñòè.

Äëÿ óäàëåíèÿ ïåðåìåííîé èç îêíà Watches, âîéäèòå â îêíî Watc­hes, ñ ïîìîùüþ êëàâèø óïðàâëåíèÿ êóðñîðîì âûáåðèòå íóæíóþ ïåðåìåí­íóþ è íàæìèòå êëàâèøó [Del].

Рассмотрим в качестве примера программу Ех14, в которой идентификатор sqrt ошибочно заменён на sqr. порядок действий при отладке программы будет следующим. Наберём и запустим программу.

program Ex14_1;

var A, PR,Y: real;

begin

Write ('Ââåäèòå значение величины А:');

Readln(A);

РR:=SQR(A)+1;

Y:=PR/(1+SQR(PR));

Writeln('Y=',Y:6:3);

Readln;

end.

Если после запуска программы ââåñòè 1, òî на экране появится результат:

Y= 0.400.

Правильный же результат должен быть 0.828…

Ðàññìîòðèì íà ýòîì ïðèìåðå, êàê ïîëüçîâàòüñÿ Òóðáî-îòëàä÷èêîì.  ýòîì ñëó÷àå ñëåäóåò:

1) âûáðàòü â ðàçäåëå Run êîìàíäó Trace into (ñèíîíèì - ), или Step over (ñèíîíèì - ). Åñëè íåîáõîäèìà ïåðåòðàíñëÿöèÿ ïðîãðàììû, ñèñòåìà ñäåëàåò ýòî àâòîìàòè÷åñêè.  ðåçóëüòàòå èíèöèèðóåòñÿ ðåæèì îòëàäêè. Ïåðâûé îïåðàòîð (begin) âûäåëèòñÿ ïîäñâåòêîé. Ïîäñâå÷åííàÿ ñòðîêà - ýòî òåêóùàÿ ñòðîêà âûïîëíåíèÿ (ò.å. òà, êîòîðàÿ áóäåò âûïîëíÿòüñÿ ñëå­äóþùåé).

2) âòîðûì íàæàòèåì âûïîëíèòü begin è ïîìåòèòü ñëåäóþùèé îïåðàòîð (Write) è ò.ä. Î÷åðåäíîå íàæàòèå ïðîèçâîäèò ïîøàãî­âîå âûïîëíåíèå ïðîãðàììû.

Çàìå÷àíèå. Âû íàõî­äèòåñü â окне Ðåäàêòèðîâàíèе. Òóðáî-îòëàä÷èê ïî ìåðå ïðîäâèæåíèÿ ïî ïðîãðàììå áóäåò âðåìÿ îò âðåìåíè ïåðåêëþ÷àòü ýêðàí Ðåäàêòèðîâàíèå íà ýêðàí Âûïîëíåíèÿ (íàïðèìåð, êîãäà ïðîãðàììà òðåáóåò çàäàòü äâà ÷èñëà), à çàòåì ñíîâà âîçâðàùàòüñÿ â Ðåäàêòèðîâàíèå è æäàòü ñëåäó­þùåé êîìàíäû.

3) â ïðîöåññå îòëàäêè ìîæíî ïðîñìîòðåòü òåêóùèå çíà÷åíèÿ ïåðå­ìåííûõ ïðîãðàììû (â îêíå Watches). Äëÿ ýòîãî íàäî ïðîèçâåñòè ñëåäóþùèå äåéñòâèÿ:

à) íàæàòü Add Watch (òî, ÷òî áóäåò èçîáðàæàòüñÿ â ýòîé ðàìêå, çàâèñèò îò òîãî, ãäå áûë êóðñîð, êîãäà âû íàæàëè .

á) íàáðàòü À <Enter> (äîáàâèòü ïåðåìåííóþ À â îêíî Watches).  ðåçóëüòàòå â îêíå Watches (â íèæíåé ÷àñòè ýêðàíà) ïîÿâèòñÿ ñòðîêà:

À: 0.0

â) íàæàòü è íàáðàòü PR <Enter>. Â îêíå áóäåì èìåòü:

À: 0.0

PR: 0.0

ã) íàæàòü è íàáðàòü Y <Enter>.  îêíî Watches äîáàâëÿåòñÿ çíà÷åíèå Y:

À: 0.0

PR: 0.0

Y: 0.0

Ïî ìåðå ïðîäâèæåíèÿ ïî ïðîãðàììå â îêíå Watches áóäóò îòîáðàæàòüñÿ òåêóùèå çíà÷åíèÿ ïðîñìàòðèâàåìûõ ïåðåìåííûõ.

Çàìå÷àíèå. Äëÿ ïåðåхода èç одного îêíà в другое, ñëåäóåò íàæàòü.êëàâèøó или Alt+N, где N — номер окна.

Для наглядности можно открыть и окно OUTPUT (рисунок 9).

Êîãäà ïîøàãîâîå âûïîëíåíèå ïðîãðàììû (â ðåçóëüòàòå íàæàòèÿ äîéäåò äî îïåðàòîðà Y:=PR/SQR(PR); можно обратить внимание, что в результате деления получается неверный результат. Здесь и следует искать причину ошибки.


Рис. 9

Äëÿ çàâåðøåíèÿ ðåæèìà îòëàäêè ñëåäóåò íàæàòü êëàâèøó .

Точка останова. В тексте программы при отладке можно вставить точку останова. Для этого необходимо установить курсор на строку программы, где надо поместить точку останова и нажать Ctrl+F8 (или выбрать пункт Add breakpoint меню Debug). Для удаления точки останова требуется повторно нажжать Ctrl+F8 (или выбрать пункт breakpoints меню Debug и нажать кнопку Delete).

Вопросы и задания.
  1. Каково назначение Турбо-отладчика системы Турбо Паскаль?
  2. каковы возможности отладчика системы Турбо Паскаль?
  3. Как вставить новые переменные и выражения в окно просмотра?
  4. Как установить и удалить точки прерывания в программе?
  5. Как удалить переменные из окна просмотра?
  6. дана площадь квадрата. Найти его периметр.
  7. Íàéòè ïåðèìåòð:

à) òðåóãîëüíèêà, äëèíû âñåõ ñòîðîí ââîäÿòñÿ ñ êëàâèàòóðû;

b) ïðîèçâîëüíîãî ÷åòûð¸õóãîëüíèêà, äëèíû âñåõ ñòîðîí ââîäÿòñÿ ñ êëàâèàòóðû.
  1. Дана длина ребра куба. Вычислить объём куба и площадь боковой поверхности.
  2. Âû÷èñëèòü çíà÷åíèå âûðàæåíèé:

à) y=15x2+8x-9; á) a=(b+c)*d—k.
  1. Âû÷èñëèòü ðàöèîíàëüíûì ñïîñîáîì, òî åñòü çà ìèíèìàëüíîå êîëè÷åñòâî îïåðàöèé:

à) ó=õ5 (3 îïåðàöèè);

á) ó=õ6 (3 îïåðàöèè);

à) ó=õ8 (3 îïåðàöèè).

  1. Составить программу вычисления значения выражения .
  2. Ïîìåíÿòü ìåñòàìè çíà÷åíèÿ ïåðåìåííûõ õ è ó:

à) ñ èñïîëüçîâàíèåì äîïîëíèòåëüíîé ïåðåìåííîé;

á) áåç èñïîëüçîâàíèÿ äîïîëíèòåëüíîé ïåðåìåííîé.

13. Один из романов Ж. Верна называется «20000 лье под водой». Если бы расстояние измерялись в километрах, то как бы звучало название этого романа? Как известно, одно морское лье равно 5,556 километра.

14. Составить программу, которая переводит температуру в градусах по Фаренгейту в градусы Цельсия по формуле: , где C - температура по Цельсию, а F - температура по Фаренгейту.

15. Запросите действительное число найдите целую часть этого числа и округлите его до ближайшего целого.

§12. Организация ввода-вывода данных с использованием текстовых файлов.


12.1. Описание текстовых файлов. Обычно в задачах исходные данные по­ступают с клавиатуры, а результаты выводятся на экран дисплея. Поэтому ни исходные данные, ни результаты не сохраняются. Всякий раз при выполнении одной и той же программы, особенно во время ее отладки, приходится заново вводить исходные данные. А если их очень много? Тогда удобно оформить исходные данные и результаты в виде файлов, которые можно хранить на диске точно так же, как и программы. Под файлом понимают любой набор данных: исходные данные, программа, результаты, любые тексты.

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

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

Зачем нужны файлы? Объем информации, которую можно сохранить в файле, очень велик. Он значительно больше, чем объем, который можно хранить в оператив­ной памяти, например, при использовании массивов.

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

Текстовый файл, в котором хранятся исходные данные для программы, можно создать следующим образом. Открывается новое окно командой NEW меню FILE. записываются исходные данные. Файл сохраняется командой SAVE. Имя файла входных данных обычно — INPUT.TXT.

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

описать (объявить) файловую переменную в программе (внутреннее имя файла, с которым мы будем работать);

поставить ей в соответствие конкретный файл на диске;

открыть файл для чтения или записи данных;

прочитать данные из файла (или записать результат в файл);

закрыть файл.

файловые переменные должны быть описаны в программе либо явно в разделе переменных VAR, либо с использованием раздела типов TYPE. Для описания текстовых файлов используется служебное слово Text. Объявление текстового файла в разделе переменных имеет вид:

Var <имя файловой переменной>: Text;

Например:

Var F1, F2: Text;

Мы описали две файловые переменные F1 и F2, указав тип текстовых файлов.

Объявление текстового файла с использованием раздела типов TYPE имеет вид:

TYPE T = FILE OF TEXT;

VAR F1, F2: T;

В разделе TYPE мы описали новый тип Т. в разделе VAR мы объявили две файловые переменные F1 и F2, указав тип Т.

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

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

Аssign(<имя файловой переменной>, '<имя файла на диске>') ;

Например,

Assign(Fl,'A:INPUT.TXT') ;

Assign(F2,'A:OUTPUT.TXT') ;

После установления такого соответствия все операции, выполняемые над переменной Fl, будут выполняться над файлом, хранящимся на диске А и имеющим имя INPUT.TXT. А все операции, выполняемые над переменной F2, будут выполняться над файлом, хранящимся на диске А и имеющим имя OUTPUT.TXT. если файл находится в текущем каталоге Турбо Паскаля, то кроме имени файла в кавычках ничего не надо указывать, иначе нужно указывать полный путь доступа к файлу.

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

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

Для чтения из файла необходимо открыть файл для чтения командой

Reset(<имя файловой переменной>);

Собственно чтение данных из файла выполняется командой

Read(<имя файловой переменной>, <список переменных>);

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

Решение. Создадим текстовый файл INPUT.TXT. Запишем в него число 12. Файл хранится в текущем каталоге Турбо Паскаля. Чтобы число можно было присвоить переменной N, нужно написать следующую программу:

Program Ex15;

Var F1: Text; {Описываем файловую переменную}

N: integer; {и переменную N}

Begin

Assign(Fl,'INPUT.TXT') ; {«Переименовываем» файл для простоты обращения}

Reset(F1); {Открываем файл для чтения}

Read(F1, N); {Прочитываем, т.е. присваиваем значение переменной}

Write ('N=', N); {Выводим результат на экран}

Readln: {Задержка изображения экрана вывода}

End.

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

N=12

Чтение данных из текстового файла происходит по тем же правилам, и при помощи тех же операторов, что и чтение данных, вводимых с клавиатуры. Единственное отличие — это присутствие имени файловой переменной в операторах чтения. Если список переменных в операторе чтения содержит одну переменную, то ей присвоится первое значение, хранящееся в файле. Если список переменных содержит несколько переменных, то каждая переменная получает значение одного элемента, считанного из файла. Это значение преобразуется автоматически в тот тип даных, который имеет переменная из списка. Если необходимо после чтения данных перейти на сле­дующую строку, то используется команда Readln(<имя файловой переменной>, <список переменных>). Если необходимо просто перейти к следующей строке, то можно использовать команду Readln (<имя фай­ловой переменной>), кото­рая устанавливает файловый указатель на первый эле­мент следующей строки.

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

Для записи в файл необходимо открыть файл для записи командой

Rewrite (<имя файловой переменной>);

при этом если в файле хранились какие-то данные, то они будут утеряны («стёрты»). И новые данные будут записываться в начало файла.

Собственно запись данных в файл выполняется командой

Write(<имя файловой переменной>, <список вывода>);

или

Writeln(<имя файловой переменной>, < список вывода >);

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

12.5. Закрытие файла. После того как работа с файлом закончена, его не­обходимо закрыть командой

Close(<имя файловой переменной>).

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

Чтобы закрыть файл INPUT в программе Ex15, необходимо записать перед командой END команду Close(F1). Но так как файл F1 был открыт для чтения, закрывать его не обязательно.

Изменим программу Ex15 так, чтобы вывод происходил в файл OUTPUT.TXT.

Program Ex15_1;

Var F1, F2: Text; {Описываем файловые переменные}

N: integer; {и переменную N}

Begin

Assign(Fl,'INPUT.TXT') ; {«Переименовываем» файлы для простоты обращения}

Assign(F2,'OUTPUT.TXT') ; { }

Reset(F1); {Открываем файл INPUT.TXT для чтения}

Rewrite(F2); {Открываем файл OUTPUT.TXT для записи}

Read(F1, N); {Прочитываем значение из файла, т.е. присваиваем значение переменной N}

Write (F2,'N=', N); {Выводим результат в файл OUTPUT.TXT}

Close(F2); {Закрываем файл OUTPUT.TXT}

End.

Переменная N в результате работы программы примет значение 12, а результат будет записан в файл OUTPUT.TXT.

Кроме команды REWRITE, к текс­товым файлам применяется команда открытия файла для дозаписи.

Append (<имя файловой переменной>).

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

Рассмотрим более подробно работу с файлами на примере решения следующей задачи.

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

Решение. Пусть в файле INPUT.TXT содержится следующая информация:

32 16

Этот файл можно создать в среде Турбо Паскаль следующим образом:
  • создайте новый файл посредством команды New меню File;
  • запишите числа, разделяя их пробелами;
  • сохраните файл под именем INPUT.TXT. Этот файл используется в программе, которая при­ведена ниже.

Program Ex16;

Var F: Text;x, k: Integer;

Begin

Assign (F, ‘INPUT.TXT '); {Связываем файловую переменную с файлом на диске}

Reset(F); {Открываем файл для чтения}

Read(F, x, k) ; {Считываем числа, присваивая переменным x и k соответственно значения 32 и 16}

Writeln ('Сумма = ', x+k) ; {Выводим на экран значение суммы}

Writeln ('Произведение = ', x*k) ; {Выводим на экран значение произведения}

Writeln ('Разность = ', x—k) ; {Выводим на экран значение разности}

Close (F); {Закрываем файл}

Readln; {Задерживаем выполнение программы, переход в режим редактирования — нажать ENTER}

End.

12.6. Работа в многооконном режиме.

  1. Создать входной файл и сохранить его с именем (например, INPUT.TXT).
  2. Открыть готовую программу (например, Ex16, изменив программу из примера 16 так, чтобы результат выводился в файл).

Program Ex16_1;

Var F1,F2: Text;

x, k: Integer;

Begin

Assign (F1, ‘INPUT.TXT '); {Связываем файловую переменную с файлом на диске}

Reset(F1); {Открываем файл для чтения}

Assign (F2, ‘OUTPUT.TXT '); {Связываем файловую переменную с файлом на диске}

Rewrite(F2); {Открываем файл для чтения}

Read(F1, x, k) ; {Считываем числа, присваивая переменным x и k соответственно значения 32 и 16}

Writeln (F2,'Сумма = ', x+k) ; {Выводим в файл значение суммы}

Writeln (F2,'Произведение = ', x*k) ; {Выводим в файл значение произведения}

Writeln (F2,'Разность = ', x—k) ; {Выводим в файл значение разности}

Close (F2); {Закрываем файлы}

End.
  1. Выполнить программу.
  2. Открыть выходной файл (OUTPUT.TXT).
  3. Расположить все три окна на экране так, чтобы было удобно работать (см. рисунок 9).


Рис. 9.

Теперь мы можем отлаживать программу, изменяя данные во входном файле. помните только, что после каждого изменения значения во входном файле, его необходимо пересохранять, нажав клавишу F2, или используя пункт SAVE меню FILE.
  1. Для отладки можно открыть окно WATCH (меню DEBUG).

Вопросы и задания.

1. Что такое файл?

2. Как определяется текстовый файл в языке Pascal?

3. Перечислите стандартные функции для работы с файлами.

4. Дано двузначное число. Написать программу, вычисляющую сумму и произведение цифр числа. Например, для числа 46 сумма равна 10, а произведение — 24.

5. Даны два целых числа. Найти их среднее арифметическое.

6. Составить программу вычисления значения выражения x=3,56(a+b)3-5,8b2+3,8a-1,5.

7. Дано двузначное число. Найти число, полученное при прочтении его цифр справа налево. Например, из числа 73 получить число 37.

8. Дано трёхзначное число. В нём зачеркнули первую слева цифру и приписали её в конец. Найти полученное число.

9. С начала суток прошло n секунд. Определить, сколько полных часов прошло с начала суток, и сколько полных минут прошло с начала очередного часа.

10. Дано целое число, большее 99. найти третью от конца его цифру (так, если данное число 2345, то искомая цифра 3).

11. Принимая, что Земля имеет форму шара с радиусом 6400 км, составить программу вычисления длины земного экватора.

12. Дана длина ребра куба. Найти объём куба и площадь его полной поверхности.

13. Известны количество жителей в государстве и площадь его территории. определить плотность населения в этом государстве.

14. Смешали 200 г мела и 100 г песка. Чему равна массовая доля песка в полученной смеси?

15. Надпись «25%-ная» на баночке со сметаной означает, что массовая доля жира в сметане составляет 25%. Рассчитайте, какую массу жира вы потребляете, когда съедаете 5 чайных ложек сметаны, вмещающих в среднем по 10 г сметаны.

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

§13. Îïåðàòîð áåçóñëîâíîãî ïåðåõîäà GOTO.


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

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

Label 1, а2, vn8, swith;

Одной меткой можно пометить только один оператор. Метка от помеченного оператора отделяется двоеточием.

Пример:

6: Writeln(14/2);

метки, используемые в Паскале, бывают двух типов:
  • Целые числа в диапазоне от 0 до 9999;
  • Обычные идентификаторы.

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

Goto <метка>;

Оператор, к которому происходит переход, должен быть помечен данной меткой.

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

Инструкция GOTO позволяет изменить ход выполнения программы.

Пример 17. Написать программу умножения заданного числа на 9.




Program Ex17;

Label 10; {Описание метки перехода}

Var x:integer;

Begin

10: {Метка перехода}

Writeln('Посмотри, как я умею умножать на 9');

Write('Выбери число:');

Readln(x);

Writeln(х,' умножить на 9 равно ',x*9);

Writeln('Ну, как, убедился?');

Goto 10;

End.


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

Посмотри, как я умею умножать на 9

Выбери число:

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

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

12 умножить на 9 равно 108

Ну, как, убедился?

Затем выполнение программы по оператору GOTO перейдёт к метке 10, и на экране снова появятся слова:

Посмотри, как я умею умножать на 9

Выбери число:

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

Чтобы выйти из программы, нужно одновременно нажать клавиши Ctrl и Break.

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

Пример 18. Компьютер может считать как бы сам по себе. Достаточно только попросить его об этом.

Program Ex18;

Label 10;

Var x:integer;

Begin

X:=1;

10: Writeln(х);

X:=x+1;

Goto 10;

End.

Вот что при этом происходит:

Х:=1 — компьютер помещает число 1 в переменную Х.

Writeln(х) — компьютер отображает на экране содержимое переменной Х, т.е. число 1.

X:=x+1 — компьютер прибавляет число 1 к содержимому величины Х, т.е. 1+1=2.

Goto 10 — компьютер возвращается к метке 10.

Writeln(х) — компьютер отображает на экране содержимое переменной Х, т.е. число 2.

X:=x+1 — компьютер прибавляет число 1 к содержимому величины Х, т.е. 2+1=3.

Goto 10 — компьютер возвращается к метке 10.

Writeln(х) — компьютер отображает на экране содержимое переменной Х, т.е. число 3

и т.д.

Компьтер будет продолжать счёт до тех пор, пока не предложим ему остановиться, нажав на клавиши Ctrl+Break.

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

В языке Паскаль для указания таких переходов есть специальные операторы: EXIT, CONTINUE, BREAK, HALT. Разумно используя эти операторы, можно обойтись без меток и оператора GOTO.

Вопросы и задания.
  1. Что такое метка? Как она описывается и используется?
  2. Как выйти из бесконечного цикла?
  3. Можно ли указать программу, выполнение которой завершается и конец которой имеет вид: а) ; goto 1 end. б) goto 1. в) goto1; 1: end. г) goto 1; 2: end.?
  4. Изменить программу Prim5, заменив в нём строку Х:=Х+1 на Х:=Х+5. Внимательно посмотрите, что произойдёт. Затем измените программу так, чтобы компьютер считал:

десятками (от 10 через 10),

двадцатками (от 20 через 20),

полусотнями (от 50 через 50).
  1. Напишите программу, которая выдает на экран таблицу умножения для заданного числа n. Например, для N=5 на экране должно появиться следующее:

5 10 15 20 25 30 35 40 45 50.
  1. Измените программу решения предыдущей задачи так, чтобы для N=5 на экране было:

51=5

52=10

53=15

54=20

55=25 и т.д.

Для любознательных

С оператором GOTO к настоящему времени не достигнута полная ясность: в языке программирования для серьезной работы оператор GOTO быть должен или нет. История его изгнания весьма поучительна. Наличие GOTO в машинном языке понятно: там важна экономия средств, а с помощью одного этого оператора можно смоделировать любые структуры управления (операторы IF, FOR, WHILE и т.д.). По той же причине в 50-е годы GOTO был автоматически включен в первые языки программирования (например, фортран): ведь еще не было ясно, ни что такое хорошие программы, ни как их строить. К концу 60-х гг. анализ уже накопленного опыта выявил (знаменитое письмо выдающегося теоретика систематического программирования Э.Дейкстры «Go To Statement Considered Harmful»), что бесконтрольное использование GOTO приводит к "спагетти" — программам, хаотически напичканным операторами GOTO, в которых отследить все возможные состояния вычислительного процесса — а следовательно, и убедиться в корректности программы — становится практически невозможно. Вслед за работами Дейкстры и др. возникла методология структурного программирования (о ней вы познакомитесь в старших классах).  В структурном программировании был найден минимальный набор управляющих структур для систематического построения эффективных программ (IF, WHILE и т.п.; все они представлены в Обероне/Компонентном Паскале).
В 70-е гг. "проблема GOTO" еще активно дискутировалась, но к настоящему времени вопрос не исчерпан: GOTO нужен или не нужен, вреден или безвреден. Н. Вирт говорил: «Наличие GOTO в старых языках — следствие необходимости обеспечить совместимость с "программным наследием"; а его наличие в новых — признак некомпетентности проектировщика. Поэтому наилучшее решение проблемы GOTO — радикальное: просто исключить его из языка».