Пример выполнения задания на составление модуля.



В качестве примера выполнения задания на составление модуля рассмотрим решение следующей задачи. Удалить из матрицы B(M,N) действительных чисел строки, содержащие максимальный и минимальный элементы всей матрицы. Если минимальный и максимальный элементы находятся в одной строке, то никакие строки не удалять. Строки преобразованной матрицы упорядочить методом пузырька по возрастанию сумм цифр целой части последних элементов строк матрицы.

Приступая к составлению модуля, необходимо определить основные задачи, решение которых позволит решить общую задачу. Решение каждой частной задачи будет оформлено в виде подпрограммы, входящей в состав модуля. Таким образом, будем придерживаться основного принципа разбиения программы на подпрограммы – каждая подпрограмма реализует одну, но законченную функцию.

В соответствии с поставленным заданием можно перечислить основные этапы его выполнения:

1. Ввод исходных данных – количества строк и столбцов матрицы, а также самих элементов матрицы (подпрограмма ввода исходных данных).

2. Вывод исходных данных для последующего контроля правильности решения задачи (подпрограмма вывода матрицы).

3. Определение номера строки матрицы, содержащей максимальный элемент матрицы, т.е. поиск максимального элемента всей матрицы и номера строки, в которой он расположен (подпрограмма поиска максимального элемента).

4. Определение номера строки матрицы, содержащей минимальный элемент матрицы, т.е. поиск минимального элемента всей матрицы и номера строки, в которой он расположен (подпрограмма поиска минимального элемента).

5. Удаление из матрицы строки с заданным номером.

6. Определение цифр целого числа.

7. Вычисление суммы элементов одномерного массива.

8. Сортировка строк матрицы.

9. Вывод полученных результатов.

Текст заголовочного файла

const int mm=20, nn=15, kk=10;

typedef float mas[nn];

typedef mas matr[mm];

typedef unsigned int masbyt[kk];

typedef int masint[mm];

void input(int *m,int *n, matr b);

void output(const int m,const int n,const matr b);

int maxstr(const int m,const int n,const matr b);

int minstr(const int m,const int n,const matr b);

void udalenie(const int m,const int n,const int nom,matr b);

void zifra(unsigned int a,masbyt c,int *kol);

void sortirov(const int m, matr b,masint s);

 

   Текст файла mod1.cpp:

#include "stdafx.h"

#include "stdio.h"

#include "conio.h"

#include "math.h"

#include "mod1.h"

 void input(int *m,int *n, matr b)

 { printf("\nwwedite kol-wo strok i stolbzow\n");

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

printf("wwedite matrizu\n");

for (int i=0; i<*m;i++)

for (int j=0;j<*n;j++)

   scanf("%f",&b[i][j]);

 }

void output(const int m,const int n,const matr b)

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

{

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

   printf("%6.2f ",b[i][j]);

printf("\n");

}

}

int maxstr(const int m,const int n,const matr b)

{ int i,j,imax;

float bmax;

bmax=b[0][0];

imax=0;

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

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

   if (b[i][j]>bmax)

        {

              bmax=b[i][j];

        imax=i;

        }

return imax;

}

int minstr(const int m,const int n,const matr b)

{int i,j,imin;

float bmin;

bmin=b[0][0];

imin=0;

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

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

    if (b[i][j]<bmin)

        {

      bmin=b[i][j];

      imin=i;

        }

return imin;

}

void udalenie(const int m,const int n,const int nom,matr b)

{int i,j;

for (i=nom; i<m-1;i++)

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

    b[i][j]=b[i+1][j];

}

 void zifra(unsigned int a,masbyt c,int *kol)

 {unsigned int k;

*kol=0;

do

 {

  k=a%10;

  c[*kol]=k;

  (*kol)++;

  a/=10;

 }while (a>0);

 }

void sortirov(const int m, matr b,masint s)

{

int i,k,sp;

bool pr;

float f;

k=0;

do

{k++;

  pr=false;

  for (i=0;i<m-k;i++)

    if (s[i]>s[i+1])

        {

      pr=true;

      sp=s[i];

      s[i]=s[i+1];

      s[i+1]=sp;

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

       {f=b[i][j];

       b[i][j]=b[i+1][j];

       b[i+1][j]=f;

       }

        }

} while (pr);

}

Текст основной функции приведен ниже

// основная функция

#include "stdafx.h"

#include "conio.h"

#include "math.h"

#include "mod1.h"

 

int _tmain(int argc, _TCHAR* argv[])

{ matr b;

int m,n,imax,imin,i,j,kol;

masbyt c;

masint s;

input(&m,&n,b);

output(m,n,b);

imax=maxstr(m,n,b);

imin=minstr(m,n,b);

printf("\nnomer stroki,sodershaschei max element=%3d",imax);

printf("\nnomer stroki,sodershaschei min element=%3d",imin);

if (imax>imin)

{

udalenie(m,n,imax,b);

udalenie(m,n,imin,b);

m=m-2;

}

else if (imin>imax)

{

udalenie(m,n,imin,b);

udalenie(m,n,imax,b);

m=m-2;

}

printf("\nmatriza s udalennimi strokami\n");

output(m,n,b);

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

{unsigned int a;

a=abs(b[i][n-1]);

zifra(a, c, &kol);

s[i]=0;

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

{

printf("%2d ",c[j]);

s[i]+=c[j];

}

printf(" summa=%4d\n",s[i]);

}

sortirov(m,b,s);

printf("\nmatriza s otsortirowannimi strokami\n");

output(m,n,b);

printf("\n");

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

printf("%3d ",s[i]);

 

getch();

return 0;

}

 

Приведем пример организации модуля с использованием динамических массивов

void input(int *m,int *n,float ***b);

void output(const int m,const int n,float **b);

int maxstr(const int m,const int n,float **b);

int minstr(const int m,const int n,float **b);

void udalenie(const int m,const int n,const int nom,float **b);

void zifra(unsigned int a,unsigned int **c,int *kol);

void sortirov(const int m,float **b,int s[]);

 

#include "stdafx.h"

#include "stdio.h"

#include "conio.h"

#include "stdlib.h"

#include "math.h"

#include "moddin.h"

 

void input(int *m,int *n,float ***b)

{printf("wwedite kol-wo strok i stolbzow matrizi\n");

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

*b=new float *[*m];

for (int i=0;i<*m;i++)

(*b)[i]=new float [*n];

printf("\nwwedite elementi\n");

for(int i=0;i<*m;i++)

       for (int j=0; j<*n;j++)

scanf("%f",&(*b)[i][j]);

}

 

void output(const int m,const int n,float **b)

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

{

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

  printf("%5.1f ",b[i][j]);

printf("\n");

}

}

 

int maxstr(const int m,const int n,float **b)

{ int i,j,imax;

float bmax;

bmax=b[0][0];

imax=0;

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

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

    if (b[i][j]>bmax)

        {

              bmax=b[i][j];

        imax=i;

        }

return imax;

}

 

int minstr(const int m,const int n,float **b)

{int i,j,imin;

float bmin;

bmin=b[0][0];

imin=0;

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

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

    if (b[i][j]<bmin)

        {

      bmin=b[i][j];

      imin=i;

        }

return imin;

}

 

void udalenie(const int m,const int n,const int nom,float **b)

{int i,j;

for (i=nom; i<m-1;i++)

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

    b[i][j]=b[i+1][j];

}

 

void zifra(unsigned int a,unsigned int **c,int *kol)

{unsigned int k;

*kol=0;

*c=NULL;

*c=(unsigned int *)realloc(*c,*kol*sizeof (unsigned int));

do

 {

  k=a%10;

  (*c)[*kol]=k;

  (*kol)++;

  a/=10;

 }while (a>0);

 }

 

 void sortirov(const int m,float **b,int s[])

{

int i,k,sp;

bool pr;

float f;

k=0;

do

{k++;

  pr=false;

  for (i=0;i<m-k;i++)

    if (s[i]>s[i+1])

        {

      pr=true;

      sp=s[i];

      s[i]=s[i+1];

      s[i+1]=sp;

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

       {f=b[i][j];

       b[i][j]=b[i+1][j];

       b[i+1][j]=f;

       }

        }

} while (pr);

}

 

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

#include "stdafx.h"

#include "conio.h"

#include "math.h"

#include "moddin.h"

 

int _tmain(int argc, _TCHAR* argv[])

{ float **b;

int m,n,imax,imin,i,j,kol;

unsigned int *c;

int *s;

input(&m,&n,&b);

output(m,n,b);

imax=maxstr(m,n,b);

imin=minstr(m,n,b);

printf("\nnomer stroki,sodershaschei max element=%3d",imax);

printf("\nnomer stroki,sodershaschei min element=%3d",imin);

if (imax>imin)

{

udalenie(m,n,imax,b);

udalenie(m,n,imin,b);

m=m-2;

}

else if (imin>imax)

{

udalenie(m,n,imin,b);

udalenie(m,n,imax,b);

m=m-2;

}

printf("\nmatriza s udalennimi strokami\n");

output(m,n,b);

s=new int[m];

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

{unsigned int a;

a=abs(b[i][n-1]);

zifra(a, &c, &kol);

s[i]=0;

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

{

printf("%2d ",c[j]);

s[i]+=c[j];

}

printf(" summa=%4d\n",s[i]);

}

sortirov(m,b,s);

printf("\nmatriza s otsortirowannimi strokami\n");

output(m,n,b);

printf("\n");

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

printf("%3d ",s[i]);

 

getch();

return 0;

}

 


Дата добавления: 2018-10-27; просмотров: 235; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!