Тема 1. Типы данных, адресация
Классификация типов данных
Целые типы данных
Вещественные типы данных
Адресация. Архитектура компьютера
Адресация. Процессор и память
Адресация. Адресное пространство
Адресация. Образ задачи
Адресация. Переменные. Указатели
Структуры
Оптимальное размещение данных в структурах
Объединения
Массивы
Динамическое выделение памяти под массивы
Символы, строки. Кодирование символов
Символы, строки
Операции со строками
Тема 2. Переменные, управление памятью
Программирование. Задачи
Программирование. Языки
Программирование. Компиляция и построение задачи
Размещение переменных в памяти
Файл образа задачи
Выполнение задачи
Тема 3. Препроцессор, функции
Препроцессор
Директивы препроцессора
Включение при компиляции кода из других файлов
Определение символических имен
Стандартные имена компилятора
Макросы
Пример использования макроса
Условная трансляция
Пример использования условной трансляции
Функции
Декларация функции
Параметры функции по умолчанию
Передача параметров в функцию
Функции с переменным числом параметров
Рекурсивный вызов функции
Затраты на вызов функции
Сравнение макросов и функций
Тема 4. Управление выполнением программы
Операторы управления выполнением программы
Оператор безусловного перехода
Оператор условного перехода if
Примеры оператора if
Оператор условного перехода switch
Пример оператора switch
Оператор цикла while
Пример оператора while
Оператор цикла for
Пример оператора for
Оператор цикла do
Операторы break, continue и return
552.00K
Category: programmingprogramming

Типы данных, адресация. Введение. Тема 1

1.

Санкт-Петербургский государственный электротехнический университет «ЛЭТИ»
Факультет электротехники и автоматики
Программирование
и
основы алгоритмизации
Шевченко Алексей Владимирович
Кафедра РАПС
Санкт-Петербург, 2010 г.

2. Тема 1. Типы данных, адресация

Программирование и основы алгоритмизации
char
double
Тема 1. Типы данных, адресация
long*
short
Шевченко А. В.
Тема 1. Типы данных, адресация
1

3. Классификация типов данных

Программирование и основы алгоритмизации
Классификация типов данных
Типы данных
Простые
Целые
Вещественные
Составные
Структуры
Объединения
Массивы
Шевченко А. В.
Тема 1. Типы данных, адресация
2

4. Целые типы данных

Программирование и основы алгоритмизации
Целые типы данных
7
1
0
0
1
1
1
1
1
1
1
1
1
1
1
1
1 unsigned char
1 char
Знаковый разряд (0 = +, 1 = -)
Тип
11111111 = 255
00000000 = 0
Размер
01111111
00000000
11111111
10000000
=
=
=
=
127
0
-1
-128
Диапазон
char
1
-128 … 127
unsigned char
1
0 … 255
short
2
-32768 … 32767
unsigned short
2
0 … 65535
long
4
-231 … 231-1
unsigned long
4
0 … 232-1
int - зависит от платформы
Шевченко А. В.
Тема 1. Типы данных, адресация
3

5. Вещественные типы данных

Программирование и основы алгоритмизации
Вещественные типы данных
float
15
0
0
0
0
0
0
0
1
мантисса
1 1 1 0
31
0
0
1
1
1
0
0
0
0
0
0
0
0
0
0
16
0
порядок
Знаковый разряд (0 = +, 1 = -)
0
0
0
0
0
мантисса
Число = (1+мантисса)*2(порядок-127)
Тип
Размер
Диапазон
Точность
float
double
long double
4
8
10
3.4*10-38 … 3.4*1038
1.7*10-308 … 1.7*10308
3.4*10-4932 … 3.4*104932
7
15
19
Шевченко А. В.
Тема 1. Типы данных, адресация
4

6. Адресация. Архитектура компьютера

Программирование и основы алгоритмизации
Адресация. Архитектура компьютера
Шевченко А. В.
Центральная часть
Периферийные
устройства
Процессор
Устройства вводавывода
Оперативная
память
Диски Ленты ...
Тема 1. Типы данных, адресация
5

7. Адресация. Процессор и память

Программирование и основы алгоритмизации
Адресация. Процессор и память
Оперативная память
Регистр

Регистр
00000004
адрес
Процессор
Регистр
00000003
АЛУ
Регистр
00000002
00000001
Программный счетчик
00000000
Указатель стека
Архитектура процессора: разрядность, система команд
Шевченко А. В.
Тема 1. Типы данных, адресация
5

8. Адресация. Адресное пространство

Программирование и основы алгоритмизации
Адресация. Адресное пространство
Оперативная память
Процессор
Регистр
команды
Регистр
АЛУ
Регистр

00000004
PC - программный счетчик
00000003
00000002
Регистр
SP - указатель стека
данные
00000001
Адресное пространство:
16 бит = 64К, 32 бита = 4М
00000000
Шевченко А. В.
Тема 1. Типы данных, адресация
6

9. Адресация. Образ задачи

Программирование и основы алгоритмизации
Адресация. Образ задачи
Виртуальное адресное
пространство
Образ задачи
Данные
Код

Стек
00000004
Регистры
00000003
00000002
00000001
00000000
Шевченко А. В.
Образ задачи создается
компилятором и построителем в
виртуальном адресном
пространстве
Тема 1. Типы данных, адресация
7

10. Адресация. Переменные. Указатели

Программирование и основы алгоритмизации
Адресация. Переменные. Указатели
Виртуальное адресное
пространство
Текст программы
short a;
unsigned char b = 3;
short *p = &a;
...
a = 5;
*p = 5;

00000007
00000006
p
00000005
00000004
00000003
00000002
00000001
00000000
Шевченко А. В.
b
a
Компилятор размещает переменные
и присваивает адреса:
адрес а = 00000000
адрес b = 00000002
адрес р = 00000004
содержимое а = ? / 5
содержимое b = 3
содержимое р = 0
Тема 1. Типы данных, адресация
7

11. Структуры

Программирование и основы алгоритмизации
Структуры
Текст программы
A
a
b
c
typedef struct
{
short a;
float b;
char c;
} A;

A a1, a2;
a1.a = -23456;
a1.b = 1234.56;
a1.c = 8;
sizeof(A) = 12
a1
a
b
c
b
c
a2
a
Оператор typedef создает новый тип
данных. В структурах компилятор
применяет выравнивание
Шевченко А. В.
Тема 1. Типы данных, адресация
8

12. Оптимальное размещение данных в структурах

Программирование и основы алгоритмизации
Оптимальное размещение данных в структурах
Текст программы
A1
a
b
c
sizeof(A1) = 12
A2
a
c
b
sizeof(A2) = 8
Шевченко А. В.
Тема 1. Типы данных, адресация
typedef struct
{
short a;
float b;
char c;
} A1;

typedef struct
{
short a;
char c;
float b;
} A2;
8

13. Объединения

Программирование и основы алгоритмизации
Объединения
Текст программы
B
a
b
c
sizeof(B) = 4
b1
a,b,c
b2
a,b,c
typedef union
{
short a;
float b;
char c;
} B;

B b1, b2;
b1.a = -23456;
b1.b = 1234.56;
b1.c = 8;
В объединениях поля данных
перекрываются. Размер равен
самому большому полю
Шевченко А. В.
Тема 1. Типы данных, адресация
10

14. Массивы

Программирование и основы алгоритмизации
Массивы
Текст программы
a
a[0]
a[1]
a[2]
int a[4];

int *b = a;

(a[2] == b[2]) //true
a[3]
sizeof(a) = 16
Имя массива эквивалентно адресу
первого элемента массива
Шевченко А. В.
Тема 1. Типы данных, адресация
11

15. Динамическое выделение памяти под массивы

Программирование и основы алгоритмизации
Динамическое выделение памяти под массивы
Текст программы
a
int *a = new int[40];

a[12] = 5;
a[39] = 8;
a[40] = … ОПАСНО!!!

delete[] a;
a[0]
a[1]
a[2]
...
Динамическая
память
a[39]
Имя массива эквивалентно адресу
первого элемента массива
Шевченко А. В.
Тема 1. Типы данных, адресация
12

16. Символы, строки. Кодирование символов

Программирование и основы алгоритмизации
Символы, строки. Кодирование символов
Шевченко А. В.
Тема 1. Типы данных, адресация
13

17. Символы, строки

Программирование и основы алгоритмизации
Символы, строки
Текст программы
a
210
Т
229
е
234
к
241
с
242
т
char a[8];
a[0] = ’T’;
a[1] = ’e’;
a[2] = ’к’;
a[3] = ’с’;
a[4] = ’т’;
a[5] = 0;
...
strcpy(a, ”Текст”);
0
?
?
В языках С и С++ строки
заканчиваются нулевым байтом
Шевченко А. В.
Тема 1. Типы данных, адресация
14

18. Операции со строками

Программирование и основы алгоритмизации
Операции со строками
Текст программы
char a[8];
// выделение памяти
char *b = ”Текст”;
// строковая константа
strcpy(a, b);
// копирование строк
int len = strlen(a);
// длина строки
int cmp = strcmp(a, b);
// сравнение строк
char* s = strсhr(a, ’т’);
// поиск символа
char* s = strstr(a, ”кс”); // поиск подстроки
Шевченко А. В.
Тема 1. Типы данных, адресация
15

19. Тема 2. Переменные, управление памятью

Программирование и основы алгоритмизации
double a;
char
b[64];
Тема 2. Переменные, управление
памятью
long* c = new long(48);
Шевченко А. В.
Тема 2. Переменные, управление памятью
1

20. Программирование. Задачи

Программирование и основы алгоритмизации
Программирование. Задачи
Программное обеспечение
Аппаратное обеспечение
Оперативная память
команды
Процессор
Регистр
Регистр

Регистр
00000004
Регистр
АЛУ
00000003
00000002
данные
00000001
PC - программный счетчик
SP - указатель стека
00000000
Шевченко А. В.
Тема 2. Переменные, управление памятью
2

21. Программирование. Языки

Программирование и основы алгоритмизации
Программирование. Языки
Языки программирования
Низкого уровня
Высокого уровня
Компиляция
Интерпретация
Ассемблер
Процедурные
Алгол, Кобол,
Фортран, ПЛ/1,
С, Паскаль
Непроцедурные
Шевченко А. В.
Тема 2. Переменные, управление памятью
Бэйсик
Пролог
3

22. Программирование. Компиляция и построение задачи

Программирование и основы алгоритмизации
Программирование. Компиляция и построение задачи
Виртуальное адресное
пространство
Текст программы
Компилятор
int a = 5;
int main()
{
int b = a/5;
int c = f(b);
}
Образ задачи

Данные
int f(int a)
{
return(abs(a));
}
Шевченко А. В.
Тема 2. Переменные, управление памятью
0x00000004
0x00000003
Код
0x00000002
0x00000001
0x00000000
4

23. Размещение переменных в памяти

Программирование и основы алгоритмизации
Размещение переменных в памяти
Виртуальное адресное
пространство задачи
Текст программы
int A;
Динамическая
память (Heap)
int B = 999;
Неинициализированные данные
void f()
{
Инициализированные данные
int C;
int *D = new int[8];
Код
0x00400000
Стек
*D = A+B+C;
Управляющие
структуры
...
}
Шевченко А. В.
0x00800000
Тема 2. Переменные, управление памятью
0x00000000
5

24. Файл образа задачи

Программирование и основы алгоритмизации
Файл образа задачи
Виртуальное адресное
пространство задачи
Динамическая
память (Heap)
Файл образа задачи (.exe)
0x00800000
Данные
Неинициализированные данные (BSS)
Инициализированные
данные
Код
Код
Управляющие
структуры
0x00400000
Заголовок
Стек
Управляющие
структуры
Шевченко А. В.
0x00000000
Тема 2. Переменные, управление памятью
6

25. Выполнение задачи

Программирование и основы алгоритмизации
Выполнение задачи
Файл образа задачи (.exe)
Данные
Оперативная память
Загрузка
Код
Динамическая
память (Heap)
0x00800000
Неинициализированные данные (BSS)
Управляющие
структуры
Инициализированные
данные
Процессор
Регистр
Регистр
Регистр
Регистр
Точка входа
Код
0x00400000
АЛУ
PC - программный счетчик
SP - указатель стека
Шевченко А. В.
Стек
Управляющие
структуры
Тема 2. Переменные, управление памятью
0x00000000
6

26. Тема 3. Препроцессор, функции

Программирование и основы алгоритмизации
#define
MAXCOUNT
100
Тема 3. Препроцессор, функции
void f(int a, int b);
Шевченко А. В.
Тема 3. Препроцессор, функции
1

27. Препроцессор

Программирование и основы алгоритмизации
Препроцессор
Текст программы
Препроцессор
#define MAX 200
int data[MAX];
int main()
{
for(int i = 0; i < MAX; i++)
data[i] = ...
}
Шевченко А. В.
Тема 3. Препроцессор, функции
Компилятор
2

28. Директивы препроцессора

Программирование и основы алгоритмизации
Директивы препроцессора
Текст программы
#define MAX 200
Директивы
препроцессора
начинаются с
символа #
#define GETINT(var, edit) \
var = StrToInt(edit->Text)
#ifdef DEBUG
ShowMessage(”Точка 1”);
#endif
Шевченко А. В.
Тема 3. Препроцессор, функции
3

29. Включение при компиляции кода из других файлов

Программирование и основы алгоритмизации
Включение при компиляции кода из других файлов
Текст программы
Файл file1.h
#include ”file1.h”
#include <file2.h>
Файл file2.h
Шевченко А. В.
Тема 3. Препроцессор, функции
4

30. Определение символических имен

Программирование и основы алгоритмизации
Определение символических имен
Текст программы 1
#define MAX 200
...
int data[MAX];
for(int i = 0; i < MAX; i++)
data[i] = 0;
Текст программы 2
#define Red
0x0000FF
#define Green 0x00FF00
#define Blue
0xFF0000
...
Edit->Color = Red;
Шевченко А. В.
Тема 3. Препроцессор, функции
5

31. Стандартные имена компилятора

Программирование и основы алгоритмизации
Стандартные имена компилятора
Текст программы
__cplusplus
Определено, если компилируется код С++.
__DATE__
Дата начала компиляции текущего файла.
__FILE__
Имя текущего файла.
__FUNC__
Имя текущей функции.
__LINE__
Номер текущей строки.
__STDC__
Определено, если применяется стандарт ANSI.
__TIME__
Время начала компиляции текущего файла.
Шевченко А. В.
Тема 3. Препроцессор, функции
6

32. Макросы

Программирование и основы алгоритмизации
Макросы
Текст программы
#define GETINT(var, edit) \
var = StrToInt(edit->Text)
...
int rows;
int cols;
...
GETINT(rows, RowsEdit);
GETINT(cols, ColsEdit);
rows = StrToInt(RowsEdit->Text);
cols = StrToInt(ColsEdit->Text);
Шевченко А. В.
Тема 3. Препроцессор, функции
7

33. Пример использования макроса

Программирование и основы алгоритмизации
Пример использования макроса
Текст программы 1
#define square(a, b) (a*b)
...
int s = square(3+1, 5+1);
x = 9
Текст программы 2
#define square(a, b) ((a)*(b))
...
int s = square(3+1, 5+1);
x = 24
Шевченко А. В.
Тема 3. Препроцессор, функции
8

34. Условная трансляция

Программирование и основы алгоритмизации
Условная трансляция
Текст программы
#define DEBUG
#define TRACE
...
long password;
#ifdef DEBUG
#ifdef TRACE
ShowMessage(”Точка 1”);
#endif
password = 1;
#else
GetPassword(password);
#endif
Шевченко А. В.
Тема 3. Препроцессор, функции
9

35. Пример использования условной трансляции

Программирование и основы алгоритмизации
Пример использования условной трансляции
Текст заголовка form1.h
Текст заголовка lib.h
#ifndef LIB
#define LIB
...
...
...
#endif
#include <lib.h>
...
Текст заголовка form2.h
#include <lib.h>
...
Текст программы prog.cpp
#include <form1.h>
#include <form2.h>
...
Шевченко А. В.
Тема 3. Препроцессор, функции
10

36. Функции

Программирование и основы алгоритмизации
Функции
Текст заголовка lib.h
Текст программы prog.cpp
int abs(int val);
Текст программы lib.cpp
int abs(int val)
{
if(val < 0)
val = -val;
return(val);
}
Декларация (прототип функции)
#include <lib.h>
...
int a = abs(b);
...
int c = a+abs(d);
Реализация (тело функции)
Шевченко А. В.
Тема 3. Препроцессор, функции
Вызов
11

37. Декларация функции

Программирование и основы алгоритмизации
Декларация функции
Текст заголовка
double square(double length, double width);
Список
параметров
Тип функции
Имя функции
Тип параметра
Имя параметра
void func(int a, int b);
Функция не возвращает значения
Шевченко А. В.
Тема 3. Препроцессор, функции
12

38. Параметры функции по умолчанию

Программирование и основы алгоритмизации
Параметры функции по умолчанию
Текст заголовка
int func(int a, int b = 3, int c = 5);
Значение параметра по умолчанию
Текст программы
int func(int a, int b, int c) { return(a+b+c); }
int
int
int
int
x
x
x
x
Шевченко А. В.
=
=
=
=
func(7, 5, 2);
func(7, 5);
func(7);
func(); Ошибка!
Тема 3. Препроцессор, функции
x = 14
x = 17
x = 15
13

39. Передача параметров в функцию

Программирование и основы алгоритмизации
Передача параметров в функцию
Текст программы 1
Текст программы 2
void func(int a, int b)
{
a += b;
}
По значению
void func(int &a, int &b)
{
a += b;
}
По ссылке
...
...
int x = 5;
int y = 3;
func(x, y);
int x = 5;
int y = 3;
func(x, y);
x = 5
Шевченко А. В.
x = 8
Тема 3. Препроцессор, функции
14

40. Функции с переменным числом параметров

Программирование и основы алгоритмизации
Функции с переменным числом параметров
Текст программы
int sprintf(char *buffer, const char *format, ...);
{
...
Последний фиксированный
va_list args;
параметр
va_start(args, format);
for(int i = 0; i < narg; i++)
{
int* par = va_arg(args, int*);
...
}
Получение следующего
параметра
va_end(args);
}
Шевченко А. В.
Тема 3. Препроцессор, функции
15

41. Рекурсивный вызов функции

Программирование и основы алгоритмизации
Рекурсивный вызов функции
Текст программы
double factorial(double N)
{
return(N == 1 ? 1 : N*factorial(N-1));
}
...
ShowMessage(factorial(170));
Шевченко А. В.
Тема 3. Препроцессор, функции
16

42. Затраты на вызов функции

Программирование и основы алгоритмизации
Затраты на вызов функции
Текст программы
...
Стек
int a = 5;
int b = 4;
int c = square(a, b);
...
Шевченко А. В.
Параметры,
точка возврата,
сохраняемые регистры
Тема 3. Препроцессор, функции
0х00000005
0х00000004
0х00402768
0х0001238С
17

43. Сравнение макросов и функций

Программирование и основы алгоритмизации
Сравнение макросов и функций
Макросы
Функции
Быстрота выполнения
Дополнительные затраты
времени
Большие затраты памяти
Экономия памяти
Нет контроля типов
параметров
Контроль типов параметров
inline - функции, шаблоны
Шевченко А. В.
Тема 3. Препроцессор, функции
18

44. Тема 4. Управление выполнением программы

Программирование и основы алгоритмизации
for(int i = 0; i < N; i++)
Тема 4. Управление выполнением
программы
try {...} catch(...) {...}
Шевченко А. В.
Тема 4. Управление выполнением программы
1

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

Программирование и основы алгоритмизации
Операторы управления выполнением программы
Операторы управления
выполнением программы
Оператор
безусловного
перехода
Обработка
исключительных
ситуаций
Операторы
условного перехода
Шевченко А. В.
Операторы цикла
Тема 4. Управление выполнением программы
2

46. Оператор безусловного перехода

Программирование и основы алгоритмизации
Оператор безусловного перехода
Текст программы
...
a = b+c;
goto label;
...
label:
d = e-a;
...
Шевченко А. В.
Тема 4. Управление выполнением программы
3

47. Оператор условного перехода if

Программирование и основы алгоритмизации
Оператор условного перехода if
Текст программы
if(a < b)
{
...
}
else
{
...
}
Выражение:
- логическое (true, false),
- арифметическое (не 0 = true,
0 = false)
Блок «true»
Блок «false»
Шевченко А. В.
Тема 4. Управление выполнением программы
4

48. Примеры оператора if

Программирование и основы алгоритмизации
Примеры оператора if
Текст программы
if(a < b)
a = b;
if(a < b)
a = b;
else
a = c;
Шевченко А. В.
Текст программы
if(a < b)
{
a = b;
c = b-d;
}
else
{
a = c;
d--;
}
Тема 4. Управление выполнением программы
Текст программы
if(a
a
else
if(a
a
else
if(a
a
else
a
< b)
= b;
< c)
= c;
< d)
= d;
= 0;
5

49. Оператор условного перехода switch

Программирование и основы алгоритмизации
Оператор условного перехода switch
Текст программы
switch(a)
{
case CONST1:
...
break;
case CONST2:
...
break;
default:
...
}
Выражение
Блок «CONST1»
Блок «CONST2»
Блок «по умолчанию»
Шевченко А. В.
Тема 4. Управление выполнением программы
6

50. Пример оператора switch

Программирование и основы алгоритмизации
Пример оператора switch
Текст программы
char* text;
switch(note)
{
case 5: text = "Отлично";
case 4: text = "Хорошо";
case 3: text = "Удовлетворительно";
case 2: text = "Неудовлетворительно";
default:
text = "Ошибка";
}
Шевченко А. В.
Тема 4. Управление выполнением программы
break;
break;
break;
break;
7

51. Оператор цикла while

Программирование и основы алгоритмизации
Оператор цикла while
Текст программы
while(a > b)
{
...
}
Выражение
Тело цикла
Шевченко А. В.
Тема 4. Управление выполнением программы
8

52. Пример оператора while

Программирование и основы алгоритмизации
Пример оператора while
Текст программы
int a = 10;
while(a--)
{
ShowMessage("Сколько можно повторять!");
}
Шевченко А. В.
Тема 4. Управление выполнением программы
9

53. Оператор цикла for

Программирование и основы алгоритмизации
Оператор цикла for
Текст программы
Выражение,
определяющее
продолжение
Инициация
for(int i = 0; i < N; i++)
{
...
}
Выражение,
выполняемое
после тела цикла
Тело цикла
Шевченко А. В.
Тема 4. Управление выполнением программы
10

54. Пример оператора for

Программирование и основы алгоритмизации
Пример оператора for
Текст программы
int factorial(int N)
{
int f = 1;
for(int i = 1; i <= N; i++)
f *= i;
return(f);
}
Шевченко А. В.
Тема 4. Управление выполнением программы
11

55. Оператор цикла do

Программирование и основы алгоритмизации
Оператор цикла do
Текст программы
do
{
...
}
while(a < b)
Шевченко А. В.
Тело цикла
Выражение,
определяющее
продолжение
Тема 4. Управление выполнением программы
12

56. Операторы break, continue и return

Программирование и основы алгоритмизации
Операторы break, continue и return
Текст программы
while(true)
{
...
Переход к концу
цикла
if(...) continue;
...
Выход из цикла
if(...) break;
...
Выход из функции
if(...) return;
}
Шевченко А. В.
Тема 4. Управление выполнением программы
13
English     Русский Rules