рефераты конспекты курсовые дипломные лекции шпоры

Реферат Курсовая Конспект

От автора

От автора - раздел Транспорт, От автора Первое Издание Этой Книги Вышло В Свет В 1997 Году И Довольно Быстро Стало Би...

Первое издание этой книги вышло в свет в 1997 году и довольно быстро стало библиографической редкостью. Автор несколько неожиданно для себя обнаружил, что книга пользуется черезвычайно высоким спросом и, следовательно, оказалась полезной для студентов. Это обстоятельство, а также настоятельная просьба декана математического факультета С.А.Ишанова побудили автора к подготовке второго издания книги. Добавлено несколько новых разделов, в которых изложены алгоритмы и приемы программирования, компоновка материала и способ изложения отдельных разделов несколько изменены в соответствии с нынешними представлениями автора. Книга написана на основе курса лекций, читавшегося автором в течение ряда лет студентам 1-2-х курсов математического факультета Калининградского государственного университета. Это не справочник по языку Паскаль, но скорее учебник, предполагающий последовательное и достаточно внимательное прочтение. Книга может быть использована и как самоучитель для тех, кто хочет изучить язык самостоятельно. Предполагается, что читатель хотя бы в минимальной степени знаком с операционной системой DOS или WINDOWS и понимает, что такое файл, каталог, логический диск, путь и т.п. Синтаксис языка соответствует системе программирования Borland Pascal 7.0. Книга содержит большое количество примеров, записанных как фрагмент программы или законченная программа. Все примеры оттестированы и не содержат грубых ошибок, однако не все они являются “хорошими”, то есть оптимальными, так как часть из них лишь иллюстрирует возможности языка. Автор хотел бы, чтобы читатель всегда критически подходил к текстам чужих программ, в том числе и к текстам, приведенным в этой книге, ведь недаром древняя программистская мудрость гласит: “всякая программа содержит хотя бы одну ошибку”.


1. Общая схема решения задачи на персональном компьютере

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

1) разработка алгоритма решения задачи;

2) создание текста программы;

3) отладка программы;

4) тестирование программы.

Все эти этапы обязательно выполняются любым программистом при решении любой задачи. Рассмотрим их подробнее.

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

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

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

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

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

2. Структура программы на языке Паскаль

Запишем для начала очень простую программу на языке Паскаль :

 

{ эта программа выводит на экран сообщение }

Begin

WriteLn('Привет !!!');

End.

 

Это правильная программа и, если вам удастся ее откомпилировать и запустить, она выведет на экран сообщение “Привет !!!”. Эту программу мы могли бы записать и так :

 

Const Message='Привет !!!'; (* Выводимое сообщение *)

Begin

WriteLn(Message);

End.

 

и так :

 

Var Message:String[10];

Begin

Message:='Привет !!!';

WriteLn(Message);

End.

 

и еще множеством различных способов, но в каждой программе обязательно будет слово Begin и в конце программы всегда будет стоять End. - признак конца программы. Перед Begin может что-то быть (как правило, это так), или может не быть ничего. То, что находится перед Begin, называется разделом описаний, то, что находится между Begin и End. , называется разделом операторов. Слова Begin, End, а такжеConst, Var, String, WriteLnявляются ключевыми словами языка Паскаль, а слово Message - это идентификатор пользователя, т.е. имя, данное нами некоторому объекту - константе, переменной или чему-то еще. Все ключевые слова и идентификаторы пользователя есть последовательности букв и цифр, начинающиеся с буквы. Буквами языка являются все латинские буквы и символ подчеркивания. Компилятор не различает большие и малые латинские буквы, поэтому вы можете записывать идентификаторы как захотите: Begin, BEGIN, begin и т.д. Вы можете выбирать любые идентификаторы пользователя, лишь бы они не совпадали с ключевыми словами; так, в нашем примере вместо Message вы можете написать Q или __t123 или Y56_ert и т.д. Однако все эти идентификаторы не несут в себе никакого смысла, затрудняют чтение и отладку программы и делают ее неряшливой; идентификатор Message имеет то достоинство, что из него уже ясно его назначение - содержать некоторое сообщение. Старайтесь всегда использовать в программе осмысленные идентификаторы. Язык Паскаль допускает идентификаторы длиной до 63 символов (точнее, компилятор различает первые 63 символа имени), поэтому не экономьте на именах переменных и функций, пусть лучше имена будут длинными, но понятными. Кроме ключевых слов и идентификаторов всякая программа содержит также пробелы и комментарии. Комментарии записываются в фигурных скобках или в составных скобках (* *). Комментарии и пробелы допустимы в любом месте программы, но не внутри идентификаторов и констант. Пробелы являются разделителями, там, где допустим один пробел, можно поставить любое количество пробелов. Комментарии и пробелы следует использовать для аккуратного оформления текста программы. Хорошая программа обязательно должна быть документирована, т.е. содержать комментарии, поясняющие, как она работает.

3. Арифметические типы данных. Числовые константы и переменные. Оператор присваивания. Выражение

В языке Паскаль определены следующие арифметические (числовые) типы данных : целочисленные типы - Byte, ShortInt, Word, Integer и LongInt; вещественные типы - Single, Real, Double и Extended; и полувещественный типComp. Характеристики этих типов приведены в таблице (запись 1.5e-45 означает 1.5, умноженное на 10 в степени -45, это общепринятое в языках программирования обозначение для вещественных чисел - константа с плавающей точкой)

 

Название типа Диапазон допустимых значений Количество верных цифр Размер в байтах
Byte 0...255   1
ShortInt -128...127   1
Word 0..65535   2
Integer -32768...32767   2
LongInt -2147483648...2147483647   4
Single ±1.5e-45... ±3.4e+38 7-8 4
Real ±2.9e-39... ±1.7e+38 11-12 6
Double ±5.0e-324... ±1.7e+308 15-16 8
Extended ±3.4e-4932... ±1.1e+4932 19-20 10
Comp -9.2e18...9.2e18

 

Типы Byte и Word используются для целых величин без знака, типы ShortInt, Integer и LongInt - для целых со знаком, типы Single, Real, Double и Extended - для вещественных величин. Тип Comp может содержать только целые числа от -263+1 до +263-1, но эти числа хранятся в вещественном формате, поэтому тип Comp считается вещественным. С данными типа Comp можно обращаться так же, как с данными других вещественных типов, но дробная часть числа при этом автоматически отбрасывается.

Целые числовые константы записываются в языке Паскаль в десятичном виде или в 16-ричном виде, 16-ричная константа начинается с символа $ и содержит 16-ричные цифры: 0,1,...,9,A,В,...,F. Например, число 255 можно записать как $FF. Числовые константы по умолчанию имеют тип Integer или LongInt. Вещественные константы записываются либо с фиксированной точкой, например -1.234, либо с плавающей точкой, например -1.234E-5 или 555е12.

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

Var имя , ... , имя: тип; имя , ... , имя : тип ; ...

Здесь имя - имена переменных (идентификаторы), тип - типы переменных,Var - ключевое слово, означающее, что после него следуют описания переменных. Переменные одного типа можно описать совместно, разделив их имена запятыми, а можно описывать и каждую переменную отдельно. Точка с запятой означает окончание описания переменных данного типа. Слово Var может повторяться в программе сколько угодно раз. Выбор типа для той или иной переменной определяется назначением этой переменной: пусть, например, переменная i служит счетчиком (индексом) элементов некоторой последовательности, причем известно, что количество элементов не может превосходить 100. Мы можем описать переменнуюi любым целочисленным типом, но правильный выбор - Byteили ShortInt, любой другой тип будет избыточным. Всегда следует выбирать типы переменных осознанно, если вы не понимаете, какой тип должна иметь ваша переменная, вероятнее всего, эта переменная в программе не нужна. Для вещественных переменных в зависимости от специфики задачи используются типы Single, Real, Double или Extended, но в большинстве приводимых примеров будет использован тип Real как, в некотором смысле, стандартный вещественный тип языка Паскаль. Тип Real доступен для использования при любых настройках компилятора, в то время как использование других вещественных типов возможно, если компиляция выполняется в режиме {$N+,E+}. Приведенная здесь запись в фигурных скобках - не комментарий, а опции компилятора, то есть конструкция, определяющая режим компиляции программы. Опция N+ означает “использовать сопроцессор для выполнения операций над вещественными числами”, а опция E+ - “эмулировать сопроцессор в случае его отсутствия”. Если компьютер имеет арифметический сопроцессор, то достаточно указать только опцию N+, а если нет - то опцию E+, но пара этих опций обеспечивает включение режима сопроцессора в любом компьютере. Здесь мы пока не будем подробно обсуждать использование различных опций компилятора, скажем лишь, что опции {$N+,E+}должны быть записаны до первого оператора программы, а также отметим, что любая опция компилятора, которая может быть задана со знаком “+” (включить), может быть задана и со знаком “-” (выключить).

Пусть в программе нам необходимы переменные b1,b2,b3,b4 типа Byte, переменныеi,j,k типа Integer , переменные s1,s2 типа Single, переменная x типа Extended и переменные r1,r2 типа Real. Их можно описать, например, так :

 

{$N+,E+}

Var b1,b2,b3,b4 : Byte;

i,j,k : Integer;

s1,s2 : Single;

x : Extended;

r1,r2 : Real;

 

или так :

 

{$N+,E+}

Var b1 : Byte;

s1 : Single;

i,j,k : Integer;

Var r1 : Real;

Var b2,b3,b4 : Byte;

r2 : Real;

Var x : Extended;

s2 : Single;

 

Оба эти описания полностью эквивалентны.

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

Каким же образом определить значение переменной? Для этого используется оператор присваивания :

имя :=выражение;

 

Здесь мы встречаемся с двумя новыми понятиями - оператор и выражение. Оператор - это минимальная осмысленная конструкция в языке Паскаль, вся программа - это последовательность операторов. Оператор всегда заканчивается символом “;”, кроме одного единственного оператора End. -оператора конца программы (на самом деле это правило допускает исключения, в частности, перед End почти всегда можно не ставить “;” , а в одном случае “;” в конце оператора даже запрещена). Допускаются пустые операторы “;” , не выполняющие никаких действий. Выражение - это конструкция, состоящая из одного или нескольких операндов и, возможно, знаков операций, и имеющая некоторое значение. Операндами могут быть константы, переменные и другие выражения, т.е. вы можете строить сколь угодно сложные выражения. Мы не знаем пока никаких знаков операций, но предположим, что знак + означает операцию сложения (это так и есть). Запишем несколько выражений :

1(константа есть частный случай выражения)

b1(имя переменной есть частный случай выражения)

– Конец работы –

Эта тема принадлежит разделу:

От автора

B r... Теперь мы можем присвоить переменным их значения...

Если Вам нужно дополнительный материал на эту тему, или Вы не нашли то, что искали, рекомендуем воспользоваться поиском по нашей базе работ: От автора

Что будем делать с полученным материалом:

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

Все темы данного раздела:

Round(x) - округленное до целого вещественное число, преобразованное к типуLongInt
6. Sqr(x) - квадрат числа 7. Sqrt(x) - квадратный корень 8. Exp(x) - экспонента 9. Ln

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

Caseвыражение Of
список значений : оператор/блок .................................. список значений: оператор/блок

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

Открытые массивы и нетипизированные параметры
Из предыдущего раздела мы узнали, что параметры подпрограмм описываются как [Var] имя : имя типа , это правда, но не вся правда - существует еще два

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

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

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

Case тип Of
константа 1 : (описание поля); константа 2 : (описание поля); .....................

Модуль Crt
Crt - еще один стандартный модуль Паскаля, в котором содержатся разнообразные средства консольного ввода-вывода (то есть ввода с клавиатуры и вывода на текстовый экран). Процедуры

Var TextAttr : Byte
В ней содержится текущий цвет фона и цвет символов, используемые при выводе на экран процедурами Write иWriteLn. Изменив эту переменную, вы задаете новый

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

Type SearchRec=Record
Fill : Array[1..21] of Byte; Attr : Byte; Time : LongInt; Size : LongInt; Name : Stri

Процедурные типы
Язык Паскаль позволяет использовать в программе данные типа “процедура” или типа “функция”. Такие данные можно передавать как аргументы подпрограмм, можно описывать и использовать массивы процедур

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

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

Открытые строки
  Открытыми строками, или длинными строками, или C-строками, называются символьные последовательности длиной до 65535 символов, ограниченные справа нуль-символ

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

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

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

Type имя типа=Object
описание полей описание методов End; Поля объектов описываются так же, как поля записей, а описание метода - это заголовок процедуры или функции. Сами методы распол

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

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

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

Комбинаторные алгоритмы
В этом разделе мы рассмотрим три наиболее важные задачи комбинаторики: нахождение всех подмножеств множества из n элементов; нахождение всех выборок по m элементов из n элементов и нахождение всех

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

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

Алгоритмы сортировки
В этом разделе мы рассмотрим различные алгоритмы решения задачи сортировки. Задача сортировки ставится следующим образом: дана последовательность записей R1,R

Хотите получать на электронную почту самые свежие новости?
Education Insider Sample
Подпишитесь на Нашу рассылку
Наша политика приватности обеспечивает 100% безопасность и анонимность Ваших E-Mail
Реклама
Соответствующий теме материал
  • Похожее
  • Популярное
  • Облако тегов
  • Здесь
  • Временно
  • Пусто
Теги