Что такое константа? Приведите примеры типизированных и не типизированных констант




Содержание

Введение

1.Написать программу

2. Что такое константа? Приведите примеры типизированных и не типизированных констант

3. Приведите полный список базовых целочисленных типов и занимаемый ими размер памяти в байтах

4. Что такое указатель? Как по указателю можно занести значение? Приведите примеры

5. Что такое функция? Можно ли возвращать значения из функции через переданные ей аргументы? Если можно, то как? Приведите примеры

6. Что такое класс? В чем отличие класса от структуры? Приведите примеры структуры и класса

7. Что такое виртуальная функция? Приведите пример. В каких случаях используются виртуальные функции?

Литература


Введение

 

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

Связь между языком, на котором мы думаем и программируем, а также между задачами и их решениями, которые можно представить в своем воображении, довольно близка. По этой причине ограничивать возможности языка только поиском ошибок программиста - в лучшем случае опасно. Как и в случае естественных языков, очень полезно обладать, по крайней мере, двуязычием. Язык предоставляет программисту некоторые понятия в виде языковых инструментов; если они не подходят для задачи, их просто игнорируют. Например, если существенно ограничить понятие указателя, то программист будет вынужден для создания структур, указателей и т.п. использовать вектора и операции с целыми. Хороший проект программы и отсутствие в ней ошибок нельзя гарантировать только наличием или отсутствием определенных возможностей в языке.

Действительно, понятие класса в С++ проявило себя как мощное концептуальное средство.

Название С++ (си плюс плюс), было придумано Риком Маскитти летом 1983 г. Это название отражает эволюционный характер изменений языка С.

Обозначение ++ относится к операции наращивания С. Чуть более короткое имя С+ является синтаксической ошибкой. Кроме того, оно уже было использовано как название совсем другого языка.

Выбор С в качестве базового языка для С++ объясняется следующими его достоинствами:

(1) универсальность, краткость и относительно низкий уровень;

(2) адекватность большинству задач системного программирования;

(3) он идет в любой системе и на любой машине;

(4) полностью подходит для программной среды UNIX.

Язык программирования С++ задумывался как язык, который будет:

- лучше языка С;

- поддерживать абстракцию данных;

- поддерживать объектно-ориентированное программирование.

Цель работы – ознакомится с основными терминами С++ и их значениями, научиться составлять программы.

 


Написать программу

 

Которая:

- получает из стандартного потока ввода строку, содержащую число прописью (напр. «двадцать три»);

- подсчитывает и выводит на экран количество символов в строке и их средний код;

- переводит введенную строку в число (напр. соответственно 23) и выводит на экран.

 

// sp_kr.cpp: контрольная работа

//

#include "stdafx.h"

#include <string.h>

#include <iostream>

using namespace std;

int main(void)

{

printf("rabota s chislami \n\n");

// ввод и инициализация

cout << "Vvedite stroku (dvadcat` tri)" << endl;

char stroka[80] = "сто двадцать три";

//gets(stroka); // исходная строка

char razd[] = ",\t\n"; // множество разделителей

char *slovo;

// количество символов в строке и их средний код

int kol_c= 0;

int kod_c= 0;

for (int j = 0; j<strlen(stroka); j++)

{

kod_c += putchar(stroka[j]);//код символа

kol_c ++;

}

cout << endl << "Kolichestvo simvolov v stroke =" << kol_c << endl;

cout << "Srednij kod =" << kod_c/kol_c << endl;

// выдедение слова

slovo = strtok(stroka, razd);

int chislo= 0;

while(slovo!= NULL)

{

// обработка слов

if (stricmp(slovo, "один")==0) { chislo += 1;}

if (stricmp(slovo, "два")==0) {chislo += 2;}

if (stricmp(slovo, "три")==0) {chislo += 3;}

if (stricmp(slovo, "четыре")==0) {chislo += 4;}

if (stricmp(slovo, "пять")==0) {chislo += 5;}

if (stricmp(slovo, "шесть")==0) {chislo += 6;}

if (stricmp(slovo, "семь")==0) {chislo += 7;}

if (stricmp(slovo, "восемь")==0) {chislo += 8;}

if (stricmp(slovo, "девять")==0) {chislo += 9;}

if (stricmp(slovo, "десять")==0) {chislo += 10;}

if (stricmp(slovo, "одиннадцать")==0) {chislo += 11;}

if (stricmp(slovo, "двенадцать")==0) {chislo += 12;}

if (stricmp(slovo, "тринадцать")==0) {chislo += 13;}

if (stricmp(slovo, "четырнадцать")==0) {chislo += 14;}

if (stricmp(slovo, "пятнадцать")==0) {chislo += 15;}

if (stricmp(slovo, "шестнадцать")==0) {chislo += 16;}

if (stricmp(slovo, "семнадцать")==0) {chislo += 17;}

if (stricmp(slovo, "восемнадцать")==0) {chislo += 18;}

if (stricmp(slovo, "девятнадцать")==0) {chislo += 19;}

if (stricmp(slovo, "двадцать")==0) {chislo += 20;}

if (stricmp(slovo, "тридцать")==0) {chislo += 30;}

if (stricmp(slovo, "сорок")==0) {chislo += 40;}

if (stricmp(slovo, "пятьдесят")==0) {chislo += 50;}

if (stricmp(slovo, "шестьдесят")==0) {chislo += 60;}

if (stricmp(slovo, "семьдесят")==0) {chislo += 70;}

if (stricmp(slovo, "восемьдесят")==0) {chislo += 80;}

if (stricmp(slovo, "девяносто")==0) {chislo += 90;}

if (stricmp(slovo, "сто")==0) {chislo += 100;}

if (stricmp(slovo, "двести")==0) {chislo += 200;}

if (stricmp(slovo, "триста")==0) {chislo += 300;}

if (stricmp(slovo, "четыреста")==0) {chislo += 400;}

if (stricmp(slovo, "пятьсот")==0) {chislo += 500;}

if (stricmp(slovo, "шестьсот")==0) {chislo += 600;}

if (stricmp(slovo, "семьсот")==0) {chislo += 700;}

if (stricmp(slovo, "восемьсот")==0) {chislo += 800;}

if (stricmp(slovo, "девятьсот")==0) {chislo += 900;}

//printf(" %s\n", slovo);

 

// выделение очередного слова

slovo = strtok(NULL, razd);

}

cout << "Chislo =" << chislo << endl;

gets(stroka);

return 0;

}


 

 

Что такое константа? Приведите примеры типизированных и не типизированных констант

 

C++ дает возможность записи значений основных типов: символьных констант, целых констант и констант с плавающей точкой. Кроме того, ноль (0) может использоваться как константа любого указательного типа, и символьные строки являются константами типа char. Можно также задавать символические константы. Символическая константа - это имя, значение которого не может быть изменено в его области видимости. В C++ имеется три вида символических констант: (1) любому значению любого типа можно дать имя и использовать его как константу, добавив к его описанию ключевое слово const; (2) множество целых констант может быть определено как перечисление; и (3) любое имя вектора или функции является константой.

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

описание типизированной константы

L->¦идентификатор+->¦: +->¦тип+->¦ = +->¦типизированная+--> константа ¦

 

 


Таблица 1 – Константа

 

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

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

Константы простого типа. Описание типизированной константы с простым типом означает указание значения константы:

 

Const

Maximum: integer = 9999;

Factor: real = -0.1;

Breakchar: char = #3;

 

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

 

var

Buffer: array[0..1023] of Byte;

const

BufferOfs: Word = Ofs(Buffer);

BufferSeg: Word = Seg(Buffer);


 

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

 

const

Min: integer = 0;

Max: integer = 99;

type

Vector = array[Min..Max] of integer;

 

Описание Vector является недопустимым, поскольку Min и Max являются типизированными константами.

Константы строкового типа

Описание типизированной константы строкового типа содержит максимальную длину строки и ее начальное значение:

 

const

Heading: string[7] = 'Section';

NewLine: string[2] = #13#10;

TrueStr: string[5] = 'Yes';

FalseStr: string[5] = 'No';

 

Константы структурного типа

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


 

Константы типа массив. Описание константы типа массив содержит значения элементов, заключенные в скобки и разделенные запятыми.

Приведем пример константы типа массив:

 

type

Status = (Active,Passive,Waiting);

StatusMap = array[Status] of string[7];

const

StatStr: StatusMap = ('Active','Passive','Waiting');

 

В этом примере определяется константа-массив StarStr, которая может использоваться для преобразования значений типа Status в соответствующие им строковые представления. Элементами массива StarStr являются:

 

StatStr[Active] = 'Active'

StatStr[Passive] = 'Passive'

StatStr[Waiting] = 'Waiting'

 

Тип элемента константы-массива может быть любым, кроме файлового типа. Упакованные константы строкового типа (символьные массивы) могут быть определены и как одиночные символы, и как строки. Определение:

 

const

Digits:array[0..9] of

char=('0','1','2','3','4','5','6','7','8','9');

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

const

Digits: array[0..9] of char = '0123456789';


 

При разрешении расширенного синтаксиса (с помощью директивы

компилятора {$X+}) массивы с нулевой базой могут инициализироваться строкой, которая короче, чем описанная длина массива, например:

 

const

FileName = array[0..79] of Char = 'TEXT.PAS';

 

В таких случаях оставшиеся символы устанавливаются в NULL (#0), и массив содержит строку с завершающим нулем. При описании константы типа "многомерный массив" константы каждой размерности заключаются в отдельные скобки и разделяются запятыми. Расположенные в середине константы соответствуют самым правым размерностям. Описание:

 

type

Cube = array[0..1,0..1,0..1] of integer;

const

Maze: Cube = (((0,1),(2,3)),((4,5),(6,7)));

 

задает следующие начальные значения массива Maze:

 

Maze[0, 0, 0] = 0

Maze[0, 0, 1] = 1

Maze[0, 1, 0] = 2

Maze[0, 1, 1] = 3

Maze[1, 0, 0] = 4

Maze[1, 0, 1] = 5

Maze[1, 1, 0] = 6

Maze[1, 1, 1] = 7


 

Константы типа запись

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

Приведем несколько примеров констант-записей:

 

type

Point = record

x,y: real;

end;

Vector = array[0..1] of Point;

Month =

(Jan,Feb,Mar,Apr,May,Jun,Jly,Aug,Sep,Oct,Nov,Dec);

Date = record

d: 1..31; m: Month; y: 1900..1999;

end;

const

Origin: Point = (x: 0.0; y: 0.0);

Line: Vector = ((x: -3.1; y: 1.5),(x: 5.8; y: 3.0));

SomeDay: Date = (d: 2; m: Dec; y: 1960);

 

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

Константы объектного типа

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

 

const

ZeroPoint: Point = (X: 0; Y: 0)

ScreenRect: Rect = (A: (X: 0; Y: 0); B: (X: 80; Y: 25);

CountField: NumField = (X: 5; Y: 20; Len: 4; Name: nil;

Value: 0; Min: -999; Max: 999);

 

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

Константы множественного типа

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

Приведем несколько примеров констант-множеств:

 

type

Digits = set of 0..9;

Letters = set of 'A'..'Z';

const

EvenDigits: Digits = [0,2,4,6,8];

Vowels: Letters = ['A','E','I','O','U','Y'];

HexDigits: set of '0'..'z' =

['0'..'9','A'..'F','a'..'f'];

 

Константы ссылочного типа

Описание константы ссылочного типа может содержать только значение nil (пусто). Приведем несколько примеров

 

type

TDirection = (Left, Right, Up, Down);

TStringPtr = ^String;

TNodePtr = ^Node;

TNode = record

Next: NodePtr;

Symbol: StringPtr;

Value: Direction;

end;

const

S1: string[4] = 'DOWN';

S2: string[2] = 'UP';

S3: string[5] = 'RIGHT';

S4: string[4] = 'LEFT';

N1: Node = (Next: nil; Symbol: @S1; Value: Down);

N2: Node = (Next: @N1; Symbol: @S2; Value: Up);

N3: Node = (Next: @N2; Symbol: @S3; Value: Right);

N2: Node = (Next: @N3; Symbol: @S4; Value: Left);

DirectionTable: NodePtr = @N4;

 

Если разрешен расширенный синтаксис (указана директива компилятора {$X+}), типизированная константа типа PChar может инициализироваться строковой константой, например:

 

const

Message: PChar = 'Программа завершена';

Prompt: PChar = 'Введите значения: ';

Digits: array[0..9] of PChar = (

'Ноль', 'Один', 'Два', 'Три', 'Четыре',

'Пять', 'Шесть', 'Семь', 'Восемь', 'Девять');

 

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

Константы процедурного типа

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

Приведем следующий пример:

 

type

ErrorProc = procedure(ErrorCode: Integer);

procedure DefaultError(ErrorCode: Integer); far;

begin

WriteLn('Error ', ErrorCode, '.');

end;

const

ErrorHandler: ErrorProc = DefaultError;

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2019-06-03 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: