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

Определение компьютерной программы. История и особенности языка программирования Паскаль. Словарь языка Pascal. Битовая арифметика и операции над битами. Структура программы на языке Паскаль. Ввод и вывод данных. Пунктуация в программах на Паскале.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 11.12.2011
Размер файла 60,1 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

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

Размещено на http://www.allbest.ru/

Понятия программирования

Смысл программирования

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

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

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

Определение компьютерной программы

Предположим, что поместить в память компьютера инструкции для решения задач не проблема. Но поймет ли их компьютер? Он не «говорит» на естественных для нас языках. Для него нужны инструкции на понятном ему языке. Комплекс инструкций для решения определенной группы задач, записанный на понятном компьютеру языке является ничем иным как компьютерной программой.

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

Так какой же язык понятен компьютеру, как следует выражаться в его память, чтобы он потом делал то, что мы хотим. Компьютер - это электронное вычислительное устройство. Вычислительное! Он работает с числами, складывает, вычитает, сравнивает. Больше ни с чем. Но как же? Ведь мы привыкли обрабатывать на компьютере не только числовую информацию, но также текстовую и графическую. Поэтому может сложиться впечатление, что компьютер работает не только с числами. Фокус заключается в том, что любую информацию, в том числе текстовую и графическую можно закодировать числами. А чтобы запрограммировать какие-то действия с нечисловой информацией можно манипулировать именно числами, в которых она представлена в закодированном виде.

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

Программировать работу компьютера в машинных кодах трудно, т.к. думать числами неестественно для человека. Мы привыкли думать словами. А что если сопоставить часто используемым группам чисел слова, а затем написать программу перевода слов на числа. Т.е. теперь программист может описать алгоритм в словах, затем передать его специальной программе-переводчику (транслятору), который преобразует словесный алгоритм в машинный код, понятный компьютеру. И человеку хорошо и компьютеру понятно. От человека требовалось только создать этот самый транслятор. Человечество регулярно придумывает различные языки программирования и пишет под них трансляторы. Но сначала появились ассемблеры.

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

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

Следует понимать, что конкретный язык программирования может содержать в себе несколько концепций (парадигм) программирования. Например, быть структурным и объектно-ориентированным одновременно. Языков множество, парадигм (принципов программирования) единицы.

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

История и особенности языка программирования Паскаль (Pascal)

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

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

При рождении языка программирования на свет должны появиться как его описание, так и транслятор с него в машинный код. После 70-го года язык Pascal развивался и совершенствовался, включал в себя новые возможности. Производились новые трансляторы и среды разработки для Pascal.

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

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

Среди других достоинств языка программирование Pascal можно отметить следующее:

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

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

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

Чтобы быть более простым, Pascal имеет некоторые ограничения. Так, Паскаль хорошо «учит» понимать, как хранятся данные в памяти компьютера, но имеет ряд ограничений при работе с ними (чего лишены большинство «настоящих» языков).

Т.к. в свое время Паскаль достаточно активно использовался для решения практических задач, на его основе сформировался язык Object Pascal (который сейчас используется в Delphi).

Словарь языка Pascal

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

Английские и русские буквы, которые могут быть как строчными, так и прописными.

Арабские цифры.

Знаки операций и знаки, входящие в составное обозначение операций:

+ - * / : = < >

Ограничители:

. , ( ) [ ] { } : ; ` “

Специальные символы:

$ @ # & ^ _ ~ %

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

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

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

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

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

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

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

Ключевые слова языка программирования Паскаль:

and end nil set

array file not then

begin for of to

case function or type

const goto packed until

div if procedure var

do in program while

downto label record with

else mod repeat

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

Пользовательские имена определяются программистом и должны быть явно объявлены в программе.

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

Действительные числа изображаются в двух форматах. В формате с фиксированной точкой явно указывают положение десятичной точки (например, 4.505, -16.25, +1.0). В формате с плавающей точкой используется десятичный порядок, обозначаемый прописной или строчной буквой E, после которой идет целое число, указывающее значение порядка, например, 8e10, 1.62e-3, 0.8E+3.

В языке Pascal максимально допустимое целое число равняется 2147483647 (оно содержится в предопределенной целой константе MaxLongInt). Чтобы получить это число достаточно выполнить выражение writeln(maxlongint);

Диапазон целых чисел от -2147483647 до 2147483647. Предопределенная в Паскале целая константа MaxInt содержит в себе значение 32767 writeln(maxint);

Распространенные компиляторы с Pascal позволяют оперировать действительными числами до 38 порядка, а некоторые - до 67 порядка.

Целое число может задаваться не только в десятичной, но и в шестнадцатеричной системе счисления. Шестнадцатеричному числу предшествует знак $.

Текстовым литералом (строкой) в языке Pascal называют последовательность любых допустимых символов, стоящих между апострофами (например, `Hello World!'). Если в качестве символа строки необходимо использовать апостроф, то записывают подряд два апострофа writeln('Don''t do it')

Строку можно задавать также в виде последовательности, образованной из символов # с последующим цифровым кодом требуемого символа (например, запись #72#73#33 эквивалентна строке 'HI!'). В строковых данных прописные и строчные буквы различаются.

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

Компиляция

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

После компиляции имеются две версии программы: одна на Паскале, другая на языке компьютера (или близком к нему). Если посмотреть на объектную программу, то на экране будут непонятные «слова» и закорючки.

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

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

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

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

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

Программа состоит из заголовка и блока.

Заголовок программы

В заголовке указывается имя программы и список параметров. Общий вид:

program n (input, output, x, y,…);

здесь n - имя программы; input - файл ввода; output - файл вывода; x, y - внешние файлы, используемые в программе.

Заголовка может и не быть или он может быть без параметров.

Блок

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

аздел меток (label)

раздел констант (const)

раздел типов (type)

раздел переменных (var)

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

раздел действий (операторов).

Раздел действий должен присутствовать всегда, остальные разделы могут отсутствовать.

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

Раздел меток (label)

Любой выполняемый оператор может быть снабжен меткой - целой положительной константой, содержащей не более 4-х цифр. Все метки, встречающиеся в программе, должны быть описаны в разделе label.

Общий вид:

label l1, l2, l3…;

здесь l1, l2, l3 - метки.

Пример. label 5, 10, 100;

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

Пример. Пусть оператор a := b имеет метку 20. Тогда этот оператор выглядит так:

20: a := b;

Раздел констант (const)

Если в программе используются константы, имеющие достаточно громоздкую запись (например, число пи с 8-ю знаками), либо сменные константы (для задания варианта программы), то такие константы обычно обозначаются какими-либо именами и описываются в разделе const, а в программе используются только имена констант. Это делает программу более наглядной и удобной при отладке и внесении изменений.

Общий вид:

const a1 = c1; a2 = c2; …

здесь a1 - имя константы, c1 - значение константы.

Пример. const pi = 3.14; c = 2.7531;

Раздел типов (type)

Если в программе вводится тип, отличный от стандартного, то этот тип описывается в разделе type:

type t1 = вид_типа;

t2 = вид_типа;

где t1 и t2 - идентификаторы вводимых типов.

Пример. type color = (red, yellow, green, blue);

Здесь описан тип color, задаваемый перечислением значений.

Раздел переменных (var)

Пусть в программе встречаются переменные v11, v12,…; все они должны быть описаны следующим образом:

var v11, v12,…: type1;

v21, v22,…: type2; …

здесь v11, v12,… - имена переменных; type1 - тип переменных v11, v12,…; type2 - тип переменных v21, v22,….

Пример. var k, i, j: integer; a, b: real;

Каждая переменная должна быть описана до ее использования в программе и отнесена к одному и только одному типу. Названия разделов (const, type, var…) указываются только один раз.

Пример.

var a: real;

b: real;

Таким образом, в разделе var вводится имя каждой переменной и указывается, к какому типу эта переменная принадлежит. Тип переменной можно задать двумя способами: указать имя типа (например, real, color и т.д.), либо описать сам тип, например: array[1..16] of char

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

Здесь присутствуют заголовки и тела пользовательских процедур и функций.

Раздел действий (операторов)

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

Пунктуация в программах на Паскале

Заголовок завершается точкой с запятой.

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

Операторы отделены один от другого точкой с запятой.

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

begin

t := a;

a := b;

b := t

end;

Слова в других операторах также действуют как знаки пунктуации.

if ab > bd then

write(`yes')

else

write(`no');

Слова if, then, else выступают внутри оператора в качестве знаков пунктуации.

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

Не писать слова вместе;

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

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

Слова program, const, var, begin, end, а также множество других называются зарезервированными словами. Зарезервированные слова нельзя расширять (например, constant будет ошибкой) и сокращать (например, prog также будет ошибкой).

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

Операторы

Под операторов в языке Паскаль подразумевают только описание действий. Операторы отделяются друг от друга только точкой с запятой. Если оператор стоит перед end, until или else, то в этом случае точка с запятой не ставится.

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

Общий вид:

v := a;

здесь v - переменная, a - выражение, := - операция присваивания. Выражение a может содержать константы, переменные, названия функций, знаки операций и скобки.

Пример. f := 3 * C + 2 * sin(x);

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

not;

*, /, div, mod, and;

+, -, or;

=, <, >, <>, <=, >=, in.

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

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

В операции v := a переменная v и выражение a должны иметь один и тот же тип, а для интервального типа - одно и то же подмножество значений.

Замечание 1. Разрешается присваивать переменной типа real выражение типа integer.

Замечание 2. Нельзя присваивать переменной типа integer выражение типа real.

Составной оператор

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

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

Пример.

begin

i := 2;

k := i / 5

end;

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

Выражения

В операторах присваивания можно использовать арифметические выражения. Например:

num := (d + n) / 10;

sq := trunk(num) + 1;

Скобки обеспечивают необходимый порядок вычислений. Если бы в первом примере скобки бы были опущены:

num := d + n / 10;

то сначала было бы выполнено деление, приоритет которого выше. Приоритет в арифметических выражениях выше у операций умножения (*) и деления (/), ниже у сложения и вычитания.

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

У сформулированного выше правила существует важное исключение: деление (с использованием знака /) всегда дает вещественный результат:

6.5 / 2 = 3.25

6 / 2 = 3.0

Деление нацело (нахождение частного и остатка) может быть выполнено при помощи операций div и mod.

Выражение может включать в себя и целые и вещественные члены. Наличие хотя бы одного вещественного члена или знака / приводит к тому, что значение результата будет вещественным. Функции trunc и round могут быть использованы для преобразования вещественного числа в целое.

Функция sqr возводит значение аргумента (записанного внутри скобок) в квадрат. В Паскале нет оператора возведения в произвольную степень. Возведение в степенно здесь осуществляется с использованием логарифмов. Вместо ax на Pascal можно написать exp(ln(a) * x).

Это может показаться странным, но знаки <, >= и др. тоже играют роль операций. Выражения, содержащие подобные операции, принимают логическое значение и называются логическими выражениями. В состав логических выражений могут входить логические операции not (не), and (и), or (или).

Выражения

В операторах присваивания можно использовать арифметические выражения. Например:

num := (d + n) / 10;

sq := trunk(num) + 1;

Скобки обеспечивают необходимый порядок вычислений. Если бы в первом примере скобки бы были опущены:

num := d + n / 10;

то сначала было бы выполнено деление, приоритет которого выше. Приоритет в арифметических выражениях выше у операций умножения (*) и деления (/), ниже у сложения и вычитания.

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

У сформулированного выше правила существует важное исключение: деление (с использованием знака /) всегда дает вещественный результат:

6.5 / 2 = 3.25

6 / 2 = 3.0

Деление нацело (нахождение частного и остатка) может быть выполнено при помощи операций div и mod.

Выражение может включать в себя и целые и вещественные члены. Наличие хотя бы одного вещественного члена или знака / приводит к тому, что значение результата будет вещественным. Функции trunc и round могут быть использованы для преобразования вещественного числа в целое.

Функция sqr возводит значение аргумента (записанного внутри скобок) в квадрат. В Паскале нет оператора возведения в произвольную степень. Возведение в степенно здесь осуществляется с использованием логарифмов. Вместо ax на Pascal можно написать exp(ln(a) * x).

Это может показаться странным, но знаки <, >= и др. тоже играют роль операций. Выражения, содержащие подобные операции, принимают логическое значение и называются логическими выражениями. В состав логических выражений могут входить логические операции not (не), and (и), or (или).

Ввод и вывод данных

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

Поэтому язык программирования должен иметь инструменты, как для ввода данных, так и их вывода. В Паскале это процедуры read и readln для ввода данных и write и writeln - для вывода. Операторы с окончанием ln отличает то, что после их выполнения происходит перевод указателя на новую строку.

Откуда можно ввести данные в программу? С клавиатуры, файла.

Куда можно вывести данные? На экран, в файл, на принтер.

Стандартными устройствами ввода и вывода (т.е. теми, что предполагаются по умолчанию) являются клавиатура (ввод) и монитор (вывод).

Вывод данных на экран. Форматированный вывод

Вывод данных на экран или файл в языке программирования Pascal осуществляется с помощью процедур write и writeln. Здесь будет рассмотрен вывод только на экран.

Допустим, нам требуется отобразить на экране пару фраз. Если мы хотим, чтобы каждая из них начиналась с новой строки, то надо использовать writeln, если нет - то write (изображение 1. Write и Writeln).

Особого смысла использовать два оператора write, когда можно все фразы записать в одном, конечно нет. Write чаще используется, когда после какого-то сообщения на экране требуется получить данные от пользователя. Т.е. выводим на экран «Введи число: » и не переводим курсор на новую строку, а ждем ввода.

Следующий момент. Допустим, в памяти компьютера хранятся какие-то данные. Из программы мы обращаемся к ним с помощью переменных num, fl и st. Вывести их значения на экран можно по-разному (изображение 2. Различные способы вывода данных на экран).

Во втором случае мы видим, что процедуры вывода (как write так writeln) позволяют конструировать выводимую информацию из различных компонент (строк-констант и переменных).

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

Ввод данных с клавиатуры

Ввод данных в языке программирования Паскаль обеспечивается процедурами read и readln. Ввод данных осуществляется либо с клавиатуры, либо из файла. Здесь будет рассмотрен только ввод с клавиатуры.

Когда данные вводятся в память, то надо к ним в дальнейшем как-то обращаться, и знать, где они там лежат. За это все отвечает механизм переменных. Поэтому, когда в программе на Pascal используется процедура read (или readln), то в качестве фактического параметра (аргумента) ей передается имя переменной, которая будет связана с вводимыми данными. Потом эти данные можно будет использовать в программе, можно просто вывести на экран (изображение 3. Readln - ввод данных).

В процедуры ввода можно передавать не один фактический параметр, а множество (изображение 4. Возможности процедуры Readln).

При вводе данных их разделяют пробелом или переходом на новую строку (Enter).

Переменные и константы

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

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

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

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

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

В примере ниже происходит ввод значений двух переменных пользователем и обмен их значений местами за счет третьей переменной, служащей буфером. Тип переменных integer. Это означает, что переменным можно присвоить только целые числа в диапазоне от -32768 до 32767. Под тип integer в языке программирования Паскаль отводится 2 байта, что равно 16 битам, а это значит, что можно хранить 216 (65536) значений (отрицательные и положительные числа, а также ноль). В этих диапазонах переменные x, y и b могут принимать какие угодно значения.

var x, y, b: integer;

begin

write ('Input first number: ');

readln (x);

write ('Input second number: ');

readln (y);

writeln ('x = ', x, ', y = ', y);

writeln ('Changing values... changing values...');

b := x;

x := y;

y := b;

writeln ('x = ', x, ', y = ', y);

readln

end.

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

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

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

Пример использования константы:

const pi = 3.14;

var r, l, s: real;

begin

write ('Радиус? ');

readln (r);

l := 2 * pi * r;

s := pi * r * r;

write ('Длина: ', l:5:1, '. Площадь: ', s:5:1);

readln

end.

Длина переменных

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

В современных версиях компиляторов с языка Pascal таких ограничений нет. Например, в результате работы приведенной ниже программы как в среде Free Pascal, так и Turbo Pascal 7.1 на экран выводятся два разных числа (10 и 20).

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

var

variable111, variable222: integer;

begin

variable111 := 10;

variable222 := 20;

writeln(variable111);

writeln(variable222);

readln

end.

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

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

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

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

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

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

Переменные типа integer могут быть связаны только с целыми значениями обычно в диапазоне от -32768 до 32767. В Pascal есть другие целочисленные типы.

Переменные типа real хранят вещественные (дробные) числа.

Переменная булевского (логического) типа может принимать только два значения - true (1, правда) или false (0, ложь).

Символьный тип (char) может принимать значения из определенной упорядоченной последовательности символов.

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

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

Все вышеописанное - это простые типы данных. Но бывают и более сложные, структурированные, которые базируются на простых типах.

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

Строки представляет собой последовательность символов. Причем количество этих символов не может быть больше 255 включительно. Такое ограничение характерная черта Pascal.

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

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

Файлы для Pascal представляют собой последовательности однотипных данных, которые хранятся на устройствах внешней памяти (кстати, жесткий диск - это тоже внешняя память).

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

Целые типы

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

Таблица. Целые типы Pascal

Тип

Диапазон допустимых значений

Отводимая память, в байтах

shotint

-128…127

1

integer

-32 768…32 767

2

longint

-2 147 483 648…2 147 483 647

4

byte

0…255

1

word

0…65 535

2

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

a, b, c: integer;

Здесь a, b, c… - имена переменных, integer - тип переменных. Транслятор, встретив такое описание переменных a, b, c, запоминает, что эти переменные могут принимать только целые значения и формирует соответственно этому команды программы.

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

Знак операции

Операция

+

Сложение

-

Вычитание

*

Умножение

div

Целочисленное деление (остаток отбрасывается). Деление без округления (целая часть частного).

mod

Деление по модулю (выделение остатка от деления). Остаток от деления: a mod b = a - ((a div b) * b).

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

(a операция b) <= maxint,

a <= maxint, b <= maxint.

Над целыми типами, как и многими другими, допустимы операции отношения (сравнения). Результат таких операций относится к типу boolean и может принимать одно из двух значений - либо true (истина), либо false (ложь).

Таблица. Операции отношения

Знак операции

Операция

=

Равно

<>

Не равно

>=

Больше или равно

>

Больше

<=

Меньше или равно

<

Меньше

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

Таблица. Стандартные функции Pascal, применимые к аргументам целых типов

Функция

Тип результата

Результат выполнения

abs(x)

Целый

Модуль x (абсолютная величина x)

sqr(x)

Целый

Квадрат x

succ(x)

Целый

Следующее значение x (x+1)

pred(x)

Целый

Предыдущее значение x (x-1)

random(x)

Целый

Случайное целое число из интервала 0..x-1.

sin(x)

Действительный

Синус x (угол в радианах)

cos(x)

Действительный

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

arctan(x)

Действительный

Арктангенс x (угол в радианах)

ln(x)

Действительный

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

exp(x)

Действительный

Экспонента x

sqrt(x)

Действительный

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

odd(x)

Логический

Значение true, если x - нечетное число; false - если четное.

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

Процедуры inc и dec могут иметь по одному или по два параметра целого типа. Если параметров два, то значение первого увеличивается (для inc) или уменьшается (для dec) на величину, равную значению второго параметра. Например, inc(x,2) равнозначно x+2. Если параметр один, то его значение увеличивается (для inc) или уменьшается (для dec) на единицу. Например, dec(x) равнозначно x-1.

Следующие функции принимают в качестве аргументов значения вещественного типа, а возвращают значения целого типа:

trunc(x) - отбрасывание десятичных знаков после точки;

round(x) - округление до целого.

Примеры работы некоторых приведенных выше операций и функций:

Пример 1. Пусть a = 17, b = 5. Тогда a div b дает 3, a mod b дает 2 (остаток от деления), sqr(b) дает 25.

Пример 2. Пусть x = 4.7389. Тогда trunc(x) дает 4, round(x) дает 5.

Пример 3. Выражение 4 * 21 дает результат целого типа, а 4 * 21.0 - вещественного, т.к. один из сомножителей вещественный.

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

В языке Паскаль существует несколько типов для представления действительный чисел. Однако чаще всего для их представления используется тип Real.

Таблица. Вещественные типы в Pascal

Тип

Диапазон

Число цифр

Память, байт

Real

2.9e-39 … 1.7e38

11-12

6

Single

1.5e-45 … 3.4e38

7-8

4

Double

5.0e-324 ...1.7e308

15-16

8

Extended

3.4e-4932 … 1.1e493

19-20

10

Comp

-9.2e63 … (9.2e63)-1

19-20

8

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

Над действительными числами выполнимы операции сложения (+), вычитания (-), умножения (*) и деления (/). Результатом этих операций является также действительное число. Даже если хотя бы один из операндов вещественный, то результат этих операций также будет вещественным.

Операция деления (/) дает вещественный результат и в случае двух целых операндов. Например, 6 / 2 = 3.0.

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

Стандартная функция abs(x) - модуль x - от целого аргумента дает целый результат, а от вещественного - вещественный, как и sqr(x) - квадрат x.

Функции

sin(x) - синус x (x в радианах),

cos(x) - косинус x (x в радианах),

ln(x) - натуральный логарифм x,

exp(x) - экспонента x,

sqrt(x) - корень квадратный из x,

arctan(x) - арктангенс

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

Функция int возвращает в виде действительного значения целую часть аргумента, frac возвращает дробную часть аргумента.

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

Функция random без аргументов возвращает равномерно распределенное случайное число от 0 до 1.

Не имеющая аргументов функция pi возвращает число Пифагора.

Нельзя использовать переменные и константы вещественного типа:

в функциях pred, succ, ord;

в качестве индексов массивов;

в операторах передачи управления в качестве меток.

Булевский тип (Boolean)

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

false < true

Операции and, or, not (применяемые к булевским операндам) дают булевские значения.

Операция and (логическое умножение, пересечение, операция И)

Выражение a and b дает значение true, только в том случае, если a и b имеют значение true.

Во всех остальных случаях значения выражения a and b - false.

true and true = true

true and false = false

false and false = false

Операция or (логическое сложение, объединение, операция ИЛИ)

Выражение a or b дает значение false, только в том случае, если a и b имеют значение false. Во всех остальных случаях результат - true.

true or true = true

true or false = true

false or false = false

Операция not (отрицание, операция НЕ)

Выражение not a имеет значение, противоположное значению a.

not true = false

not false = true

Стандартные булевские функции

odd(x) = true, если x нечетный (x целый);

eoln(x) = true, если встретился конец строки текстового файла x;

eof(x) = true, если встретился конец файла x.

В остальных случаях эти функции принимают значение false.

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

Переменная типа char может принимать значения из определенной упорядоченной последовательности символов, разрешенной транслятором с Паскаля на данной ЭВМ.

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

Эти функции называются функциями преобразования:

ord(c) - выдает номер символа c (нумерация с нуля),

chr(i) - выдает i-ый символ из таблицы символов.

Пример. ord(H) выдает номер символа Н в последовательности всех символов, используемых транслятором. chr(15) выдает 15-ый символ этой последовательности.

Кроме того, для символьных переменных применяются такие функции:

pred(ch) - возвращает предыдущий символ;

succ(ch) - возвращает следующий символ;

upcase(ch) - преобразует строчную букву в заглавную. Обрабатывает буквы только латинского алфавита.

Перечисляемый тип

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

type nm = (word1, word2, …, wordN);

здесь nm - идентификатор типа (произвольный), word1, word2… - конкретные значения, которые может принимать переменная типа nm. Эти значения считаются упорядоченными, т.е. описание типа одновременно вводит упорядочение

word1 < word2 < wordN.

Пример 1. type color = (red, yellow, green, blue);

Здесь определено, что red < yellow < green < blue. Переменная типа color может принимать одно из перечисленных значений.

Ко всем переменным скалярного типа, кроме real, применимы следующие стандартные функции: succ(x), pred(x), ord(x).

Функция succ(x)

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

Пример 2. Пусть задана последовательность букв в алфавитном порядке. Тогда succ(A) есть B; succ(L) есть M и т.д.

В примере 1 succ(red) есть yellow.

Функция pred(x)

По элементу x определяется последовательность, которой принадлежит x, и выдается предыдущий элемент этой последовательности.

Пример 3. pred(F) есть E; pred(Z) есть Y и т.д.

Функция ord(x)

Выдается номер элемента x на соответствующей последовательности.

Ко всем переменным одного и того же скалярного типа применимы операции отношения: =, <>, <=, >=, <, >.

Ограниченный тип (интервал)

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

Общий вид:

a: min..max;

здесь a - переменная, min - левая граница, max - правая граница подмножества (диапазона). Границы диапазона разделяются двумя точками.

Тип min и max задает множество, определяющее основной тип переменной a (базовый тип). О переменной, описанной таким образом, говорят, что она имеет интервальный тип.

Пример. Пусть переменная k может принимать значения из множества 1 - 20. Тогда ей приписывают ограниченный тип k: 1..20;. Основным типом переменной k является тип integer, т.к. границами диапазона являются целые константы 1 и 20.

Если переменная b может принимать одно из значений red, yellow, green, то эту переменную можно описать так: b: red..green; основным типом b является тип color, описанный в предыдущем разделе.

Граница min всегда должна быть меньше max

Пример. Пусть i - переменная, принимающая значения года рождения сотрудника какого-либо учреждения. Очевидно, имеет смысл ограничить диапазон значений i подмножеством, т.е. описать примерно так: i: 1930…2000; переменная i будет иметь интервальный, а не целый тип.

Булевы типы. Логические выражения и логические операции

Простые логические выражения

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

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

В Паскале предусмотрены следующие операторы отношений:

меньше: x < y

больше: x > y

равно: x = y

не равно: x <> y

меньше или равно: x <= y

больше или равно: x >= y

Булевы типы

Результатом логического выражения всегда является булево (логическое) значение. Булев тип данных (boolean) может принимать только два значения (true или false). Эти величины упорядочены следующим образом: false < true. Это значит, что данные булевого типа являются не только результатом операций отношения, но и могут выступать в роли операндов операции отношения. Также к ним можно применять функции ord, succ, pred, процедуры inc и dec.

Значение типа boolean занимает в памяти 1 байт

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

Кроме типа boolean в Pascal введены еще три булевых типа -- bytebool (занимает 1 байт), wordbool (занимает 2 байта) и longbool (занимает 4 байта).

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

var

b:boolean;

wb:wordbool;

begin

b:= false;

b:= pred(b);

writeln(b,' ',ord(b)); // TRUE 255

writeln(b=true); // TRUE

wb:= false;

wb:= pred(wb);

writeln(wb,' ',ord(wb)); // TRUE -1

b:= true;

b:= succ(b);

writeln(b,' ',ord(b)); // TRUE 2

wb:= true;

wb:= succ(wb);

writeln(wb,' ',ord(wb)); // FALSE 0

end.

Логические операции

С помощью логических операторов можно формировать сложные логические выражения. Логические операторы часто применяются по отношению к простым логическим выражениям.

В языке программирования Pascal предусмотрены следующие логические операции:

Конъюнкция (логическое умножение, пересечение) - and. Выражение a and b дает значение true только в том случае, если a и b имеют значение true.

Во всех остальных случаях значения выражения a and b дает false.

true and true = true

true and false = false

false and true = false

false and false = false

Дизъюнкция (логическое сложение, объединение) - or. Выражение a or b дает значение false только в том случае, если a и b имеют значение false. Во всех остальных случаях результат - true.

true and true = true

true and false = true

false and true = true

false and false = false

Отрицание (инверсия) - not. Выражение not a имеет значение, противоположное значению a.

not true = false

not false = true

Исключающее ИЛИ - xor. Выражение a xor b дает значение true только в том случае, когда только один из операндов имеет значение true.

true and true = false

true and false = true

false and true = true

false and false = false

Последовательность выполнения логических операторов: not, and, or

В языке Паскаль сначала выполняются логические операторы (and, or, xor, not), а уже потом операторы отношений (>, >=, <, <=, <>, =), поэтому не нужно забывать расставлять скобки в сложных логических выражениях.

Сложные булевы выражения могут не обрабатываться до конца, если продолжение вычислений не изменит результат. Если булево выражение в обязательном порядке нужно обрабатывать до конца, то это обеспечивается включением директивы компиляции {B+}.

Стандартные булевские функции

odd(x) = true, если x нечетный (x целый тип);

eoln(x) = true, если встретился конец строки текстового файла x;

eof(x) = true, если встретился конец файла x.

В остальных случаях эти функции принимают значение false.

Задачи к данной теме

Оператор case в задаче выбора

Определить возможность существования треугольника по сторонам

Битовая арифметика и операции над битами

В Pascal над целыми типами (byte, shortint, word, integer, longint и их диапазоны) допустимы побитовые операции.

Логические операции над битами

Над битами двух целых операндов можно выполнять ранее рассмотренные логические операции: not, and, or, xor. Отличие между побитовыми и логическими операциями состоит в том, что побитовые (поразрядные) операции выполняются над отдельными битами операндов, а не над их значением в десятичном (обычно) представлении.


Подобные документы

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

    учебное пособие [211,1 K], добавлен 30.03.2008

  • История и основы структурного программирования в среде Turbo Pascal. Работа с различными типами данных. Операторы языка. Работа с символьными и строковыми переменами, одномерным, двумерным массивами. Классификация компьютерных игр. Игры на языке Паскаль.

    курсовая работа [28,8 K], добавлен 06.05.2014

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

    лекция [55,7 K], добавлен 21.05.2009

  • Международный стандарт на язык программирования Паскаль. Приемы объектно-ориентированного программирования в Турбо Паскале. Символы языка, его алфавит. Этапы разработки программы. Понятие алгоритмов и алгоритмизации. Структура программ на Паскале.

    курсовая работа [29,8 K], добавлен 28.02.2010

  • Особенности программирования на языке Паскаль в среде Турбо Паскаль. Линейные алгоритмы, процедуры и функции. Структура данных: массивы, строки, записи. Модульное программирование, прямая и косвенная рекурсия. Бинарный поиск, организация списков.

    отчет по практике [913,8 K], добавлен 21.07.2012

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

    курсовая работа [254,0 K], добавлен 02.07.2011

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

    курсовая работа [290,9 K], добавлен 05.12.2008

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

    курсовая работа [1,0 M], добавлен 03.07.2011

  • Общая характеристика языков программирования. Описание языка Паскаль: основные субъекты языка; структура Паскаль-программы; типизация и объявление данных. Операторы присваивания и выражения. Структурные операторы, организация ветвлений и циклов.

    дипломная работа [276,6 K], добавлен 26.01.2011

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

    курсовая работа [305,9 K], добавлен 03.07.2011

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.