Классификация языков программирования

Содержание

Слайд 2

Разделы курса Основы объектно-ориентированного программирования и язык С++ Основы Web-технологий Основы

Разделы курса

Основы объектно-ориентированного программирования и язык С++
Основы Web-технологий
Основы конструирования баз данных
10

лекций
17 лабораторных работ
Слайд 3

Литература Современные методы программирования на языках C и C++ / Л.Б.

Литература

Современные методы программирования на языках 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,

Язык программирования Си

Создан в начале 1970х годов
Стандарты ISO: 1990, 1999, 2011.
Процедурный

язык общего назначения, используется для системного программирования.
Достоинства: простота, лаконичность, встроенные типы данных, создание типов данных пользователем (структуры)
Недостатки: отсутствует автоматическое управление памятью
Слайд 6

Структуры в Си 1. Объявление типа структуры 2. Объявление структурной переменной

Структуры в Си

1. Объявление типа структуры
2. Объявление структурной переменной
Объявление типа (тег

структуры Person):
struct Person
{
char Name[30]; /*поле структуры*/
int Year; /*поле структуры*/
} ;
Объявление переменной (Nick):
struct Person Nick;
Слайд 7

Объявление синонима типа для структуры typedef struct Person { char Name[30];

Объявление синонима типа для структуры

typedef struct Person
{
char Name[30];
int

Year;
} PERSON;
PERSON Ann;
Слайд 8

Анонимный тип структуры struct { char Name[30]; int Year; } Tom;

Анонимный тип структуры

struct
{
char Name[30];
int Year;
} Tom;
Tom — имя перемной

структурного типа
Выделено памяти: 30 + 4 = 34 (байта)
Слайд 9

Инициализация структурной переменной struct Person { char Name[30]; int Year; }

Инициализация структурной переменной

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;

Действия над структурами

Использование в выражениях полей структур:
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

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

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
{
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

Передача в функцию массива структур

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;
}
Слайд 15

void input_struct(struct Person* P, int n) { int i; for(i=0; i

void input_struct(struct Person* P, int n)
{
int i;
for(i=0; i{
scanf(''%s'', P[i].Name);
scanf(''%d'',&P[i].Year);
}
}
void 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*

Динамическое распределение памяти в С

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);

Пример создания динамической переменной

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* 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

Еще вариант контроля

#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);

Пример создания строки в динамической памяти

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,

Язык программирования C++

Создан в начале 1980х годов.
Стандарты 1998, 2003, 2011.
Объектно-ориентированный язык

общего назначения.
Имеет код, частично совместимый с Си.
Состоит из ядра и стандартной библиотеки (пространство имен std).
Большое количество сторонних библиотек, расширяющих возможности языка (диалекты С++).
Слайд 23

Особенности C++, отсутствующие в Си Новые стандартные типы данных (bool, string).

Особенности 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++)

Параметры функции

1. Передаются через стек
2. Виды параметров:
Параметр-значение
Параметр-указатель
Параметр-ссылка (в C++)

Слайд 26

Передача параметра-значения float mult(float a) { a = 2*a; return a;

Передача параметра-значения

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

Передача параметра-указателя

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

Передача параметра-ссылки

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 — выделение

Создание динамических переменных в C++

Операторы С++:
1. new — выделение динамической памяти

для одной переменной
2. new[ ] — выделение динамической памяти для массива
2. delete — освобождение динамической памяти из-под переменной (кроме массива)
3. delete[ ] - освобождение динамической памяти из-под массива
Слайд 30

Пример программы с динамической переменной #include using namespace std; int main()

Пример программы с динамической переменной

#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() {

Массив в динамической памяти

#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 (ввод) и

Ввод/вывод в С++

Консольный ввод/вывод — стандартные объекты-потоки cin (ввод) и cout

(вывод):
std::cout << '' '' << std::endl;
std::cin >> a;
Файловый ввод/вывод — классы ifstream и ofstream (подключить fstream), последовательность действий:
создать объект-поток,
открыть его в заданном режиме,
выполнить ввод/вывод данных,
закрыть объект-поток.
Слайд 33

Пример работы с файлом // Чтение из файла std::ifstream fin; fin.open(''my1.txt'');

Пример работы с файлом

// Чтение из файла
std::ifstream fin;
fin.open(''my1.txt'');
if (fin)
fin>>number;
fin.close();
// Запись

в файл
std::ofstream fout;
fout.open(''my2.txt'');
fout <<"Number= "<< number<<"\n";
fout.close();