Работа над массивами с помощью языка С++

Задание 1. Дан двумерный массив размерностью 5x6, заполненный целыми числами, введёнными с клавиатуры. Сформировать одномерный массив, каждый элемент которого равен наибольшему по модулю элементу соответствующего столбца.



Входные данные:



matr[5][6] - двумерный массив.

Выходные данные:

mas[6] - одномерный массив.



Текст программы:



#include <stdio.h>

#include <conio.h>

#include <math.h>

#define N 5

#define M 6



void main(void)

{

int matr[N][M];

int mas[M];

int i,j;



do{

clrscr();

printf("Введите двумерный массив \n");

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

   for(j=0;j<M;j++) 

   {

   scanf("%d",&matr[i][j]);

                  }

printf("\n двумерный массив:\n");

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

{

   for(j=0;j<M;j++)

      printf("%7d",matr[i][j]);

      printf("\n");

       }

printf("\n массив наибольших по модулю элементов:\n");

for(j=0;j<M;j++) 

{

 mas[j]=matr[0][j];

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

     if(abs(matr[i][j])>abs(mas[j])) mas[j]=matr[i][j];

 printf("%7d",mas[j]);

               }

printf("\n\n1 - повторить");

 }while(getch()=='1');

}

Блок-схема:










Тестирование:



двумерный массив:

     1     -3      5     -7      0      0

     0      5      8     -9      3      0

     3      4     -8      4      3      0

    -4      3      0      7      3      0

     0      3      3      7      1      0



массив наибольших по модулю элементов:



    -4      5      8     -9      3      0



Задание 2. Дан двумерный массив n * m. Определить, есть ли в данном массиве столбец, в котором равное количество положительных и отрицательных элементов.



Входные данные:



matr[n][m] - двумерный массив,

n, m - размер массива.

s[60] - строка.



Текст программы:



#include <stdio.h>

#include <conio.h>

#include <string.h>



void main(void)

{

int i,j;

int n,m;

int matr[10][10];

int pol,otr;

char s[60];



do{

strcpy(s,0);

clrscr();

printf("Введите размер массива (n*m)\n");

scanf("%d %d",&n,&m);

printf("Введите массив\n");

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

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

      scanf("%d",&matr[i][j]);



printf("\nОпределить, есть ли в данном массиве столбец,\

в котором\nравное количество положительных и отрицательных элементов.\n");



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

{  

 otr=0;

 pol=0;

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

 {

  if(matr[i][j]<0) ++otr;

  if(matr[i][j]>0) ++pol;

 }

 if(pol==otr) strcat(s,"  есть");

   else strcat(s,"   нет");

}

printf("\n");

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

{

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

 printf("%6d",matr[i][j]);

printf("\n");

}  

printf("%s",s);

printf("\n\n1 - повторить");

 }while(getch()=='1');

}

Блок-схема:






 


Тестирование:



Определить, есть ли в данном массиве столбец, в котором

равное количество положительных и отрицательных элементов.



    0       1      -2       3       4

    0       2      -4       5      -8

    0       0       9      -7       0

    0      -3       4       0       0

 есть   нет  есть   нет  есть





Задание 3. Дан двумерный массив размерностью 8x7.

а). Удалить все столбцы, а которых первый элемент больше последнего.

б). Заменить все элементы первых трёх столбцов на их квадраты.



Входные данные:



matr[8][7] - двумерный массив.



Функции:

Print - вывод массив на экран.



Текст программы:



#include <stdio.h>

#include <conio.h>

#define N 8

#define M 7

void Print(int matr[][M],int m)

{

int i,j;

for(i=0;i<N;i++) {

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

      printf("%6d",matr[i][j]);

   printf("\n");

 }

}



void main(void)

{



int m;

int i,j;

int matr[N][M];

int r,t;



do{

m=M;

clrscr();

printf("Введите массив\n");

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

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

     scanf("%d",&matr[i][j]);

     }

clrscr();

printf(" массив\n");

Print(matr,m);



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

{

  if(matr[0][j]>matr[N-1][j]) 

  {

   for(t=0;t<N;t++) 

      for(r=j;r<m-1;r++) 	

         matr[t][r]=matr[t][r+1];

   --m;

   --j;

  }

}

printf("а) .Удалить все столбцы, а которых первый элемент больше последнего.\n");

Print(matr,m);



for(j=0;j<3;j++) 

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

  {

   matr[i][j]*=matr[i][j];

  }

printf("б). Заменить все элементы первых трёх столбцов на их квадраты.\n");

Print(matr,m);



printf("\n\n1 - повторить");

 }while(getch()=='1');



}



Блок-схема:




Функция Print






Тестирование:

массив



    1     2     3     4     5     6     7

   -8     0     5     5     4     4     5

    4     5     5     5     5     5     5

    5     5     5    -7     5     5     5

    9     4     4     5     0     5     3

    5     6     3     4     5     4     5

    6     7     8     9     0     4     8

   -4     5     9     0     9     9     0



а) .Удалить все столбцы, в которых первый элемент больше последнего.



    2     3     5     6

    0     5     4     4

    5     5     5     5

    5     5     5     5

    4     4     0     5

    6     3     5     4

    7     8     0     4

    5     9     9     9



б). Заменить все элементы первых трёх столбцов на их квадраты.

    4      9     25     6

    0     25    16     4

   25    25    25     5

   25    25    25     5

   16    16     0      5

   36     9     25     4

   49    64     0      4

   25    81    81     9