Алгоритмические основы информатики. Учебное пособие
.pdffor (i=0;i<n;i++) for (j=0;j<m;j++){
cout<<"a["<<i<<"]["<<j<<"]=";
cin>>a[i][j];
}
cout<<"massiv A:"<<endl; for (i=0;i<n;i++) {
cout<<"elements "<<i<<"- stroki:"<<endl; for (j=0;j<m;j++) cout<<" "<<a[i][j]; cout<<endl;
}
max=a[0][0];imax=0;jmax=0; for (i=0;i<n;i++)
for (j=0;j<m;j++) if (a[i][j]>=max) {
max=a[i][j];
imax=i;jmax=j;
}
cout <<"max=: "<<max;
cout <<" is: "<<imax<<" stroke "<<jmax<<" columnes"; getch();
}
Пример 2. В заданном массиве A(n, m) поменять местами наибольший и наименьший по величине элементы. Вывести на печать измененный массив.
/* В заданном массиве A(n,m) поменять местами наибольший и наименьший по величине элементы. Вывести на печать измененный массив и величину, равную сумме наибольшего и наименьшего элементов массива. */
#include <iostream> #include <conio.h> using namespace std; int main(){
int i,j,m,n,s; int a[20][20]; cout<<" n =";cin>>n;
cout<<" m ="; cin>>m; cout<<"input massiv:"<<endl; for (i=0;i<n;i++)
for (j=0;j<m;j++){
71
cout<<"a["<<i+1<<"]["<<j+1<<"]=";
cin>>a[i][j];
}
cout<<"massiv A:"<<endl; for (i=0;i<n;i++){
cout<<"elements "<<i<<"- stroki:"<<endl; for (j=0;j<m;j++)
cout<<" "<<a[i][j]; cout<<endl;
}
for (i=0;i<n;i++){
int mx=a[i][0]; int mn=a[i][0]; int mxj=0; int mnj=0; for (j=1;j<m;j++)
if(a[i][j]>mx){mx=a[i][j];mxj=j;}
else if(a[i][j]<mn){mn=a[i][j];mnj=j;} swap(a[i][mnj],a[i][mxj]);
}
cout<<endl;
cout<<"change massiv"<<endl; for (i=0;i<n;i++){
for (j=0;j<m;j++) cout<<" "<<a[i][j]; cout<<endl;
}
getch();
}
Пример 3. В каждой строке заданного целочисленного массива A(n,m) найти наибольший по величине элемент, первый, если их несколько.
/* В каждой строке заданного целочисленного массива A(n,m) найти наибольший по величине элемент, первый, если их несколько
*/
#include <iostream> #include <conio.h> using namespace std; int main()
{ int i,j,m,n,s; int a[20][20]; cout<<" n ="; cin>>n;
cout<<" m ="; cin>>m; cout<<"input massiv:"<<endl; for (i=0;i<n;i++)
72
for (j=0;j<m;j++){ cout<<"a["<<i<<"]["<<j<<"]="; cin>>a[i][j];
}
cout<<"massiv A:"<<endl; for (i=0;i<n;i++)
{ cout<<"elements "<<i<<"- stroki:"<<endl; for (j=0;j<m;j++) cout<<" "<<a[i][j]; cout<<endl;
}
for (i=0; i<n; i++){ int mx=a[i][0];
for (j=1; j<m; j++) if(a[i][j]>mx) mx=a[i][j];
cout<<" номер строки- <<i+1<<"; mx="<<mx;
}
cout<<endl;
getch();
}
Пример 4. В каждой строке заданного целочисленного массива A(n, m) найти количество элементов, кратных 3.
/* В каждой строке заданного целочисленного массива A(n,m) найти количество элементов, кратных 3 */
#include <iostream> #include <conio.h> using namespace std; int main()
{ int i,j,m,n,s; int a[20][20]; cout<<" n = "; cin>>n; cout<<" m = "; cin>>m; cout<<"input massiv:"<<endl; for (i=0;i<n;i++)
for (j=0;j<m;j++) { cout<<"a["<<i<<"]["<<j<<"]=";
cin>>a[i][j];
}
cout<<"massiv A:"<<endl; for (i=0; i<n; i++){
cout<<"elements "<<i<<" - stroki:"<<endl; for (j=0;j<m; j++) cout<<" "<<a[i][j]; cout<<endl;
73
}
for (i=0;i<n;i++){ s=0;
for (j=0;j<m;j++)
if (a[i][j]%3==0) s+=1; cout<<"строка -"<<i<<"; s= "<<s;
}
cout<<endl;
getch();
}
Пример 5. В каждой строке заданного целочисленного массива A(n, m) найти сумму элементов.
/* В каждой строке заданного целочисленного массива A(n,m) найти сумму элементов */
#include <iostream> #include <conio.h> using namespace std; int main()
{ int i,j,m,n,s; int a[20][20]; cout<<" n = "; cin>>n; cout<<" m = "; cin>>m; cout<<"input massiv:"<<endl; for (i=0;i<n;i++)
for (j=0;j<m;j++) { cout<<"a["<<i<<"]["<<j<<"]="; cin>>a[i][j];
}
cout<<"massiv A:"<<endl; for (i=0;i<n;i++)
{ cout<<"elements "<<i<<" - stroki:"<<endl; for (j=0;j<m;j++) cout<<" "<<a[i][j]; cout<<endl;
}
for (i=0;i<n;i++) { s=0;
for (j=0;j<m;j++) s+=a[i][j];
cout<<" строка - "<<i<<"; s= "<<s;
}
cout<<endl;
74
getch();
}
Пример 6. В заданном целочисленном массиве A(n, m) найти сумму положительных элементов и произведение положительных элементов, кратных 3.
/* В заданном целочисленном массиве A(n,m) найти сумму положительных элементов и произведение положительных элементов, кратных 3 */
#include <iostream> using namespace std; const int n_max=30, m_max=30;
void input_m(int a[n_max][m_max],int &n,int &m); void output_m(int a[n_max][m_max],int n,int m);
void poisk(int a[n_max][m_max],int n,int m,int &s,int &p);
int main(){
int a[n_max][m_max]; int n,m,s,p; input_m(a,n,m); cout<<endl; output_m(a,n,m); cout<<endl; poisk(a,n,m,s,p); cout<<endl;
cout<<"s = "<<" "<<s<<" "; cout<<"p = "<<" "<<p; return 0;
}
void input_m(int a[n_max][m_max],int &n,int &m){ cout<<"n,m = ";cin>>n>>m;
for (int i=0;i<n;i++) for (int j=0;j<m;j++){
cout<<"a["<<i+1<<"]["<<j+1<<"]= "; cin>>a[i][j];
}
}
void output_m(int a[n_max][m_max],int n,int m){
75
for (int i=0;i<n;i++){ for (int j=0;j<m;j++) cout<<a[i][j]<<" "; cout<<"\n";
}
}
void poisk(int a[n_max][m_max],int n,int m,int&s,int&p){ s=0;p=1;
for (int i=0;i<n;i++){ for (int j=0;j<m;j++){
if (a[i][j]>0) s+=a[i][j];
if (a[i][j]>0 && a[i][j] %3==0) p*=a[i][j];
}
}
}
Пример 7. В заданном целочисленном массиве A(n, m) найти количество строк, строго упорядоченных по возрастанию
/* В заданном целочисленном массиве A(n,m) найти количество строк, строго упорядоченных по возрастанию */
#include <iostream> using namespace std; const int n_max=30, m_max=30;
void input_m(int a[n_max][m_max],int &n,int &m); void output_m(int a[n_max][m_max],int n,int m); int poisk(int a[n_max][m_max],int n,int m);
int main(){
int a[n_max][m_max]; int n,m,k; input_m(a,n,m); cout<<endl; output_m(a,n,m); cout<<endl;
76
k=poisk(a,n,m);
cout<<endl;
cout<<"k="<<"\t"<<k<<"\t";
return 0;
}
void input_m(int a[n_max][m_max],int &n,int &m){ cout<<"n, m = ";cin>>n>>m;
for (int i=0;i<n;i++) for (int j=0;j<m;j++){
cout<<"a["<<i+1<<"]["<<j+1<<"]= "; cin>>a[i][j];
}
}
void output_m(int a[n_max][m_max],int n,int m){ for (int i=0;i<n;i++){
for (int j=0;j<m;j++) cout<<a[i][j]<<"\t"; cout<<"\n";
}
}
int poisk(int a[n_max][m_max],int n,int m){
int k=0;
for (int i=0;i<n;i++){ int j=0;
while (j<m-1 && a[i][j]<a[i][j+1]) j++;
if (j==m-1) k++;
}
return k;
}
Пример 8. Дана матрица A(N, N). Получить вектор B(N), компоненты которого находятся по правилу: Bi равно первому по порядку положительному элементу в i-й строке матрицы (если таких элементов в строке нет, то принять Bi = –1).
77
/* Дана матрица A(N, N). Получите вектор B(N), компоненты которого находятся по правилу: Bi равно первому по порядку положительному элементу в i-й строке матрицы
(если таких элементов в строке нет, то примите Bi = –1).*/ #include <stdio.h>
#include <iostream> using namespace std; const int size = 10;
void InputOutput(int A[size][size], int &N, int &M) { int i, j;
printf(" N= "); scanf("%i", &N); //Количество строк printf(" M= "); scanf("%i", &M); //Количество столбцов for (i=0; i<N; i++)
for (j=0; j<M; j++)
{ printf("A[%i,%i] = ", i+1, j+1); scanf("%i", &A[i][j]);
}
printf("My matrica:\n"); for (i=0; i<N; i++)
{ for (j=0; j<M; j++) printf("%5i", A[i][j]); printf("\n");
}
}
int main(){
int A[size][size];
int b[size]; int N, M,c; InputOutput(A, N, M); for (int i=0; i<N; i++){ int j = 0;
while ((j<M) && (A[i][j]<=0)) j++;
if (j<M) b[i]=A[i][j]; else b[i]=-1;
}
cout<<"REZULT: B("; for (int i=0; i<N; i++) cout<<b[i]<<", "; cout<<")";
return 0;
}
78
Пример 9. Транспонировать матрицу, т. е. преобразовать ее следующим образом: элементы i – строки поменять местами с элементами i -го столбца.
// Транспонировать матрицу
#include <iostream> using namespace std; const int n_max=30, m_max=30;
void input_m(int a[n_max][m_max],int &n); void output_m(int a[n_max][m_max],int n);
void transponirovanie(int a[n_max][m_max],int n);
int main(){
int a[n_max][m_max]; int n; input_m(a,n); cout<<endl; output_m(a,n); cout<<endl;
transponirovanie(a,n);
cout<<endl; output_m(a,n); cout<<endl; return 0;
}
void input_m(int a[n_max][m_max],int &n){ cout<<"n= ";cin>>n;
for (int i=0;i<n;i++) for (int j=0;j<n;j++){
cout<<"a["<<i+1<<"]["<<j+1<<"]= "; cin>>a[i][j];
}
}
void output_m(int a[n_max][m_max],int n){ for (int i=0;i<n;i++){
for (int j=0;j<n;j++) cout<<a[i][j]<<"\t"; cout<<"\n";
}
}
79
void transponirovanie(int a[n_max][m_max],int n){ for (int i=0;i<n;i++){
for (int j=0;j<i;j++) swap(a[i][j],a[j][i]);
}
}
Пример 10. В заданном целочисленном массиве A(n, n) найти сумму элементов, лежащих на главной и побочной диагоналях
/* В заданном целочисленном массиве A(n, n) найти сумму элементов, лежащих на главной и побочной диагоналях */
#include <iostream> using namespace std; const int n_max=30, m_max=30;
void input_m(int a[n_max][m_max],int &n); void output_m(int a[n_max][m_max],int n); int summa_diag(int a[n_max][m_max],int n);
int main(){
int a[n_max][m_max]; int n,s; input_m(a,n); cout<<endl; output_m(a,n); cout<<endl; s=summa_diag(a,n); cout<<endl; cout<<"s= "<<s; return 0;
}
void input_m(int a[n_max][m_max],int &n){ cout<<"n= ";cin>>n;
for (int i=0;i<n;i++) for (int j=0;j<n;j++){
cout<<"a["<<i+1<<"]["<<j+1<<"]= "; cin>>a[i][j];
}
80
