Задача По С

  • Автор темы debugger
  • Дата начала
D

debugger

#1
Задача по С, нужно вывести на экран 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();
}
 

lazybiz

Well-known member
03.11.2010
1 339
0
#2
for (x=a; x<=b; x+=h);

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

debugger

#3
исправил, работает, выводит 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();
}
 

lazybiz

Well-known member
03.11.2010
1 339
0
#4
При каких значениях a и b это происходит?

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

lazybiz

Well-known member
03.11.2010
1 339
0
#6
Дело в том что существует погрешность. printf округляет число до той точности которую ты указываешь (у тебя это 2 знака после запятой - %.2lf).
 

Вложения

D

debugger

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

lazybiz

Well-known member
03.11.2010
1 339
0
#8
Тут немного другой подход нужен... через 15 минут покажу какой.

Добавлено: Кстати, уточни задание, так как формулировка
нужно вывести на экран 20 значений "y" для 20 значений "х" лежащих в промежутке от "а" до "b" c шагом "h"
не верна. Тут либо шаг надо автоматически подсчитать, либо количество значений.
 
D

debugger

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

lazybiz

Well-known member
03.11.2010
1 339
0
#10
Ок.
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 );
}
}