Дана квадратная вещественная матрица.
а) путем перестановки элементов матрицы добиться того, чтобы ее максимальный элемент находился в левом верхнем углу, следующий по величине - в позиции (2,2), следующий по величине - в позиции (3,3) и т. д., заполнив таким образом всю главную диагональ.
б) найти номер первой из строк, не содержащих ни одного положительного элемента.
Здравствуйте помогите решить пожалуйста
C/C++
Программа на си коде
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <stdbool.h>
#include <locale.h>
#define N 5
void print(float arr[N][N], const char* message) {
puts(message);
for (int i = 0; i < N; ++i) {
for (int j = 0; j < N; ++j)
printf("%5.1f ", arr[i][j]);
puts("");
}
}
void swap(float* a, float*b) {
const float tmp = *a;
*a = *b;
*b = tmp;
}
void permutate(float arr[N][N]) {
for (int i = 0; i < N; ++i) {
int rowMax = i, colMax = 0;
for (int j = 0; j < N; ++j)
for (int k = 0; k < N; ++k)
if ((j != k || j >= i) && arr[j][k] > arr[rowMax][colMax]) {
rowMax = j;
colMax = k;
}
swap(&arr[i][i], &arr[rowMax][colMax]);
}
}
bool allNonPositive(float arr[N]) {
for (int i = 0; i < N; ++i)
if (arr[i] > 0)
return false;
return true;
}
int rowOfNonPositives(float arr[N][N]) {
for (int i = 0; i < N; ++i)
if (allNonPositive(arr[i]))
return i;
return N;
}
int main(void) {
setlocale(LC_ALL, "Russian");
srand((unsigned)time(NULL));
float arr[N][N];
for (int i = 0; i < N; ++i)
for (int j = 0; j < N; ++j)
arr[i][j] = (rand() % 200 - 160) * 0.1f;
print(arr, "Исходная матрица");
const int row = rowOfNonPositives(arr);
if (row < N)
printf("Номер первой из строк, не содержащих ни одного положительного элемента: %d\n", row + 1);
else
puts("В матрице нет строк, которые не содержат ни одного положительного элемента");
permutate(arr);
print(arr, "После перестановки");
return 0;
}
#include <stdlib.h>
#include <time.h>
#include <stdbool.h>
#include <locale.h>
#define N 5
void print(float arr[N][N], const char* message) {
puts(message);
for (int i = 0; i < N; ++i) {
for (int j = 0; j < N; ++j)
printf("%5.1f ", arr[i][j]);
puts("");
}
}
void swap(float* a, float*b) {
const float tmp = *a;
*a = *b;
*b = tmp;
}
void permutate(float arr[N][N]) {
for (int i = 0; i < N; ++i) {
int rowMax = i, colMax = 0;
for (int j = 0; j < N; ++j)
for (int k = 0; k < N; ++k)
if ((j != k || j >= i) && arr[j][k] > arr[rowMax][colMax]) {
rowMax = j;
colMax = k;
}
swap(&arr[i][i], &arr[rowMax][colMax]);
}
}
bool allNonPositive(float arr[N]) {
for (int i = 0; i < N; ++i)
if (arr[i] > 0)
return false;
return true;
}
int rowOfNonPositives(float arr[N][N]) {
for (int i = 0; i < N; ++i)
if (allNonPositive(arr[i]))
return i;
return N;
}
int main(void) {
setlocale(LC_ALL, "Russian");
srand((unsigned)time(NULL));
float arr[N][N];
for (int i = 0; i < N; ++i)
for (int j = 0; j < N; ++j)
arr[i][j] = (rand() % 200 - 160) * 0.1f;
print(arr, "Исходная матрица");
const int row = rowOfNonPositives(arr);
if (row < N)
printf("Номер первой из строк, не содержащих ни одного положительного элемента: %d\n", row + 1);
else
puts("В матрице нет строк, которые не содержат ни одного положительного элемента");
permutate(arr);
print(arr, "После перестановки");
return 0;
}
Андрей Вяткин
Здравствуйте Спасибо за ответ! Не могли бы вы рассказать немного об этом коде ?)
И где "программа на си коде", с которой помочь нужно?
Андрей Вяткин
Я же прошу решить) просто совсем не шарю :)
Похожие вопросы
- Программа на СИ. Циклы с постусловием и предусловием
- Помогите пожалуйста написать программу на Си
- Работа со структурами. Написать программу для СИ
- Помогите написать программу на СИ
- Чувствительны ли программы на Си к исправности железа
- Написать программы на СИ
- Завершается программа в Си
- Программа язык Си
- Написать программу на Си, помогите!!!
- Написать программу на Си