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

> Внимание!

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

> задача на вычисление, С++
Tribunal
сообщение 18.09.2006 5:48
Сообщение #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(c)) f=int(f);	**

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

	   x=x+dx;
   };
}


--------------------
irreparabilium felix olivio rerum
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 3)
volvo
сообщение 18.09.2006 8:17
Сообщение #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(c))) ) f = int(f);

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

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

P.S. Почему не сделать через for? В С++ переменной цикла for можно задавать любой шаг...
 К началу страницы 
+ Ответить 
Tribunal
сообщение 25.09.2006 15:04
Сообщение #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(c))) ) 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 
 К началу страницы 
+ Ответить 
volvo
сообщение 25.09.2006 15:13
Сообщение #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

 

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