- •Первый семестр
- •1) Цикл с предусловием
- •2) Цикл с постусловием
- •Преобразование типа переменной в программе
- •Continue
- •Вычислить сумму произведений элементов
- •Найти максимальную из построчных сумм
- •Умножение матриц
- •Void create(int**X, int n)
- •Void show(int**X, int n)
- •Void mult ( int **X, int**y, int**z)
- •Void add ( int **X, int**y, int**z)
- •Исходные данные
- •За приближенное значение интеграла принимается такое, при котором .
- •Strcpy()
- •Strncpy()
- •Strcat()
- •Strcmp()
- •Strclen()
- •Int** create(ifstream &f , int n )
- •Int** subtr (int** X, int**y, int n)
- •Int** mult (int** X, int**y, int n)
Преобразование типа переменной в программе
y=y+static_coast<double> i / (i+1)
y=y+(double) i/(i+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
Continue
for (i=1;i<10;i++)
{
if (i %2) continue;
cout<<i<<”_”;
}
результат работы программы:2_4_6_8
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];
Обращение к элементу массива: а[номер].
Одномерный массив – вектор;
Память для элементов массива выделяется подряд
▄1 ▄2 ▄ 3▄ 4
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.
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;
}
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].
В двумерном массиве позиция любого элемента определяется двумя индексами. Если представить двумерный массив в виде таблицы данных, то один индекс означает строку, а второй индекс – столбец. Из этого следует, что если доступ к элементам массива представить в порядке , в котором они реально хранятся в памяти, то правый индекс будет изменяться быстрее , чем левый.
Задачи с двумерными массивами
