Лекции 1 семестр матанализ. лекции 1 семестр (1). Литература Герберт. Шилдт. С руководство для начинающих
Скачать 1.38 Mb.
|
КУРС ЛЕКЦИЙ ПО ЯЗЫКУ ПРОГРАММИРОВАНИЯ C++ Первый семестр Литература Герберт. Шилдт. С++ руководство для начинающих Т.А. Павловская. С/С++ Программирование на языке высокого уровня Никлаус Вирт. Алгоритмы и структуры данных Т.А. Павловская, Ю.А. Щупак С/C++ Структурное программирование. Практикум В.В. Лаптев , А.В. Морозов , А.В.Бокова. С++ объектно-ориентированное программирование. Задачи и упражнения Н. Культин . С/С++ в задачах и примерах Л.З. Шауцукова. Информатика 10-11 Методическая литература 1. В.С. Кугураков, Р.К. Самитов, В.В. Кугуракова Практикум на ЭВМ. Методические указанияи задачи для программирования по теме : Основные структуры управления 2. В.С. Кугураков, Р.К. Самитов, В.В. Кугуракова Практикум на ЭВМ. Методические указанияи задачи для программирования \ по теме : Циклическая структура управления. Массив как стуктура данных 3. В.С. Кугураков, Р.К. Самитов, Р.Б. Ахтямов, В.Р. Байрашева Практикум работы на ЭВМ. Задание 1. Структуры управления и массивы – числовые задачи 4. В.С. Кугураков, Р.К. Самитов, Р.Б. Ахтямов, В.Р. Байрашева Практикум работы на ЭВМ. Задание 2. Процедуры и функции 5. В.С. Кугураков, Р.К. Самитов, Р.Б. Ахтямов, В.Р. Байрашева Практикум работы на ЭВМ. Задание 3. Представление данных и методы разработки алгоритмов 6. В.С. Кугураков, Р.К. Самитов, Р.Б. Ахтямов, В.Р. Байрашева Практикум работы на ЭВМ. Задание 4. Синтаксический анализ простых формальных языков Лекция№1 Введение в C++ Вычисление объема конуса Формула:1/3*π*R2*h π =pi=3.14 определяется как константа Листинг программы #include using namespace std; const double pi=3.14; imt main() //основная функция { double V, h, R; // объявление переменных cout<<"Enter R= "; //просьба ввести радиус конуса cin>>R; //ввод данных cout<<"Enter h= "; //просьба ввести высоту конуса cin>>h; //ввод данных V=R*R*h*pi/3;// оператор присваивания сout<<<<"Enter V= " < return 0; } Рассмотрим каждую строчку отдельно. #include В языке С++ определены ряд заголовочных файлов , которые содержат информацию , необходимую для программы. В данном случае #include h файл с именем iostream в исходный текст программы. Файл iostream используется для поддержки С++ системы ввода и вывода. В данном случае компилятору необходимо знать описание объектов cin и cout const double pi=3.14; Объявление вещественной константы pi 3/ int main() int – тип функции ( функция возвращает целые значения ) main- имя функции. Выполнение С++- программы начинается и заканчивается выполнением функции main() 4. { Фигурная открывающая скобка { - начало блока Блок { операторы } double V, h, R; Объявление вещественных переменных cout<<”Enter R= ”; Это инструкция вывода символьной константы <<”Enter R= ” на консоль. При выполнении этой инструкции на экране компьютера появится сообщение Enter R=. В этой инструкции используется оператор вывода < Он обеспечивает вывод выражения, стоящего с правой стороны , на устройство, стоящего с левой. Слово cout представляет собой встроенный идентификатор ( consol output ), который означает экран компьютера. cin>>R; cin – встроенный идентификатор, в данном случае он связан с клавиатурой. >> - оператор ввода в С++ Иденитификатор R принимает символы , вводимые с клавиатуры. V=R*R*h*pi/3 Это выражение представляет собой оператор присваивания. Вычисляется выражение R*R*h*pi/3 и его значение устанавливается для переменной V (говорят , что переменной V присваивается значение вырыжения R*R*h*pi/3) } Закрывающая фигурная скобка } означает конец блока. Примечание : все инструкции долдны завершаться символом ; Типичная среда разработки С++ Давайте разберем, поэтапно, создание и исполнение приложения С++ в типичной среде разработки С++. Системы С++ обычно состоит из трех частей: среды разработки, языка и Стандартой библиотеки С++. Инструменты среды обработки C++ - Borland C++ Builder, - Microsoft Visual Studia C++ 6 - Microsoft Visual Studia 2010 Express - Microsoft Visual C++ .NET ( работают под операционной системой Windows) - GNU C++ в Linux (общее название Unix – подобных операционных систем) Программы на С++ проходят шесть стадий: редактирования препроцессорной обработки компиляции компоновки загрузки исполнения Типичная среда 1. Программа создается редактором и сохраняется на диске Редактор ↔Диск 2. Программа предварительно обрабатывается. Преобразование кода Препроцессор↔ Диск 3. Объектный код и сохранение его на диске Компилятор↔ Диск 4. Компоновщик связывает объектный код с библиотеками (редактор связи) Компоновщик↔Диск 5. Загрузчик создает исполняющий файл и сохраняет на диске. Размещение программы в памяти Загрузчик↔ Диск ↕ ОЗУ 6. Процессор выбирает каждую инструкцию и выполняет ее, возможно сохраняя новые значения. Процессор↔ ОЗУ Стадия 1. Создание программ Первая стадия состоит в редактировании файла с помощью программ редактора. С помощью редактора вы вводите программу на С++ ( которую обычно называют исходным кодом) вносите необходимые исправления и сохраняете программу на вторичном запоминающем устройсте , например ,на жестком диске. Файлы исходного кода С++ часто имеют расширение .cpp, .cxx, .C , показывающие, что файл содержит исходный код С++ Стадия 2. Препроцессорная обработка программы На второй стадии программист дает команду скомпилировать программу. В системе С++ перед началом компиляции автоматически исполняется программа- препроцессорю. Препроцессор С++ распознает команды , называемые препроцессорными директивами, которые указывают , что над программой перед компиляцией должны быть произведены определенные манипуляции. Эти манипуляции состоят обычно во включении в компиляцию других текстовых файлов и различных текстовых заменах. Стадия 3. Компиляция программы На третьей стадии компилятор транслирует программу на С++ в код машинного языка ( называемый также объектным кодом ) Стадия 4. Компоновка. Четвертая стадия называется компоновкой (linking). Программы С++ обычно содержат ссылки на функции и данные , определяемые в другом месте (или проект содержит несколько cpp файлов) , например , в библиотеках или частных библиотеках группы программистов, работающих над конкретным проектом. Из-за отсутствия этих частей в программах С++ имеются “дыры”. Компоновщик (linker) присоединяет к объектному коду код отсутствующих функций, чтобы создать исполняемый образ. Если программа успешно компилируется и компонуется , образуется исполняемый файл. Стадия 5. Загрузка Для того чтобы программа смогла исполняться , необходимо поместить ее в память. Это выполняется программой загрузчиком Стадия 6. Исполнение Наконец , компьютер под управлением центрального процессора, исполняет программу одиночными инструкциями. Переменные Тип Диапазон Размер bool true 1; false 0 1байт char signed -128 до 127 1байт unsigned 0 до 255 1 байт Int signed mod 232-1 4 байтa unsigned 0 до 4 294 967 295 4 байтa Double 3.4e-308-1.7e+308 8 байов Лекция№2 Алгебра логики Bool a,y,z True-истина False-ложь Операции Конъюнкция &&- *, ^.& -and Дизъюнкция ||-v-or Отрицание !- ⌐X-not
Правило де Моргана ⌐XvY= ⌐X&⌐Y ⌐ X&Y= ⌐Xv ⌐Y
X&(Y v Z)=X&Y v X&Z X v (Y&Z) =(X v Y) & (X v Z) X v ⌐X =1 X & ⌐X =0 Импликация Из X следует Y
Пересечение X ^ Y Объединение X v Y Пример D=D1^D1^D2^D3^D4 (X,Y) € D →((X,Y) € D1)& ((X,Y) € D2)& ((X,Y) € D3)& ((X,Y) € D4) На языке С (X,Y) € D →(Y>=X-1)&& (Y<=X+1)& & (Y<= -X+1)&& (Y >= -X-1) D=D1vD1vD2vD3vD4 (X,Y) € D→(Y>=X-1) || (Y<=X+1)|| (Y<= -X+1)|| (Y >= -X-1) A € X\Y=X ^ ⌐Y X\Y c X ^ ⌐Y X ^ ⌐Y c X\Y Доказательство: p € X\Y=(p € X)&(p € ⌐Y )= p € X ^ ⌐Y p € X ^ ⌐Y= (p € X)&(p € ⌐Y )= p € X\Y D1\D2 (X,Y) € D1\D2 =(X,Y) € D1^⌐ D2 ((X,Y) € D1)&&((X,Y) € ⌐ D2)↔ ((X,Y) € D1)&&!(( X,Y) € D2) Лекция№3 Операторы Условный оператор Полный If ( B) C1; else C2; если условие В истинно, то выполнится действие C1; если условие В ложно, то выполнится действие C2; Неполный If ( B) C1; Блочный оператор if (B) {c1;c2;} else c3; *{c1;c2;}-блок операторов Примеры 1)Вычисление max x, y max=max{x, y} if (x else max=x; max=max{x, y, z} 1) if (x if (y else max=y; else if (x else max=x; 2) max=x; if (max if (max 3) if (1) {if (2) 1;} else 2; 4) if (1) if (2) 1; else 2; 5) if (1) { 1; if (2) {2;3;} else {4;5;} 6; } else { if (3) { if (4) {3;4;} } else 9; 10; } 6) Решение квадратного уравнения ax2+bx+c=0 #include "stdafx.h" # include # include using namespace std; int main() { double a ,b, c; double x, d, x1, x2; cout<<"Enter a="; cin>>a; cout<<"Enter b="; cin>>b; cout<<"Enter c="; cin>>c; if (a==0) { if (b==0) { if (c==0) cout<<"x-any number"< else cout<<"no solution"< } else { x= -c/b; cout<<"x="< } } else { d=b*b-4*a*c; if (d>=0) { x1=( -b+ sqrt(d))/(2*a); x2= (-b- sqrt(d))/(2*a); cout<<"x1="< cout<<"x2="< else cout<<"no solution"< } cout< system("pause"); return 0; } Примечание Возведение в степень b2=pow(b,2) Нельзя объявлять переменную два раза в одном и том же блоке int main() { int i; i=5; { int i; i=10; cout< } cout< system("pause"); return 0; } Лекция №4 Системы счисления Циклы Десятичная 0,1,2,3,4,5,6,7,8,9 904=9*102+0*10+4*100 Двоичная 0,1 1012=1*22+0*2+1*20=510 Троичная 0,1,2 1013=1*32+0*3+1*30=1010 Шестнадцатеричная 0,1,2,3,4,5,6,7,8,9,A, B, C, D ABBA16=10*163+11*162+11*16+10*160=40960+2816+176+10=4396210 Перевод вещественных чисел из одной системы в другую 904,90410=1110001000,1112 Перевод целой части 904/2=452 остаток 0 452/2=226 остаток 0 226/2=113 остаток 0 113/2=56 остаток 1 56/2=28 остаток 0 28/2=14 остаток 0 14/2=7 остаток 0 7/2=3 остаток 1 3/2=1 остаток 1 Перевод дробной части 0,904*2=1,808 0,808*2=1,616 0,616*2=1,232 0,232*2=0,464 Перевод из двоичной системы в четверичную, восьмеричную, шестнадцатеричную. 0110111011100011=123232034 = 673438 =6ЕЕ316 10 16 2 0 0 0000 1 1 0001 2 2 0010 9 9 1001 10 А 1010 11 B 1011 12 C 1100 13 D 1101 14 E 1110 15 F 1111 10010=11001002=12104=1448=6416 int x =100 количество байтов=4 байт 1 байт=8 бит 4 байта=32бит Инверсия битов 0→1 1→0 Прибавляя к коду 1, получаем число в дополнительном коде 0,25*1010-порядок ↕ Мантисса Double 4 байта ▄1 ▄2 ▄3 ▄4 - мантисса Порядок Примечание int x=100; double y=2.5; y-y+x- тип double Циклы 1) Цикл с предусловием while (B) C; Пустой цикл Бесконечный цикл while (B) { C1;C2;C3; } 2) Цикл с постусловием do C while ( B) Пример 1 С помощью цикла while вычислить y=1+2+3+..+n y=∑in i #include "stdafx.h" #include using namespace std; int main() { int i ,y, n; cout<<"Enter n="; cin>>n; y=0; i=1; while (i<=n) { y=y+i; i++; } cout<<"y="< system("pause"); return 0; } С помощью цикла do while вычислить y=1+2+3+..+n #include "stdafx.h" #include using namespace std; int main() { int i ,y, n; cout<<"Enter n="; cin>>n; y=0; i=1; do { y=y+i; i++; } while (i<=n); cout<<"y="< system("pause"); return 0; } Пример 2 y=1/1!+1/2!+1/3!+…1/n! y=y+1/f - тип double #include "stdafx.h" #include using namespace std; int main() { int i ,f, n; double y; cout<<"Enter n="; cin>>n; y=0; i=1; f=1; while (i<=n) { f=f*i; y=y+(double)1/f; i++; } cout<<"y="< system("pause"); return 0; } Пример 3 Вычислить y=sin(x) sin (x) =x -x3/3!+x5/5!-x7/7!+… sin( x) = ∑0∞ (-1)i x2i+1 / (2i+1)! 1 способ step=x znak=1 fact=1 y=y+ step*znak/fact #include "stdafx.h" #include # include using namespace std; int main() { int i, n, fact, znak; double y,x,step; cout<<"enter x="; cin>>x; cout<<"enter n="; cin>>n; y=x; znak=1; step=x; factorial=1; for ( i=1;i<=n;i++) { znak=-znak; step=step*x*x; fact=fact*2*i*(2*i+1); y=y+znak*stepen/fact; } cout<<"y="< cout<<"sin(x)= "< system("pause"); return 0; } ///////////////////////////////////////////////////////////////////// Исключения в С++ (exception) throw (в переводе — обработать, запустить), try (попытка), catch (поймать, ловить). #include "stdafx.h" #include # include using namespace std; int main() { setlocale(LC_ALL,"ru"); int i, n, fact, znak; double y,x,step; cout<<"enter x="; cin>>x; cout<<"enter n="; cin>>n; y=x; znak=1; step=x; fact=1; for ( i=1;i<=n;i++) { znak=-znak; step=step*x*x; try { fact=fact*2*i*(2*i+1); if( fact<0) throw 100; if( fact==0) throw 200; } catch(int j) { if (fact<0) { cout<<" Ошибка №="< значение факториала"< cout<<"fact= "< cout<<" i= "< //break; } if (fact==0) { cout<<" Ошибка №="< значение факториала"< cout<<"fact= "< cout<<" i= "< //break; } } y=y+znak*step/fact; } cout<<"y="< cout<<"sin(x)= "< system("pause"); return 0; } ///////////////////////////////////////////////////////////////////////// 2 способ (универсальный для всех рядов ) y= x-x3/3!+x5/5!-x7/7!+… y=∑0∞ (-1)i x2i+1 / (2i+1)!= ∑0∞ti ti=ti-1*p p= ti/ ti-1= ((-1)i x2i+1 / (2i+1)!)/ ((-1)i-1 x2i-1 / (2i-1)!)= -x2/2*i*(2*i+1) #include "stdafx.h" #include #include using namespace std; int main() { setlocale(LC_ALL,"ru"); double y, x, t; int i, n; cout<<"введите x="; cin>>x; cout<<"введите n="; cin>>n; y=x; t=x; for ( i=1;i<=n;i++) { t= -t*x*x/((2*i+1)*2*i); y=y+t; } cout<<"y="< cout<<"sin(x)= "< system("pause"); return 0; } Возможные варианты while- вариант #include "stdafx.h" #include # include using namespace std; int main() { const double eps=0.001; double y, x, t; cout<<"enter x="; cin>>x; y=0; t=x; int i=1; while (fabs(t)>eps) { y=y+t; t= -t*x*x/((2*i+1)*2*i); i++; } cout<<"y="< return 0; } 2) Припомощицикла for for (int i=1; fabs(t)>eps; i++) { t= -t*x*x/((2*i-1)*2*i) y=y+t; } Пример 4 Вычислить косинус Cos(x)=∑i∞ (-1)i x2i / 2i! p = -x2 / ((2*i+1)*2*i) #include "stdafx.h" # include using namespace std; int main() {double y, x, t; int n; int n; cout<<"enter x="; cin>>x; cout<<"enter n="; cin>>n; y=x; t=x; for (int i=1;i<=n;i++) { t= -t*x*x/((2*i-1)*2*i) y=y+t; } cout<<"y="< system("pause"); return 0; } Лекция №5 Преобразование типа переменной в программе. Операторы перехода Преобразование типа переменной в программе y=y+static_coast y=y+(double) i/(i+1) Операторы перехода break i=1; while(1) { if(i>10) break; cout<<”i=”< i++; } cout< результат работы программы:1_2_3_4_5_6_7_8_9_10 continue for (i=1;i<10;i++) { if (i %2) continue; cout< } результат работы программы:2_4_6_8 goto С помощью инструкции goto и метки можно организовать следующий цикл на 100 итераций. i=1; loop1: cout< i++; if (i<=100) goto loop1; результат работы программы:1_2_3_4_5_6_7_... _100 Оператор switch (переключатель) switch (выражение) { case константа 1: [список операторов] case константа 2: [список операторов] …………………………………………. case константа n: [список операторов] default: [список операторов] } Переключатель switch #include "stdafx.h" # include # include # include using namespace std; int main() { bool t; int x, y, n, i; srand (time(0)); int s1=0; int s0=0; int s2=0; cout<<" enter n="; cin>>n; i=1; while ( i<=n ) { x=rand()%3; switch (x) { case 0: s0++; break; case 1: s1++; break; default: s2++;break; } cout< if (i%10==0) cout< i++; } cout<<"s0="< cout<<"s1="< cout<<"s2="< cout< system("pause"); return 0; } Задача 1 Простейший калькулятор #include "stdafx.h" # include using namespace std; int main() { int a,b; double res; char op; cout <<" enter 1 operand: "; cin>>a; cout <<" enter sign of operation: "; cin>>op; cout <<" enter 2 operand: "; cin>>b; if ( (b==0) && (op=='/')) { cout<<"деление на 0 "< system("pause"); exit(-1); } bool f=true; switch (op) { case '+' : res=a+b; break; case '-' : res=a-b; break; case '*' : res=a*b; break; case '/' : res=(double) a/b; break; default: cout<<"unknown operator"< f=false; } if (f) cout<<"result: "< system("pause"); return 0; } Задача 2 Угадывание числа #include "stdafx.h" # include # include using namespace std; int main() { bool t; int x, y, n, i; srand (time(0)); x=rand()%10+1; cout<<" the computer define number in the range 1- 10"< t=false; cout<<" Guess the number!!! "< cout<< "You must guess the number the computer"< cout<<" enter n="; cin>>n; //ввод количества попыток i=1; while ( i<=n && !t ) { cout<<"enter number"; cin>>y; //ввод числа пользователем if (y==x) t=true; i++; } if (t) { cout<< "You win! "< cout<<" The number of attempts i = "< cout<<"Computer defined number= "< } else { cout<<"Sorry! The computer number ="< } system("pause"); return 0; } Задача 3 Определение простого числа true, если число x простое T= false, если число x не является простым i=2…..sqrt(x)- возможные делители числа х. Листинг программы #include "stdafx.h" # include # include using namespace std; int main() { int i,x; bool t; cout<<"enter x="; cin>>x; if (x<=1) t=false; else if (x==2) t=true; else { t=true; for (i=2; i<=sqrt(x) && t; i++) { if (x% i==0) t=false; } } if (t) cout<< x<<" -prime"<< endl; else cout<< x<<" - not prime"<< endl; system("pause"); return 0; } Задача 4. Вывод строчные букв латинского алфавита и их кодировки. #include "stdafx.h" # include using namespace std; int main() { char ch; int i; for ( ch='a';ch<='z';ch++ ) cout< cout< for (i='a';i<'a'+26; i++) cout< cout< system("pause"); return 0; } Задача 5 Число итераций за 1 сек. Секундомер #include "stdafx.h" #include #include #include using namespace std; int main() { int i, j, k, m; int l=time (0); int p=1;// число итераций за 1 сек while (time (0)-l < 1) { cout< p++; // system("pause"); } cout< // число итераций за 1 сек cout< cout<<"hours: minutes: second"< for(m=0;m<=24;m++) for(i=0; i<=59; i++) for(j=0; j<=59;j++) for (k=1;k<=100000;k++)// задержка { cout.fill('0'); cout.width(2); cout< cout.fill('0'); cout.width (2); cout< cout.fill('0'); cout.width (2); cout< } cout< system("pause"); return 0; } Лекция №6 Массивы а0, а1, а2,…….аn-1 Массив- конечная именованная последовательность элементов Описание массива в С++: Тип имя [размер] Например: int a[100] или const int N=100; int a[N]; Обращение к элементу массива: а[номер]. Одномерный массив – вектор; Память для элементов массива выделяется подряд ▄1 ▄2 ▄ 3▄ 4 a- указатель-переменная, которая хранит адрес. Задача 1 Нахождение максимального элемента в массиве #include "stdafx.h" # include using namespace std; const int n=10; //определяем константой кол-во элементов int main() { int a[n]; int i, max; //Ввод массива с клавиатуры cout<<"enter array a"< for (i=0; i { cout<<"a["< cin>>a[i]; } //Вывод массива на экран cout<<"array a"< for (i=0; i cout< cout< // цикле сравниваем с каждым элементом в цикле for (i=1; i if ( max < a[i]) max=a[i] ; cout<<"max="< system("pause"); return 0; } Примечание Общая структура решения задач с массивами(сумма, максимальный элемент, упорядочивание массива, сдвиг массива): 1)Описание переменных 2)Ввод данных 3)Соответствующие вычисления 4)Вывод результата Задача 2 Циклический сдвиг массива влево на одну позицию Пример На входе: 5 3 4 2 На выходе: 3 4 2 5 #include "stdafx.h" # include using namespace std; const int n=10; void main() { int a[n]; int i, r; //Ввод массива с клавиатуры cout<<"enter array a: "< for (i=0; i { cout<<"a["< cin>>a[i]; } r=a[0]; for (i=1; i a[i-1]=a[i]; a[n-1]=r; //Вывод массива на экран cout<<"array a: "< for (i=0; i cout< cout< system("pause"); return 0; } Задача 3 Подсчитать количество максимумов в массиве #include "stdafx.h" # include using namespace std; int main() const int n=10; { int a[n]; int i, number, max; //Ввод массива с клавиатуры cout<<”enter array a”< for (i=0; i { cout<<”a[“< cin>>a[i]; } max=a[0]; number=1; for (i=1; i if (max< a[i]) { max=a[i]; number=1; } else if (max==a[i]) number++; cout<<”max=”< cout<<”number=”< system("pause"); return 0; } Задача 4 Подсчитать сумму элементов массива #include "stdafx.h" # include using namespace std; int main() const int n=10; { int a[n]; int i, sum; //Ввод массива с клавиатуры cout<<"enter array a: "< for (i=0; i { cout<<"a["< cin>>a[i]; } sum=0; for (i=0; i sum=sum+a[i]; //возможный вариант y+=a[i]; cout<<"sum="< system("pause"); return 0; } Задача 5 Стратегия вычисления A- и E- кванторов ( проверка существования элемента в массиве) При вычислении E- квантора булевская переменная задается как false. При вычислении A- квантора булевская переменная задается как true. t=(Ei)[ a[i]<0 ] t= true, если в массиве существует отрицательный элемент, в противном случае t=false. #include "stdafx.h" # include using namespace std; const int n=10; int main() { int a[n]; int i; bool f=false; //Ввод массива с клавиатуры cout<<"enter array a: "< for (i=0; i { cout<<"a["< cin>>a[i]; } //Вывод массива на экран cout<<”array a”< for (i=0; i cout< cout< for (i=0; i if (a[i]<0) t=true; if (t) cout<<"exist"< else cout<<"not exist"< system("pause"); return 0; } t = (Ai)[ a[i]>=0 ] t-true, если в массиве все элементы больше или равны нулю #include "stdafx.h" # include using namespace std; int main() const int n=10; { int a[n]; int i; bool p=true; //Ввод массива с клавиатуры cout<<"enter array a: "< for (i=0; i { cout<<"a["< cin>>a[i]; } //Вывод массива на экран cout<<"array a: "< for (i=0; i cout< cout< if(a[i]<0) p = false; if (p) cout<<"any"< else cout<<" not any"< system("pause"); return 0; } Лекция №7 Массивы(продолжение) Методы сортировки массивов. Алгоритм сортировки методом нахождения локальных экстремумов Алгоритм сортировки методом обмена пар Алгоритм сортировки вставкой Задача 1 Упорядочить массив по неубыванию. Алгоритм сортировки методом нахождения локальных экстремумов Необходимо отсортировать массив удовлетворяющий условию (Ai)[ a[i]<=a[i+1] ]. ( для любого i справедливо а[i]<=a[i+1] ) В цикле проверяем условие, если a[i] >a[i+1] , то a[i] и a[i+1 ]меняем местами #include "stdafx.h" # include using namespace std; const int n=10; int main() { int a[n]; int i, j,r; //Ввод массива с клавиатуры cout<<"enter array a:"< for (i=0; i { cout<<"a["< cin>>a[i]; } //Вывод массива на экран cout<<"array a:"< for (i=0; i cout< cout< for(i=0; i for (j=i+1; j if (a[i]>a[j]) { r=a[i]; a[i]=a[j]; a[j]=r; } //Вывод массива на экран cout<<"array a:"< for (i=0; i cout< cout< system("pause"); return 0; } Задача 2. Алгоритм сортировки методом обмена пар ( метод «пузырька» ) #include "stdafx.h" #include using namespace std; const int n=5; int main() { cout<<" Bubble Sort "< int i; int r; int a[n]; cout<<"enter array a:"< for(i=0;i { cout<<"a["< cin>>a[i]; } cout< cout<<" array a:"< for(i=0;i cout< cout< bool t=true; while (t) { t=false; for(i=0;i if (a[i]>a[i+1]) { r=a[i]; a[i]=a[i+1]; a[i+1]=r; t=true; } } cout<<" After sorting the array a:"< for(i=0;i cout< cout< system("pause"); return 0; } Задача 3. Алгоритм сортировки вставкой #include "stdafx.h" #include using namespace std; const int n=5; int main() { int i,j,temp;; int a[n]; cout<<"enter array a:"< for (i = 0; i { cout<<"a["< cin >> a[i]; } cout<<"array a:"< for (i = 0; i cout< cout< for (i=0; i { temp = a[i];// запоминаем i- элемент j =i-1;//идем начиная с i-1 элемента while(j >= 0 && a[j] > temp) // пока не достигли начала массива // или не нашли элемент меньше или равного i-ому, // который хранится в переменной temp { a[j + 1] = a[j]; // проталкиваем элемент вправо j--; } a[j + 1] = temp; // возвращаем i элемент } // Выводим отсортированный массив cout<<"sort array a:"< for (i = 0; i cout< cout< system("pause"); return 0; } Лекция |