1. Спонсор публикаций Marketplace codeby. Сервис, который так долго ждали. При расчетах используем биткоин. Первый товар уже в продаже: Консультация на тему ИБ от Ondrik8

    Скрыть объявление
  2. Спонсор публикаций Marketplace codeby. Сервис, который так долго ждали. При расчетах используем биткоин. Второй товар маркетплейса: Надёжная обфускация вашей программы от PingVinich

    Скрыть объявление

Делегаты( немного подправить) C#

Тема в разделе ".NET", создана пользователем develish15, 3 дек 2010.

  1. develish15

    develish15 Гость

    Репутация:
    0
    Само задание тут задание,

    написала программу, но надо исправить 25строчку. (эту
    Код (Text):
    for (int i = a; i < b; i++)
    {
    L += Math.Sqrt( ( f( i + 1 ) - f( i ) ) * ( f( i + 1 ) - f( i )) + ( (i + 1) - i ) * ( (i + 1) - i ) );
    }
    )


    Сама прога:
    Код (Text):
    class Program
    {
    //Объявление переменной функционального типа (делегата)
    delegate double fun(double x);
    //Функции, которые будут передаваться посредством делегата
    static double F1(double x)
    {
    return x * x + 2 * Math.Log( 1 + x * x );
    }
    static double F2(double x)
    {
    return x * Math.Log( Math.Abs( x * x - 2 * x ) );
    }
    static double F3(double x)
    {
    return ( x * x + 2 * x - 3 ) * Math.Exp( -x );
    }

    //Вычисление длины дуги
    static double Line(int a, int b, fun f)
    {
    double L = 0;
    for (int i = a; i < b; i++)
    {
    L += Math.Sqrt( ( f( i + 1 ) - f( i ) ) * ( f( i + 1 ) - f( i )) + ( (i + 1) - i ) * ( (i + 1) - i ) );
    }
    return L;
    }
    //Основной модуль
    static void Main(string[] args)
    {
    Console.Write("Введите a=");
    int a = int.Parse(Console.ReadLine());

    Console.Write("Введите b=");
    int b = int.Parse(Console.ReadLine());
    Console.Clear();
    Console.WriteLine("Введенные значения:\n a={0:d}\n b={1:d}\n\n", a, b);
    double res1 = 0, res2 = 0, res3 = 0, maxres = 0;
    res1 = Line( a, b, F1 );
    res2 = Line(a, b, F2);
    res2 = Line(a, b, F3);
    if (res1 > res2) maxres = res1;
    else maxres = res2;
    if (maxres < res3) maxres = res3;
    Console.WriteLine("Длины дуг:");
    Console.WriteLine(" при F1: {0:f4}", res1);
    Console.WriteLine(" при F2: {0:f4}", res2);
    Console.WriteLine(" при F3: {0:f4}\n", res3);
    Console.WriteLine(" Наибольшая длина дуги: {0:f4}\n", maxres);
    Console.ReadLine();
    }

    }
    }
    Знаю что нужно создавать некий массив x[n] чисел в диапазоне a-b. затем в формулу подставлять x. так:

    Код (C++):
    for (int i = 0; i < n-1; i++)
    {
    L += Math.Sqrt( ( f( x[i + 1] ) - f( x[i] ) ) * ( f( x[i + 1] ) - f( x[i] )) + ( (x[i + 1]) - x[i] ) * ( (x[i + 1]) - x[i] ) )
    };
    При этом нужно сделать метод заполнения массива x[n] числами от a до b. И в методы функций нужно передавать double[] x.
    А как реализовать не могу понять...подскажите пожалуйста... ;)
     
  2. artak

    artak Гость

    Репутация:
    0
    A chto imenno u tebja ne rabotajet...V tvojom kode net smisla ispolzovat delegat...mogu skazat chto nado objavit delegat vot tak ...

    delegate double fun(double x);

    static double F1(double x)
    {...}

    static double F2(double x)
    {...}

    static double F3(double x)
    {...}


    fun f=new fun(F1); //ili F2, F3
    Line(a, b, f);
     
  3. develish15

    develish15 Гость

    Репутация:
    0
    нет, с кодом все верно и все работает. преподаватели уже проверяли. есть смысл или нет использовать-к сожалению не мне решать.
    а неверно то, что у меня по заданию L находится с помощью f(x), а у меня просто записано как f(i).
     
  4. artak

    artak Гость

    Репутация:
    0
    poprobuj tak...

    double [] x=new double[b-a]; //v diapazone a-b est b-a chisel, esli nado i b to ~+1

    for(int i=0; i<x.Length; ++i)
    x=a+i;

     
  5. develish15

    develish15 Гость

    Репутация:
    0


    не работает, это надо было в метод мэйн закинуть, да?
    пишет "Error The name 'x' does not exist in the current context"
     
  6. artak

    artak Гость

    Репутация:
    0
    da, no snachalo nado pered Main() objavit: static double []x (mozhno dazhe posle Class Program, chtobi ono bili globaljnim)
    Potom v Main(), posle
    Console.Write("Введите b=");
    int b = int.Parse(Console.ReadLine());
    Console.Clear();
    Console.WriteLine("Введенные значения:\n a={0:d}\n b={1:d}\n\n", a, :discard:;

    nado vstavit uzhe tot kod'
    x=new double[b-a]; //v diapazone a-b est b-a chisel, esli nado i b to ~+1

    for(int i=0; i<x.Length; ++i)
    x=a+i;

    i uzhe potom pozvat method Line().

    Kstati v methode Line uzhe ne trebujetsja int a, int b. mozhno vot tak...


    static double Line(double []x, fun f)
    {
    double L = 0;
    for (int i = 0; i < x.Length; i++)
    {
    L += Math.Sqrt( ( f(x[ i + 1] ) - f(x[ i] ) ) * ( f(x[ i + 1] ) - f(x[ i] )) + ( (x[i + 1]) -x[ i] ) * ( (x[i + 1]) -x[ i] ) );
    }
    return L;
    }

     
  7. develish15

    develish15 Гость

    Репутация:
    0
    странно...сделала как Вы сказали.
    теперь "Error Expected class, delegate, enum, interface, or struct".
    Можете полностью скинуть код как у вас получился?
     
  8. artak

    artak Гость

    Репутация:
    0

    class Program
    {
    //Объявление переменной функционального типа (делегата) + massiv q
    static double [] q;
    delegate double fun(double x);

    //Функции, которые будут передаваться посредством делегата
    static double F1(double x)
    {
    return x * x + 2 * Math.Log( 1 + x * x );
    }

    static double F2(double x)
    {
    return x * Math.Log( Math.Abs( x * x - 2 * x ) );
    }

    static double F3(double x)
    {
    return ( x * x + 2 * x - 3 ) * Math.Exp( -x );
    }

    //Вычисление длины дуги

    static double Line(double [] q, fun f)
    {
    double L = 0;
    for (int i = 0; i < q.Length; ++i)
    {
    L += Math.Sqrt( ( f(q[ i + 1] ) - f(q[ i] ) ) * ( f(q[ i + 1] ) - f(q )) + ( q[i + 1] -q[ i] ) * ( q[i + 1] - q ) );
    }
    return L;
    }

    //Основной модуль
    static void Main(string[] args)
    {
    Console.Write("Введите a=");
    int a = int.Parse(Console.ReadLine());

    Console.Write("Введите b=");
    int b = int.Parse(Console.ReadLine());
    Console.Clear();
    Console.WriteLine("Введенные значения:\n a={0:d}\n b={1:d}\n\n", a, B);

    q=new double[b-a+1]; //v massive budut soderzhatsja cifri ot a do b
    for(int i=0; i<q.Length; ++i)
    q=a+i;

    double res1 = 0, res2 = 0, res3 = 0, maxres = 0;

    fun G=new fun(F1);
    res1 = Line( q, G );

    fun G=new fun(F2);
    res2 = Line(q, G);

    fun G=new fun(F3);
    res2 = Line(q, G);

    if (res1 > res2) maxres = res1;
    else maxres = res2;
    if (maxres < res3) maxres = res3;
    Console.WriteLine("Длины дуг:");
    Console.WriteLine(" при F1: {0:f4}", res1);
    Console.WriteLine(" при F2: {0:f4}", res2);
    Console.WriteLine(" при F3: {0:f4}\n", res3);
    Console.WriteLine(" Наибольшая длина дуги: {0:f4}\n", maxres);
    Console.ReadLine();
    }

    }
    }

    esli i tak ne zarabotaet to posmotri imenno na kakoj stroke vidajot oshibku i napishi oshibku
     
  9. develish15

    develish15 Гость

    Репутация:
    0
    на 60 и 63
    Error"A local variable named 'G' is already defined in this scope 60 5 1"
     
  10. develish15

    develish15 Гость

    Репутация:
    0
    исправила на
    Код (Text):
    fun G1=new fun(F1);
    res1 = Line( q, G1 );

    fun G2=new fun(F2);
    res2 = Line(q, G2);

    fun G3=new fun(F3);
    res3 = Line(q, G3);
    ничего не подчеркивает, но при запуске пишет теперь "Индекс находился вне границ массива." и подчеркивает эту строчку
    Код (Text):
    {
    L += Math.Sqrt( ( f( i + 1 ) - f( i ) ) * ( f( i + 1 ) - f( i )) + ( (i + 1) - i ) * ( (i + 1) - i ) );
    }

    А у вас нормально работает??
    может скинете мне на почту Ваше?
     
  11. artak

    artak Гость

    Репутация:
    0
    static double Line(double [] q, fun f)
    {
    double L = 0;
    for (int i = 0; i < q.Length-1; ++i)
    {
    L += Math.Sqrt( ( f(q[ i + 1] ) - f(q[ i] ) ) * ( f(q[ i + 1] ) - f(q )) + ( q[i + 1] -q[ i] ) * ( q[i + 1] - q ) );
    }
    return L;
    }
     
  12. develish15

    develish15 Гость

    Репутация:
    0
    да, уже исправила. спасибо большое :(
     
  13. artak

    artak Гость

    Репутация:
    0
    Vsegda gotov...
    a ne podskazhete cho vzjat za diplomnuju :(
    Budu ochen priznatelen...
     
Загрузка...

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