1. Наш канал codeby в telegram. Пишем об информационной безопасности, методах защиты информации, о программировании. Не пропускай новости с кодебай, будь в тренде ! Подробнее ...

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

Задача По С

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

  1. debugger

    debugger Гость

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

    Код:
    #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

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

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

    debugger Гость

    Репутация:
    0
    исправил, работает, выводит 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

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

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

    debugger Гость

    Репутация:
    0
    в моем случае a=-1 а b=3
    Задача По С
     
  6. lazybiz

    lazybiz Well-Known Member

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

    Вложения:

  7. debugger

    debugger Гость

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

    lazybiz Well-Known Member

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

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

    debugger Гость

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

    lazybiz Well-Known Member

    Репутация:
    0
    Регистрация:
    3 ноя 2010
    Сообщения:
    1.339
    Симпатии:
    0
    Ок.
    Код:
    #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 );
    }
    }
     
Загрузка...

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