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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.11.2012, 14:13   #1
Joose
Пользователь
 
Регистрация: 16.10.2011
Сообщений: 67
По умолчанию Сформировать одномерный массив из двумерного

Здравствуйте, помогите разобраться с задачкой на языке Си, пожалуйста.

Дана матрица из m строк и трех столбцов. Элементы каждой строки имеют тип float и представляют собой длины сторон треугольника. Вычислить площади всех m треугольников и записать их в новый массив. Если длины сторон таковы, что треугольник не образуется, то соответствующему элементу массива присвоить значение -1.


Что сделал: инициализировал массив, заполнил его случайными числами. Но к сожалению функция не работает, поэтому нужна помощь более опытных программистов.
Код:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <limits.h>
#include <math.h>
#include "locale.h"
#define M 5
#define N 3

float Function(float[M][N], int, int);

int main()
{
    setlocale(LC_CTYPE, "RUSSIAN");
    int i, j;
    float ms1[M][N];
    srand(time(NULL));                                                         //Рандомизация
    printf("Исходная матрица сторон треугольника:\n");
    for(i=0; i<M; i++)
    {
        for(j=0; j<N; j++)
        {
            printf("%15f", ms1[i][j]=(float)(rand()%4001-101)/RAND_MAX);       //Заполняем массив случайными значениями и печатаем очередное значение элемента
        }
        printf("\n");                                                          //Переходим на новую строку
    }
    printf("Матрица, составленная из площадей треугольников:\n");
    printf("%15f", Function(ms1, M, N));
    return 0;
}

float Function(float ms1[M][N], int m, int n)
{
    int i;
    float arr[M], p;
    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] &&
                ms1[i][0]>0 &&
                ms1[i][1]>0 &&
                ms1[i][2]>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[M];
}
Как правильно написать функцию Function для этой задачи? Спасибо заранее.
Joose вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сформировать одномерный массив, элементами которого являются все отрицательные элементы двумерного массива, после 1-го полож-го sev48fire Фриланс 5 23.06.2012 19:07
Сформировать одномерный массив zenid Помощь студентам 5 21.03.2012 19:15
Сформировать одномерный массив VoltZZZ Паскаль, Turbo Pascal, PascalABC.NET 0 23.02.2012 20:53
Сформировать одномерный массив Jambus Помощь студентам 4 29.09.2011 21:58
Из двумерного в одномерный массив elsin Общие вопросы Delphi 1 16.01.2009 03:58