Сформировать вектор из суммы наибольших и наименьших значений элементов столбцов матрицы - 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;
}

Объяснение кода листинга программы

В этом коде:

  1. Объявлены матрица и вектор.
  2. Задается размер матрицы N.
  3. Задаются начальные значения для элементов матрицы.
  4. Вычисляются минимальное и максимальное значение в каждом столбце матрицы.
  5. Вектор формируется как сумма минимального и максимального значения в каждом столбце.
  6. Выводится матрица.
  7. Выводится вектор.

Оцени полезность:

5   голосов , оценка 3.6 из 5
Похожие ответы