IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным. В описании темы указываем язык!!!

 
 Ответить  Открыть новую тему 
> задача на вычисление, С++
сообщение
Сообщение #1


Бывалый
***

Группа: Пользователи
Сообщений: 233
Пол: Женский
Реальное имя: Dasha

Репутация: -  0  +


Вот такая задача:
Вычислить и вывести на экран в виде таблицы значения ф-ии F на интервале от X До Хк с шагом dx.
f=a(x+7)^2-b,при x<5,b<>0;
(x-cd)/dx,при x>5,b=0;
x/c,в остальных случаях.
где a,b,c,d-действительные числа.
Ф-ия F должна принимать действит.значения,ели выражение
(Aц ИЛИ Вц) ИЛИ (Aц ИЛИ Сц) не равно нулю ,и целое в противном случае.
Через Aц,Вц,Сц обозначены целые чсти значений a,b,c,
операция ИЛИ-поразрядная.
...
программу на С пишу в первый раз.
помогите ,пожалуйста, разобраться.

почему-то результат всегда считается по последнему условию...
а условие,которое обозначено ** вообще не принимается компилятором...

ошибки наверняка синтаксические...и глупые...(

#include <iostream.h>

int main()
{
int x,xk,dx;
float a,b,c,d,f;
x= 1;
xk= 10;
dx= 2;

cout << "What is..a=";
cin >> a;
cout << "b=";
cin >> b;
cout << "c=";
cin >> c;
cout << "d=";
cin >> d;

while (x<xk)
{
if (x<5 && b!=0)
{
f=a*(x+7)*(x+7)-b;
}
if (x>5 && b==0)
{
f=(x-c*d)/dx;
}
else f=x/c;

if (int(a) | int(b))|(int(a) | int©) f=int(f); **

cout << f;
cout << " \n";

x=x+dx;
};
}


--------------------
irreparabilium felix olivio rerum
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






#include <iostream.h>

int main()
{
int x,xk,dx;
float a,b,c,d,f;
x= 1;
xk= 10;
dx= 2;

cout << "What is..a=";
cin >> a;
cout << "b=";
cin >> b;
cout << "c=";
cin >> c;
cout << "d=";
cin >> d;

while (x<xk) {

if (x<5 && b!=0) {
f=a*(x+7)*(x+7)-b;
}
else // <--- Ты забыла ELSE
if (x>5 && b==0) {
f=(x-c*d)/dx;
}
else f=x/c;

if(! ((int(a) | int(b)) | (int(a) | int©)) ) f = int(f);

cout << f << " \n";
x=x+dx;
};

return 0;
}
Ну, а с If-ом у тебя во-первых не было скобок, охватывающих все выражение (в С/С++ это обязательно), а во-вторых - условие должно быть обратным... У тебя получалось, что функция принимает ЦЕЛЫЕ значения, когда выражение НЕ равно нулю.

P.S. Почему не сделать через for? В С++ переменной цикла for можно задавать любой шаг...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Бывалый
***

Группа: Пользователи
Сообщений: 233
Пол: Женский
Реальное имя: Dasha

Репутация: -  0  +


про For не знала ....спасибо)

вот еще...проблемка возникла со структурированием...
это та же задача,только с функциями...
программа постоянно выдает результат 0.
что не так?помогите разобраться

#include <iostream.h>

float a,b,c,d,f,x,xk,dx;
//------------------------------------------------------------------------------
void result_1(float res)
{
res=a*(x+7)*(x+7)-b;
}
//------------------------------------------------------------------------------
void result_2(float res)
{
res=(x-c*d)/(a*x);
}
//------------------------------------------------------------------------------
void result_3(float res)
{
res=x/c;
}
//------------------------------------------------------------------------------
void check_1()
{
if (x<5 && b!=0) result_1(f);
else
if (x>5 && b==0) result_2(f);
else result_3(f);
}
//------------------------------------------------------------------------------
void check_2()
{
if (! ((int(a) | int(b)) | (int(a) | int©)) ) f=int(f);
}
//------------------------------------------------------------------------------
int main()
{
x= 1;
xk= 10;
dx= 2;

cout << "What is..a=";
cin >> a;
cout << "b=";
cin >> b;
cout << "c=";
cin >> c;
cout << "d=";
cin >> d;

while (x<xk)
{
check_1;
check_2;
cout << f << "\n";
x=x+dx;
}
}


--------------------
irreparabilium felix olivio rerum
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






void result_1(float res)
{
res=a*(x+7)*(x+7)-b;
}

Что, по-твоему, делает эта функция? Изменяет переменную, передаваемую ей как параметр? Ни в коем случае - ты передаешь по значению, а не по ссылке (в Паскале Var перед именем переменной в списке параметров подпрограммы помнишь?), так что локально (в самой функции) значение меняется, а вот назад оно не передается, и в глобальную переменную тоже не записывается, как ты этого хотела бы smile.gif...

Если ты пишешь на С++, то передавай ссылку на float
void result_1(float &res)
{
res=a*(x+7)*(x+7)-b;
}
В остальных функциях, принимающих значение, и меняющих ИХ же - точно так же, передавай ссылки...

P.S. Я бы все-таки пересмотрел программу, и заменил процедуры (функции возвращающие void) на обычные функции, возвращающие результат...
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 




- Текстовая версия 21.11.2017 16:54
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"