Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.12.2012, 20:54   #11
Joose
Пользователь
 
Регистрация: 16.10.2011
Сообщений: 67
По умолчанию

Итак, конечный вариант рабочей программы:

Код:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>
#include "locale.h"
#define N 3

float* Function(float**, int);

int main()
{
    setlocale(LC_CTYPE, "RUSSIAN");
    int i, j, k, num;
    srand(time(NULL));                                                      //Рандомизация
    float **ms1, *sq;
    printf("Введите колличество треугольников:\n");
    scanf("%d", &num);
    printf("\nИсходная матрица сторон треугольника:\n\n");
    ms1 = (float**)malloc(num * sizeof(float*));
    for(i = 0; i < num; i++)
    {
        printf("%d.", i+1);
        ms1[i] = (float*)malloc(N * sizeof(float));
        for(j = 0; j < N; j++)
        {
            printf("%15f", ms1[i][j] = 50*(float)(rand()) / RAND_MAX );       //Заполняем массив случайными значениями и печатаем очередное значение элемента
        }
        printf("\n");                                                         //Переходим на новую строку
    }
    printf("\nПлощади треугольников:\n\n");
    sq = Function(ms1, num);
    for(k = 0; k < num; k++)
    {
        if (sq[k] == -1)
            printf("Из данных сторон невозможно составить треугольник\n");
        else
        printf("Площадь %d-го треугольника равна: %f\n", k+1, sq[k]);
    }
    free(sq);
    free(ms1);
    return 0;
}


float* Function(float** ms1, int m)
{
    int i;
    float *arr, p;
    arr = (float*)malloc(m * sizeof(int));
    for(i = 0; i < m; i++)
    {
        if (ms1[i][0] + ms1[i][1] > ms1[i][2] &&                                   //Проверяем, могут ли числа быть сторонами треугольника
            ms1[i][0] + ms1[i][2] > ms1[i][1] &&
            ms1[i][1] + ms1[i][2] > ms1[i][0])
            {
                p = (ms1[i][0] + ms1[i][1] + ms1[i][2]) / 2;                       //Вычисляем полупериметр
                arr[i] = sqrt(p * (ms1[i][0]) * (ms1[i][1]) * (ms1[i][2]));        //Находим площадь по формуле Герона и присваиваем
            }                                                                      // очередному элементу нового массива
        else
        arr[i] = -1;
    }
    return arr;
    free(arr);
}
Освобождение памяти до сего дня не использовал, но надеюсь все сделано правильно. Smogg, EUGY - большое спасибо Вам. Плюсовать репутацию пока не могу, но как говорится: "Как только, так сразу".
Joose вне форума Ответить с цитированием
Старый 21.12.2012, 21:10   #12
EUGY
Форумчанин
 
Аватар для EUGY
 
Регистрация: 11.07.2010
Сообщений: 914
По умолчанию

Код:
return arr;
free(arr);
К сожалению, память не освобождается. После return игнорируются любые действия.
Но эту логическую засаду Вы наверняка решите.
EUGY вне форума Ответить с цитированием
Старый 21.12.2012, 21:45   #13
Joose
Пользователь
 
Регистрация: 16.10.2011
Сообщений: 67
По умолчанию

Цитата:
Сообщение от EUGY Посмотреть сообщение
Код:
return arr;
free(arr);
К сожалению, память не освобождается. После return игнорируются любые действия.
Но эту логическую засаду Вы наверняка решите.
И вправду, совсем забыл про return. Разберусь чуть позже. Спасибо большое Вам.
Joose вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
процедуры и функции - возможно ли построение треугольника по длинам сторон, вычисление площади треугольника по длинам сторон kazbek1 Паскаль, Turbo Pascal, PascalABC.NET 2 18.05.2012 10:38
Фон с двух сторон AlexSilver HTML и CSS 0 21.03.2012 11:19
Реализовать программу сбора елки из треугольников. Используя объектные структуры, создать 6 треугольников разного размера dyozik Общие вопросы Delphi 4 05.12.2011 11:52
Си/Си++ Существование сторон треугольника. Маришка_Курносова Помощь студентам 2 01.07.2010 21:54
Диаграммы, легенда с 2 сторон. WIC Microsoft Office Excel 8 02.10.2007 17:17