Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
лекции 1 семестр.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
1.21 Mб
Скачать

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

  1. y=y+static_coast<double> i / (i+1)

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

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

  1. break

i=1;

while(1)

{

if(i>10) break;

cout<<”i=”<<i<<”_”;

i++;

}

cout<<endl;

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

  1. Continue

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

{

if (i %2) continue;

cout<<i<<”_”;

}

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

  1. goto

С помощью инструкции goto и метки можно организовать

следующий цикл на 100 итераций.

i=1;

loop1:

cout<<i<<”_”;

i++;

if (i<=100) goto loop1;

результат работы программы:1_2_3_4_5_6_7_... _100

Оператор switch (переключатель)

switch (выражение) { case константа 1: [список операторов]

case константа 2: [список операторов]

………………………………………….

case константа n: [список операторов]

default: [список операторов]

}

Задача 1

Простейший калькулятор

# include <iostream.h>

void main()

{

int a,b,res;

char op;

cout <<” enter 1 operand:”;

cin>>a;

cout <<” enter sign of operation:”;

cin>>op;

cout <<” enter 2 operand:”;

cin>>b;

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 “<<endl;

f=false;

}

if (f) cout<<”result:”<<res<<endl;

}

Задача 2

Угадывание числа

# include <iostream.h>

# include <stdlib.h>

# include <time.h>

void 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”<<endl;

t=false;

cout<<” Guess the number!!!”<<endl;

cout<< “You must guess the number the computer”<<endl;

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!”<<endl;

cout<<” The number of attempts i = ”<<i<<endl;

cout<<”Computer defined number:<<x<<endl;

}

else {

cout<<”Sorry! The computer number =”<<x<<endl;

}

}

Задача 3

Определение простого числа

true, если число x простое

T=

false, если число x не является простым

i=2…..sqrt(x)- возможные делители числа х.

Листинг программы

# include <iostream.h>

# include <math.h>

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

}

Задача 4.

Вывод строчные букв латинского алфавита и их кодировки.

# include <iostream.h>

void main()

{

char ch;

int i;

for ( ch=’a’;ch<=’z’;ch++ )

cout<<ch<<’ ’; // вывод символов(строчные буквы латинского алфавита)

cout<<endl;

for (i=’a’;i<’a’+26; i++)

cout<<i<<’ ‘; // вывод кода символов

cout<<endl;

}

Задача 5

Число итераций за 1 сек.

Секундомер

#include <iostream.h>

#include <stdlib.h>

#include <time.h>

void main()

{

int i, j, k, m;

int l=time (0);

int p=1;// число итераций за 1 сек

while (time (0)-l < 1)

{

cout<<time(0)<<':'<<'_';

p++;

// system("pause");

}

cout<<endl<<"p= "<<p<<endl;

// число итераций за 1 сек

cout<<endl;

cout<<"hours: minutes: second"<<endl;

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<<m<<':';

cout.fill('0'); cout.width (2);

cout<<i<<':';

cout.fill('0'); cout.width (2);

cout<<j<<'\r';

}

cout<<endl;

}

Лекция №6

Массивы

а0, а1, а2,…….аn-1

Массив- конечная именованная последовательность элементов

Описание массива в С++:

Тип имя [размер]

Например:

int a[100] или const int N=100;

int a[N];

Обращение к элементу массива: а[номер].

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

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

1234

a- указатель-переменная, которая хранит адрес.

Задача 1

Нахождение максимального элемента в массиве

# include <iostream.h>

const int n=10; //определяем константой кол-во элементов

void main()

{

int a[n];

int i, max;

//Ввод массива с клавиатуры

cout<<”enter array a”<<endl;

for (i=0; i<n; i++)

{

cout<<”a[“<<i<<”]=”;

cin>>a[i];

}

//Вывод массива на экран

cout<<”array a”<<endl;

for (i=0; i<n; i++)

{

cout<<a[i]<<’ ‘;

cout<<endl;

}

max=a[0]; //присваиваем максимуму первый элемент, а затем в цикле сравниваем с каждым элементом в цикле

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

if ( max < a[i]) max=a[i] ;

cout<<”max=”<<max<<endl;

}

Примечание

Общая структура решения задач с массивами(сумма, максимальный элемент, упорядочивание массива, сдвиг массива):

1)Описание переменных

2)Ввод данных

3)Соответствующие вычисления

4)Вывод результата

Задача 2

Циклический сдвиг массива влево на одну позицию

Пример

На входе: 5 3 4 2

На выходе: 3 4 2 5

# include <iostream.h>

const int n=10;

void main()

{

int a[n];

int i, r;

//Ввод массива с клавиатуры

cout<<”enter array a:”<<endl;

for (i=0; i<n; i++)

{

cout<<”a[“<<i<<”]=”;

cin>>a[i];

}

r=a[0];

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

a[i-1]=a[i];

a[n-1]=r;

//Вывод массива на экран

cout<<”array a”<<endl;

for (i=0; i<n; i++)

{

cout<<a[i]<<’ ‘;

cout<<endl;

}

}

Задача 3

Подсчитать количество максимумов в массиве

# include <iostream.h>

void main()

const int n=10;

{

int a[n];

int i, number, max;

//Ввод массива с клавиатуры

cout<<”enter array a”<<endl;

for (i=0; i<n; i++)

{

cout<<”a[“<<i<<”]=”;

cin>>a[i];

}

max=a[0];

number=1;

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

if (max< a[i])

{

max=a[i];

number=1;

}

else

if (max==a[i]) number++;

cout<<”max=”<<max<<endl;

cout<<”number=”<<number<<endl;

}

Задача 4

Подсчитать сумму элементов массива

# include <iostream.h>

void main()

const int n=10;

{

int a[n];

int i, sum;

//Ввод массива с клавиатуры

cout<<”enter array a”<<endl;

for (i=0; i<n; i++)

{

cout<<”a[“<<i<<”]=”;

cin>>a[i];

}

sum=0;

for (i=0; i<n; i++)

sum=sum+a[i]; //возможный вариант y+=a[i];

cout<<”sum=”<<sum<<endl;

}

Задача 5

Стратегия вычисления A- и E- кванторов

( проверка существования элемента в массиве)

При вычислении E- квантора булевская переменная задается как false.

При вычислении A- квантора булевская переменная

задается как true.

  1. t=(Ei)[ a[i]<0 ]

t= true, если в массиве существует отрицательный

элемент, в противном случае t=false.

# include <iostream.h>

const int n=10;

void main()

{

int a[n];

int i;

bool f=false;

//Ввод массива с клавиатуры

cout<<”enter array a”<<endl;

for (i=0; i<n; i++)

{

cout<<”a[“<<i<<”]=”;

cin>>a[i];

}

//Вывод массива на экран

cout<<”array a”<<endl;

for (i=0; i<n; i++)

{

cout<<a[i]<<’ ‘;

cout<<endl;

}

for (i=0; i<n&&!t; i++)

if (a[i]<0) t=true;

if (t) cout<<”exist”<<endl;

else cout<<”not exist”<<endl;

}

  1. t = (Ai)[ a[i]>=0 ]

t-true, если в массиве все элементы больше

или равны нулю

# include <iostream.h>

void main()

const int n=10;

{

int a[n];

int i;

bool p=true;

//Ввод массива с клавиатуры

cout<<”enter array a”<<endl;

for (i=0; i<n; i++)

{

cout<<”a[“<<i<<”]=”;

cin>>a[i];

}

//Вывод массива на экран

cout<<”array a”<<endl;

for (i=0; i<n; i++)

cout<<a[i]<<’ ‘;

cout<<endl;

for (i=0; i<n&&p; i++)

if(a[i]<0) p = false;

if (p) cout<<”any”<<endl;

else cout<<” not any”<<endl;

}

Лекция №7

Массивы(продолжение)

Методы сортировки массивов.

Алгоритм сортировки методом нахождения локальных экстремумов

Алгоритм сортировки методом обмена пар

Алгоритм сортировки вставкой

Задача 1

Упорядочить массив по неубыванию.

Алгоритм сортировки методом нахождения локальных экстремумов

Необходимо отсортировать массив удовлетворяющий

условию (Ai)[ a[i]<=a[i+1] ].

( для любого i справедливо а[i]<=a[i+1] )

В цикле проверяем условие,

если a[i] >a[i+1] , то a[i] и a[i+1 ]меняем местами

# include <iostream.h>

const int n=10;

void main()

{

int a[n];

int i, j,r;

//Ввод массива с клавиатуры

cout<<”enter array a”<<endl;

for (i=0; i<n; i++)

{

cout<<”a[“<<i<<”]=”;

cin>>a[i];

}

//Вывод массива на экран

cout<<”array a”<<endl;

for (i=0; i<n; i++)

cout<<a[i]<<’ ‘;

cout<<endl;

for(i=0; i<n-1; i++)

for (j=i+1; j<n; j++)

if (a[i]>a[j])

{

r=a[i]; a[i]=a[j]; a[i]=r;

}

//Вывод массива на экран

cout<<”array a”<<endl;

for (i=0; i<n; i++)

cout<<a[i]<<’ ‘;

cout<<endl;

}

Задача 2.

Алгоритм сортировки методом обмена пар

( метод «пузырька» )

#include<iostream.h>

const int n=5;

void main()

{

cout<<" Bubble Sort "<<endl;

int i;

int r;

int a[n];

cout<<"enter array a:"<<endl;;

for(i=0;i<n;i++)

{

cout<<"a["<<i<<"]=";

cin>>a[i];

}

cout<<endl;

cout<<" array a:"<<endl;

for(i=0;i<n;i++)

cout<<a[i]<<" ";

cout<<endl;

// BubbleSort

bool t=true;

while (t)

{

t=false;

for(i=0;i<n-1;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:"<<endl;

for(i=0;i<n;i++)

cout<<a[i]<<' ';

cout<<endl;

}

Задача 3.

Алгоритм сортировки вставкой

#include <iostream>

using namespace std;

const int n=5;

void main()

{

int i,j,temp;;

int a[n];

cout<<"enter array a:"<<endl;

for (i = 0; i<n; i++)

{

cout<<"a["<<i<<"]=";

cin >> a[i];

}

cout<<"array a:"<<endl;

for (i = 0; i<n; i++)

cout<<a[i]<<' ';

cout<<endl;

for (i=0; i<n; 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:"<<endl;

for (i = 0; i<n; i++)

cout<<a[i]<<' ';

cout<<endl;

}

Лекция

Тема: Одномерные массивы (продолжение )

( Т.М. Павловская С/C++ Программирование на языке высокого

уровня

Тема: Одномерные массивы (стр. 136)

)

Вариант 7

Преобразовать массив таким образом, чтобы в первой половине располагались элементы, стоящие в нечетных позициях, а во второй половине - элементы, стоящие в четных позициях,

//arb2016_pavlovskaya_var7

#include <iostream>

using namespace std;

const int n=7;

void main()

{

int i,temp;;

int a[n];

cout<<"enter array a:"<<endl;

for (i = 0; i<n; i++)

{

cout<<"a["<<i<<"]=";

cin >> a[i];

}

cout<<"array a:"<<endl;

for (i = 0; i<n; i++)

cout<<a[i]<<' ';

cout<<endl;

// if n is even number n=6

/* for(i=1;i<n/2;i=i+1)

{

temp=a[i];

a[i]=a[n-1-i];

a[n-1-i]=temp;

}

*/

// if n is odd number n=7

for(i=0;i<n/2;i=i+2)

{

temp=a[i];

a[i]=a[n-i-2];

a[n-i-2]=temp;

}

cout<<" odd i in begin, even i in end a:"<<endl;

for (i = 0; i<n; i++)

cout<<a[i]<<' ';

cout<<endl;

}

Вариант 8

Преобразовать массив таким образом, чтобы сначала располагались , элементы по модулю не превышающие 1 , а потом все остальные

//arb2016_pavlovskaya_var8

#include <iostream>

#include <cmath>

using namespace std;

const int n=7;

void main()

{

int i,j,temp;;

double a[n];

cout<<"enter array a:"<<endl;

for (i = 0; i<n; i++)

{

cout<<"a["<<i<<"]=";

cin >> a[i];

}

cout<<"array a:"<<endl;

for (i = 0; i<n; i++)

cout<<a[i]<<' ';

cout<<endl;

i=0; j=n-1;

while(i<=j)

{

for( ; fabs(a[i])<=1;i++);

for( ; fabs(a[j])> 1;j--);

if (i<j)

{

temp=a[i];

a[i]=a[j];

a[j]=temp;

}

}

cout<<"new array a:"<<endl;

for (i = 0; i<n; i++)

cout<<a[i]<<' ';

cout<<endl;

}

Вариант 9

Преобразовать массив таким образом, чтобы элементы равные 0 располагались после всех остальных.

//arb2016_pavlovskaya_var9

#include <iostream>

using namespace std;

const int n=7;

void main()

{

int i,j,temp;;

double a[n];

cout<<"enter array a:"<<endl;

for (i = 0; i<n; i++)

{

cout<<"a["<<i<<"]=";

cin >> a[i];

}

cout<<"array a:"<<endl;

for (i = 0; i<n; i++)

cout<<a[i]<<' ';

cout<<endl;

i=0; j=n-1;

while(i<=j)

{

for( ; a[i]!=0;i++);

for( ; a[j]==0 ;j--);

if (i<j)

{

temp=a[i];

a[i]=a[j];

a[j]=temp;

}

}

cout<<"new array a:"<<endl;

for (i = 0; i<n; i++)

cout<<a[i]<<' ';

cout<<endl;

}

Лекция

Двумерные массивы.

В С++ можно использовать многомерные массивы. Двумерный массив представляет собой список одномерных массивов.

Объявление двумерного массива, состоящего из целых чисел с размерностью 5*6: int a[5][6].

В двумерном массиве позиция любого элемента определяется двумя индексами. Если представить двумерный массив в виде таблицы данных, то один индекс означает строку, а второй индекс – столбец. Из этого следует, что если доступ к элементам массива представить в порядке , в котором они реально хранятся в памяти, то правый индекс будет изменяться быстрее , чем левый.

Задачи с двумерными массивами