Similar presentations:
Типы данных, адресация. Введение. Тема 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