Слайд 1Информатика. Спецглавы
Направление: Инфокоммуникационные технологии и системы связи
2012 год
Лекция 1
Слайд 2Разделы курса
Основы объектно-ориентированного программирования и язык С++
Основы Web-технологий
Основы конструирования баз
данных
10 лекций
17 лабораторных работ
Слайд 3Литература
Современные методы программирования на языках C и C++ / Л.Б.
Бузюков, О.Б. Петрова. - СПб.: Линк, 2008
WEB-технологии. / Бузюков Л.Б.
- СПб.:СПбГУТ, 2011.
Дополнительно:
Буч Г. - Объектно-ориентированный анализ и проектирование с примерами приложений на C++. М.:БИНОМ, 1998. – 558 с.
Фридман А.Л. – Основы объектно-ориентированной разработки программных систем. М.: финансы и статистика, 2000. – 190 с.
Слайд 4Классификация языков программирования
Машинно-зависимые (машинные коды, ассемблеры)
Машинно-независимые (языки высокого уровня, ЯВУ)
Императивные
(процедурные): Fortran, Cobol, Си, Pascal, Basic
Функциональные: Lisp, Haskell, Erlang
Логические
(декларативные): Prolog, SQL
Объектно-ориентированные: Smalltalk, C++, Objective-C, Java, Object Pascal, Ruby
Слайд 5Язык программирования Си
Создан в начале 1970х годов
Стандарты ISO: 1990, 1999,
2011.
Процедурный язык общего назначения, используется для системного программирования.
Достоинства: простота, лаконичность,
встроенные типы данных, создание типов данных пользователем (структуры)
Недостатки: отсутствует автоматическое управление памятью
Слайд 6Структуры в Си
1. Объявление типа структуры
2. Объявление структурной переменной
Объявление типа
(тег структуры Person):
struct Person
{
char Name[30]; /*поле структуры*/
int Year; /*поле структуры*/
} ;
Объявление переменной (Nick):
struct Person Nick;
Слайд 7Объявление синонима типа для структуры
typedef struct Person
{
char Name[30];
int Year;
} PERSON;
PERSON Ann;
Слайд 8Анонимный тип структуры
struct
{
char Name[30];
int
Year;
} Tom;
Tom — имя перемной структурного типа
Выделено памяти: 30 +
4 = 34 (байта)
Слайд 9Инициализация структурной переменной
struct Person
{
char Name[30];
int Year;
} ;
struct Person Stud1 = {''John'', 1994};
struct Person Stud2
= {''Ann'', 1993};
Слайд 10Обращение к полям структуры
Обращение к полю структуры через имя переменной:
Stud1.Year Stud2.Name
Обращение к полю через указатель:
struct Person* pStud = &Stud1;
printf(''%s %d'', pStud->Name, pStud->Year);
Слайд 11Действия над структурами
Использование в выражениях полей структур:
Stud1.Year =
1992;
int Age = 2011 - Stud1.Year;
strcpy(Stud1.Name,
''Bill'');
printf(''Имя:%s возраст:%d'', Stud1.Name, Age);
Слайд 12Передача в функцию структурной переменной
struct Person
{
char Name[30];
int Year;
} ;
void input_struct(struct
Person* P);
void output_struct(struct Person P);
int main(void)
{
struct Person Ann;
input_struct(&Ann);
output_struct(Ann);
return 0;
}
void input_struct(struct
Person* P)
{
scanf(''%s'', P->Name);
scanf(''%d'',&P->Year);
}
void output_struct(struct Person P)
{
printf(''%s %d\n'', P.Name, P.Year);
}
Слайд 13Массив структур
struct Person
{
char Name[30];
int
Year;
} ;
struct Person Mas[4];
Обращение к полю i-го элемента массива:
Mas[i].Year =
1996;
(Mas + i)->Year = 1993;
Слайд 14Передача в функцию массива структур
struct Person
{
char Name[30];
int Year;
} ;
void input_struct(struct
Person* P, int n);
void output_struct(struct Person* P, int n);
int main(void)
{
struct
Person su11[25];
input_struct(su11, 25);
output_struct(su11, 25);
return 0;
}
Слайд 15void input_struct(struct Person* P, int n)
{
int i;
for(i=0; i
output_struct(struct Person* P, int n)
{
int i;
for(i=0; i
printf(''%s %d\n'', (P+i)->Name, (P+i)->Year);
}
}
Слайд 16Управление памятью программы
Области памяти программы:
Сегмент кода
Статическая память (сегмент данных)
Стек
Динамическая память
(куча)
Слайд 17Динамическое распределение памяти в С
malloc
void* malloc(size_t size);
calloc
void* calloc(size_t num, size_t
size);
realloc
void* realloc(void* ptr, size_t size);
free
void free(void* ptr);
Слайд 18Пример создания динамической переменной
int num, *iPtr ;
iPtr =
malloc(4); /* malloc(sizeof(num)) */
scanf("%d", iPtr);
printf("Number: %d\n", *iPtr);
free(iPtr);
Слайд 19Проверка выделения памяти
double* ptr;
int max = 4;
ptr = (double*) malloc(max
* sizeof (double));
if (ptr == NULL) printf('' Ошибка выделения памяти!'');
else
{
/* вычисления */
free (ptr);
}
Слайд 20Еще вариант контроля
#include
int main (void)
{
double* ptr;
int max = 4;
if
((ptr = (double*) malloc(max * sizeof (double))) == NULL)
{
printf('' Ошибка
выделения памяти!'');
exit (EXIT_FAILURE); /* stdlib.h EXIT_SUCCESS*/
}
// вычисления
free (ptr);
}
Слайд 21Пример создания строки в динамической памяти
char buffer[200]; *stPtr;
scanf("%s",
buffer);
int len = strlen(buffer);
stPtr = malloc(len+1);
strcpy(stPtr, buffer);
printf("String: %s\n",stPtr);
free(stPtr);
stPtr = NULL;
Слайд 22Язык программирования C++
Создан в начале 1980х годов.
Стандарты 1998, 2003, 2011.
Объектно-ориентированный
язык общего назначения.
Имеет код, частично совместимый с Си.
Состоит из ядра
и стандартной библиотеки (пространство имен std).
Большое количество сторонних библиотек, расширяющих возможности языка (диалекты С++).
Слайд 23Особенности C++, отсутствующие в Си
Новые стандартные типы данных (bool, string).
Шаблоны
(templates).
Операторы управления динамической памятью (new, delete).
Ссылки.
Пространства имен (namespace).
Перегрузка функций, операторов.
Обработка
исключительных ситуаций.
Стандартные классы и объекты для организации ввода/вывода (cin, cout).
Слайд 24Пространства имен
ключевое слово
оператор разрешения области видимости
глобальный идентификатор:
идентификатор из пространства имен
стандартной библиотеки С++:
идентификатор из пространства имен пользователя:
предложение uses:
namespace
::
myfn();
std::cout << ''1234'';
myspace::myfn();
uses namespace std;
cout << ''1234'';
Слайд 25Параметры функции
1. Передаются через стек
2. Виды параметров:
Параметр-значение
Параметр-указатель
Параметр-ссылка (в C++)
Слайд 26Передача параметра-значения
float mult(float a)
{
a = 2*a;
return a;
}
int main()
{
float num =
15.5;
printf(''%.3f \n'', mult(num));
printf(''%.3f '', num);
return 0;
}
Ответ:
31.000
15.500
Слайд 27Передача параметра-указателя
void mult2(float* pa)
{
*pa = *pa * 2
}
int main()
{
float num
= 15.5;
mult2(&num);
printf(''%f\n'',num);
return 0;
}
Ответ:
31.000
Слайд 28Передача параметра-ссылки
void mult3(float &b)
{
b = b*2;
}
int main()
{
float num = 15.5;
mult3(num);
printf(''%f\n'',num);
return
0;
}
Ответ:
31.000
Слайд 29Создание динамических переменных в C++
Операторы С++:
1. new — выделение динамической
памяти для одной переменной
2. new[ ] — выделение динамической памяти
для массива
2. delete — освобождение динамической памяти из-под переменной (кроме массива)
3. delete[ ] - освобождение динамической памяти из-под массива
Слайд 30Пример программы с динамической переменной
#include
using namespace std;
int main()
{
float *iptr; // объявление переменной-указателя
iptr = new float;
// выделение динамической памяти
cin >> *iptr; // ввод числа в динамич. переменную
cout << *iptr; // вывод из динамич. переменной
delete iptr; // освобождение памяти
iptr = NULL;
return 0;
}
Слайд 31Массив в динамической памяти
#include
using namespace std;
int main()
{
float
*mptr;
int n = 3, i;
// выделение памяти
mptr = new float[n];
// заполнение массива
for(i=0;i{
cout << "enter->";
cin >> *(mptr+i);
}
// вывод массива
for(i=0;i cout << *(mptr+i)<// освобождение памяти
delete[ ] mptr;
mptr = NULL;
return 0;
}
Слайд 32Ввод/вывод в С++
Консольный ввод/вывод — стандартные объекты-потоки cin (ввод) и
cout (вывод):
std::cout a;
Файловый ввод/вывод
— классы ifstream и ofstream (подключить fstream), последовательность действий:
создать объект-поток,
открыть его в заданном режиме,
выполнить ввод/вывод данных,
закрыть объект-поток.
Слайд 33Пример работы с файлом
// Чтение из файла
std::ifstream fin;
fin.open(''my1.txt'');
if (fin)
fin>>number;
fin.close();
// Запись в файл
std::ofstream fout;
fout.open(''my2.txt'');
fout
Слайд 34Тип string
#include
int main(int argc, char** argv)
{
std::string st1("My
"), st2="string", st3;
st3 = st1+st2;
int i;
for(i=0;i std::cout << st3[i] < return 0;
}