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

ЗФ_ОАиП / ЭУМК_ОАиП__PDF / курс лекций

.pdf
Скачиваний:
42
Добавлен:
21.03.2016
Размер:
3.28 Mб
Скачать

Таблица 11.3 – Таблица соответствия:

Переменные в

Имя на языке

Тип

Комментарий

задаче

Си

 

 

K

K

int

Искомое количество

 

 

 

элементов

B

B

float

Двумерный статический

 

 

 

массив

A

A

float

Заданное число

-

i

int

Номер строки

-

j

int

Номер столбца

/* Определение количества элементов, больших заданного А и расположенных в строках с нечетными номерами */

#include <stdio.h>

#include <math.h> void main ( )

{

int i, j, m, n, K; float B [10][10];

float A; //Описание переменных

printf (― Введите число строк и столбцов‖); scanf (―%d %d‖, &m, &n);

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

{

printf(―Введите B[%d, %d]=‖, i, j); scanf(―%f‖, &B[i] [j]);

}

puts("Матрица B:"); for(i=0;i<m;i++)

{ for(j=0;j<n;j++) printf("%8.2f",B[i][j]);

printf("\n");

}

puts (― введите число A‖); scanf (―%f‖, &A);

K=0;

for ( i=1; i<m; i=i+2) for ( j=0; j<n; j++)

if( B[i][j]>A) K=K+1; printf(―%d \n‖, K); }//конец main

116

Тесты:

 

-3; 8; -2; 10; 7; 82; -4

 

1) В= -9; 0; -3; 85; 3; 40; -9

A= 4; K=7.

-1; 8; 7; -95; 4; -5; 67

 

-4; -7; 8; 9; 2; -8; -5

 

2) B= -2; 10; 0; 9; -8; 7; -5

A=10; K=0.

-7; 6; -9; 7; 0; -3; 7

 

117

2.3Поиск в матрице строки с максимальной суммой

Графическая схема алгоритма

Начало Ввод m,n,x[]

Вывод x[]

max=s; nmax=0

i=1

 

i<m

Нет

 

 

Да

s=0

j=0

j<n Нет Да

s=s+x[i][j]

j=j+1

Да

s>max

Нет

 

 

max=s; nmax=i

i=i+1

Вывод max, nmax

Конец

s=0; j=0

j<n Нет Да

s=s+x[0][j]

j=j+1

Рисунок 11.25 – Графическая схема алгоритма

118

Текст программы /* Строка с максимальной суммой*/

#include <stdio.h> main()

{

int m, n, nmax, i, j; float max, s, x[10][10]; puts("Введите m, n");

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

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

{ printf ("Введите x[%d][%d]=", i, j); scanf ("%f", &x[i][j]);

}

puts("Матрица x:"); for(i=0;i<m; i++)

{ for(j=0;j<n; j++) printf("%8.2f",x[i][j]);

printf("\n");

}

s=0;

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

s =s+x[0][j]; //Нач. знач. мax – сумма элем. 0-ой стр.

max=s; nmax=0; for(i=0;i<m;i++)

{ s=0;

for(j=0;j<n;j++) s+=x[i][j]; // Сумма элем. строк if(max<s)

{ max=s; nmax=i;}

}

printf("Максимальная сумма %.2f в строке %d\n",max,nmax); fflush(stdin); getchar();

return(0);

}

119

2.4 Пример обработки динамического двумерного массива Задача. Определить количество строк матрицы, в которых суммы всех элементов отрицательные. Массив объявить как динамический. Решение.

0

Начало

1

Ввод A,K

2

Вывод A

3 K=0

4

i=0

 

 

5

Нет

 

 

i<n

 

 

 

 

 

Да

 

 

6

S=0

 

 

 

 

 

7

j=0

 

 

 

 

 

 

8

Нет

 

 

j<m

 

 

 

Да

 

 

9

 

 

 

S=S+A[i] [j]

 

 

10

j=j+1

 

 

 

 

Да

 

11

Нет

 

S<0

 

 

 

12 K=K+1

 

 

 

 

 

13 i=i+1

 

 

14 Вывод K

 

 

 

15

 

 

 

Конец

 

Рисунок 11.26 – Графическая схема алгоритма

120

Таблица 11.4 – Таблица соответствия.

Переменные

Имя на языке Си

Тип

Комментарий

в задаче

 

 

 

S

S

float

Сумма элементов i-той

 

 

 

строки

A

A

float

Двумерный динамический

 

 

 

массив

K

K

float

Количество искомых строк

-

n

int

Количество всех строк в

 

 

 

матрице

-

m

int

Количество столбцов

-

i

int

Номер строки

-

j

int

Номер столбца

/*Пример обработки двумерного динамического массива*/

#include <stdio.h>

#include <math.h> void main ( )

{

int i, j, m, n;

float K, S; //Описание переменных

puts (― введите n, m‖); // Вывод сообщения

scanf (―%d %d‖, &n, &m); // Ввод исх.числа строк и столбцов float**A=new float*[n];

for(i=0; i<n; i++) A[i]=new float[m];

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

{

printf(―Введите A[%d; %d]=‖, i, j); scanf(―%f‖, &A[i] [j]);

}

K=0;

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

{

S=0;

for(j=0; j<m; j++) S=S+A[i] [j]; if(S<0) K=K+1;

}

printf(―%f \n‖, K);

for(i=0; i<n; i++) //Освобождение динамической памяти delete[]A[i];

121

delete[]A;

}

 

 

 

 

 

Тесты:

 

 

 

 

 

 

-3

 

-2

2 6 -3

 

1) A=

6

 

7

-1 20 -4

K=2.

 

-4

 

-2 -3 6 -1

 

 

-4

-2 4 6 4

 

2) A=

3

5

7 2 0

K=0.

 

5

0 -2 9 0

 

122

2.5 Определить, есть ли в матрице столбец, содержащий хотя бы один нулевой элемент Решение.

Введем две вспомогательные переменные t и w:

1, если столбец не найден; t

0, если столбец найден .

1,

если в столбце

íå найден элемент, равный нулю;

 

w

 

 

 

 

 

 

0,

если в столбце

найден элемент, равный нулю .

 

 

 

 

Начало

 

 

 

 

Ввод m,n,x

 

 

 

 

Вывод x

 

 

 

 

 

 

 

Столбец еще

 

 

 

 

 

 

 

 

 

t=1

 

 

 

 

 

 

 

не найден

 

 

 

 

 

 

 

 

 

 

 

 

 

 

j=0

 

 

 

 

Нет

 

j<n и t

 

 

 

Да

 

 

 

 

 

 

w=1

 

 

 

 

 

 

 

i=0

 

 

 

i<m и w

 

Нет

 

 

 

 

Да

 

Да

xij=0

Нет

 

 

w=0

i=i+1

Да

w

Нет

 

 

j=j+1

t=0

В столбце не найден элем., равный нулю

Да

t

Нет

 

 

 

 

 

 

"

"

Вывод "Нет столбца"

 

Вывод "Есть столбец"

 

 

 

Конец

Рисунок 11.27 – Графическая схема алгоритма

123

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

#include <stdio.h> #include <conio.h> main()

{

int m,n,i,j,t,w; float x[10][10];

puts("Введите m,n"); scanf("%d %d",&m,&n); for(i=0;i<m;i++)

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

{

printf("Введите x[%d][%d]=",i, j); scanf("%f", &x[i][j]);

}

puts("Матрица x:"); for(i=0;i<m;i++)

{

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

printf("%8.2f",x[i][j]);

printf("\n");

}

t=1; j=0; //Столбец еще не найден while(j<n && t)

{

w=1; i=0; //В столбце не найден элем., равный нулю while(i<m && w)

if(x[i][j]==0) w=0; else i++;

if(w) j++; // В столбце нет равного 0 элем. else t=0; // В столбце есть равный 0 элем.

}

if(t) printf("Нет\n");

else printf("Есть %d %d\n",i,j); getch();

return(0);

}

124

2.5 Обработка элементов квадратных матриц относительно главной и побочной диагоналей /* "Разминка". Фомирование матрицы */

#include <stdio.h>

main()

 

 

{

 

 

const m=10;

 

int i,j,N;

 

 

int x[m][m];

 

/* Обнуление матрицы */

 

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

 

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

 

x[i][j]=0;

 

puts("Номер варианта?");

 

scanf("%d",&N);

 

printf("Вариант %d:\n",N);

 

switch(N)

 

 

{ case 1:{

/* Вариант 1

*/

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

 

 

for(j=0;j<i+1;j++)

 

 

x[i][j]=i-j+1;

 

break;}

 

case 2:{

/* Вариант 2

*/

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

 

 

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

 

 

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

 

break; }

 

case 3: {

/* Вариант 3

*/

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

 

 

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

 

 

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

 

break; }

 

case 4: {

/* Вариант 4

*/

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

 

 

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

 

 

x[i][j]=j-i+1;

 

break; }

 

case 5:{

/* Вариант 5

*/

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

 

 

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

 

x[i][j]=i+1; break; }

125

Соседние файлы в папке ЭУМК_ОАиП__PDF