Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ПЯВУ_2

.pdf
Скачиваний:
5
Добавлен:
14.05.2015
Размер:
303.21 Кб
Скачать

Лабораторная работа №2

Тема: "Основы программирования. Типизация, простые типы данных, вводвывод и операции выбора"

Оборудование: персональный компьютер.

Программное обеспечение: ОС, языки программирования C++, Pascal, Forth.

Благо всегда и повсюду зависит от соблюдения двух условий:

правильного установления конечной цели всякого рода деятельности;

отыскания соответственных средств, ведущих к конечной цели.

Аристотель

С чего лучше начинать изучение нового языка? Вспоминая собственный опыт на этом поприще – пресловутую программу «Hello World!» - автор считает, что это далеко не лучший путь. Несмотря на то, что начинать обучение новому языку и вообще программированию с написания некоторой программы чрезвычайно выгодно – ведь куда приятнее писать программу, чем просто читать об этом. Тем не менее, основываясь на собственном методическом опыте, думаю, что более продуктивным способом обучения является знакомство с возможностями, которые предоставляет тот или иной язык программирования. Мы будем действовать именно по такому способу.

При проектировании и составлении программы для решения той или иной задачи мы обычно задаемся двумя вопросами:

1)Что мы будем обрабатывать?

2)Каким образом мы будем это делать?

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

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

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

Простые типы языка C++

В языке C++ имеется несколько базовых типов, определяющих типы переменных. Основные типы данных определяются с помощью следующих ключевых слов: int, long, short, unsigned, char, float, double, bool. Описание встроенных типов приведены в таблице.

Вид переменной

Ключевые слова

Примечание

Целые со знаком

int

Основной тип целых чисел

 

long, long int

Длинное целое – могут иметь целое

 

 

значение как минимум такого же

 

 

размера, как максимальное int и,

 

 

возможно больше.

 

 

 

 

short, short int

 

 

Целые без знака

unsigned

 

unsigned int

 

unsigned long

 

unsigned int long

 

unsigned short

 

unsigned int short

Символы

char

 

unsigned char

Числа с плавающей

float

точкой

double

 

long float

Логические переменные

bool

 

 

Короткое целое - могут иметь целое значение не больше минимального int, а возможно и меньше.

Имеют только нулевые и положительные значения. Не могут быть больше максимально возможного положительного числа.

Символы в том числе специальные и управляющие.

Числа с плавающей точкой обычной и двойной точности.

Принимают значения «истина» либо «лож» (true, false).

Кроме переменных определенных типов язык C++ строки и константы. Константы могут быть объявлены при помощи ключевого слова enum и используются в качестве мнемонических имен, повышающих читаемость программы. Строки или строковые литералы – это специальные конструкции для работы с последовательностями символов. Фактически строка – это последовательность символов заключенная в кавычки. Для хранения строки программа использует по одному байту памяти на каждый символ. По сути, строка это последовательность ASCII-сиголов, которая завершается нулевым символом. Максимальная длина строки зависит от реализации компилятора.

Объявления переменных в С++ происходят следующим образом: спецификатор типа список имен переменных; Рассмотрим примеры.

int a, b, c; //Объявлены переменные a, b, c целого типа. float x, y; //Объявлены переменные x, y вещественного типа.

enum colors {red, yellow, green};//Объявлен перечислимый тип colors с возможными //значениями red, yellow, green.

При объявлении переменных C++ поддерживает концепцию указателей. Указатель – это переменная, предназначенная для хранения адреса в памяти. При объявлении переменной в форме указателя память под нее выделяется не сразу, а в процессе работы программы. Рассмотрим пример.

int *s;//Объявлен указатель на целую переменную s.

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

Простые типы языка Pascal

Так же как иC++ язык Pascal имеет некоторое количество встроенных простых типов основные из которых перечислены в таблице.

Вид переменной

Ключевые слова

Примечание

Целые со знаком

integer

Основной тип целых чисел

 

longint

Длинное целое – могут иметь целое

 

 

значение как минимум такого же

 

 

размера, как максимальное integer

 

 

и, возможно больше.

 

comp

Длинное целое в диапазоне

 

 

(-9.2*1018..9.2*1018).

 

shortint

Короткое целое - могут иметь целое

Целые без знака

byte, word

Символы

char

 

 

Числа с плавающей

real

точкой

single

 

double

 

extended

Логические переменные

bool

 

 

Строковые переменные

string

значение не больше минимального integer, а возможно и меньше. Имеют только нулевые и положительные значения. Не могут быть больше максимально возможного положительного числа

(byte – 0..255, word – 0..65535).

Символы, в том числе специальные и управляющие.

Числа с фиксированной и плавающей точкой обычной и двойной точности, а также сверхдлинные вещественные числа. Принимают значения «истина» либо «лож» (true, false).

Строковая переменная. По умолчанию имеет длину 255 символов.

Переменные в языке Pascal могут быть объявлены при помощи ключевого слова var. Для создания нового типа в языке Pascal используется ключевое слово type. Объявления переменных в Pascal происходят следующим образом:

список имен переменных: спецификатор типа; Рассмотрим пример.

var

a, b, c: integer {Объявлены переменные a, b, c целого типа.} x, y: real { Объявлены переменные x, y вещественного типа.} type

colors=(red, yellow, green);{Объявлен перечислимый тип colors с

возможными значениями red, yellow, green.}

Язык Pascal поддерживает концепцию указателей. При объявлении переменной в форме указателя память под нее выделяется не сразу, а в процессе работы программы. Рассмотрим пример.

s:^integer;{Объявлен указатель на целую переменную s.}

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

x: pointer; {Объявлен указатель на переменную x.}

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

Выражения и операции в языках программирования

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

1)арифметические операции;

2)операции отношения;

3)логические операции;

4)операции сдвига.

Рассмотрим каждую из перечисленных групп.

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

Логические операции предназначены для работы с логическими (булевскими) переменными. Их результат имеет логический тип. Могут быть унарными и бинарными. В некоторых ЯП используют так называемые поразрядные логические операции. Эти операции применимы для операндов целого и логического типов. Они выполняются отдельно над каждым разрядом числа в его двоичном представлении (двоичное представление чисел – это внутреннее компьютерное представление).

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

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

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

Операции языка C++

Тип операции

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

 

Описание операции

Бинарные

+

Складывает две величины.

 

арифметические

-

Вычитает две величины.

 

операции

*

Умножает две величины.

 

 

/

Делит одну величину на другую. Если

 

 

оба операнда целые числа, то результат

 

 

усекается.

 

 

%

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

 

 

Допустима только для целых чисел.

 

++

Унарная

операция

сложения.

 

 

Прибавляет значение 1 к переменной,

 

 

стоящей справа или слева от операции.

 

--

Унарная

операция

вычитания.

 

 

Вычитает значение 1 к переменной,

 

 

стоящей справа или слева от операции.

 

-

Унарный минус. Изменяет знак

 

 

величины, стоящей справа.

 

Операции

<

Меньше

 

 

отношения

<=

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

 

 

= =

Равно

 

 

 

>=

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

 

 

>

Больше

 

 

 

!=

Не равно

 

 

Логические

&&

Логическое умножение (операция И).

операции

 

Результат имеет значение «истина»

 

 

только в том случае если оба операнда

 

 

имеют значение «истина» (отличны от

 

 

нуля).

 

 

 

||

Логическое сложение (операция ИЛИ).

 

 

Результат имеет значение «истина» в

 

 

том случае если один из операндов

 

 

имеет значение «истина» (отличен от

 

 

нуля).

 

 

 

 

 

 

 

 

 

!

Логическое отрицание (операция НЕ).

 

 

Унарная операция. Результат имеет

 

 

значение «истина» только в том случае

 

 

если операнд имеют значение «лож».

 

Поразрядные

~

Унарная

операция.

Изменяет

 

в

логические

 

двоичном представлении 0 на 1 и

операции

 

наоборот

 

 

 

 

(например

 

 

~(10010001)=(01101110),

то

есть

 

 

~145=110).

 

 

 

 

 

 

 

 

 

&

Поразрядное

 

И.

 

Например

 

 

(10010001)&(01101110)=(00000000),

то

 

 

есть 145&110=0.

 

 

 

 

 

 

 

|

Поразрядное

ИЛИ.

 

Например

 

 

(10010001)|(01101110)=(11111111),

 

то

 

 

есть (145)|(110)=255.

 

 

 

 

 

 

^

Поразрядное

исключающее

ИЛИ.

 

 

Например

 

 

 

 

 

 

 

 

 

 

(10010001)^(01101110)=(11111111),

 

то

 

 

есть 145^110=255.

 

 

 

 

 

 

Операции

<<

Сдвигает

разряды

левого

операнда

сдвига

 

влево на число позиций задаваемое

 

 

правым операндом.

Освобождающиеся

 

 

позиции заполняются нулями. Разряды,

 

 

сдвигаемые за старший разряд, левого

 

 

операнда теряются

 

 

 

 

 

 

 

>>

Сдвигает

разряды

левого

операнда

 

 

вправо на число позиций задаваемое

 

 

правым операндом.

Освобождающиеся

 

 

позиции заполняются нулями (зависит

 

 

от реализации). Разряды, сдвигаемые за

 

 

младший разряд, левого операнда

 

 

теряются

 

 

 

 

 

 

 

 

Операции

+=

Прибавляет величину стоящую слева к

присваивания

 

величине

находящейся

справа

 

и

 

 

записывает

 

результат

в

переменную

 

 

стоящую слева.

 

 

 

 

 

 

 

-=

Вычитает величину стоящую слева из

 

 

величины

 

находящейся

справа

 

и

 

 

записывает

 

результат

в

переменную

 

 

стоящую слева.

 

 

 

 

 

 

 

*=

Умножает величину стоящую слева на

 

 

величину

находящуюся

справа

 

и

 

 

записывает

 

результат

в

переменную

 

 

стоящую слева.

 

 

 

 

 

 

 

/=

Делит величину стоящую слева на

 

 

величину

находящуюся

справа

 

и

 

 

записывает

 

результат

в

переменную

 

 

стоящую слева. Если

оба

операнда

 

 

целые числа то результат усекается.

 

%=

Дает остаток

от

деления

величины

 

 

слева на величину находящуюся справа

 

 

и записывает результат в переменную

 

 

стоящую слева.

 

 

 

 

 

 

&=

Выполняет

поразрядное

И величин

 

 

справа и слева и записывает результат в

 

 

переменную стоящую слева.

 

 

|=

Выполняет поразрядное ИЛИ величин

 

 

справа и слева и записывает результат в

 

 

переменную стоящую слева.

 

 

^=

Выполняет

поразрядное исключающее

 

 

ИЛИ величин справа и слева и

 

 

записывает

результат

в

переменную

 

 

стоящую слева.

 

 

 

 

 

 

<<=

Сдвигает

 

разряды

левого

операнда

 

 

влево на число позиций задаваемое

 

 

правым

операндом

и

 

записывает

 

 

результат

 

в

переменную

стоящую

 

 

слева.

 

 

 

 

 

 

 

 

>>=

Сдвигает

 

разряды

левого

операнда

 

 

вправо на число позиций задаваемое

 

 

правым

операндом

и

 

записывает

 

 

результат

 

в

переменную

стоящую

 

 

слева.

 

 

 

 

 

 

 

 

=

Основная

 

операция

 

присваивания.

 

 

Присваивает

значение,

указанное

 

 

справа переменной стоящей слева.

Кроме указанных выше операций C++ может иметь (в зависимости от реализации) еще целый ряд операций. Некоторые из них мы рассмотрим в дальнейшем.

Операции языка Pascal

Тип операции

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

 

Описание операции

 

Бинарные

+

Складывает две величины.

 

арифметические

-

Вычитает две величины.

 

операции

*

Умножает две величины.

 

 

/

Делит одну величину на другую. Если

 

 

оба операнда целые числа, то результат

 

 

усекается.

 

 

 

mod

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

 

 

Допустима только для целых чисел.

 

div

Целочисленная операция. Делит одну

 

 

величину на другую. Оба операнда

 

 

целые

числа,

результат

всегда

 

 

усекается.

 

 

Операции

<

Меньше

 

 

 

отношения

<=

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

 

 

 

=

Равно

 

 

 

 

>=

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

 

 

 

>

Больше

 

 

 

 

<>

Не равно

 

 

 

 

 

 

Логические

and

Логическое умножение (операция И).

операции

 

Результат имеет значение «истина»

 

 

только в том случае если оба операнда

 

 

имеют значение «истина» (отличны от

 

 

нуля).

 

 

 

 

 

 

 

or

Логическое сложение (операция ИЛИ).

 

 

Результат имеет значение «истина» в

 

 

том случае если один из операндов

 

 

имеет значение «истина» (отличен от

 

 

нуля).

 

 

 

 

 

 

 

not

Логическое отрицание (операция НЕ).

 

 

Унарная операция. Результат имеет

 

 

значение «истина» только в том случае

 

 

если операнд имеют значение «лож».

 

Поразрядные

not

Унарная

операция.

Изменяет

в

логические

 

двоичном представлении 0 на 1 и

операции

 

наоборот

 

 

 

(например

 

 

~(10010001)=(01101110),

 

то

есть

 

 

~145=110).

 

 

 

 

 

 

 

and

Поразрядное

И.

 

Например

 

 

(10010001)&(01101110)=(00000000),

то

 

 

есть 145&110=0.

 

 

 

 

 

or

Поразрядное

ИЛИ.

 

Например

 

 

(10010001)|(01101110)=(11111111),

то

 

 

есть (145)|(110)=255.

 

 

 

 

 

xor

Поразрядное

исключающее

ИЛИ.

 

 

Например

 

 

 

 

 

 

 

 

(10010001)^(01101110)=(11111111),

то

 

 

есть 145^110=255.

 

 

 

 

Операции

:=

Основная

 

операция

присваивания.

присваивания

 

Присваивает

значение,

указанное

 

 

справа переменной стоящей слева.

 

 

В зависимости от реализации язык Pascal может иметь и дополнительные унарные и бинарные операции.

Операции ввода-вывода в языках программирования

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

Операции ввода-вывода языка C++

Ввод-вывод не является непосредственной частью языка C++. Он добавлен в виде набора типов и функций, находящихся в стандартных библиотеках. Стандартным заголовочным файлом ввода-вывода в C++ является файл iostream или iosrteam.h. Имя файла без расширения является официальным стандартом ANSI и используется со стандартным

пространством имен. Кроме того, широко используются заголовочные файлы стандартной библиотеки языка C stdio.h и conio.h.

Название операции

Ключевое слово

 

Примечание

 

 

Поместить в выходной

<<

Используется

совместно

с

cout

поток

 

(например, cout<<a;// поместить в

 

 

выходной

 

поток

a).

Функция

 

 

библиотеки iostream.h.

 

 

 

Считать из входного

>>

Используется

совместно

с

cin

потока

 

(например,

 

cin>>a;//извлечь

из

 

 

входного

потока

a).

Функция

 

 

библиотеки iostream.h.

 

 

 

Стандартный поток вывода

cout

Операция

 

вывода.

Функция

 

 

библиотеки iostream.h.

 

 

 

Стандартный поток ввода

cin

Операция ввода. Функция библиотеки

 

 

iostream.h.

 

 

 

 

 

Стандартный поток

cerr

Диагностика ошибок.

 

 

 

диагностики

 

Операция

 

ввода

 

(например,

Прочитать из входного

scanf(список

 

 

устройства

переменных для

scanf(&a);//прочитать

из

входного

 

ввода)

устройства значение a). Функция

 

 

библиотеки stdio.h.

 

 

 

Записать в выходное

printf(список

Операция

 

вывода(например,

устройство

переменных для

printf(a);//записать

в

выходное

 

вывода)

устройство значение a). Функция

 

 

библиотеки stdio.h.

 

 

 

Операции ввода-вывода языка Pascal

Как и в C++ ввод-вывод в языке Pascal производится при помощи стандартных процедур. Они описаны в стандартном модуле System, входящем в большинство реализаций языка Pascal. То есть имена процедур ввода-вывода не являются стандартными операторами языка Pascal.

Название операции

Ключевое слово

 

Примечание

 

Прочитать из входного

read(список имен)

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

устройства

 

использования

read(a);{Ожидать

ввода

 

 

переменной a}.

 

 

Прочитать из входного

readln(список

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

устройства

имен)

использования

readln(a);{Ожидать

ввода

 

 

переменной a}.

 

 

Записать в выходное

write(список

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

устройство

имен)

использования

write(a,b);{Вывести

в

 

 

выходное устройство переменные a, b}

Записать в выходное

writeln(список

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

устройство

имен)

использования

writeln(a,b);{Вывести в

 

 

выходное устройство переменные a, b}

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

Операции выбора в языках программирования

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

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

Операции выбора языка C++

В языке C++ предусмотрены разнообразные конструкции одиночного и множественного выбора. Ниже мы рассмотрим основные из них.

Название операции

Ключевое слово

Примечание

Обработать условие и

if(условие)

Как правило, условие это результат

выбрать альтернативу

оператор

сравнения. Оператор может быть и

 

 

составным. Например:

 

 

if (a<b) x=y;//если a и b равны присвоить x

 

 

значение y.

 

if(условие)

Как правило, условие это результат

 

оператор1

сравнения. Выбор различных путей

 

else

выполнения. Операторы могут быть и

 

оператор2;

составными. Например:

 

 

if (a<b) x=y

 

 

else x+=y;//если a и b равны присвоить x

 

 

//значение y иначе присвоить x

 

 

//значение x+y.

 

if(условие1)

Множественный выбор. Операторы могут

 

оператор1

быть и составными.

 

else if(условие2)

 

 

оператор2

 

 

else

 

 

оператор3;

 

Операции выбора языка Pascal

Операции выбора в языке Pascal аналогичны операциям выбора языка C++. Ниже представлены основные из них.

Название операции

Ключевое слово

Примечание

Обработать условие и

if(условие) then

Как правило, условие это результат

выбрать альтернативу

оператор

сравнения. Оператор может быть и

 

 

составным. Например:

 

 

if (a<b) then x:=y;//если a и b равны

 

 

присвоить x значение y.

 

if(условие) then

Как правило, условие это результат

 

оператор1

сравнения. Выбор различных путей

 

else

выполнения. Операторы могут быть и

 

оператор2;

составными. Например:

 

 

if (a<b) then x=y

 

 

else x=x+y;//если a и b равны присвоить x

 

 

//значение y иначе присвоить x

 

 

//значение x+y.

 

if(условие1) then

Множественный выбор. Операторы могут

 

оператор1

быть и составными.

 

else if(условие2)

 

 

then оператор2

 

 

else

 

 

оператор3;

 

Пример:

Задача. Даны два вещественных числа A, В и С. Написать программу для решения квадратного уравнения вида:

Ax2 + Bx +C = 0 .

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

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

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

2.Математическая модель

a.Математическая модель имеет следующий вид:

D = B2 4 A B дискриминантквадратного уранения. ЕслиD 0 корни можно расчитатьпоследующимформулам:

x = B + D

, x

2

= B D .

1

2

A

 

2

A

 

 

 

ЕслиD < 0 корнейнет.

3.Описание алгоритма.

a.Вводим числа A, B, C.

b.Рассчитываем дискриминант.

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

d.Заканчиваем алгоритм.

4.Опорный граф (блок схема) алгоритма.

Начало

Вводим коэффициенты A, B, C.

D = B2 4 A B

 

 

 

 

 

 

D > 0

да

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

нет

 

 

 

 

 

 

 

 

 

да

 

x1

=

B + D

 

 

 

 

 

D = 0

 

 

 

 

 

 

 

2 A

 

 

 

 

 

 

 

 

 

 

 

 

 

нет

 

 

 

x1

=

B +

D

 

 

x2

=

B D

 

«Корней нет»

 

2

 

A

 

 

 

 

2 A

 

 

 

 

 

 

 

 

Вывод x1 Вывод x1, x2

Конец

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