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

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


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

уровня

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

)


Задача

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

//arb2016_pavlovskaya_var7

#include "stdafx.h"

#include

using namespace std;
const int n=7;

int main()

{

int i,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<
// if n is even number n=6

/* for(i=1;i
{

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
{

temp=a[i];

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

a[n-i-2]=temp;

}

cout<<" odd i in begin, even i in end a:"<
for (i = 0; i
cout<
cout<
system("pause");

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

#include "stdafx.h"

#include

#include

using namespace std;
const int n=7;

int main()

{

int i,j,temp;;

double a[n];

cout<<"enter array a:"<
for (i = 0; i
{

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

}

cout<<"array a:"<
for (i = 0; i
cout<
cout<
i=0; j=n-1;

while(i<=j)

{

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

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

if (i
{

temp=a[i];

a[i]=a[j];

a[j]=temp;

}

}

cout<<"new array a:"<
for (i = 0; i
cout<
cout<
system("pause");

return 0;
}

Задача

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


//arb2016_pavlovskaya_var9
#include "stdafx.h"

#include

using namespace std;
const int n=7;

int main()

{

int i,j,temp;;

double a[n];

cout<<"enter array a:"<
for (i = 0; i
{

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

}

cout<<"array a:"<
for (i = 0; i
cout<
cout<
i=0;

j=n-1;

while(i<=j)

{

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

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

if (i
{

temp=a[i];

a[i]=a[j];

a[j]=temp;

}

}

cout<<"new array a:"<
for (i = 0; i
cout<
cout<
system("pause");

return 0;
}
///////////////////////////////////////////////////////////////
Дихотомический поиск числа в упорядоченном массиве

#include

using namespace std;
int main()

{

const int n=10;

int left,right, mid,x;

int a[n]={1,2,3,4,5,6,7,8,9,10};

bool flag=false;

left=0;

right =n-1;

cout<<"enter x=";

cin>>x;

while (!flag && left<=right)

{

mid=(left+right)/2;

if(a[mid]==x) flag=true;

if (x
else left=mid+1;

}

if(flag) cout<
else cout<
array a!"<
system("pause");

return 0;

}

//////////////////////////////////////

Лекция

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

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

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

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

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


  1. Вычислить сумму произведений элементов

y = ∑in-1jn-1aij
#include "stdafx.h"

# include

using namespace std;

const int n=5;

int main()

{

int a[n] [n];;

int i, j, y, p;

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

cout<<"enter array a: "<
for (i=0; i
for (j=0; j
cin>>a[i][j];
//Вывод массива на экран

cout<<" array a:"<
for (i=0; i
{

for (j=0; j
cout<
cout<
}

y=0;

for (i=0; i
{

p=1;

for (j=0; j
y=y+p;

}

cout<<"y="<
system("pause");

return 0;

}


  1. Найти максимальную из построчных сумм

Y= Max ∑ a[i][j]
#include "stdafx.h"

# include

using namespace std;

const int n=30;

int main()

{

int a[n] [n];

int i, j, y, max;

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

cout<<"enter array a: "<
for (i=0; i
for (j=0; j
cin>>a[i][j];

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

cout<<"massive a:"<
for (i=0; i
{

for (j=0; j
cout<
cout<
}

max=0;

for (j=0; j
max=max+a[0][j];
for (i=1; i
{

y=0;

for (j=0;j
y=y+a[i][j];

if(y> max) max =y;

}

cout<<"max="<
system("pause");

return 0;

}



  1. EA- и AE–предикаты




  1. AiEj( a[i][j]>0)

В каждой строке матрицы существует хотя бы один положительный элемент.
#include "stdafx.h"

# include

using namespace;

const int n=30;

int main()

{

int a[n] [n];;

int i, j;

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

cout<<"enter array a: "<
for (i=0; i
for (j=0; j
cin>>a[i][j];

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

cout<<"array a: "<
for (i=0; i
{

for (j=0; j
cout<
cout<
}

bool p=true;

for (i=0;i
{

bool q=false;

for (j=0; j
if (a[i][j]>0) q=true;

p=q;

}

cout<<"p="<


system("pause");

return 0;

}


  1. EiAj[ a[i][j]>0 ]

Существует строка матрицы, состоящая из положительных элементов.
#include "stdafx.h"

# include

using namespace std;

const int n=3;

int main()

{

int a[n] [n];;

int i, j;

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

cout<<"enter array a: "<
for (i=0; i
for (j=0; j
cin>>a[i][j];

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

cout<<"array a: "<
for (i=0; i
{

for (j=0; j
cout<
cout<
}
bool p=false;

for (i=0;i
{

bool q=true;

for (j=0; j
if (a[i][j]<=0) q=false;

p=q;

}

cout<<"p="<


system("pause");

return 0;
}



  1. AiAj[ a[i][j]>0]

Все элементы матрицы положительны
#include "stdafx.h"

# include

using namespace std;

const int n=30;

int main()

{

int a[n] [n];;

int i, j;

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

cout<<"enter array a: "<
for (i=0; i
for (j=0; j
cin>>a[i][j];

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

cout<<"array a: "<
for (i=0; i
{

for (j=0; j
cout<
cout<
}
bool p=true;

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

cout<<"p="<


system("pause");

return 0;
}



  1. EiEj[ a[i][j]>0]


В матрице существует хотя бы один положительный элемент
#include "stdafx.h"

# include

using namespace std;

const int n=30;

int main()

{

int a[n] [n];;

int i, j;

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

cout<<"enter array a: "<
for (i=0; i
for (j=0; j
cin>>a[i][j];

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

cout<<”array a:”<
for (i=0; i
{

for (j=0; j
cout<
cout<
}
bool p=false;

for (i=0;i
for (j=0; j
if (a[i][j]>0) p= true;

cout<<"p="<


system("pause");

return 0;
}



  1. Умножение матриц

С=A*B


#include "stdafx.h"

# include

# include
using namespace std;

const int n=3;

int main()

{

int a[n] [n], b[n] [n], c[n] [n];

int i, j, k;

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

cout<<"enter array a: "<
for (i=0; i
for (j=0; j
{

cout<<"a["<
cin>>a[i][j];

}

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

cout<<"enter array b: "<
for (i=0; i
for (j=0; j
{

cout<<"b["<
cin>>b[i][j];

}

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

cout<<"array a: "<
for (i=0; i
{

for (j=0; j
cout<
cout<
}

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

cout<<"array b: "<
for (i=0; i
{

for (j=0; j
cout<
cout<
}

for (i=0; i
for (j=0; j
{

c[i][j]=0;

for (k=0; k
c[i][j]=c[i][j]+a[i][k]*b[k][j];

}

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

cout<<"array c: "<
for (i=0; i
{

for (j=0; j
cout<
cout<
}

system("pause");

return 0;

}
Лекция
Указатели.
Указатель – это объект, который содержит некоторый адрес памяти. Этот адрес обозначает местоположение в памяти другого объекта, такого как переменная. Если x содержит адрес переменной y, то о переменной x говорят, что она «указывает» на y.

Формат объявления переменной-указателя таков:

Тип *имя переменной.

Использование символа * перед именем переменной в инструкции объявления превращает эту переменную в указатель.
int * x;

x – указатель на int.


Операторы, используемые с указателями.
С указателями используются два оператора ”*” и “&”.

Оператор “&”- унарный. Он возвращает адрес памяти, по которому расположен операнд.

int * ptr;

ptr= &total;

В переменную ptr помещается адрес переменной total.

Второй оперантор работы с указателями (“*”) служит дополнением к первому (“&”). Это также унарный оператор , но он обращается к значению переменной , расположенной по адресу , заданному его операндом. Другими словами, он ссылается на значение переменной , адресуемой заданным указателем. Если перменная ptr содержит адрес перменной total , то при выполнении инструкции

val=*ptr;

будет присвоено значение переменной total, на которую указывает переменная ptr.


Все байты в памяти нумеруются. Номер байта - адрес.

int х=5 – инициализация переменной

int *p- объявление указателя;

p- указатель( адрес)

p=&x- взятие адреса


*p=10 – изменение х через указатель

*-операция разыменования (косвенное присвоение)


#include "stdafx.h"

#include

using namespace std;

int main()

{

int *a = new int; // Объявление указателя для переменной типа int

int *b = new int(5); // Инициализацияуказателя

*a = 10;

*b = *a + *b;

cout << "b is " << *b << endl;

delete b;

delete a;

return 0;

}
Ссылки.
В языке C ссылок нет. С точки зрения реализации, ссылка — это, по сути, указатель, который жестко привязан к области памяти, на которую он указывает, и который автоматически разыменовывается, когда мы обращаемся по имени ссылки
int y=10;

int & x=y;

cout<<"x= "<
* конкретные адреса переменных могут быть другими */

int a;

//переменная с именем "a" типа int размещена по адресу 0xbfd86d6c

int &ra = a;

/* задано альтернативное имя (ra) для переменной по адресу 0xbfd86d6

символ "&" используемый для уже созданного объекта является операцией взятия адреса

(и эта операция не есть ссылка), то есть &a тут означает получить адрес переменной к которому привязано имя "a" */

cout << &a << '\n' << &ra << '\n';

В stdout будет записано:

0xbfd86d6c
0xbfd86d6c

То есть оба имени "a" и "ra" привязаны к одному и тому же адресу.

Ссылки нельзя объявлять без привязки к переменной (то есть не инициализировав при объявлении). После объявления ссылки её невозможно привязать к другой переменной.

Важно отличать ссылки от оператора взятия адреса & (address of). Оператор взятия адреса используется для уже созданного объекта с целью получить его адрес (то есть адрес области памяти, где хранятся значения), а ссылка это только задание альтернативного имени объекта (с точки зрения программиста, а не реализации). Например:

int a; //переменная типа int размещена по адресу 0xbfd86d6c с именем "a"

int b = 3;

/* создан указатель с именем "p" по адресу 0xbf971c4c, значение этого указателя адрес объекта с именем "a" - 0xbfd86d6c (это значение можно будет менять)

*/

int *p = &a;

p = &b; //присваиваем указателю новое значение


Пример 1
#include "stdafx.h"

# include

using namespace std;

int main()

{

int x=10;

int *p;

cout<<"x="<
p=&x;

cout<<"p="<


//p=0X0012FF7C –адрес ячейки памяти, содержащей int x

*p=20;

cout<<"*p="<<*p<
cout<<"x="<
int & r=x; //& r-ссылка

r=50;

cout<<"r="<
cout<<"x="<
x=20;

cout<<"r="<
cout<<"*p="<<*p<system("pause");

return 0;
}
*Примечание

Ссылка -2ое имя Х, r работает как указатель, автоматически разыменовывается. Память под r не выделяется
Пример 2

#include "stdafx.h"

# include

using namespace std;

int main()

{

int a[3]={1,2,3};

cout<<" array a: "<
cout<
cout<<"address a: "<
// address a: 0x0012FF68 0x0012FF6C 0x0012FF70

//Косвенное изменение массива

int *q=a; //q указатель на int

cout<<"q="<
// q= 0x0012FF68 0x0012FF6C 0x0012FF70

cout<<"*q="<<*q<<" "<<*(q+1)<< " "<<*(q+2)<
//*q=1 2 3

*q=904; *(q+1)=905; *(q+2)=906;

cout<<" array a: "<
cout<
// 904 905 906

a[0]=1;

a[1]=2;

a[2]=3;

cout<<"*q= "<<*q<<" "<<*(q+1)<< " "<<*(q+2)<
//*q=1 2 3

system("pause");

return 0;

}


Функции

Основы использования функций.
Функции – это подпрограммы , которые содержат одну или несколько инструкций. Функции называются строительными блоками С++, поскольку программа в С++ , как правило, представляет собой коллекцию функций.


Общий формат С++ функций
Все С++ функции имеют общий формат

Тип_возвращаемого значения имя (список _параметров)

{

// тело функции

}
С помощью элемента тип_возвращаемого_значения указывается тип значения возвращаемого функцией. Это может быть любой тип , за исключением массива. Если функция не возвращает никакого значения , необходимо указать тип void.

В качестве имени можно использовать любой допустимый идентификатор, который еще не был задействован в программе.

После имени функции в круглых скобках указывается список параметров, который представляет собой список пар ( состоящих из типа данных и имени ), разделенных запятыми.

Параметры – это по сути переменные, которые получают значения аргументов, передаваемых функции при вызове.

Если функции не имеют параметров, то круглые скобки остаются пустыми.

В фигурные скобки заключено тело функции. Тело функции составляют С++-инструкции, которые определяют действие функции. Функция завершается ( и управление передается вызывающей процедуре) при достижении закрывающейся скобки или инструкции return

Создание функции.
#include "stdafx.h"

#include

using namespace std;
void myfunc();// прототип функции myfunc()
int main()

{

cout<<"В функции main()."<
myfunc();

cout<<"Снова в функции main()."<
system("pause");

return 0;
}
// Определение функции myfunc()

void myfunc()

{

cout<<"В функции myfunc()."<
}
Использользование аргументов
Функции можно передать одно или несколько значений. Значение передаваемое функции называется аргументом. Таким образом, аргументы представляют собой средсьво передачи инициализации в функцию.

При создании функции, которая принимает одно или несколько аргументов, необходимо объявить переменные, которые получат значения этих аргументов. Эти переменные называются параметрами функции.
#include "stdafx.h"

#include

using namespace std;
void box(int length, int width, int height);// прототип функции
int main()

{

box(7,20,4);

box(50,3,2);

box(8,6,9);

system("pause");

return 0;
}
// Определение функции box()

void box(int length, int width, int height)

{

cout<<"Объем параллелепипеда равен "<< length* width* height

<
}

Использользование инструкции return
В предыдущих примерах возврат из функции к инициатору ее вызова происходил при обнаружении фигурной скобки. Однако это приемлимо не для всех функций.


Возврат значений.

Использование функции в выражениях

Правила действия областей видимости функций.
Локальная область видимости
Локальные переменные можно объявлять внутри любого блока.

Сокрытие имен

Параметры функции
Глобальная область видимости
Передача указателей и массивов в качестве аргументов функций
Передача функции указателя

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

Передача функциям строк

Возвращение функциями указателей

Оформление функции в С++

Тип имя функции (список формальных параметров);

Типы функции

int

double

char

void (не возвращает значений)

Функция - именованный набор операторов.

Если р1 и р2 функции, и р1 вызывает р2, то р2 должна быть описана раньше р1.

Если тело функции идет после main() , то перед main() должен стоять прототип функции.

Пример 1

Функция плюс

#include "stdafx.h"

# include

using namespace std;

///////////////////////

void plus (int,int,int); // прототип функции plus, параметры переданы //по значению

////////////////////

void plus1 (int,int,int&); // прототип функции plus1, последний

// параметр передан по ссылке

int plus2(int, int) //результат функции число типа int

////////////////////

int main()

{

int a=4; int b=5; int c=10;

cout<<"plus()"<
plus(a,b,c);

cout<<"c="<
plus1(a,b,c);

cout<<"c="<
int c2=plus2(a,b);

cout<<"c2="<
// Возможен вариант

cout<<"plus2()="<


system("pause");

return 0;

}

/////////////////////////////////////

void plus (int x, int y, int z)

{

cout<<"x="<
cout<<"y="<
cout<<"z="<
z=x+y;

cout<<"z="<
}

/////////////////////////////////////

void plus1 (int x, int y, int &z)

{

cout<<"x="<
cout<<"y="<
cout<<"z="<
z=x+y;

cout<<"z="<
}

/////////////////////////////////////////

int plus2 (int x, int y)

{

cout<<"x="<
cout<<"y="<
cout<<"x+y= "<
return x+y;

}

///////////////////////////////////////
Примечание

При вызове функций plus2() на месте аргументов могут быть любые выражения данного типа.

plus2(a+b*c,2*c);

plus2(5,7);

Передача массивов функции.
Пример 2.
#include "stdafx.h"

#include

using namespace std;

const int n=10;

/////////////////

void create ( int x[], int k);

//возможный вариант void vvod ( int x[n])

void show ( int x[], int k);

int max (int x[], int k);

/////////////////////////

int main()

{

int a[n];

create(a,n);

show ( a, n);

cout<< "max(a,n)= "<
system("pause");

return 0;
}

//////////////////////

void create ( int x[], int k)

{

int i;

for (i=0; i
{

cout<<"x["<
cin>>x[i];}

}

}

///////////////////////

void show ( int x[], int k)

{

int i;

for (i=0; i
cout<
cout<
}

////////////////////////////

int max(int x[], int k)

{

int i;

int m;

m=a[0];

for (i=0; i
if (m
return m;

}

/////////////////////////

Лекция №9

Динамические массивы
Задание статического массива

const int n=10;

int a[n];
Задание динамического массива

int n;

cout<< “Enter n:”;

cin>>n;

int* b //указатель на первый элемент массива

b= new int[n];

delete [] b - после работы программы необходимо освободить память «кучи» от b.

В параметрах функций динамический массив задается так же, как и статический
Выделение динамической памяти для двумерного массива c.
c= new int*[n];

for (i=0;i
c[i]=new int[n];

Особождение динамической памяти для двумерного массива c.
for(i=0;i
delete []c[i];
void vvod ( int x[], int n);

Или

void vvod ( int *x, int n);

void vvod ( int x[n])




Примечание

int*p;

p=new int;

*p=10; (косвенная динамическая память)

delete p ; (возврат памяти)
Задание двумерного динамического массива

Память выделяется в 2 этапа: сначала под столбец указателей на строки, а затем в цикле под каждую строку.

int colstr; colstb;

cout<< "Enter colstr: ";

cin>> colstr;

cout<< "Enter colstb: ";

cin>> colstb;

int **b;

b=new int*[colstr];

for (int i<0;i
b[i]=new int[colstb];
В параметрах функций

void create ( int **x, int n, int m);

void show( int **x, int n, int m);


Указатели на функции как параметры
Указатель на функцию может передаваться в другую функцию в качестве параметра. Например:

#include "stdafx.h"

#include

using namespace std;
int add(int, int);

int subtract(int, int);

int operation(int(*)(int, int), int, int);

int main()

{

int a = 10;

int b = 5;

int result;

result = operation(add, a, b);

cout << "result: " << result << endl;

result = operation(subtract, a, b);

cout << "result: " << result << endl;

system("pause");

return 0;

}

int add(int x, int y)

{

return x + y;

}

int subtract(int x, int y)

{

return x - y;

}

int operation(int(*op)(int, int), int a, int b)

{

return op(a, b);

}
В данном случае первый параметр функции operation - int (*op)(int, int) - представляет указатель на функцию, которая возвращает значение типа int и принимает два параметра типа int. Результатом функции является вызов той функции, на которую указывает указатель.

Определению указателя соответствуют две функции: add и subtract, поэтому их адрес можно передать в вызов функции operation: operation(add, a, b);.

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

result: 15

result: 5

Другой пример - функция, которая может принимать в качестве параметра некоторое условие:

#include "stdafx.h"



#include

using namespace std;
int isEven(int);

int isPositive(int);

void action(int(*)(int), int[], int);

int main()

{

int nums[] = { -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5 };

int n = sizeof(nums) / sizeof(nums[0]);

cout << "Even numbers: " << endl;

action(isEven, nums, n);

cout << "Positive numbers: " << endl;

action(isPositive, nums, n);

system("pause");

return 0;

}
int isEven(int x)

{

return x % 2 == 0;

}
int isPositive(int x)

{

return x>0;

}

void action(int(*condition)(int),int numbers[], int n)

{

for (int i = 0; i
{

if (condition(numbers[i]) != 0)

{

cout << numbers[i] << "\t";

}

}

cout << endl;

}


Первый параметр функции action - указатель int (*condition)(int) представляет функцию, которая принимает целое число и в зависимости от того, соответствует оно условию или нет, возвращает 1 (если соответствует) или 0. На момент определения функции action точное условие может быть неизвестно.

В текущей программе условия представлены двумя функциями. Функция isEven() возвращает 1, если число четное, и 0, если число нечетное. А функция isPositive() возвращает 1, если число положительное, и 0, если отрицательное.

При вызове функции action() в нее можно передать нужное условие: action(isEven, nums, n);. В итоге программа выведет на экран числа из массива nums, которые соответствуют переданному условию:

Even numbers: -4 -2 0 2 4

Positive numbers: 1 2 3 4 5


Задача 1.
Заданы два целочисленных мвссива размерноси n*n.
A*B , если EiAj[ A[i][j] простое число]

Вычислить С=

A+B, прттивном случае
#include "stdafx.h"

# include

# include

# include

using namespace std;
void create ( int **, int);

void show( int **, int);

bool prime (int);

bool EA( int **, int);

void mult ( int **, int**, int**,int);

void add ( int **, int**, int**,int);

/////////////////////////////////////

int main()

{

int n;

cout<<"enter size of array n=";

cin>>n;

int **a, **b, **c;

a= new int*[n];

int i;

for (i=0;i
a[i]=new int[n];

b= new int*[n];

for (i=0;i
b[i]=new int[n];
c= new int*[n];

for (i=0;i
c[i]=new int[n];

cout<<"enter array a:"<
create(a,n);

cout<<"enter array b:"<
create(b,n);
cout<<" array a:"<
show(a,n);

cout<<" array b:"<
show(b,n);

if (EA(a,n)) mult(a,b,c,n);

else add(a,b,c,n);

cout<<"array c: "<
show(c,n);

for(i=0;i
delete []a[i];

delete [] a;

for(i=0;i
delete []b[i];

delete []b;

for(i=0;i
delete []c[i];

delete []c;

system("pause");

return 0;
}

////////////////////////////////

void create(int**x, int n)

{

int i,j;

for (i=0; i
for (j=0; j
{

cout<<"x["<
cin>>x[i][j];

}

}

////////////////////////////

void show(int**x, int n)

{

int i,j;

for (i=0; i
{

for (j=0; j
cout<
cout<
}

}

/////////////////////////////////

bool prime(int x)

{

bool t;

int i;

if (x<=1) return false;

if (x==2) return true;

t=true;

i=2;

while (i<=sqrt(x)&&t)

{

if (x% i==0) t=false;

i++;

}

return t;

}

///////////////////////

bool EA(int**x, int n)

{

bool p,q;

int i,j;

p=false;

for (i=0;i
{

q=true;

for (j=0; j
if (!prime(x[i][j])) q=false;

p=q;

}

return p;

}

//////////////////////////////

void mult ( int **x, int**y, int**z,int n)

{

int i, j, k;

for (i=0; i
for (j=0; j
{

z[i][j]=0;

for (k=0; k
z[i][j]=z[i][j]+x[i][k]*y[k][j];

}

}

/////////////////////////////

void add ( int **x, int**y, int**z, int n)

{

int i, j;

for (i=0; i
for (j=0; j
z[i][j]= x[i][j]+y[i][j];

}

////////////////////////
ALGEBRA OF SETS

Алгебра множеств

Пусть A,B,C ‘элементы P(Z). Z – множество целых чисел.

P(Z) – множество всех подмножеств Z.

Определить операции над множествами.

C=A U B – объединение множеств

C=A ^ B – пересечение множеств

C= A-B – разность множеств

C=(A-B)U(B-A) - симметрическая разность.

#include "stdafx.h"

#include

using namespace std;

/////////////////////////////////

void create_set(int* x,int n)

{

int i,m;

for(i=0;i
x[i]=0;

char ch='y';

while (ch=='y'|| ch=='Y')

{

cout<<"enter element of set m=";

cin>>m;

x[m]=1;

cout<<" continue enter element? – 'y'/'n' ch=";

cin>>ch;

}

}

////////////////////////////////

void show_set(int* x,int n )

{

int i;

cout<<"{ ";

for(i=0;i
if (x[i]) cout<
cout<
}

////////////////////////////////////

void union(int* x,int* y,int* z, int n)

{

int i;

for(i=0;i
z[i]=x[i]||y[i];

}

////////////////////////////////

void intersection(int* x,int* y,int* z, int n)

{

int i;

for(i=0;i
z[i]=x[i]&&y[i];

}

////////////////////////////////

void substruction(int* x,int* y,int* z,int n)

{

int i;

for(i=0;i
z[i]=x[i] && !y[i];

}

////////////////////////////////

void complement(int* x,int* y, int n)

{

int i;

for(i=0;i
y[i]=!x[i];

}

////////////////////////////////

int main()

{

int n;

cout<<" ALGEBRA OF SETS"<
cout<<"enter size universal set n=";

cin>>n;

int* a=new int[n];

int* b =new int[n];

int* c=new int[n];

cout<<"enter elements of set a: "<
create_set(a,n);

cout<<"elements of set a: "<
show_set(a,n);

cout<<"enter elements of set b: "<
create_set(b,n);

cout<<" elements of set b: "<
show_set(b,n);

union(a,b,c,n);

cout<<" elements of set c=aUb: "<
show_set(c,n);
intersection(a,b,c,n);

cout<<" elements of set c=a*b: "<
show_set(c,n);

substruction(a,b,c,n);

cout<<" elements of set c=a-b: "<
show_set(c,n);

complement(a,c,n);

cout<<" elements of set c=!a: "<
show_set(c,n);

system("pause");

return 0;

}

Лекция

Табулирование интегральной функции.
Вычислить значение функции



в заданных точках t1, …, tm с точностью . Входными данными программы являются числа m, a, b, и массив t[1: m]. Выходные данные – массив y[1: m], где . В программе предусмотреть:

- функцию, вычисляющую значение F(x, t), с формальными параметрами x и t;

- функцию вычисления интеграла по одной из квадратурных формул с формальными параметрами: границы интегрирования a, b, точность вычисления интеграла , функция F(x, t) и значение ее параметра t.
1   2   3   4   5   6   7   8   9


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