Протабулировать функцию и ...На языке С

Тема в разделе "C/C++/C#", создана пользователем polynkov1, 3 июл 2010.

Статус темы:
Закрыта.
  1. polynkov1

    polynkov1 Гость

    Люди помогите решить/исправить задачу! Я уже решил/написал текст программы да там столько ошибок много да и не факт что она правильно написана:

    Вот фаил программы: http://narod.ru/disk/22396833000/POL-KR.CPP.html
    Вот заание: http://i070.radikal.ru/1005/a5/f49e50620602.jpg
    среда Builder, С++
    Заранее спасибо!
     
  2. romanriddick

    romanriddick Гость

    Решу.Недорого
    romanriddick@bk.ru
    icq: 586013370
     
  3. DarkKnight

    DarkKnight Well-Known Member
    C\C++ Team

    Регистрация:
    1 авг 2010
    Сообщения:
    653
    Симпатии:
    0
    При таком условии, в массив A попадают все значения, там нет просто нулевых... Глупое условие задания... Выложу решение через пару часов, пока занят просто...
     
  4. DarkKnight

    DarkKnight Well-Known Member
    C\C++ Team

    Регистрация:
    1 авг 2010
    Сообщения:
    653
    Симпатии:
    0
    Код (C++):
    #include <iostream>
    #include <vector>
    #include <algorithm>
    #include <functional> //для greater<>

    //Определение PI = 3.14 ~
    const double M_PI = 3.14159265358979323846;

    using namespace std;

    vector <double> A,B;
    vector <double> Z; // Вектор все значения;
    double **E; //наш двумерный массив;

    //Функция вычисления значения функции по заданию
    double Funct1 (double x)
    {
    double Result = 3.0 * cos(5*x) + sin(x);

    return Result;
    }

    //Вывод (**Тебе не нужна** ), для теста использовал
    void Print (double Val)
    {
    cout<<Val<<endl;
    }

    //Функция записи значения в массив B (меньше половины ср. арифм)
    void InToMassB(vector<double>All,double SrFun)
    {
    for (int i = 0; i<All.size(); i++)
    {
    if (All[i] < SrFun )
    {
    B.push_back(All[i]);
    }
    }
    }


    int main(void)
    {
    double Iterator = -M_PI; //Начальное знаение
    double MaxIterator = M_PI; //Конечное значение
    double StepIter = M_PI / 10; //Шаг итерации

    double SredFunc = 0; //Средне-арифметич. значение на промежутке (Сначало сумма всех значений)
    int IterCount = 0; //Кол-во итераций (для нахождение средне арифм. значения на промежутке

    while (Iterator <= MaxIterator)
    {
    double FValue = Funct1(Iterator); //Текущее значение функции
    SredFunc += FValue; //Суматор значений
    IterCount++; //Инкремент кол-ва итераций

    if (FValue != 0) // Если знаение НЕ НУЛЕВО пишим в массив A
    {
    A.push_back(FValue);
    }
    Z.push_back(FValue); // Все значения пишим сюда

    Iterator += StepIter; //Увеличиваем значения аргумента на ШАГ

    }
    SredFunc = (SredFunc/Iterator) /2; //Среднее значение функции на промежутке пополам


    InToMassB(Z,SredFunc);

    sort(A.begin(),A.end()); //Сортировка по возрастанию вектора A
    sort(B.begin(),B.end(),greater<double>()); //Сортировка по убыванию вектора B

    int Min_Razm; //переменная с наименьшей размерностью
    //найдем ее
    (A.size() > B.size()) ? Min_Razm = B.size(): Min_Razm = A.size();

    int RowMaxPlus = 0; //переменная номер строки с макс. положительными элементами;
    int PlusEl = -1; //Переменная для с кол-вом положительных эл. по строке.
    //Инициализация и заполнения двумерного массива E
    E = new double* [Min_Razm];
    for (int i=0; i<Min_Razm;i++)
    {
    int PlusElements = 0; // кол-во пол. элементов по тек. строке
    E[i] = new double [Min_Razm];
    for (int j=0; j<Min_Razm;j++)
    {
    if (A[i] > B [j]) E[i][j] = A[i] - B[j];
    if (A[i] < B [j]) E[i][j] = A[i] + B[j];
    if (A[i] == B [j]) E[i][j]= 0;
    //Проверим положительность, если положительный увеличим счетчик
    if (E[i][j] > 0) PlusElements++;
    }
    //проверим наибольшее кол-во полож. элементов по строке
    if (PlusElements > PlusEl)
    {
    RowMaxPlus = i;
    PlusEl = PlusElements;
    }
    }

    //Поменяем элементы строки со столбцом

    for (int i=0; i<Min_Razm;i++)
    {
    double buffer = 0; //Буферная переменная для замены
    buffer = E[RowMaxPlus][i];
    E[RowMaxPlus][i] = E[i][RowMaxPlus];
    E[i][RowMaxPlus] = buffer;
    }

    //Ну тут можно глянуть что в итоге вышло

    cout<<"A:"<<endl;
    for_each(A.begin(),A.end(),Print); //STL перебор вектора

    cout<<endl<<"B:"<<endl;
    for_each(B.begin(),B.end(),Print); //STL перебор вектора

    cout<<"E:"<<endl;
    for (int i=0; i<Min_Razm;i++)
    {
    for (int j=0; j<Min_Razm;j++)
    {
    cout<<E[i][j]<<" ";
    }
    cout<<endl;
    }



    }
    Тут консоль только, но я думаю на Билдер сам переложишь.
    Для вывода используй TStringGrid, для получения значений Y вызывай функцию (обходишь массив (вектор) по порядку и с этими аргументами вызываешь функцию, если что не ясно пиши, помогу.
     
  5. romanriddick

    romanriddick Гость

    хе-хе... так нужно видь на с , а не на с++)))
     
  6. DarkKnight

    DarkKnight Well-Known Member
    C\C++ Team

    Регистрация:
    1 авг 2010
    Сообщения:
    653
    Симпатии:
    0
    Думаю парень пишит в Turbo C++, а он поддерживает STL :)
    Просто думал динамические массивы его запутаю еще больше)))

    2Автор : Ну а так roman прав)) Юзай массивы и контролируй их длину))
    Ну и метод пузырька тебе поможет ) что то наподобии:
    Код (C++):
        double mas[] = {7,6,5,4,3,2,1};

    for (int i = 0; i < sizeof (mas) /sizeof(double); i++)
    {
    double min = 9999999999999999;
    int pos_min = -1;
    for (int j = i; j < sizeof (mas) /sizeof(double); j++)
    {
    if (mas[j]< min) { pos_min = j; min = mas[j];}
    }
    int buffer = mas[i];
    mas[i]=mas[pos_min];
    mas[pos_min] = buffer;
    }
     
  7. romanriddick

    romanriddick Гость

    врятли он ето прочтет , взглини на дату!!!))) :unsure:
     
  8. DarkKnight

    DarkKnight Well-Known Member
    C\C++ Team

    Регистрация:
    1 авг 2010
    Сообщения:
    653
    Симпатии:
    0
    Я смотрел))) Ну это без разницы)) Вдруг кому пригодится еще))
    На этом форуме время пролетает пипец просто))) мне нравиться))) Я такую хрень с универа не писал) весело)
    даже мозг заработал) а то от Buildera и дурацких проэктов деградирую...
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей