Главная страница

Лекции 1 семестр матанализ. лекции 1 семестр (1). Литература Герберт. Шилдт. С руководство для начинающих


Скачать 1.38 Mb.
НазваниеЛитература Герберт. Шилдт. С руководство для начинающих
АнкорЛекции 1 семестр матанализ
Дата19.02.2023
Размер1.38 Mb.
Формат файлаdoc
Имя файлалекции 1 семестр (1).doc
ТипЛитература
#945406
страница1 из 9
  1   2   3   4   5   6   7   8   9

КУРС ЛЕКЦИЙ ПО ЯЗЫКУ ПРОГРАММИРОВАНИЯ C++

Первый семестр

Литература


  1. Герберт. Шилдт. С++ руководство для начинающих

  2. Т.А. Павловская. С/С++ Программирование на языке высокого уровня

  3. Никлаус Вирт. Алгоритмы и структуры данных

  4. Т.А. Павловская, Ю.А. Щупак С/C++ Структурное программирование. Практикум

  5. В.В. Лаптев , А.В. Морозов , А.В.Бокова. С++ объектно-ориентированное программирование. Задачи и упражнения

  6. Н. Культин . С/С++ в задачах и примерах

  7. Л.З. Шауцукова. Информатика 10-11



Методическая литература
1. В.С. Кугураков, Р.К. Самитов, В.В. Кугуракова

Практикум на ЭВМ. Методические указанияи задачи для программирования

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

2. В.С. Кугураков, Р.К. Самитов, В.В. Кугуракова

Практикум на ЭВМ. Методические указанияи задачи для программирования \

по теме : Циклическая структура управления. Массив как стуктура данных

3. В.С. Кугураков, Р.К. Самитов, Р.Б. Ахтямов, В.Р. Байрашева

Практикум работы на ЭВМ.

Задание 1. Структуры управления и массивы – числовые задачи

4. В.С. Кугураков, Р.К. Самитов, Р.Б. Ахтямов, В.Р. Байрашева

Практикум работы на ЭВМ.

Задание 2. Процедуры и функции

5. В.С. Кугураков, Р.К. Самитов, Р.Б. Ахтямов, В.Р. Байрашева

Практикум работы на ЭВМ.

Задание 3. Представление данных и методы разработки алгоритмов

6. В.С. Кугураков, Р.К. Самитов, Р.Б. Ахтямов, В.Р. Байрашева

Практикум работы на ЭВМ.

Задание 4. Синтаксический анализ простых формальных языков

Лекция№1
Введение в C++
Вычисление объема конуса

Формула:1/3*π*R2*h

π =pi=3.14 определяется как константа
Листинг программы
#include //описание объекта cin и cout

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;

}
Рассмотрим каждую строчку отдельно.


  1. #include

В языке С++ определены ряд заголовочных файлов , которые содержат информацию ,

необходимую для программы.

В данном случае #include - директива препроцессора. include – включить

h файл с именем iostream в исходный текст программы. Файл iostream используется для поддержки С++ системы ввода и вывода. В данном случае компилятору необходимо знать описание объектов cin и cout


  1. const double pi=3.14;

Объявление вещественной константы pi
3/ int main()

int – тип функции ( функция возвращает целые значения )

main- имя функции. Выполнение С++- программы начинается и заканчивается выполнением функции main()

4. {

Фигурная открывающая скобка { - начало блока

Блок

{

операторы

}

  1. double V, h, R;

Объявление вещественных переменных


  1. cout<<”Enter R= ”;

Это инструкция вывода символьной константы

<<”Enter R= ” на консоль. При выполнении этой инструкции на экране компьютера появится сообщение Enter R=. В этой инструкции используется оператор вывода <
Он обеспечивает вывод выражения, стоящего с правой стороны , на устройство, стоящего с левой. Слово cout представляет собой встроенный идентификатор ( consol output ),

который означает экран компьютера.

  1. cin>>R;

cin – встроенный идентификатор, в данном случае он связан с клавиатурой.

>> - оператор ввода в С++

Иденитификатор R принимает символы , вводимые с клавиатуры.


  1. V=R*R*h*pi/3

Это выражение представляет собой оператор присваивания.

Вычисляется выражение R*R*h*pi/3 и его значение устанавливается для переменной V (говорят , что переменной V присваивается значение вырыжения R*R*h*pi/3)


  1. }

Закрывающая фигурная скобка } означает конец блока.
Примечание : все инструкции долдны завершаться символом ;

Типичная среда разработки С++
Давайте разберем, поэтапно, создание и исполнение приложения С++ в типичной среде разработки С++. Системы С++ обычно состоит из трех частей: среды разработки, языка и Стандартой библиотеки С++.

Инструменты среды обработки 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. Программа создается редактором и сохраняется на диске

Редактор ↔Диск
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


X

Y

X&Y

XVY

X

0

0

0

0

1

0

1

0

1

1

1

0

0

1

0

1

1

1

1

0



Правило де Моргана

⌐XvY= ⌐X&⌐Y ⌐ X&Y= ⌐Xv ⌐Y

X

Y

XVY

XVY

X

Y

X&⌐Y

0

0

0

1

1

1

1

0

1

1

0

1

0

0

1

0

1

0

0

1

0

1

1

1

0

0

0

0



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

XY

0

0

1

0

1

1

1

0

0

1

1

1



Пересечение 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

Доказательство:

  1. p € X\Y=(p € X)&(p € Y )= p € X ^ Y

  2. 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 байта

1234 - мантисса

Порядок

Примечание

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)!= ∑0ti

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="< system("pause");

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

Преобразование типа переменной в программе.

Операторы перехода
Преобразование типа переменной в программе

  1. y=y+static_coast i / (i+1)

  2. y=y+(double) i/(i+1)



Операторы перехода

  1. break

i=1;

while(1)

{

if(i>10) break;

cout<<”i=”<
i++;

}

cout<
результат работы программы:1_2_3_4_5_6_7_8_9_10


  1. continue

for (i=1;i<10;i++)

{

if (i %2) continue;

cout<
}

результат работы программы:2_4_6_8


  1. 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];
Обращение к элементу массива: а[номер].

Одномерный массив – вектор;

Память для элементов массива выделяется подряд

1234

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<max=a[0]; //присваиваем максимуму первый элемент, а затем в

// цикле сравниваем с каждым элементом в цикле

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.


  1. 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;
}


  1. 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<for (i=0; i
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<// BubbleSort

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;

}

Лекция

  1   2   3   4   5   6   7   8   9


написать администратору сайта