Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

zadachi

.pdf
Скачиваний:
13
Добавлен:
31.05.2015
Размер:
694.99 Кб
Скачать

матрицы. В головной функции ввести размерности матрицы, создать объект и проверить составленные методы.

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);

 

 

};

 

 

 

 

void ClMatr::MyInp()

 

 

{ int x,

y=1;

 

 

 

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])

43

{ min=a[i][j];

Nmin=i;

 

 

}

 

 

 

 

 

}

 

 

 

 

 

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

 

 

{ int d;

 

 

 

 

 

if (k1!=k2)

 

 

 

 

 

for (int j=0; j<n2;

j++)

 

 

 

{ d=a[k1][j];

a[k1][j]=a[k2][j];

 

a[k2][j]=d;

 

 

 

 

}

 

 

 

 

 

}

 

 

 

 

 

int main()

 

 

 

 

 

{ int n1, n2, Nmax, Nmin, max, min;

clrscr();

cout<<"\nn1=";

cin>>n1;

cout<<" n2=";

cin>>n2;

ClMatr ob(n1,n2);

 

clrscr();

 

 

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)В зависимости от способностей студентов задания выполняются в модульном

и(или) объектно-ориентированном стиле, что влияет на оценку. Каждый проект необходимо разбить на несколько функций (методов).

Обработка строк матрицы

3. В каждой строке матрицы найти указанные величины и из них построить один или два одномерных массива, размерности которых соответствуют количеству строк матрицы:

a) среднее значение среди положительных и среднее значение среди отрицательных элементов;

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

в) сумму чисел до первого положительного числа, включая его; г) есть ли нуль в строке. Получить 1, если есть и 0 в противном

случае;

44

д) первый отрицательный элемент и его номер. Если отрицательных чисел в строке нет, получить соответственно 0 и -1.

4.В матрице найти сумму наибольших элементов строк, наибольшую сумму элементов строк и номер такой строки (любой, если несколько строк имеют наибольшую сумму).

5.Найти наибольший среди наименьших элементов строк и наименьший среди наибольших элементов строк.

6.В матрице найти количество строк, у которых

a)все нули;

б) есть хотя бы один нуль и номер первой такой строки.

7.Дана матрица A, в которой Ai,j – оценка i-го студента на j-м экзамене по 10-балльной системе. Фамилии и названия предметов в памяти не хранятся.

a)Найти количество отличников, т. е. количество строк, в которых только 9 и (или) 10. При выводе такие строки выделить другим цветом.

b)Найти количество двоечников, т. е. количество строк, в которых есть 1 и (или) 2.

8.Умножить матрицу на вектор (одномерный массив).

Обработка матрицы по столбцам

9. Это же (см. 3) найти для каждого столбца матрицы и построить один или два одномерных массива, размерности которых соответствуют количеству столбцов матрицы.

Замечание. По возможности обработку матрицы по столбцам желательно избегать, так как элементы матрицы в памяти располагаются по строкам и выбор элементов столбца занимает много времени.

Обработка всей матрицы

10.Это же (см. 3), т. е. одно или два числа найти для всей матрицы в целом.

11.Даны матрицы A и B одинаковой размерности. Вычислить

r

 

A

 

B

 

,где

 

M

 

наименьшее среди положительных

 

 

 

 

 

 

 

 

 

 

 

 

 

A B

 

 

 

 

 

 

 

 

 

 

 

 

 

чисел матрицы.

12. Умножить две матрицы, проверив согласованность их размерностей.

Обработка части матрицы (диагонали, треугольника и т.п.)

13. Дана квадратная целочисленная матрица. Найти количество простых чисел и количество чисел, у которых в двоичном представлении нет нулей:

45

a)на главной диагонали;

b)на побочной диагонали;

c)в левом нижнем треугольнике относительно главной диагона-

ли;

d) в правом нижнем треугольнике относительно побочной диаго-

нали;

e)в верхнем треугольнике относительно главной и побочной диагонали;

f)в правом треугольнике относительно побочной и главной диа-

гонали.

Преобразование матрицы, в том числе сортировка

14.Числа заданной матрицы, принадлежащие отрезку [a, b], увеличить в 100 раз, остальные уменьшить в 2 раза. Измененную матрицу оставить на том же месте.

15.В каждой строке матрицы поменять местами наибольший с наименьшим элементом. Если в строке несколько наибольших элементов и (или) несколько наименьших, то поменять местами первый наибольший

споследним наименьшим этой строки.

16.Поменять местами строки матрицы, в которых находятся первое отрицательное число первого столбца и последнее положительное число этого же столбца. Если в первом столбце нет отрицательных чисел, то первую строку матрицы поменять местами с той, в которой находится последнее положительное число первого столбца. Если в первом столбце нет положительных чисел, то последнюю строку матрицы поменять местами с той, в которой находится первое отрицательное число первого столбца..

17.В квадратной матрице поменять местами строку и столбец, на пересечении которых находится наибольший элемент всей матрицы. Если наибольших чисел несколько, то переставить строку с наименьшим индексом со столбцом с наибольшим индексом.

18.Из матрицы “удалить” строку и столбец, на пересечении которых находится наибольший элемент всей матрицы, “подтянув” элементы матрицы к левому верхнему углу. Элементам последней строки и последнего столбца присвоить нулевое значение.

19.Транспонировать квадратную матрицу, оставив новую матрицу на том же месте.

20.Каждую строку матрицы рассортировать по возрастанию элементов строк.

21.Рассортировать строки целочисленной матрицы по следующему параметру строки:

46

a) количеству четных чисел;

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

Замечание. Для решения подобных задач эффективнее использовать указатели и динамические матрицы, которые рассматриваются во втором семестре.

Построение матриц

22.Даны два массива A и B одинаковой размерности. Построить квад-

ij

ратную матрицу такой же размерности по формуле Cij ak

( bl ).

k 0

l 0

23. Даны две матрицы A и B одинаковой размерности. Построить мат-

 

Aij Bij ,если Aij Bij 0,

 

Aij *Bij ,еслиодноизних положительно,

рицу С по правилу: Cij

 

0востальных случаях.

 

24.

Дан одномерный массив b размерности m. Построить матрицу

 

b1

b2

bm

 

2

2

2

 

A b1

b2

bm

 

 

 

 

 

bn

bn

bn

 

1

2

m

25.

Дано число x. Построить матрицу

1

x

x2

x3

x8

 

x

0

0

0

 

0

 

x2

0

0

0

 

0

 

 

 

0

0

0

 

0

A x

3

 

 

 

 

 

 

8

0

0

0

 

0

x

 

 

9

x

8

x

7

x

6

 

x

x

 

 

 

 

x9 x8

x7

x6

x

1

Матрицы специального вида

26. Дана треугольная матрица, т. е. такая квадратная матрица, в которой все элементы, расположенные выше главной диагонали, имеют одинаковые значения, например нуль. Записать такую матрицу в одномерный массив размерности n∙(n+1)/2, где n – количество строк и столбцов матрицы, сохранив в нем только элементы, расположенные выше главной диагонали. Вывести такой одномерный массив в виде матрицы, выводя и одинаковые (например, нулевые) ее значения.

47

27.Решить такую же задачу (см. 26), если матрица является треугольной относительно побочной диагонали.

28.Квадратная матрица A называется симметричной относительно главной диагонали, если Aij = Aji для i<j. Записать такую матрицу в одномерный массив размерности nn+1)/2, где n – количество строк и столбцов матрицы, сохранив в нем элементы главной диагонали и расположенные выше ее. Вывести такой одномерный массив в виде симметричной матрицы.

29.Решить такую же задачу (см. 28), если матрица симметрична от-

носительно побочной диагонали.

30– 31. Найти произведение вектор-строки на симметричную относительно главной (побочной) диагонали матрицу.

32– 33. Найти произведение симметричной относительно главной (побочной) диагонали матрицы на вектор-столбец.

34– 37. Найти сумму (произведение) двух матриц, первая из которых симметрична относительно главной (побочной) диагонали.

38– 41. Найти сумму (произведение) двух матриц, симметричных относительно главной (побочной) диагонали.

48

С О Д Е Р Ж А Н И Е

1.Рабочая программа курса “Методы программирования” ……….. 3

2.Разветвляющиеся алгоритмы. Ввод, вывод ……………………... 6

3.Циклические алгоритмы ………………………………………….. 8

4.Одномерные массивы (векторы) …………………………………. 12

5.Функции с одним результатом ………………………………….…16

6.Функции типа void ………………………………………………... 21

7.Введение в объектно-ориентированное программирование …… 27

8.Простые типы данных …………………………………………….. 36

9.Матрицы (двухмерные массивы) ………………………………… 41

49

Учебное издание

Аленский Николай Алексеевич

СБОРНИК ЗАДАЧ ПО ПРОГРАММИРОВАНИЮ

на языке С++

Учебно-методическое пособие для студентов специальностей

G 31 03 01 “Математика”, G 31 03 03 “Механика”

В авторской редакции

Технический редактор Т. К. Романович Корректор Г. М. Добыш

Ответственный за выпуск Н. А. Аленский

Подписано в печать Формат 60x 84/16. Бумага офсетная. Гарнитура Таймс. Печать офсетная. Усл. печ. л. Тираж 100 экз. Зак.

Белорусский государственный университет. Лицензия ЛВ № 315 от 14.07.2003.

220050, Минск, проспект Франциска Скорины, 4.

Отпечатано с оригинала-макета заказчика. Республиканское унитарное предприятие

“Издательский центр Белорусского государственного университета”. Лицензия ЛП № 461 от 14.08.2001.

220030, Минск, ул. Красноармейская, 6.

50

51

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]