Лекции 1 семестр матанализ. лекции 1 семестр (1). Литература Герберт. Шилдт. С руководство для начинающих
Скачать 1.38 Mb.
|
Файл arb.txt Session results on Faculty of Computer Science(VMK) first second third fourth fifth perfect good satisf poor 2 3 4 5 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 Файл vmk.txt Session results on Faculty of Computer Science(VMK)
Лекция Задана квадратная матрица из положительных целых чисел. Вычислить op1(A), prime(SP(A[i][j])) A= op2(A), otherwise. prime(SP(A[i][j])) – сумма( по i) произведение (по j) A[i][j] есть простое число. Операция op1(A)- транспонированная матрица A. Операция op2(A) - i –ая строка матрицы A сдвигается циклически влево на 1 позицию, если она содержит число, сумма цифр, которого является простым число, и сдвигается циклически вправо на 1 позицию, в противном случае. //arb2015_mas_bool #include "stdafx.h" #include #include #include using namespace std; //////////////////////////////////// void create(ifstream &f,int** x, int n) { int i,j; for(i=0;i for(j=0;j f>>x[i][j]; } /////////////////////////// void show(ofstream &f,int** x, int n) { int i,j; for(i=0;i { for(j=0;j f< f< } } /////////////////////////// int sum_cifr(int x) { int s=0; while(x>0) { s=s+x%10; x=x/10; } return s; } ///////////////////////////// int sum_mult(int** x, int n) { int i,j; int s=0; int p; for(i=0;i { p=1; for(j=0;j p=p*x[i][j]; s=s+p; } return s; } ///////////////////////////// bool prime(int x) { int i; if (x<=1) return false; if(x==2)return true; bool p=true; for(i=2;i<=sqrt(x) && p;i++) if (x%i==0)p=false; return p; } ///////////////////////////// bool f1(int**x, int n) { return prime(sum_mult(x,n)); } //////////////////////////// bool f2(int*x, int n) { int j; bool p=false; for(j=0;j if (prime(sum_cifr(x[j]))) p=true; return p; } //////////////////////////// void shift_left(int* x,int n) { int r,i; r=x[0]; for(i=0;i x[i]=x[i+1]; x[n-1]=r; } //////////////////////////// void shift_right(int* x,int n) { int r,i; r=x[n-1]; for(i=n-1;i>0;i--) x[i]=x[i-1]; x[0]=r; } //////////////////////////// void op1(int** x,int n) { int i,j; for(i=0;i for(j=i+1;j { int r=x[i][j]; x[i][j]=x[j][i]; x[j][i]=r; } } /////////////////////////////// void op2(int** x,int n) { int i; for(i=0;i if (f2(x[i],n)) shift_left(x[i],n); else shift_right(x[i],n); } //////////////////////////////// int main() { int n,i; int** a; ifstream in("arb.txt"); ofstream out("out.txt"); if(!in) { cout<<"can't open file!"< exit(-1); } cout<<"enter size of array n="; cin>>n; a=new int*[n]; for(i=0;i a[i]=new int[n]; create(in,a,n); out<<"array a:"< show(out,a,n); if(f1(a,n))op1(a,n);else op2(a,n); out<<" new array a:"< show(out,a,n); in.close(); out.close(); for(i=0;i delete [] a[i]; delete []a; system("pause"); return 0; } Файл arb.txt 1 22 33 4 5 6 7 8 9 Файл out.txt array a: 1 22 33 4 5 6 7 8 9 new array a: 33 1 22 5 6 4 8 9 7 1.8 Преобразование матрицы. По заданной матрице А (размерности nn) вычислить новую матрицу X: где Е1 и Е2 - заданные преобразования матрицы А. Входными данными программы являются: число n и элементы матрицы А; выходными элементы матрицы X. В программе предусмотреть: - процедуру вычисления матрицы Е1(А) с формальными параметрами: размерность матрицы m, массивы А и В (исходная матрица и вычисляемая); - процедуру-функцию булевского типа вычисления значения предиката с формальными параметрами: размерность матрицы и массив ее элементов. Исходные данные I. Две различные операции Е1 и Е2 над вещественными матрицами из следующего списка: б) умножение на 3 всех элементов тех и только тех строк, в которых диагональный элемент больше 1; е) преобразование в симметричную с сохранением элементов, находящихся справа от главной диагонали; III. Предикат P(A) на вещественных матрицах: а) все определители второго порядка положительны (т.е. ; IV. Числовые данные. Размерность матрицы n = 5, 6, 7 или 8, а элементы матрицы выбираются произвольно. //arb2014_semestr_task_array #include "stdafx.h" #include #include #include using namespace std; void create(ifstream &f , int** x, int n ) { int i,j; for(i=0;i for(j=0;j f>>x[i][j]; } //////////////////////////////// void show(ofstream &f , int** x, int n ) { int i,j; for(i=0;i { for(j=0;j f< f< } f< } //////////////////////////////// void E1(int** x, int** y, int n) { int i,j; for(i=0;i { if (x[i][i]>1) for(j=0;j else for(j=0;j } } ////////////////////////////////// void E2(int** x, int** y, int n) { int i,j; for(i=0;i for(j=0;j if (i>=j) { y[i][j]=x[i][j]; y[j][i]=y[i][j]; } } /////////////////////////////// bool AA(int** x, int n) { bool p=true; int i,j; for(i=0;i for(j=0;j if ( x[i][j]*x[i+1][j+1] - x[i+1][j]*x[i][j+1]<=0) p=false; return p; } ////////////////////////////////// int main() { ifstream in("arb.txt"); ofstream out("out.txt"); int** a,**b; int n,i; cout<<"enter size of array n="; cin>>n; a=new int* [n]; for(i=0;i a[i]=new int[n]; b=new int* [n]; for(i=0;i b[i]=new int[n]; create(in ,a,n); in.close(); out<<"array a:"< show(out,a,n); if( AA(a,n)) E1(a,b,n); else E2(a,b,n); out<<"array b:"< show(out,b,n); out.close(); system("pause"); return 0; } Файл “arb.txt” 3 2 1 3 3 2 2 3 3 Файл “out.txt” array a: 3 2 1 3 3 2 2 3 3 array b: 9 6 3 9 9 6 6 9 9 Лекция_Новые_функции_int**_create(ifstream_f_,_int_n_)_int**_add(int**_x,_int**_y,_int_n)'>Лекция Новые функции int** create(ifstream &f , int n ) int** add(int** x, int** y, int n) int** subtr (int** x, int**y, int n) int** mult (int** x, int**y, int n) Память под массив выделяется внутри функции и функция create возвращает указатель на массив. Функции add, subtr,mult – возвращают указатель на массив, можно использовать выражения d=mult(add(a,b,n),a,n); //arb2014_array_3_function #include "stdafx.h" #include #include #include using namespace std; int** create(ifstream &f , int n ) { int i,j; int **x=new int*[n]; for(i=0;i x[i]=new int[n]; for(i=0;i for(j=0;j f>>x[i][j]; return x; } void show(ofstream &f , int** x, int n ) { int i,j; for(i=0;i { for(j=0;j f< f< } f< } //////////////////////////////// int** add(int** x, int** y, int n) { int i,j; int **z=new int*[n]; for(i=0;i z[i]=new int[n]; for(i=0;i for(j=0;j z[i][j]=x[i][j]+y[i][j]; return z; } ////////////////////////////////// int** subtr (int** x, int**y, int n) { int i,j; int **z=new int*[n]; for(i=0;i z[i]=new int[n]; for(i=0;i for(j=0;j z[i][j]=x[i][j]-y[i][j]; return z; } ///////////////////////////// int** mult(int** x, int**y, int n) { int i,j,k; int **z=new int*[n]; for(i=0;i z[i]=new int[n]; 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]; } return z; } /////////////////////////////// int main() { ifstream in1("arb1.txt"); ifstream in2("arb2.txt"); ofstream out("out.txt"); int** a,**b, **c; int n,i; cout<<"enter size of array n="; cin>>n; a= create(in1 ,n); b= create(in2 ,n); in1.close(); in2.close(); out<<"array a:"< show(out,a,n); out<<"array b:"< show(out,b,n); c=add(a,b,n); out<<"array c=a+b c:"< show(out,c,n); c=add(c,c,n); out<<"array c=c+c c:"< show(out,c,n); c=subtr( add(c,c,n), add(a,c,n),n); out<<"array c=(c+c)-(a+c) c:"< show(out,c,n); int** d =mult(a,b,n); out<<"array d=a*b d:"< show(out,d,n); d=mult(add(a,b,n),a,n); out<<"array d=(a+b)*a d:"< show(out,d,n); out.close(); } Файл arb1.txt 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 Файл arb2.txt 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 Файл out.txt array a: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 array b: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 array c=a+b c: 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 array c=c+c c: 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 array c=(c+c)-(a+c) c: 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 array d=a*b d: 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 array d=(a+b)*a d: 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 Лекция Структуры и перечисления. Структура Employee - работник Перечисление transport – транспортное средство Структуры ( struct) В отличие от массивов, все элементы которого однотипны структура может содержать элементы разных типов. В языке С++ структура является видом класса и обладает всеми его свойствами, но во многих случаях достаточно использовать структуры , как они определены в языке С. struct имя_типа { тип_1 элемент_1; тип_2 элемент_2; ……. тип_n элемент_n; }; Элементы структуры называются полями структуры и могут иметь любой тип, кроме типа этой же структуры, но могут быть указателями на него. Для переменных одного и того же структурного типа определена операция присваивания, при этом происходит поэлементное копирование. Структуру можно передавать в функцию и возвращать в качестве значения функции. Доступ к полям структуры выполняется с помощью операции выбора . (точка) при обращении к полю через имя структуры и -> при обращении через указатель. struct Worker { char fio[30]; int code; double salary; } Worker worker, staff[100],*ps; worker.fio="Иванов"; staff[8].code=123; ps->salary=12000; Если элементом структуры является другая структура, то доступ к ее элементам выполняется через две операции выбора struct A { int a; double k;}; struct B { A a; double x;}; B x[2]; x[0].a.a=1; x[1].x=0.1 //arb2014_struct_employeе_2 #include "stdafx.h" #include #include using namespace std; const int K=80; const int N=5; enum status { Boss=1,Accountant,Secretary,It ,Office}; struct Employee { int Id; char Name[K]; double Salary; status Status; }; int main() { int i; Employee emp[N]; for(i=0;i { emp[i].Id=i+1; cout<<"enter name "< cin.getline(emp[i].Name,80); cout<<" enter salary "<< emp[i].Name<<" : "; cin>>emp[i].Salary; int st; do { cout<<"enter status of employee (1..5) st= "; cin>>st; } while ( st<1 || st>5 ); emp[i].Status =(status)st; cin.get();// снимает с потока символ «новая строка» } cout< for(i=0;i { cout< < switch (emp[i].Status) { case Boss: cout<<"Boss"< case Accountant: cout<<"Accountant"< case Secretary : cout<<"Secretary"< case It : cout<<"It"< case Office : cout<<"Office"< default: ; break; } } } 1> |