Программирование учебное пособие pdf

Языки программирования. Учебное пособие

  • Название: Языки программирования. Учебное пособие
  • Автор: Голицына О.Л.Партыка Т.Л.Попов И.И.
  • Издательство: ФОРУМ, ИНФРА-М
  • Год: 2008
  • Метки: языки программирования
  • Размер: 13.77 МБ

БУМАЖНАЯ ВЕРСИЯ КНИГИ

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

А. Соловьев. ПРОГРАММИРОВАНИЕ НА shell (UNIX) (Учебное пособие)

1 А. Соловьев ПРОГРАММИРОВАНИЕ НА shell (UNIX) (Учебное пособие)

2 Содержание 1. Введение Файловая система Простейшие средства shell Структура команд Группировка команд Перенаправление команд Генерация имен файлов Командные файлы Среда shell (переменные и параметры) shell-переменные Экранирование Манипуляции с shell-переменными Экспорт переменных Параметры Подстановки shell-интерпретатора Программная среда Программные структуры Команда test («[ ]») Условный оператор «if» Оператор вызова («case») Оператор цикла с перечислением («for») Оператор цикла с истинным условием («while») Оператор цикла с ложным условием («until») Пустой оператор Функции в shell Обработка прерываний («trap») Литература

3 1. Введение Среди операционных систем особое место занимает Unix. Беспрецедентным является то, что ОС Unix может работать практически на всех выпускаемых платформах. UNIX — это стандарт де факто открытых и мобильных операционных систем. (поскольку название UNIX запатентовано компанией AT&T — различные юниксы называются различно: SCO UNIX, BSDI, Solaris, Linux, DG/UX, AIX и т.д.). Это не только многозадачная, но и многопользовательская система. Она обеспечивает современный пользовательский интерфейс на базе системы X Window и межмашинную связь на базе протоколов TCP/IP и т.п. ОС Unix была создана Кеном Томпсоном и Деннисом Ритчи в Bell Laborotories (AT&T). Широко распространяться Unix/v7 (версия 7) начала в м годах. Вручение создателям Unix в 1983 году Международной премии А.Тьюринга в области программирования ознаменовало признание этой системы мировой научной (computer science) общественностью. Что также беспрецедентно. Сколько операционных систем взошло и зашло на компьютерном небосклоне за время существования UNIX! ОС Unix стоит на трех китах: язык Си, файловая система, командный язык. В дальнейшем к ним добавились система X Window и протоколы TCP/IP. Язык Си, на котором написана сама операционная система, с одной стороны, сочетает в себе свойства языка высокого уровня: описание типов, программные структуры if, for, while и т.п., а с другой — содержит средства, присущие обычно языкам уровня ассемблера: регистровые переменные, адресную (ссылочную) арифметику, возможности работы с полями бит и отдельными битами и т.п. 3

4 2. Файловая система Файловая система ОС Unix имеет иерархическую (древовидную) структуру. В вершинах дерева находятся каталоги (используют также термины — справочники, директории), содержащие списки файлов. Эти файлы в свою очередь могут быть либо снова каталогами, либо обычными файлами, либо специальными файлами, представляющими различные устройства ввода-вывода. / bin boot dev etc lib mnt sys tmp unix usr Kорневой каталог имеет имя «/». Он обычно содержит каталоги: bin для наиболее используемых команд; usr каталоги и обычные файлы, содержащие информацию, привлекаемую при решении задач пользователя; dev для специальных файлов, представляющих устройства (дисплеи, диски. ); etc для хранения команд администратора системы; lib важнейшие библиотеки; mnt для подключения (примонтирования) новых файловых систем; sys средства для изменения конфигурации системы; tmp для хранения временных файлов; usr каталоги и обычные файлы, содержащие информацию, привлекаемую при решении задач пользователя. А также обычные (выполняемые) файлы: unix ядро; boot загрузчик. Полные имена файлов будут: /bin, /usr. /unix, /boot. В свою очередь эти каталоги могут содержать каталоги следующего уровня. Например, каталог «usr», кроме прочего, содержит каталоги: bin хранит дополнительные команды; games игры; include хранит фрагменты системных программ; lib хранит дополнительные библиотеки. полные имена этих файлов будут: /usr/bin /usr/games /usr/include /usr/lib Если в каталоге «/usr/include» содержится каталог «sys», который в свою очередь, содержит каталог «conf», то полное имя файла «conf» будет /usr/include/sys/conf Формальным признаком полного имени является то, что оно начинается со слэша («/»). Относительное имя начинается не с «/», и определят имя относительно своего местоположения. Если (пользователь?) в данный момент находится в директории /usr файловой системы, то он может обратиться к этому же файлу по относительному имени 4

5 include/sys/conf Есть два специальных имени:. это «имя» текущего директория и.. это «имя» родительского директория (т.е. директория, находящегося на ступеньку выше данного на пути к корню). В качестве имени файла как правило может использоваться любая последовательность из букв, цифр и подчеркиваний. Могут использоваться и другие символы, однако ряд этих символов при использовании в имени требует специального экранирования. (Лучше не пользоваться специальными символами в именах — иногда это может привести к сложностям в обращении к таким именам, поскольку спецсимволы могут иметь в shell некоторый специальный смысл). В ряде систем длина имени ограничивается 14-ю символами (этого ограничения желательно придерживаться для переносимости файлов), однако в других системах допускаются более длинные имена — например, до 256 символов. В общем случае не являются обязательными и какие-то расширения в именах. Хотя ряд команд требуют наличия некоторых фиксированных расширений в именах, например расширение «.с» для исходных файлов для Си-компилятора. КСТАТИ. В ОС UNIX большие и маленькие буквы воспринимаются как различные, поэтому «FILE», «file» и «File» — это три различных имени! ВАЖНОЕ ЗАМЕЧАНИЕ. Отдельные части файловой системы могут находиться на различных физических устройствах, например, на нескольких жестких и гибких дисках (или в различных частях одного диска). Соответствующие фрагменты (поддеревья файловой системы) монтируются (присоединяются) в единую файловую систему командой mount (обычно это функция администратора системы), после чего пользователь может обращаться к любым доступным файлам, при этом в имени никак не отражается устройство, на котором файл находится или создается (т.е. никаких «A:»). Командный язык ОС Unix — shell оперирует с командами. Более подробно о нем разговор далее, а пока рассмотрим несколько команд работы с файловой системой. Например, в результате выполнения команды ls -l /usr где ls — имя команды; -l — флаг, говорящий о том, что выдача должна быть в длинном формате; /usr -имя каталога, который надо echo. На экран будет выведено drwxrwxr-x 2 root 2048 nov 3 12:11 bin -rwxr—r— 1 root 861 may 11 20:11 boot drwxrwxr-x 2 root 1024 jan 9 11:55 dev drwxrwxr-x 1 root 4096 may 11 20:11 dos drw-r—r— 3 root 4096 nov 17 12:01 include drwxr-xr-x 7 root 480 nov 17 12:30 lib Первая строка означает, что это каталог (d-directory), где первая триада «rwx» разрешает владельцу каталога: r — читать, w — писать и х — выполнять (более точно, для файлов типа каталог w означает разрешение создавать файлы в каталоге и удалять их из него, а х разрешает доступ к файлам каталога); членам группы, в которую входит владелец, также разрешены все три операции. Последняя триада отражает права доступа прочих пользователей, которым разрешено только читать и выполнять (запрещено писать в этот файл, т.е. изменять содержимое каталога). 5

6 Далее, 2 — это число связей файла (т.е. где-то в системе есть еще одно имя, связанное с этим файлом); root — имя владельца, число символов в файле, nov 3 12:11 — дата и время создания или последней модификации файла (3 ноября в 12-11); bin — имя файла (каталог команд). Во второй строке указан обычный текстовый файл (boot), который прочие пользователи могут только читать. Команда «pwd» (без флагов и аргументов) сообщает местоположение пользователя в файловой системе. С ее помощью выводится полное имя текущего каталога. При входе в систему пользователь оказывается в определенной заранее вершине дерева. Пусть, например, это будет каталог «/usr». Изменить местонахождение можно командой «cd «. Так можно перейти в каталог /usr/include/sys, набрав команду cd /usr/include/sys здесь указано полное имя, или cd include/sys здесь указано относительное имя. Отличительный признак относительного имени — отсутствие символа «/» в начале. Команда «cd..» осуществит переход вверх на предыдущий уровень. Из «/usr/include/sys» произойдет переход в «/usr/include», а команда «cd» (т.е. без параметров) осуществит переход в начальный директорий пользователя (т.е. директорий, в котором пользователь оказывается при входе в систему). Создать новые каталоги можно с помощью команды mkdir Так команда «mkdir err new» создаст в данном каталоге два новых каталога с относительными именами «err» и «new». Удалить пустой (не содержащий файлов) каталог можно с помощью команды rmdir Удалить обычный файл можно командой rm Наиболее естественный для пользователя способ создания файлов — это использование текстового редактора «ed» или экранного редактора «red» (а также стандартных «vi» и «ех», или многочисленных прочих «фирменных»). В ОС Unix около 200 базовых команд — инструментальных средств, позволяющих пользователю решать многие свои проблемы, не прибегая к программированию на языках типа Си или использованию специальных пакетов. Командой rm файл-1 можно удалить «файл-1». Командой rmdir файл-1 можно удалить «файл-1», если это директорий, причем пустой (т.е. не содержит файлов). 6

7 Командой mv старое-имя новое-имя можно переназвать файл. Командой cp старое-имя новое-имя можно скопировать файл (сохранив также старый). Очень важна команда chmod 755 расчет которая превращает файл «расчет», подготовленный в редакторе, в командный, иначе «расчет» при попытке вызова не будет выполнятся. Набор цифр здесь соответствует триадам двоичных представлений восьмеричных чисел и триадам прав доступа к файлам (rwx — чтение, запись, выполнение). То есть определяет, что создатель расчета может не только выполнить или распечатать текст этого расчета, но и вносить в него изменения (7:111 — rwx). А члены группы и прочие пользователи могу только читать и выполнять, но не могут изменять этот расчет (55: r-xr-x). 7

8 3. Простейшие средства shell Командный язык shell (в переводе — раковина, скорлупа) фактически есть язык программирования очень высокого уровня. На этом языке пользователь осуществляет управление компьютером. Обычно, после входа в систему вы начинаете взаимодействовать с командной оболочкой (если угодно — она начинает взаимодействовать с вами). Признаком того, что оболочка (shell) готова к приему команд служит выдаваемый ею на экран промптер. В простейшем случае это один доллар («$»). Shell не является необходимым и единственным командным языком (хотя именно он стандартизован в рамках POSIX [POSIX ] — стандарта мобильных систем). Например, немалой популярностью пользуется язык cshell, есть также kshell, bashell (из наиболее популярных в последнее время) и другие. Более того, каждый пользователь может создать свой командный язык. Может одновременно на одном экземпляре операционной системы работать с разными командными языками. ОБРАТИТЕ ВНИМАНИЕ. shell — это одна из многих команд UNIX. То есть в набор команд оболочки (интерпретатора) «shell» входит команда «sh» — вызов интерпретатора «shell». Первый «shell» вызывается автоматически при вашем входе в систему и выдает на экран промтер. После этого вы можете вызывать на выполнение любые команды, в том числе и снова сам «shell», который вам создаст новую оболочку внутри прежней. Так например, если вы подготовите в редакторе файл «f1»: echo Hello! то это будет обычный текстовый файл, содержащий команду «echo», которая при выполнении выдает все написанное правее ее на экран. Можно сделать файл «f1» выполняемым с помощью команды «chmod 755 f1». Но его можно ВЫПОЛНИТЬ, вызвав явно команду (!) «sh» («shell»): или sh f1 sh Например: ls -ls /usr/bin ls имя команды выдачи содержимого директория, -ls флаги ( «-» — признак флагов, l — длинный формат, s — объем файлов в блоках). /usr/bin директорий, для которого выполняется команда. Эта команда выдаст на экран в длинном формате содержимое директория /usr/bin, при этом добавит информацию о размере каждого файла в блоках. К сожалению, такая структура команды выдерживается далеко не всегда. Не всегда перед флагами ставится минус, не всегда флаги идут одним словом. Есть разнообразие и в представлении аргументов. К числу команд, имеющих экзотические форматы, относятся и такие «ходовые» команды, как сс, tar, dd, find и ряд других. Как правило (но не всегда), первое слово (т.е. последовательность символов до пробела, табуляции или конца строки) shell воспринимает, как команду. Поэтому в командной строке cat cat первое слово будет расшифровано shell, как команда (конкатенации), которая выдаст на экран файл с именем «cat» (второе слово), находящийся в текущем директории Группировка команд. Средства группировки: определяют последовательное выполнение команд; ; и & асинхронное (фоновое) выполнение предшествующей команды; && выполнение последующей команды при условии нормального завершения предыдущей, иначе игнорировать; выполнение последующей команды при ненормальном завершении предыдущей, иначе игнорировать. При выполнении команды в асинхронном режиме (после команды стоит один амперсанд) на экран выводится номер процесса, соответствующий выполняемой команде, и система, запустив этот фоновый процесс, вновь выходит на диалог с пользователем. Например, наберем (экзотическую) команду «find» в фоновом режиме для поиска в системе, начиная от корня «/», файла с именем «conf», а затем «pwd» в обычном режиме. На экране этот фрагмент будет выглядеть следующим образом: $ find / -name conf -print & ввод команды «find» 288 номер (PID) фонового процесса $ pwd ввод команды «pwd» /mnt/lab/asu результат работы «pwd» $ возвращение shell в промптер /usr/include/sys/conf результат работы «find» Иногда необходимо, чтобы все фоновые процессы завершились, прежде чем будет выполняться какой-то расчет. Для этого служит специальная команда «wait [PID]». Эта команда ждет завершения указанного идентификатором (числом) фонового процесса. Если 9

11 выдаст сначала содержимое каталога «/mnt/lab», а затем содержимое «/mnt/lab/asu», т.к. при входе в скобки вызывается новый экземпляр shell, в рамках которого и осуществляется переход. При выходе из круглых скобок происходит возврат в старый shell и в старый каталог Перенаправление команд Стандартный ввод (вход) — «stdin» в ОС UNIX осуществляется с клавиатуры терминала, а стандартный вывод (выход) — «stdout» направлен на экран терминала. Существует еще и стандартный файл диагностических сообщений — «stderr», о котором речь будет чуть позже. Команда, которая может работать со стандартным входом и выходом, называется ФИЛЬТРОМ. Пользователь имеет удобные средства перенаправления ввода и вывода на другие файлы (устройства). Символы «>» и «>>» обозначают перенаправление вывода. ls >f1 команда «ls» сформирует список файлов текущего каталога и поместит его в файл «f1» (вместо выдачи на экран). Если файл «f1» до этого существовал, то он будет затерт новым. pwd >>f1 команда pwd сформирует полное имя текущего каталога и поместит его в конец файла «f1», т.е. «>>» добавляет в файл, если он непустой. Символы » f4 и wc -l >f4 f2 Данный конвейер из файла «f1» («cat») выберет все строки, содержащие слово «result» («grep»), отсортирует («sort») полученные строки, а затем пронумерует («cat -b») и выведет результат в файл «f2». 11

12 Поскольку устройства в ОС UNIX представлены специальными файлами, их можно использовать при перенаправлениях. Специальные файлы находятся в каталоге «/dev». Например, «lp» — печать; «console» — консоль; «ttyi» — i-ый терминал; «null» — фиктивный (пустой) файл (устройство). Тогда, например, ls > /dev/lp выведет содержимое текущего каталога на печать, а f1 f-err сообщения об ошибках будут направляться (об этом говорит перенаправление «2>») в файл «f-err». Кстати, вы можете всю информацию направлять в один файл «ff», использовав в данном случае конструкцию cat f1 f2 >>ff 2>ff Можно указать не только какой из стандартных файлов перенаправлять, но и в какой стандартный файл осуществить перенаправление. cat f1 f2 2>>ff 1>&2 Здесь сначала «stderr» перенаправляется (в режиме добавления) в файл «ff», а затем стандартный выход перенаправляется на «stderr», которым к этому моменту является файл «ff». То есть результат будет аналогичен предыдущему. Конструкция «1>&2» — означает, что кроме номера стандартного файла, в который перенаправить, необходимо впереди ставить «&»; вся конструкция пишется без пробелов. — закрывает стандартный вывод. 12

13 3.4. Генерация имен файлов. При генерации имен используют метасимволы: * произвольная (возможно пустая) последовательность символов;? один произвольный символ; [. ] любой из символов, указанных в скобках перечислением и/или с указанием диапазона; cat f* выдаст все файлы каталога, начинающиеся с «f»; cat *f* выдаст все файлы, содержащие «f»; cat program.? выдаст файлы данного каталога с однобуквенными расширениями, скажем «program.c» и «program.o», но не выдаст «program.com»; cat [a-d]* выдаст файлы, которые начинаются с «a», «b», «c», «d». Аналогичный эффект дадут и команды «cat [abcd]*» и «cat [bdac]*» Командные файлы. Для того, чтобы текстовый файл можно было использовать как команду, существует несколько возможностей. Пусть с помощью редактора создан файл с именем «cmd», содержащий одну строку следующего вида: date; pwd; ls Можно вызвать shell как команду (!), обозначаемую «sh», и передать ей файл «cmd», как аргумент или как перенаправленный вход, т.е. $ sh cmd или $ sh f1 echo ‘строка первая строка вторая’ > f2 cat f1 f2 даст выдаст последовательно одинаковые файлы f1 и f2: строка первая строка вторая строка первая строка вторая Заметим также, что бэк-слэш (\) не только экранирует следующий за ним символ, что позволяет использовать специальные символы просто как символы, представляющие сами себя (он может экранировать и сам себя — \\), но в командном файле бэк-слэш позволяет объединять строки в одну (экранировать конец строки). Например, приводившийся ранее пример командной строки: 18 cat f1 grep -h result sort cat -b > f2 может быть записан в командном файле, скажем, как cat f1 grep -h \ result sort cat -b > f2 Кстати, эффект продолжения командной строки обеспечивает и символ конвейера. В данном случае это может дать более симпатичный результат, например:

19 cat f1 grep -h result sort cat -b > f Манипуляции с shell-переменными Несмотря на то, что shell-переменные в общем случае воспринимаются как строки, т. е. «35» — это не число, а строка из двух символов «3» и «5», в раде случаев они могут интерпретироваться иначе, например, как целые числа. Разнообразные возможности имеет команда «expr». Проиллюстрируем некоторые на примерах: Выполнение командного файла: x=7 y=2 a=`expr $x + $y` ; echo a=$a a=`expr $a + 1` ; echo a=$a b=`expr $y — $x` ; echo b=$b c=`expr $x ‘*’ $y` ; echo c=$c d=`expr $x / $y` ; echo d=$d e=`expr $x % $y` ; echo e=$e выдаст на экран a=9 a=10 b=-5 c=14 d=3 e=1 ВНИМАНИЕ. Операция умножения («*») обязательно должна быть заэкранирована, поскольку в shell этот значок воспринимается, как спецсимвол, означающий, что на это место может быть подставлена любая последовательность символов. Следует обратить также внимание на обязательные пробелы, отделяющие переменные и знаки операций. С командой «expr» возможны не только (целочисленные) арифметические операции, но и строковые: A=`expr ‘cocktail’ : ‘cock’` ; echo $A B=`expr ‘cocktail’ : ‘tail’` ; echo $B C=`expr ‘cocktail’ : ‘cook’` ; echo $C D=`expr ‘cock’ : ‘cocktail’` ; echo $D На экран будут выведены числа, показывающее число совпадающих символов в цепочках (от начала). Вторая из строк не может быть длиннее первой : И наконец, об условной замене переменных. Если переменные, скажем «х», «y», «z», не определены, то при обращении к переменным $ в качестве значения «x» будет выдано «new», $ в качестве значения «у» будет присвоено «new», 19

20 $ в качестве значения «z» будет выдано «z: new» и соответствующая процедура прекращается. Во всех этих случаях, если переменная была к этому времени определена, то ее значение используется обычным образом. А в следующем случае наоборот, пусть переменная «v» имеет какое-то значение, тогда $ в качестве значения «z» будет выдано «new», а если не было присвоено значение, то пустая строка Экспорт переменных В ОС UNIX существует понятие процесса. Процесс возникает тогда, когда запускается на выполнение какая-либо команда (расчет). Например, при наборе на клавиатуре «р » порождается процесс расчета «р». В свою очередь «р» может породить другие процессы. Допустим, что «р» вызывает расчеты «р1» и «р2», которые последовательно порождают соответствующие процессы. У каждого процесса есть своя среда — множество доступных ему переменных. Например, до запуска расчета «р» уже существовала среда, в которой уже были определены некоторые переменные (о стандартных переменных речь пойдет несколько позже). Запуск «р» порождает новую среду; уже в ней будут порождены расчеты «р1» и «р2». Переменные локальны в рамках процесса, в котором они объявлены, т.е. где им присвоены значения (описание переменных отсутствует — они все одного типа). Для того, чтобы они были доступны и другим порождаемым процессам, надо передать их явным образом. Для этого используется встроенная команда «export». Пример. Пусть расчет (командный файл) «p», имеющий вид: 20 # расчет p echo Расчет p varx=0 vary=1 echo varx=$varx vary=$vary export vary p1 # вызов расчета p1 p2 # вызов расчета p2 echo Снова расчет p: varx=$varx vary=$vary вызывает командные файлы «p1» и «p2», имеющие вид: # расчет p1 echo Расчет p1 echo varx=$varx vary=$vary varx=a vary=b echo varx=$varx vary=$vary export varx # расчет p2 echo Расчет p2 echo varx=$varx vary=$vary varx=a vary=b echo varx=$varx vary=$vary export vary На экран будут выданы следующая информация: Расчет p varx=0 vary=1 Расчет p1 varx= vary=1 varx=a vary=b Расчет p2 varx= vary=1

21 varx=a vary=b Снова расчет p: varx=0 vary=1 Из примера видно, что значения переменных экспортируются только в вызываемые расчеты (и не передаются «вверх» и «вбок»). Экспортировать переменные можно и командой «set» с флагом «-a». НА ВСЯКИЙ СЛУЧАЙ заметим, что на передачу значений переменных никакого влияния не оказывает «физическое» взаимное расположение (файлов) расчетов в файловой системе Параметры В командный файл могут быть переданы параметры. В shell используются позиционные параметры (т.е. существенна очередность их следования). В командном файле соответствующие параметрам переменные (аналогично shell-переменным) начинаются с символа «$», а далее следует одна из цифр от 0 до 9: Пусть расчет «examp-1» вызывается с параметрами «cock» и «tail». Эти параметры попадают в новую среду под стандартными именами «1» и «2». В (стандартной) переменной с именем «0» будет храниться имя вызванного расчета. При обращении к параметрам перед цифрой ставится символ доллара «$» (как и при обращении к переменным): $0 соответствует имени данного командного файла; $1 первый по порядку параметр; $2 второй параметр и т.д. Пусть командный файл с именем «examp-1» имеет вид echo Это расчет $0: sort $2 >> $1 cat $1 а файлы «cock» и «tail» содержат соответственно cock: Это отсортированный файл: tail: Тогда после вызова команды examp-1 cock tail на экране будет Это расчет examp-1: Это отсортированный файл: Поскольку число переменных, в которые могут передаваться параметры, ограничено одной цифрой, т.е. 9-ю («0», как уже отмечалось имеет особый смысл), то для передачи большего числа параметров используется специальная команда «shift». Рассмотрим ее действие на примере. 21

22 Пусть командный файл «many» вызывается с 13-ю параметрами many И имеет вид ### # many: Передача большого числа параметров. echo «$0: Много параметров» echo » Общее число параметров = $# Исходное состояние: $1 $5 $9 » shift echo «1 сдвиг: первый=$1 пятый=$5 девятый=$9» shift 2 echo «1 + 2 = 3 сдвига: первый=$1 пятый=$5 девятый=$9» perem=`expr $1 + $2 + $3` echo $perem В результате первого применения команды «shift» второй параметр расчета вызывается как $1, третий параметр вызывается как $2. десятый параметр, который был исходно недоступен, вызывается как $9. Но стал недоступным первый параметр! После выполнения этого расчета на экране будет: many: Много параметров Общее число параметров = 13 Исходное состояние: сдвиг: первый=20 пятый=60 девятый= = 3 сдвиг: первый=40 пятый=80 девятый= Своеобразный подход к параметрам дает команда «set». Например, фрагмент расчета set a b с echo первый=$1 второй=$2 третий=$3 выдаст на экран первый=a второй=b третий=c т.е. команда «set» устанавливает значения параметров. Это бывает очень удобно. Например, команда «date» выдает на экран текущую дату, скажем, «Mon May 01 12:15: «, состоящую из пяти слов, тогда set `date` echo $1 $3 $5 выдаст на экран Mon Команда «set» позволяет также осуществлять контроль выполнения программы, например: set -v на терминал выводятся строки, читаемые shell. set +v отменяет предыдущий режим. set -x на терминал выводятся команды перед выполнением. set +x отменяет предыдущий режим. Команда «set» без параметров выводит на терминал состояние программной среды (см далее). 22

23 4.6. Подстановки shell-интерпретатора Перед началом непосредственной интерпретации и выполнением команд, содержащихся в командных файлах, shell выполняет различные виды подстановок: Подстановка результатов. Выполняются все команды, заключенные в обратные кавычки, и на их место подставляется результат. Подстановка значений параметров и переменных. То есть слова, начинающиеся на «$», заменяются соответствующими значениями переменных и параметров. Интерпретация пробелов. Заэкранированные пробелы игнорируются. Генерация имѐн файлов. Проверяются слова на наличие в них спецсимволов («*», «?»,»[]») и выполняются соответствующие генерации Программная среда Каждый процесс имеет среду, в которой он выполняется. Shell использует ряд переменных этой среды. Если вы наберете команду «set» без параметров, то на экран будет выдана информация о ряде стандартных переменных, созданных при входе в систему (и передаваемых далее всем вашим новым процессам «по наследству»), а также переменных, созданных и экспортируемых вашими процессами. Конкретный вид и содержание выдаваемой информации в немалой степени зависит от того, какая версия UNIX используется и как инсталлирована система. Вот лишь часть того, что выдала мне команда «set»: HOME=/home/sae PATH=/usr/local/bin:/usr/bin:/bin. /usr/bin/X11: IFS= LOGNAME=sae MAIL=/var/spool/mail/sae PWD=/home/sae/STUDY/SHELL PS1=$:» » PS2=> SHELL=/bin/bash TERM=linux TERMCAP=console con80x25 dumb linux:li#25:co#80:: UID=501 perem=stroka x=5 Прокомментируем эти присваивания значений переменным. HOME=/home/sae это имя домашнего директория, в котором пользователь (в данном случае я) оказывается после входа в систему. То есть, правильно набрав имя и пароль, я окажусь в директории «/home/sae». PATH=/bin:/usr/bin:. эта переменная задает последовательность файлов (ТРОПУ), которые :/usr/local/bin:/usr/bin/x11 просматривает «shell» в поисках команды. Имена файлов разделяются здесь двоеточиями. Последовательность просмотра соответствует очередности следования имен в тропе. НО ПЕРВОНАЧАЛЬНО поиск происходит среди так называемых встроенных команд. В число встроенных команд входят наиболее часто используемые команды, например «echo», «cd», «pwd», «date». После этого система просматривает директорий «/bin», в котором могут находиться команды «sh», «cp», «mv», «ls» и т.п. Затем директорий «/usr/bin» с командами «cat», «сс», «expr», «nroff», «man» и многими другими. Далее поиск происходит в текущем директории («.», или другое обозначение «пусто», т.е.»»), где скорее всего находятся написанные вами команды (расчеты). После набора командной строки и нажатия «shell» (после выполнения необходимых подстановок) распознает имя, 23

24 соответствующее команде и осуществляет ее поиск в директориях, перечисленных в тропе. Если команда размещена вне этих директориев, она не будет найдена. Если присутствует несколько команд с одинаковым именем, то вызвана будет та, которая расположена в директории, просматриваемом первым. Тропу, как и прочие переменные, можно легко менять, добавляя, переставляя или исключая директории. (Кстати, представленная тропа получена из «настоящей» путем сокращений и перестановок). IFS= (Внутренний Разделитель Полей) перечисляет символы, которые служат для разделения слов (полей). Таковыми являются «пробел», «табуляция» и «перевод строки», поэтому здесь слева от присваивания ничего не видно и занято две строки. LOGNAME=sae имя входа («имя» пользователя). MAIL=/var/spool/mail/sae имя файла, в который поступает (электронная) почта. PWD=/home/sae/STUDY/SHELL имя текущего директория PS1=$:» » вид промтера. В данном случае в промптере будет выдаваться имя текущего директория двоеточие и пробел. То есть здесь будет «/home/sae/study/shell: «. PS2=> этот промтер (здесь «>») используется как приглашение к продолжению ввода (в очередной строке) незаконченной команды. Например, наберите открывающую скобку «(» и после нажатия в следующей строке вы увидите этот промптер. Если пока не знаете, что дальше делать, наберите закрывающую скобку «)» и он исчезнет. SHELL=/bin/bash эта переменная указывает оболочку, которую использует пользователь. В данном случае используется не (стандартный) shell («sh»), а «продвинутая» версия. TERM=linux указание типа терминала. -«bash», написанная тем же автором (Bourne- Again SHell) TERMCAP=console con80x25 dumb linux:li#25:co#80:: (TERMinal CAPacity) это (очень сильно) обрезанная строка задания параметров терминала. UID=501 идентификатор пользователя (мой «501»). perem=stroka переменные, которые ввел пользователь. x=5 Исходная среда устанавливается автоматически при входе в систему с использованием файлов типа «/etc/rc» и «/etc/.profile». ВАЖНОЕ ЗАМЕЧАНИЕ. Один из способов просто изменит среду (например, тропу поиска команд, вид промтера, вид оболочки, цвет экрана и т.п.) можно, разместив эту информацию в своем домашнем директории в специализированном файле «.profile» ($/.profile), присвоив нужные значения переменным среды. То есть вызвать это файл в редактор и написать, что пожелаете). Тогда при каждом вашем входе в систему этот файл будет автоматически выполняться и устанавливать новую среду. Этот файл должен ОБЯЗАТЕЛЬНО размещаться в вашем ДОМАШНЕМ директории (директории входа). Если вы внесли изменения в «.profile», то для переноса этих изменений в среду необходимо выполнить этот файл. Для этого можно выйти и заново войти в систему, а можно воспользоваться (специально для этого случая созданной) командой «.» без выхода из системы, т.е. profile 24

25 Следует иметь в виду, что имена файлов, начинающиеся с точки, вообще имеют особый статус. Так, они не выдаются на экран простой командой «ls» — необходимо вызывать эту команду с флагом «-a». Кстати, и не уничтожаются огульно командой «rm *». Дописать новый свой директорий «my» в тропу команд можно, записав в «.profile», например или PATH=$:/home/sae/my PATH=$:$/my Как правило, устанавливаемые переменные среды следует экспортировать. Например, export TERM PATH REDKEYS MAIL Кроме определения переменных в «.profile» можно выполнить команды, например команда stty -lcase установит терминал в режим «большие и маленькие буквы»; а команда cat заставка выдаст на экран заставку, которую вы сами подготовите в файле «заставка» с учетом ваших эстетических пристрастий и художественных способностей. Сам интерпретатор shell автоматически присваивает значения следующим переменным (параметрам):? значение, возвращенное последней командой; $ номер процесса;! номер фонового процесса; # число позиционных параметров, передаваемых в shell; * перечень параметров, как одна перечень параметров, как совокупность слов; — флаги, передаваемые в shell. При обращении к этим переменным (т.е при использовании их в командном файле — shellпрограмме) следует впереди ставить «$». Пример. Вызов расчета specific par1 par2 par3 имеющего вид ### # specific: Специальные параметры (переменные) echo $0 — имя расчета echo $? — код завершения echo $$ — идентификатор последнего процесса echo $! — идентификатор последнего фонового процесса echo echo $* — значения параметров, как строки echo — значения параметров, как слов echo set -au echo $- — режимы работы интерпретатора Выдаст на экран 25

26 specific — имя расчета 0 — код завершения идентификатор последнего процесса 98 — идентификатор последнего фонового процесса par1 par2 par3 — значения параметров, как строки par1 par2 par3 — значения параметров, как слов au — режимы работы интерпретатора Код «0» соответствует нормальному завершению процесса. Важную роль при создании уникальных файлов играет специальная переменная «$$», значение которой соответствует номеру процесса, выполняющего данный расчет. Каждый новый расчет, выполняемый компьютером, инициирует один или несколько процессов, автоматически получающих номера по порядку. Поэтому, используя номер процесса в качестве имени файла, можно быть уверенным, что каждый новый файл будет иметь новое имя (не запишется на место уже существующего). Достоинство является и главным недостатком такого способа именования файлов. Неизвестно, какие имена будут присвоены файлам. И, если в рамках данного процесса можно найти файл «не глядя», т.е., обратившись к нему, используя $$, то потом такие файлы можно легко потерять. Это создает дополнительные проблемы при отладке программ. «echo» без параметров выводит пустую строку. Различия $* и состоит в том, что первая переменная может быть представлена как «par1 par2 par3» а вторая как «par1» «par2» «par3» Пример, иллюстрирующий различия «$*» и будет рассмотрен в связи с оператором «for». Для иллюстрации мы установили командой «set» режимы интерпретатора («a» — все последующие переменные экспортируются; «u» — отсутствие параметра считать ошибкой), что и отразилось в специальной переменной «$-«. 26

27 5. Программные структуры Как во всяком языке программирования в тексте на языке shell могут быть комментарии. Для этого используется символ «#». Все, что находится в строке (в командном файле) левее этого символа, воспринимается интерпретатором как комментарий. Например, # Это комментарий. ## И это. ### И это тоже. Как во всяком процедурном языке программирования в языке shell есть операторы. Ряд операторов позволяет управлять последовательностью выполнения команд. В таких операторах часто необходима проверка условия, которая и определяет направление продолжения вычислений Команда test («[ ]») Команда test проверяет выполнение некоторого условия. С использованием этой (встроенной) команды формируются операторы выбора и цикла языка shell. Два возможных формата команды: test условие или [ условие ] мы будем пользоваться вторым вариантом, т.е. вместо того, чтобы писать перед условием слово «test», будем заключать условие в скобки, что более привычно для программистов. На самом деле shell будет распознавать эту команду по открывающей скобке «[«, как слову(!), соответствующему команде «test». Уже этого достаточно, чтобы предупредить о распространенной ошибке начинающих: Между скобками и содержащимся в них условием обязательно должны быть пробелы. Пробелы должны быть и между значениями и символом сравнения или операции (как, кстати, и в команде «expr»). Не путать с противоположным требованием для присваивания значений переменным. В shell используются условия различных «типов». УСЛОВИЯ ПРОВЕРКИ ФАЙЛОВ: -f file файл «file» является обычным файлом; -d file файл «file» — каталог; -с file файл «file» — специальный файл; -r file имеется разрешение на чтение файла «file»; -w file имеется разрешение на запись в файл «file»; -s file файл «file» не пустой. Примеры. Вводя с клавиатуры командные строки в первом случае получим подтверждение (код завершения «0»), а во втором — опровержение (код завершения «1»). «specific» — имя существующего файла. [ -f specific ] ; echo $? 0 [ -d specific ] ; echo $? 1 27

28 УСЛОВИЯ ПРОВЕРКИ СТРОК: str1 = str2 строки «str1» и «str2» совпадают; str1!= str2 строки «str1» и «str2» не совпадают; -n str1 строка «str1» существует (непустая); -z str1 строка «str1″ не существует (пустая). Примеры. x=»who is who»; export x; [ «who is who» = «$x» ]; echo $? 0 x=abc ; export x ; [ abc = «$x» ] ; echo $? 0 x=abc ; export x ; [ -n «$x» ] ; echo $? 0 x=»» ; export x ; [ -n «$x» ] ; echo $? 1 ВАЖНОЕ ЗАМЕЧАНИЕ. Команда «test» дает значение «истина» (т.е. код завершения «0») и просто если в скобках стоит непустое слово. 28 [ privet ] ; echo $? 0 [ ] ; echo $? 1 Кроме того, существуют два стандартных значения условия, которые могут использоваться вместо условия (для этого не нужны скобки). true ; echo $? 0 false ; echo $? 1 УСЛОВИЯ СРАВНЕНИЯ ЦЕЛЫХ ЧИСЕЛ: x -eq y «x» равно «y», x -ne y «x» неравно «y», x -gt y «x» больше «y», x -ge y «x» больше или равно «y», x -lt y «x» меньше «y», x -le y «x» меньше или равно «y». То есть в данном случае команда «test» воспринимает строки символов как целые (!) числа. Поэтому во всех остальных случаях «нулевому» значению соответствует пустая строка. В данном же случае, если надо обнулить переменную, скажем, «x», то это достигается присваиванием «x=0». Примеры. x=abc ; export x ; [ abc -eq «$x» ] ; echo $? «[«: integer expression expected before -eq x=321 ; export x ; [ 321 -eq «$x» ] ; echo $? 0 x=3.21 ; export x ; [ eq «$x» ] ; echo $? «[«: integer expression expected before -eq x=321 ; export x ; [ 123 -lt «$x» ] ; echo $? 0 СЛОЖНЫЕ УСЛОВИЯ:

Программирование

Министерство образования и науки Российской Федерации

ТОМСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ СИСТЕМ УПРАВЛЕНИЯ И РАДИОЭЛЕКТРОНИКИ (ТУСУР)

Томск «Эль Контент»

УДК 004.42(075.8) ББК 32.973.26-018я73

Старченко А. В. , докт. физ.-мат. наук, профессор, зав. кафедрой вычислительной математики и компьютерного моделирования Национального исследовательского Томского государственного университета;

Потапова Е. А. , старший преподаватель кафедры компьютерных систем в управлении и проектировании ТУСУРа.

Программирование : учебное пособие / В. М. Зюзьков. — Томск : Эль

Контент, 2013. — 186 с.

Учебное пособие содержит теоретический материал, изучение которо-

го предусмотрено программами курсов «Программирование». Изложение

ориентировано на использование языка программирования Паскаль. Рас-

смотрены алгоритмы, методы программирования и вопросы полного цикла

ISBN 978-5-4332-0141-5 © Зюзьков В. М., 2013 © Оформление.

ООО «Эль Контент», 2013

1 Введение в информатику

Информация и ее представление . . . . . . . . . . . . . . . . . . . . . . .

Примеры неформальных описаний алгоритмов . . . . . . . . .

Основные вычислительные структуры . . . . . . . . . . . . . .

1.4 Алгоритмические языки . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

1.5 Описание синтаксиса алгоритмических языков . . . . . . . . . . . . . . 16

1.6 Семантика программы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

1.7 Трансляция и выполнение . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

2 Азы языка Паскаль

2.1 Основные понятия языка Паскаль . . . . . . . . . . . . . . . . . . . . . . 24

2.1.1 Алфавит языка Паскаль . . . . . . . . . . . . . . . . . . . . . . . 24

2.1.2 Переменные . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

2.1.3 Операторы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

2.1.4 Описания данных . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

2.1.5 Правила записи текста программы . . . . . . . . . . . . . . . . . 28

2.1.6 Система типов языка . . . . . . . . . . . . . . . . . . . . . . . . . 28

2.2 Основные вычислительные структуры в Паскале . . . . . . . . . . . . 30

2.2.1 Целые типы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30

2.2.2 Вещественные типы . . . . . . . . . . . . . . . . . . . . . . . . . . 31

2.2.3 Символьный (литерный) тип . . . . . . . . . . . . . . . . . . . . 33

2.2.4 Булевский (логический) тип . . . . . . . . . . . . . . . . . . . . . 34

2.3 Выражения и основные операторы . . . . . . . . . . . . . . . . . . . . . 34

2.3.1 Выражения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34

2.3.2 Оператор присваивания . . . . . . . . . . . . . . . . . . . . . . . . 36

2.3.3 Ввод-вывод . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38

2.3.4 Последовательное выполнение и составной оператор . . . . . 39

2.3.5 Условный оператор . . . . . . . . . . . . . . . . . . . . . . . . . . 39

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

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

2.3.8 Оператор цикла с параметром . . . . . . . . . . . . . . . . . . . . 43

2.4 Пустой оператор и ограниченные типы . . . . . . . . . . . . . . . . . . 45

Примеры программ без массивов . . . . . . . . . . . . . . . . . . . . . .

3 Процедурное программирование

3.1 Синтаксис подпрограмм . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55

3.1.1 Понятие подпрограммы . . . . . . . . . . . . . . . . . . . . . . . 55

3.1.2 Общая структура подпрограмм . . . . . . . . . . . . . . . . . . . 56

3.1.3 Тело подпрограммы. Области действия имен . . . . . . . . . . 57

3.2 Семантика подпрограмм . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58

3.2.1 Использование процедур и функций . . . . . . . . . . . . . . . . 58

3.2.2 Механизм параметров . . . . . . . . . . . . . . . . . . . . . . . . . 60

3.2.3 Побочный эффект . . . . . . . . . . . . . . . . . . . . . . . . . . . 64

3.2.4 Распределение памяти для переменных . . . . . . . . . . . . . . 64

4 Технология программирования

4.1 Оператор перехода . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67

4.2 Структурное программирование . . . . . . . . . . . . . . . . . . . . . . . 68

4.3 Решение задачи . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70

4.4 Разработка программы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72

4.4.1 Метод пошаговой детализации . . . . . . . . . . . . . . . . . . . 73

4.4.2 Способы фиксирования результатов проектирования . . . . . 74

4.4.3 Пример разработки . . . . . . . . . . . . . . . . . . . . . . . . . . 77

4.5 Стиль программирования . . . . . . . . . . . . . . . . . . . . . . . . . . . 83

4.6 Тестирование и отладка . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87 4.6.1 Тестирование . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87

5 Массивы и строки

5.1 Регулярные типы данных (массивы) . . . . . . . . . . . . . . . . . . . .

5.1.1 Определение регулярного типа . . . . . . . . . . . . . . . . . . . 92

5.1.2 Примеры программ для работы с массивами . . . . . . . . . . 95

5.2 Строковый тип . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98 5.2.1 Определение строкового типа . . . . . . . . . . . . . . . . . . . . 98

5.2.2 Строковые операции . . . . . . . . . . . . . . . . . . . . . . . . . 99

5.2.3 Стандартные процедуры и функции . . . . . . . . . . . . . . . . 101

5.3 Сортировка . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103

5.3.1 Постановка задачи . . . . . . . . . . . . . . . . . . . . . . . . . . . 103

6 Перечислимый тип, множества, файлы

6.1 Перечислимый тип . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109

6.1.1 Определение перечислимого типа . . . . . . . . . . . . . . . . . 109

6.1.2 Оператор варианта . . . . . . . . . . . . . . . . . . . . . . . . . . . 111

6.2 Множественный тип . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112

Определение множественного типа . . . . . . . . . . . . . . . .

Файловые переменные и типы . . . . . . . . . . . . . . . . . . .

Установочные и завершающие операции над файлами . . . .

6.3.4 Текстовые файлы . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119

6.3.5 Примеры работы с файлами . . . . . . . . . . . . . . . . . . . . . 120

7.1 Понятие рекурсии . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124

7.2 Как приходят к рекурсивным подпрограммам? . . . . . . . . . . . . . . 128

7.2.1 Органически рекурсивные определения . . . . . . . . . . . . . . 128

7.2.2 Извлечение рекурсии из постановки задачи . . . . . . . . . . . 128

7.2.3 Вложение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129

7.2.4 Использование характеристических свойств . . . . . . . . . . . 130

7.2.5 Разделяй и властвуй . . . . . . . . . . . . . . . . . . . . . . . . . . 130

7.3 Рекурсия и итерация. Метод накапливающего параметра . . . . . . . 131

7.4 Рекурсия в своем блеске и великолепии . . . . . . . . . . . . . . . . . . 133

7.4.1 Ханойские башни . . . . . . . . . . . . . . . . . . . . . . . . . . . 133

7.4.2 Поиск маршрута — алгоритм с возвратом . . . . . . . . . . . . . 135

7.4.3 Быстрая сортировка . . . . . . . . . . . . . . . . . . . . . . . . . . 136

8 Записи и динамические структуры данных

8.1 Записи . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139

8.1.1 Определение комбинированных типов . . . . . . . . . . . . . . 139

8.1.2 Оператор над записями with (оператор присоединения) . . . . 141

8.2 Динамические структуры данных . . . . . . . . . . . . . . . . . . . . . . 143

8.2.1 Ссылочный тип . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143

8.2.2 Статические и динамические переменные . . . . . . . . . . . . 145

8.2.3 Линейные списки . . . . . . . . . . . . . . . . . . . . . . . . . . . 146

8.2.4 Проблема потерянных ссылок . . . . . . . . . . . . . . . . . . . . 150

8.2.5 Списки специального вида . . . . . . . . . . . . . . . . . . . . . . 151

8.2.6 Стеки и очереди . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153

9 Модули и графика

9.1 Модули . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161

9.2 Графическое программирование . . . . . . . . . . . . . . . . . . . . . . . 166

9.2.1 Аппаратная и программная поддержка графики . . . . . . . . . 166

9.2.2 Инициализация графики . . . . . . . . . . . . . . . . . . . . . . . 167

9.2.3 Базовые процедуры и функции . . . . . . . . . . . . . . . . . . . 170

9.2.4 Построение графических фигур . . . . . . . . . . . . . . . . . . 174

9.2.5 Простые анимационные алгоритмы . . . . . . . . . . . . . . . . 179

Знания достигаются не быстрым бегом, а медленной ходьбой.

Томас Бабингтон Маколей (1800–1859)

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

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

Остановимся на нескольких темах, рассматриваемых в пособии. Вторая глава «Введение в информатику» посвящена основным понятиям программирования, таким как алгоритмы, вычислительные структуры и программы. Содержание этой главы не зависит от конкретного языка программирования.

После изучения главы 3 «Азы языка Паскаль» уже возможно создание небольших и достаточно простых программ на Паскале. Дальнейшие главы расширяют наше знание Паскаля. Но преподавание основ программирования не ограничивается изучением синтаксиса и семантики программ. Вместе с освоением языковых конструкций обучаемый должен получить первые навыки разработки программ, трактуемые как процесс систематического и вполне познаваемого перехода от неалгоритмической постановки задачи к эффективной программе ее решения. Методология такого перехода излагается в главе 5 «Технология программирования».

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

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

Соглашения, принятые в книге

И последнее замечание. Мы описываем стандарт Паскаля с некоторыми расширениями, принятыми в реализациях Паскаля: Турбо-Паскаль, Free-Pascal, PascalABC.

Соглашения, принятые в книге

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

Эта пиктограмма означает определение или новое понятие.

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

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

. . . . . . . . . . . . . . . . . . . . . . . . . Пример . . . . . . . . . . . . . . . . . . . . . . . . .

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

Контрольные вопросы по главе

Рекомендуемая литература к главе

ВВЕДЕНИЕ В ИНФОРМАТИКУ

1.1 Информация и ее представление

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

В информатике информация понимается как абстрактное значение выражений, графических изображений, указаний (операторов) и высказываний.

Мы различаем в связи с информацией:

• ее представление или изображение (внешняя форма);

• ее значение (собственно «абстрактная» информация);

• ее отношение к реальному миру (связь абстрактной информации с действительностью).

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

• условные знаки («сигналы»),

• произносимые слова («акустическое представление»),

1.2 Понятие алгоритма

• рисунки (графическое представление, «пиктограммы», «иконки»),

• последовательность символов («слова», «текст»), и т. д.

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

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

1.2 Понятие алгоритма

Под алгоритмом понимается способ преобразования представления информации. Слово algorithm — произошло от имени аль-Хорезми — автора известного арабского учебника по математике.

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

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

Пять важных особенностей алгоритма:

• Конечность (финитность) . Алгоритм должен всегда заканчиваться после конечного числа шагов.

• Определенность . Каждый шаг алгоритма должен быть точно определен.

• Ввод . Алгоритм имеет некоторое (быть может, равное нулю) число входных данных, т. е. величин, заданных ему до начала работы.

• Вывод . Алгоритм имеет одну или несколько выходных величин, т. е. величин, имеющих вполне определенное отношение к входным данным.

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

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

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

• специфичный способ, каким решается задача, при этом для алгоритма различают:

Смотрите так же:  Заявление на аттестацию учителя-логопеда на высшую категорию

Author: admin