Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ОФОРМЛЕННЯ.doc
Скачиваний:
4
Добавлен:
01.02.2015
Размер:
443.9 Кб
Скачать

5) Розробка тексту програми.

5.1 Вибір імен

Вибір потрібних імен для складних програм в загалі є складною задачею: однакові по вимову імена будуть різні по напису, імена в тексті програми і імена відповідних предметів повинні бути однаковими (добре - TemperatureBody, TemperatureRoom1, TemperatureBigRoom1, а такі імена як TB, TR1, TBR1 про теж, це погано), деякі символи зарезервовані як початкові для особистих імен, найбільш часто це символи ”_” на початку ( _main() ) або всередині (EXIT_SUCCESS). В окремих випадках в колективах розробників програмних продуктів можуть використовуватися свої окремі вимоги при виборі різних найменувань (змінних, констант, функцій, їх аргументів тощо ), з якими слід попередньо знайомитися.

Для нашого завдання можна вибрати безпосередньо х і у.

5.2 Вибір типів даних

Як вже було сказано вибір типів даних визначає вимогу до розмірів потрібної пам’яті. Слід також враховувати, що при виконанні різних арифметичних дій компілятор перетворює операнди різних типів в тип найбільшого операнда. Любі два операнда з любими типами даних при виконанні любої операції між ними перетворюються в один найбільший тип (по об’єму займаємої пам’яті). Це перетворення виконує компілятор і передбачувати програмісту послідовність його дій зайве. Загальна направленість перетворення – від типу з меншим значенням до типу з більшим значенням. Це виглядає так:

(char)→(signed_char)→(unsigned_char)→(int)→(short_int)→(unsigned_int)→ (unsigned_short_int)→(long_int)→(untsigned_long_int)→(float)→(double)→

(long_double)

Можливі і такі перетворення – (char)→(long_double) і так далі.

Як слід з приведеного, об’єм пам'яті, вказаний розроблювачем програми при виконанні програми може значно збільшуватися і як що це допустимо, то можна заздалегідь на стадії розробки вибрати типи даних з більшою пам’ятю. При цьому зменшиться час виконання програми.

Можна використати приведення типів, яке має такий вигляд:

(новий тип) вираження

Таке приведення є унарним оператором і згідно з пріоритетами спочатку виконається унарне приведення до нового типу а потім виконається вираження.

Приклад: int і=1; int i =1;

float x; float x;

……………. ……………….

x = i /2; результат x=0; x = (float) x / 2; результат x = 0.5;

В результаті висновків наведених у пп. 5.1 та 5.2 в таблиці 3 приведені результати вибору імен і їх типів для розглянутих варіантів схем алгоритмів.

Таблиця 3 Вибір імен та їх типів

№ варіанта

i

n

k

х, х[i]

z, z[i]

y, y[i]

F(x)

1

2

3

4

5

6

7

8

9

Рис.1

типи

-

-

-

double

double

double

-

Рис.2

int

int

double

double

double

-

Рис.3

int

int

-

double

double

tan(x)

Рис.4

int

int

-

double

double

double

double

Примітка: тип double дозволяє роботу з великими числами і з великою точністю;

там де це треба х, у та z треба розглядати як масиви x[i], z[i], y[i] ;

при виконанні своєї особистої лабораторної роботи після порівняльного

аналізу різних ситуацій в таблиці 3 слід реалізувати тільки один варіант.

    1. Розробка окремих операцій та операторів.

Всі операції приведені в таблиці 4

Таблиця 4 Операції в мові С++

ОПЕРАЦИИ (во всех примерах начальные х=7, у=27, zbbool; ziint; zllong; zffloat; *p - int)

Приоритет

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

С, С++

С#

Символ

Порядок выполнения

Пример записи

Символ

1

Доступ к глобальной переменной

Обозначение члена структуры

::

::

Справа налево

Слева направо

2

Обращение к функции

Выделение элемента массива

Инкремент (постфиксное увеличение на 1) (zi=27 y=28)

Декремент (постфиксное уменьшение на 1) (zi=27 y=26)

Получение ссылки на объект класса type_info

Динамическое определ.типов (RTTI) dynamic_cast (преобразование типа)

()

[]

++

--

typeid

Слева направо

Слева направо

Слева направо

Слева направо

Слева направо

о

f(x)

m[i]

zi=y++;

zi=y--;

typeid()

()

[]

++

--

3

Логическое отрицание (zb=1)

Поразрядное логическое НЕ (дополнение к 1) (0xF00F)

Изменение знака (унарный минус) (y=-27)

Плюс

Инкремент (префиксное увеличение на 1) (zi=28 y=28)

Декремент (префиксное уменьшение на 1) (zi=26 y=26)

Определение адреса переменной (py=00AC)

Обращение к памяти по значению указателя (y=27)

Преобразование результата к указанному типу

(zf=27.000000)

Определение размера в байтах (zi=2)

Cоздание объекта (py=00AC)

Удаление объекта

!

~

-

+

++

--

&

*

(type)

SizeOf

new

delete

Справа налево

Справа налево

Справа налево

Справа налево

Справа налево

Справа налево

Справа налево

Справа налево

Справа налево

Справа налево

Справа налево

Справа налено

zb=!0;

~0x0FF0

y=-y;

zi=++y;

zi=--y;

py=&y;

y=*py;

zf=(float)y;

zi=SizeOf y;

new(py);

delete(py)

!

~

-

++

--

&

*

(type)

new

4

Выделение поля структурной переменной

Выделение поля структурной переменной по

указателю ее начала

Слева направ

Слева направо

a.x

pa→x

5

Умножение (zi=189)

Деление (zf=1.928571)

Определение остатка целого от деления (zi=6)

*

/

%

Слева направо

Слева направо

Слева направо

zi=y*x;

zf=(float)y/x/2;

zi=y%x;

*

/

%

6

Сложение (y=34)

Вычитание (y=20)

+

-

Слева направо

Слева направо

y=y+x;

y=y-x;

+

-

7

Сдвиг влево (на к двоичных разрядов) (zi=216)

Сдвиг вправо (на к двоичных разрядов) (zi=3)

<<

>>

Слева направо

Слева направо

zi=y<<3;

zi=y>>3;

<<

>>

8

Меньше (zb=fals)

Меньше или равно (zb=fals)

Больше (zb=true)

Больше или равно (zb=true)

<

<=

>

>=

Слева направо

Слева направо

Слева направо

Слева направо

zb= y<x;

zb=y<=x;

zb=y>x;

zb=y>=x;

<

<=

>

>=

is

9

Равно (zi=false)

Не равно (zi=true)

==

!=

Слева направо

Слева направо

zi=y == x;

zi=y != x

==

!=

10

Поразрядное логическое И (zi=3)

&

Слева направо

zi=y&x;

&

11

Поразрядное исключающее ИЛИ (zi=28)

^

Слева направо

zi=y^x;

^

12

Поразрядное логическое ИЛИ (zi=31)

|

Слева направо

zi=y|x

|

13

Логическое И (y>x&&x<5 - false zi – не определено)

&&

Слева направо

if(y>x&&x<5)zi=10;

&&

14

Логическое ИЛИ (y>x||x<5 - true zi=10)

||

Слева направо

if(y>x||x<5)zi=10;

||

15

Присваивание простое (ниже x=7, y=27) (y=7)

Сложить и присвоить (y=34)

Вычесть и присвоить (y=20)

Умножить и присвоить (y=189)

Разделить и присвоить (x,y-цел.) (y=3)

Взять по модулю и присвоить (y=6)

Сдвинуть влево и присвоить (y=3456)

Сдвинуть вправо и присвоить, (y=0)

Поразрядное ИЛИ и присвоить (y=31)

Поразрядное исключительное ИЛИ и присвоить (y=28)

Поразрядное И и присвоить (y=3)

Последовательное выполнение (y=108 x=2)

(результаты zf= 5.000000 y=5 x=5)

=

+=

-=

*=

/=

%=

<<=

>>=

|=

^=

&=

Справа налево

Справа налево

Справа налево

Справа налево

Справа налево

Справа налево

Справа налево

Справа налево

Справа налево

Справа налево

Справа налево

Справа налево

Справа налево

y = x;

y += x;

y -= x;

y *= x;

y /= x;

y %= x;

y <<= x;

y >>= x;

y |= x;

y ^= x;

y &= x;

y<<=x-=5;

zf=y=x=5;

:=

+=

-=

*=

/=

%=

<<=

>>=

| =

^ =

&=

y=x=5

-“-

16

Операция условия (тринарная операция) (max = 27)

?:

Справа налево

max=y>x?y:x;

?:

17

throw

18

Операция «запятая» (результат - x>y – true y1=37)

,

Слева направо

if(x=8*x,y=2*y, x>y) y1=10+y;

Для приведених даних х і у виконайте всі 44 приведених операції і отримайте дані результати. (користуйтеся літературою Шилд Герберт Полный справочник по С++, 4-е издание. Стр 40 -72).

По виконаній роботі скласти конспект в зошиті до домашніх робіт. Цей зошит використовувати для практичних занять (обов’язково мати їх на практичних заняттях ).

Оператори це окремі команди, які складають текст програми і які виконуються комп’ютером . Основні оператори мови С++ приведені в таблиці 5 (див. папка ”Главные_справки_2013/Таблиця_5 Операторы_С++”). Структура таблиці відповідає прийнятій класифікації операторів, включає їх опис та приклади запису і використання (користуйтеся літературою Шилдт Полный справочник по С++, 4-е издание. Стр 65 - 98 ).

Розглянемо докладніше вибір потрібного оператора для виконання відповідного блоку схеми алгоритму, наведеному на рис.1 :

блок 1 – початок (створення шаблону);

блок 2 – уведення x ;

блок 3 – знаходження допоміжної змінної z = cos(x);

блок 4 – перевірка z=0;

блок 5 – якщо ні (z≠0), то виконання у = sin(x)/z ;

блок 6 – вивід y;

блок 9 – якщо да (z=0), то вивід НР (немає рішення);

блок 7 – перевірка умови продовжувати чи ні

– якщо да, то передача управління до блоку 2;

блок 8 - якщо ні, то зупинка –завершення задачі.

Мова С/C++ - це мова функцій і завжди виконання програми починається з головної функції main(). Для вказаних номерів блоків в таблиці 5 приведені прийняті тексти операторів.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]