Задача По С

Тема в разделе "Общие вопросы по С и С++", создана пользователем debugger, 23 ноя 2011.

  1. debugger

    debugger Гость

    Задача по С, нужно вывести на экран 20 значений "y" для 20 значений "х" лежащих в промежутке от "а" до "b" c шагом "h" . Как вывести этих 20 значений? выводится почему-то только одно. И еще интересно, почему на одном компе работает строчка "setlocale(LC_CTYPE, "Russian");" а на другом получаю 15 ошибок из-за нее?

    Код (C++):
    #include <stdio.h>
    #include <conio.h>
    #include <math.h>
    #include <process.h>
    #include <locale.h>  

    void main ()  {
    setlocale(LC_CTYPE, "Russian");

    double x, y, h, a, b;
    system("cls"); fflush(stdin);
    h=0,2;
    printf("Введите a: ");
    scanf_s("%lf", &a);
    printf("Введите b: ");
    scanf_s("%lf", &b);
    puts("  x  |    y  |");
    puts("------------------");
    for (x=a; x>=b; x+=h);
    y=pow(x,2.)-10*pow(sin(x),2.)+2.;
    printf("\n %.2lf | %.5lf |\n", x, y);
    _getch();
    }
     
  2. lazybiz

    lazybiz Well-Known Member
    C\C++ Team

    Регистрация:
    3 ноя 2010
    Сообщения:
    1.344
    Симпатии:
    0
    for (x=a; x<=b; x+=h);

    Да и вообще где блок цикла? В теле твоего цикла ничего не происходит, т.к. он заканчивается точкой с запятой.
    Для примера, цикл и его тело обозначаются так:
    Код (C++):
        for ( x = a; x < b; x++ ) {
    // тело цикла
    }
    Добавлено: h=0,2; - так вещественные числа не записываются.
     
  3. debugger

    debugger Гость

    исправил, работает, выводит 20 значений, но почему-то не выводит значение x = b , хотя в for я прошу вывести это значение тоже
    #include <stdio.h>
    #include <conio.h>
    #include <math.h>
    #include <process.h>
    #include <locale.h>

    void main () {

    double x, y, h, a, b;
    system("cls"); fflush(stdin);
    h=.2;
    printf("Enter a: ");
    scanf_s("%lf", &a);
    printf("Enter b: ");
    scanf_s("%lf", &:);
    puts(" x | f(x) |");
    puts("---------------------");
    for (x=a; x<=b; x+=h) {
    y=pow(x,2.)-10*pow(sin(x),2.)+2.;
    printf("\n %.2lf | %.5lf |\n", x, y);}
    _getch();
    }
     
  4. lazybiz

    lazybiz Well-Known Member
    C\C++ Team

    Регистрация:
    3 ноя 2010
    Сообщения:
    1.344
    Симпатии:
    0
    При каких значениях a и b это происходит?

    Добавлено: Не забывай: a, b и h у тебя не целочисленные переменные.
     
  5. debugger

    debugger Гость

    в моем случае a=-1 а b=3
    24_11_2011_11_25_46.png
     
  6. lazybiz

    lazybiz Well-Known Member
    C\C++ Team

    Регистрация:
    3 ноя 2010
    Сообщения:
    1.344
    Симпатии:
    0
    Дело в том что существует погрешность. printf округляет число до той точности которую ты указываешь (у тебя это 2 знака после запятой - %.2lf).
     

    Вложения:

  7. debugger

    debugger Гость

    вижу только один выход: сделать b > 3 (например b=3.1) ;)
    расстроен я таким положением вещей
     
  8. lazybiz

    lazybiz Well-Known Member
    C\C++ Team

    Регистрация:
    3 ноя 2010
    Сообщения:
    1.344
    Симпатии:
    0
    Тут немного другой подход нужен... через 15 минут покажу какой.

    Добавлено: Кстати, уточни задание, так как формулировка
    не верна. Тут либо шаг надо автоматически подсчитать, либо количество значений.
     
  9. debugger

    debugger Гость

    да, значений получается 21, это не суть, главное шаг 0,2 и от a до b..
     
  10. lazybiz

    lazybiz Well-Known Member
    C\C++ Team

    Регистрация:
    3 ноя 2010
    Сообщения:
    1.344
    Симпатии:
    0
    Ок.
    Код (C++):
    #include <stdio.h>
    #include <math.h>
    #include <float.h>

    void main ()
    {
    int     i;
    double  x, y, h = .2, a, b;

    printf( "Enter a: " );
    scanf( "%Lf", &a );

    printf( "Enter b: " );
    scanf( "%Lf", &b );

    printf( "a=%Lf b=%Lf\n", a, b );

    printf( "  x    |  f(x) |\n" );
    printf( "-------------------\n" );
    for ( i = 0; x < b; i++ ) {
    x = a + h * i;
    y = pow( x, 2 ) - 10 * pow( sin( x ), 2 ) + 2;
    printf( "%7.4Lf | %7.4Lf |\n", x, y );
    }
    }
     
Загрузка...

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