Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Упражнения и тесты. 1. Есть ли ошибки? Если есть, указать, в каких строках



1. Есть ли ошибки? Если есть, указать, в каких строках. Если нет, записать, что будет выведено.

const size2=6;

void Sort1(int X[],int m)

{ int min,Nmin;

for(int k=0;k<m-1;k++) { min=X[k]; Nmin=k;

for (int j=k;j<m;j++)

if(X[j]<min) {min=X[j]; Nmin=j; }

X[Nmin]=X[k]; X[k]=min; }

}

void Sortmatr2(int M[][size2],int n,int m)

{ for(int i=0;i<n;i+=2) Sort1(&M[i][0],m*2); }

void MyOut(int M[][size2],int n,int m)

{ for(int i=0;i<n;i++) { cout<<endl;

for(int j=0;j<m;j++)

printf("%4d ",M[i][j]);

} cout<<endl;

}

int main() { const n=4,m=6;

int A[n][size2]={{4, 3, -2}, {1, 11, -12, 13, 14},

{20, -21, 22, -23}, {30, 4, 3, 2,1} };

Sortmatr2(A,n,m); MyOut (A,n,m);

getch(); return 0;

}

2. Есть ли ошибки? Если есть, указать, в каких строках. Если нет, записать, что будет выведено.

const size2=6;

int Sum1(int *X, int m)

{ int S=0; for(int j=0; j<m; j++) S+=X[j];

return S; }

void SumM1 (int M[][size2],int n,int m, int *S1)

{ for(int i=0;i<n;i++) S1[i]=Sum1 (&M[i][m/2],m/2); }

void SumM2 (int M[][size2],int n,int m, int *S2)

{ for(int i=0;i<n;i++) S2[i]= Sum1(&M[i][1],m-1); }

void MyOut(int *s, int n)

{ cout<<endl; for(int i=0;i<n;i++) cout<< s[i]<<" "; }

int main()

{ const n=4,m=6; int A[n][size2]={{4, 3, -2}, {1, 11, -12, 13, 14},

{20, -21, 22, -23}, {30, 4, 3, 2,1} },

S1[n], S2[n];

SumM1 (A,n,m,S1); MyOut (S1,n);

SumM2 (A,n,m,S2); MyOut (S2,n);

getch(); return 0; }

3. Пусть описана функция:

int MyMax (int *x, int n)

{ int Max=x[0];

for int i=0; i<n; i++) if (x[i]>Max) Max=x[i];

return Max; }

3.a. Как её использовать для вывода наибольшего элемента каждой строки матрицы: const n=4, m=6; int A[n][m];? Выбери правильные варианты ответов:

1) cout<<MyMax (A[0], n*m);

2) for (int i=0; i<n; i++) cout<< MyMax (A[i], m)<< “ “;

3) for (int i=0; i<n; i++) printf(“%5d”, MyMax (A[i], m);

4) int Res=MyMax(&A[0][0], n*m); cout<<Res;

5) for (int j=0; j<m; j++) cout<< MyMax (A[j], n)<< “ “;

3.b. Как использовать ту же функцию MyMax для вывода наибольшего элемента всей матрицы const n=4,m=6; int A[n][m];?

Выбери правильные варианты ответов:

1) MyMax (A[0], n*m);

2) cout<< MyMax (&A[0], n*m);

3) cout<< MyMax (A[0][0], n*m);

4) int R=MyMax(&A[0][0], n*m); cout<<R;

5) int R=MyMax(&A[0][0], n); cout<<R;

6) int R; R=MyMax(A[0], m); cout<<R;

7) int R; R=MyMax(A[0], m*n); cout<<R;

8) cout<< MyMax(&A[0][0], n*m);

4. Пусть описана следующая функция:

void MyMax (int *x, int n, int &Max)

{ Max=x[0]; for (int j=1; j<n; j++)

if (x[j]>Max) Max=x[j]; }

Как её использовать для вывода наибольшего элемента всей матрицы

const n=4, m=6; int A[n][m];?

Выбери правильные варианты ответов:

1) int R=MyMax(&A[0][0], n*m); cout<<R;

2) int R; MyMax(&A[0], m*n, R); cout<<R;

3 ) int R; MyMax(A[0], n*m, R); cout<<R;

4) int R; cout<< MyMax(&A[0][0], n*m, R);

5) int R; MyMax(&A[0][0], m*n, R); cout<<R;

Задачи

1. Составить следующие функции для работы с матрицей: ввод матрицы; вывод; транспонирование матрицы с сохранением результата на новом месте; умножение исходной матрицы на транспонированную; головную функцию для проверки этих функций:

const int n2=3; void INP1(double x[][n2], int);

void OUT1(double x[][n2], int);

void TRANS(double x[][n2], double y[][n2], int);

void MULT (double x[][n2], double y[][n2], double z[][n2], int);

int main() { const size=3; int k;

double a[size][n2], b[size][n2], c[size][n2];

INP1(a,size); cout<<"\nOld matrix\n"; OUT1(a,size);

TRANS(a,b,size); cout<<"\nTrans matrix \n"; OUT1(b,size);

MULT(a,b,c,size); cout<<"\nMultiplication \n"; OUT1(c,size);

getch(); return 0; }

void TRANS(double x[][n2], double y[][n2], int n)

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

for(int j=0; j<n2; j++) y[i][j]=x[j][i]; }

void MULT (double x[][n2], double y[][n2], double z[][n2], int n)

{ int l, i, j, s;

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

for (j=0; j<n2; j++) { s=0;

for (l=0; l<n2; l++) s+=x[i][l]*y[l][j];

z[i][j]=s; }

}

void OUT1(double x[][n2], int n)

{ int X,j,Y=wherey();

for (int i=0; i<n; i++, Y++)

for (X=1, j=0; j<n2; j++, X+=7) { gotoxy(X,Y); cout<<x[i][j]; }

cout<<endl; }

void INP1(double x[][n2],int n)

{ int Y=1, X; for (int i=0; i<n; i++)

{ Y++; X=-14;

for (int j=0; j<n2; j++)

{ X+=16; gotoxy(X,Y);

cout<<"a["<<i<<","<<j<<"]"<<" "; cin>>x[i][j]; }

}

}

2. Составить класс для работы с целочисленной матрицей, включив в него матрицу, конкретные текущие размерности, конструктор для ввода и проверки текущих размерностей и следующие методы: ввод матрицы; вывод матрицы; поиск наибольшего и наименьшего значений матрицы и номеров строк, где они находятся; перестановку двух строк матрицы. В функции main ввести размерности матрицы, создать объект и проверить составленные методы:

const n1max=10, n2max=5;

class ClMatr

{ int a[n1max][n2max], n1, n2;

public:

ClMatr(int size1=5, int size2=3)

{ if (size1>0 && size1<n1max) n1=size1; else n1=5;

if (size2>0 && size2<n2max) n2=size2; else n2=3; }

void MyInp(); void MyOut();

void MaxMin(int &, int &, int &, int &);

void Change(int, int);

}; // End of class

void ClMatr::MyInp()

{ int x, y=3;

for (int i=0; i<n1; i++)

{ y++; x=-14;

for (int j=0; j<n2; j++) { x+=16; gotoxy(x,y);

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

cin>>a[i][j]; }

} };

void ClMatr::MyOut()

{ int x, y=wherey()+1, j;

for (int i=0; i<n1; i++, y++)

for (x=1, j=0; j<n2; j++, x+=7)

{ gotoxy(x,y);

cout<<a[i][j]; } cout<<endl;

}

void ClMatr::MaxMin (int &max, int &Nmax, int &min, int &Nmin)

{ max=min=a[0][0];

Nmax=Nmin=0;

for (int i=0;i<n1;i++)

for (int j=0;j<n2;j++)

if (max<a[i][j]) { max=a[i][j]; Nmax=i; }

else if (min>a[i][j]) { min=a[i][j]; Nmin=i; }

}

void ClMatr::Change(int k1, int k2)

{ if (k1!=k2)

for (int j=0; j<n2; j++) { int d=a[k1][j]; a[k1][j]=a[k2][j];

a[k2][j]=d; }

}

int main() { int n1, n2, Nmax, Nmin, max, min;

cout<<"\nn1="; cin>>n1; cout<<" n2="; cin>>n2;

ClMatr ob(n1,n2); ob.MyInp();

cout<<"\nOld matrix\n"; ob.MyOut();

ob.MaxMin(max,Nmax,min,Nmin);

cout<<"Max element= "<<max <<" in "<< Nmax << " row\n";

cout<<"Min element= "<<min <<" in "<< Nmin << " row\n";

if (Nmax!=Nmin) { ob.Change(Nmax,Nmin);

cout<<"Matrix after changing "; ob.MyOut(); }

else cout<<"Matrix is not changed \n";

getch(); return 0;

}

Требования к задачам.

1) Матрица имеет фиксированную размерность в виде констант.

2) В задачах 1— 9 уровня B и 1, 2, 5 уровня С разработать функцию для работы с одномерным массивом и использовать её для каждой строки матрицы.

3) Разработать несколько функций для работы со всей матрицей.

4) Разработать два варианта проекта: 1) разбить весь проект на самостоятельные функции; 2) функции включить в класс и с помощью конструктора создать и использовать объект.





Дата публикования: 2015-02-18; Прочитано: 214 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2025 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.231 с)...