Сформировать вектор из суммы наибольших и наименьших значений элементов столбцов матрицы - C (СИ)
Формулировка задачи:
Добрый день.
Помогите, пожалуйста.
Задана квадратная матрица размером N x N (N<=10), состоящая из действительных элементов. Сформировать вектор из суммы наибольших и наименьших значений элементов столбцов.
Проблема в том, что задачку надо реализовать с помощью указателей. Где-то с ними и путаюсь#include<stdio.h>
#include<math.h>
#include<locale.h>
#include <stdlib.h>
#include <time.h>
int main()
{
setlocale(LC_ALL, "rus");
srand(time);
do
{
printf("Задана квадратная матрица размером N x N (N<=10), состоящая из действительных элементов.\n Сформировать вектор из суммы наибольших и наименьших значений элементов столбцов.\n");
float mas[10][10];
int i, k;
// float(*pMas)[10][10];
float *pMin[10],*pMax[10],*pSum[10];
//заполняем массив
printf("________________________________________________________________\n");
for (i = 0; i < 10; i++)
{
printf("\n");
for (k = 0; k < 10; k++)
{
mas[i][k] = (-1000 + rand() % 2000) / 100.0;
if (mas[i][k] >= 0)
printf(" ");
printf("%.2f ", mas[i][k]);
}
}
printf("\n");
printf("________________________________________________________________\n");
//начинаем искать минимальные и максимальные значения в столбцах и обрабатывать их
float min = 0, max = 0, sum = 0;
float vect[10];
printf(" ");
for (k = 0; k < 10; k++)//строки
{
for (i = 0; i < 10; i++)//столбцы
{
if (mas[i][k] > max)
*pMax[i] = &mas[i][k];
if (mas[i][k] < min)
*pMin[i]= &mas[i][k];
}
*pSum[k] = *pMin[k] + *pMax[k];
vect[k] = *pSum[k];
printf("в столбце %i: min=%.2f , max=%.2f ,sum=%.2f \n ", k, *pMin, *pMax, *pSum);
min = 0;
max = 0;
}
printf("________________________________________________________________\n");
//выводим полученный вектор
printf("получили вектор: \n [");
for (k = 0; k < 10; k++)
printf("%.2f; ", vect[k]);
printf("]\n");
} while (getch() != 27);
system("pause");
return 0;
}Решение задачи: «Сформировать вектор из суммы наибольших и наименьших значений элементов столбцов матрицы»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 10
int main()
{
float mas[N][N];
float vect[N];
int i, k;
srand(time(NULL));
printf("Задана квадратная матрица размером N x N (N<=10), состоящая из действительных элементов.\n Сформировать вектор из суммы наибольших и наименьших значений элементов столбцов.\n");
printf("<br>\n");
for (i = 0; i < N; i++) {
printf("\n");
for (k = 0; k < N; k++) {
mas[i][k] = (-1000 + rand() % 2000) / 100.0;
if (mas[i][k] >= 0)
printf(" ");
printf("%.2f ", mas[i][k]);
}
}
printf("\n");
printf("<br>\n");
for (k = 0; k < N; k++)
{
float* fp_min = &mas[0][k];
float* fp_max = &mas[0][k];
float* fp_cur = &mas[0][k];
for (i = 1; i < N; i++)
{
if(*fp_min > *fp_cur)
fp_min = fp_cur;
if(*fp_max < *fp_cur)
fp_max = fp_cur;
fp_cur = &mas[i][k];
}
vect[k] = *fp_min + *fp_max;
}
printf("<br>\n");
printf("получили вектор: \n [");
for (k = 0; k < 10; k++)
printf("%.2f; ", vect[k]);
printf("]\n");
return 0;
}
Объяснение кода листинга программы
В этом коде:
- Объявлены матрица и вектор.
- Задается размер матрицы N.
- Задаются начальные значения для элементов матрицы.
- Вычисляются минимальное и максимальное значение в каждом столбце матрицы.
- Вектор формируется как сумма минимального и максимального значения в каждом столбце.
- Выводится матрица.
- Выводится вектор.