Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка ИНФОРМАТИКА_2009.doc
Скачиваний:
17
Добавлен:
02.06.2015
Размер:
1.08 Mб
Скачать

Задания для контрольной работы №2 задание 8. Функции

Для выполнения задания количество и содержание функций пользователя следует выбрать так чтобы основная функция содержала только (или в основном) вызовы этих функций Блок-схемы алгоритмов следует представить как для основной функции так и для вызываемых функций

Количество обрабатываемых матриц или одномерных массивов подсчитывать, а не задавать.

1 Столбцы матриц поставить в порядке возрастания элементов первой строки.

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

3 В строках матриц нулевые элементы примкнуть к первым нулевым.

4 Сформировать одномерные массивы из минимальных элементов столбцов матриц.

5 В строках матриц отрицательные элементы расставить по убыванию.

6 Найти произведения пар матриц.

7 Вычислить следы матриц и сформировать из них массив.

8 Строки матриц поставить в порядке убывания элементов первого столбца.

9 Найти среднее арифметическое максимальных элементов массивов.

10 В строках матриц перед максимальными элементами добавить заданное число.

11 В столбцах матриц отрицательные элементы поставить по убыванию.

12 В строках матриц удалить минимальные элементы.

13 В массивах удалить нулевые элементы.

14 Положительные элементы массивов расставить по убыванию, остальные - оставить на своих местах.

15 Элементы массивов расставить по возрастанию, а затем удалить нулевые элементы и вставить заданное число, не нарушая порядка расположения.

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

17 В указанных строках матриц положительные элементы располагать по возрастанию.

18 Сформировать массив из минимальных элементов введенных массивов, указывая для каждого элемента формируемого массива его положение в исходном массиве.

19 В матрицах добавлять по строке с максимальными элементами по столбцам.

20 В столбцах матриц минимальные элементы поставить в первую строку.

21 Во введенных массивах найти последовательность максимальной длины из элементов, расположенных в порядке возрастания.

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

23 Указать матрицу, максимальный элемент в которой минимален.

24 В столбцах матриц отрицательные элементы примкнуть к первому отрицательному.

25 В матрицах минимальные элементы заменять на указанное число.

26 Вводимые массивы сортировать по убыванию, а затем из них удалять через один отрицательные элементы.

27 Во вводимых массивах элементы расставлять по убыванию, если сумма элементов <0, по возрастанию, если сумма элементов >0, и удалять нулевые, если она равна нулю.

28 Элементы в массивах расставлять следующим образом: нулевые - в конец массива, положительные и отрицательные - чередовать.

29 Строки матриц расположить в порядке возрастания сумм элементов.

30 Столбцы матриц расположить в порядке убывания количеств отрицательных элементов.

Пример

//В указанной строке матрицы расположить элементы по возрастанию

#include<iostream.h>

#include<iomanip.h>

#include<conio.h>

#include<stdlib.h>

void inmatr(int[][20],int&,int&);

void outmatr(int[][20],int,int);

void sort(int[][20],int,int);

void main()

{

int x[10][20],n,m,k,kol=0; //kol – количество обработанных матриц

char ch;

clrscr();

do{

inmatr(x,n,m);

cout<<setw(30)<<"Введена матрица:"<<endl;

outmatr(x,n,m);

cout<<" Укажите номер сортируемой строки(<"<<n<<"):";

cin>>k;

sort(x,k,m);

cout<<endl<<setw(30)<<"Получена матрица:"<<endl;

outmatr(x,n,m);

kol++;

cout<<endl<<"Продолжить работу (y/n)? ";

cin>>ch;}

while(ch=='y'||ch=='Y');

cout<<"Обработано матриц: "<<kol<<endl;

cout<<" Конец программы.";

getch();

}

void inmatr(int a[][20],int&p,int&q)

{

cout<<"Введите размеры матрицы:"<<endl

<<"число строк(<=10):";

cin>>p;

cout<<"число столбцов(<=20):";

cin>>q;

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

for(int j=0;j<q;j++)a[i][j]=(rand()-16383)%100;

}

void outmatr(int a[][20],int p,int q)

{

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

for(int j=0;j<q;j++)cout<<setw(4)<<a[i][j];

cout<<endl;}

}

void sort(int a[][20],int t,int q)

{

int z;

for(int i=1;i<q-1;i++)

for(int j=q-1;j>=i;j--)

if(a[t][j-1]>a[t][j]){

z=a[t][j-1];

a[t][j-1]=a[t][j];

a[t][j]=z;}

}

ЗАДАНИЕ 9. ОБРАБОТКА ДИНАМИЧЕСКИХ МАССИВОВ

Для размещения массивов следует использовать динамическую память

  1. В матрице удалить столбцыв которых количество отрицательных элементов превышает заданноеа затем в качестве первого добавить столбецэлементы которого равны суммам элементов в соответствующих строках

  2. В матрице удалить строки содержащие нули а затем добавить строку элементы которой равны произведениям элементов в соответствующих столбцах

  3. В матрице удалить столбцы с нулевыми элементами ниже главной диагонали а затем добавить столбец элементы которого равны разностям соответствующих элементов первого и второго столбцов

  4. В матрице удалить столбцы с отрицательными элементами на главной диагонали а затем в качестве второго добавить столбец элементы которого равны суммам положительных элементов соответствующих строк

  5. В матрице удалить строки с нулевыми элементами на главной диагонали а затем в качестве первой добавить строку элементы которой равны произведениям элементов в соответствующих столбцах

  6. В матрице удалить строки с нулевыми элементами выше главной диагонали а затем в качестве третьей добавить строку элементы которой равны разностям соответствующих элементов первой и второй строк

  7. В матрице удалить строку с максимальным по модулю элементом матрицы а затем в качестве первой добавить строку элементы которой равны суммам модулей элементов в соответствующих столбцах

  8. В матрице удалить строки первые отрицательные элементы которых лежат ниже главной диагонали а затем в качестве первой и второй строк добавить строки элементы в которых равны суммам и произведениям элементов в соответствующих столбцах

  9. В матрице удалить строки последние отрицательные элементы которых лежат выше главной диагонали а затем в качестве второй добавить строку элементы которой равны разностям соответствующих элементов первой и второй строк

  10. В матрице удалить столбец с максимальным элементом матрицы а затем вставить заданный столбец перед столбцом с минимальным элементом полученной матрицы

  11. В матрице удалить строку с максимальным элементом матрицы а затем добавить строки элементы которых равны суммам и произведениям элементов в соответствующих столбцах

  12. В матрице удалить строки с нулевыми элементами а затем добавить строку с элементами из заданного массива

  13. В матрице удалить строку с максимальной суммой элементов а затем в качестве третьей добавить строку элементы которой равны разностям соответствующих элементов первой и последней строк

  14. В матрице удалить строку с минимальным элементом матрицы а затем добавить строку элементы которой равны модулям произведений элементов соответствующих столбцов

  15. В матрице удалить столбцы с отрицательными суммами элементов а затем добавить столько же столбцов из элементов заданного массива

  16. В матрице удалить строки с положительными суммами элементов а затем добавить столько же строк из отрицательных элементов заданного массива

  17. В матрице удалить столбцы с отрицательными произведениями элементов а затем в качестве первого добавить столбец элементы которого равны произведениям элементов в соответствующих строках

  18. В матрице удалить столбцы с отрицательными элементами а затем добавить столько же столбцов из положительных элементов заданного массива

  19. В матрице удалить строки с элементами на главной диагонали превышающими заданную величину а затем в качестве первой вставить строку из максимальных элементов соответствующих столбцов

  20. В матрице удалить столбцы с положительными суммами элементов а затем в качестве первого вставить столбец из минимальных элементов соответствующих строк

  21. В матрице удалить строку с минимальным произведением элементов а затем в качестве третьей добавить строку элементы которой равны разностям элементов последней и первой строк

  22. В матрице удалить столбец с минимальным элементом матрицы а затем добавить столбец составленный из максимальных по модулю элементов в соответствующих строках

  23. В матрице удалить столбцы с отрицательными первыми элементами а затем добавить столбец составленный из максимальных элементов соответствующих строк

  24. В матрице удалить строки последние элементы которых отрицательны а затем в качестве первой добавить строку из элементов заданного массива

  25. В матрице удалить столбцы с отрицательной суммой элементов а затем добавить столбец из минимальных элементов соответствующих строк

  26. В матрице удалить столбцы с нулевыми элементами выше главной диагонали а затем в качестве первого добавить столбец элементы которого равны суммам элементов соответствующих строк

  27. В матрице удалить столбцы с максимальным и минимальным элементами матрицы а затем на место первого добавить столбец из произведений элементов соответствующих строк

  28. В матрице удалить строки с положительными последними элементами а затем добавить строку из минимальных элементов по соответствующим столбцам

  29. В матрице удалить первую и последнюю строки а затем добавить строку из максимальных элементов соответствующих столбцов

  30. В матрице удалить столбцы с равными количествами положительных и отрицательных элементов а затем добавить столько же столбцов из элементов заданного массива

Пример

//В матрице удалить строки с последними отрицательными элементами,

//а затем добавить строку из сумм элементов по соответствующим столбцам

#include<iostream.h>

#include<iomanip.h>

#include<stdlib.h>

#include<conio.h>

#include<assert.h>

#define NDEBUG//отмена действия операторов контроля “assert(условие)”

void main()

{

clrscr();

int i,j,n,m,k,q,**ptr;

cout<<"Введите размеры исходной матрицы"<<endl

<<"число строк:";

cin>>n;

cout<<"число столбцов:";

cin>>m;

ptr=new int*[n];

assert(ptr!=0);//контроль выделения динамической памяти

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

ptr[i]=new(int[m]);

assert(ptr[i]!=0);

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

ptr[i][j]=(rand()-16383)%10;}

cout<<setw(30)<<"Введена матрица:"<<endl;

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

for(j=0;j<m;j++)cout<<setw(4)<<ptr[i][j];

cout<<endl;}

q=0; //q-номер анализируемой строки

k=0; //k-количество удаленных строк

do{

if(ptr[q][m-1]<0){

for(i=q;i<n-k-1;i++)

for(j=0;j<m;j++)ptr[i][j]=ptr[i+1][j];

delete[]ptr[n-k-1];

k++;continue;}

q++;}

while(q+k<n);

ptr[n-k]=new(int[m]);

assert(ptr[n-k]!=0);

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

ptr[n-k][j]=0;

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

ptr[n-k][j]+=ptr[i][j];}

cout<<setw(30)<<"Получена матрица:"<<endl;

for(i=0;i<=n-k;i++){

for(j=0;j<m;j++)cout<<setw(4)<<ptr[i][j];

cout<<endl;}

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

delete[]ptr[i];//освобождение динамической памяти

delete[]ptr;

cout<<endl<<"Конец программы.";

getch();

}