Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Алгоритмизация и ОП / 5 Лабораторная работа №5.doc
Скачиваний:
25
Добавлен:
09.02.2016
Размер:
100.35 Кб
Скачать
  1. Такие k, что k-я строка матрицы совпадает с k-м столбцом;

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

Пример решения задачи:

#include <stdio.h>

#include <stdlib.h>

#define m 8

#define n 8

void main()

{ int matrix[n][m]; /* Объявляем матрицу nхm */

Int I, j, p; /* Счетчик и признак совпадения */

int *mat; /* Объявляем указатель на матрицу matrix[n][m] */

mat=&matrix[0][0]; /* указателю mat присваиваем адрес нулевого элемента матрицы matrix[n][m] */

/* генератором случайных чисел заполняем матрицу */

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

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

{*mat=rand()%10-1;

mat++;

}

mat-= n*m; /* указателю mat присваиваем первоначальный адрес */

printf("\n Сгенерированная матрица имеет вид:\n ");

/* вывод матрицы */

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

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

{printf(“%d “,*mat);

mat++;

}

printf("\n ");

}

mat-= n*m;

printf("\n \t\t\tРЕЗУЛЬТАТ ПЕРВОЙ ЧАСТИ ЗАДАНИЯ");

printf("\n Совпавшие строки и столбцы ");

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

{ p=1;

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

{ /* Сравниваем элемент i-й строки j-го столбца с элементом j-й строки i-го столбца. В случае их несоответствия присваиваем p значение нуль и прерываем цикл по j конструкцией break */

if (*(mat+i * m + j) != *(mat+j * m + i))

{ p=0;

break;

}

}

/* В случае p=1 выводим на экран номер соответствующей строки */

if (p==1) printf("\n k = %d ", i);

}

if (p==0) printf("\n нет одинаковых строк и столбцов ");

printf("\n \t\t\tРЕЗУЛЬТАТ ВТОРОЙ ЧАСТИ ЗАДАНИЯ");

mat=&matrix[0][0];

Int p1, iSumm; /* признак нахождение отрицательного элемента и переменная для хранения суммы */

printf("\n\n");

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

{

/* Присваеваем переменным исходные значения */

iSumm = 0;

p1=0;

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

{ /* Суммируем значения элементов i-й строки */

iSumm += *mat;

/* При нахождение хотя бы одного отрицательного элемента присваиваем p1=1, обозначающее необходимость вывода Суммы на экран */

if (*mat < 0) p1=1; mat++;

}

/* В случае нахождения в строке хотя бы одного отрицательного элемента выводим на экран сумму элементов i-й строки */

if (p1==1) printf("Сумма элементов строки #%d = %d\n", i+1, iSumm);

}

system("PAUSE");/* задержка экрана*/

return 0;

}

Результат выполнения программы:

Результат решения имеет тот же вид, что и в задании А

Варианты задания Б Варианты задания Б соответствуют вариантам задания А данной лабораторной работы.

Контрольные вопросы

  1. Каким образом определяются переменные типа массив?

  2. Какие операторы языка Си используются при обработке элементов массива?

  3. Как осуществляется доступ к отдельному элементу матрицы с помощью указателя?

  4. Каким образом выводятся элементы матрицы на экран?

  5. Какой результат унарной операции &?

  6. Какой результат унарной операции *?

  7. Выражение uk=&a[0][0] эквивалентно uk=a?

  8. Выражения &a[i][j] и a+i+j идентичны?

41