Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.01.2017, 10:59   #1
- M
 
Регистрация: 14.05.2015
Сообщений: 5
По умолчанию Помогите пожалуйста дорешать задачу и исправить ошибку (СИ++)

Условия и ошибка в прикрепленных файлах.
Какие то наброски программы уже есть, но нужно учесть все условия и чтобы программа заработала. Помогите пожалуйста.
Код:
#include <iostream>
#include <windows.h> 
#include <stdlib.h>

using namespace std;

int main(int argc, char *argv[])
{
char* Rus(const char* text);
  double F,a,b,c,x,Xn,Xk,dX;
 cout << endl<< Rus("Введите a, b, c, Xn, Xk, dX\n");
 scanf("%lf%lf%lf%lf%lf%lf", &a,&b,&c, &Xn, &Xk, &dX);
 printf(" ------------------- \n");
 printf("|  X  |  F  |\n");
 printf(" ------------------- \n");
 for (double x = Xn; x<=Xk; x>=dX){ 
 if (x < 5 && c!=0) F = -a*x*x-b ;
 if (x > 5 && c==0) F = (x-a)/x;
 else F= -x/c;
 if (((int)a | (int)b) & ((int)b|(int)c)) printf("|%9.2lf|%9d|\n", x, (int)F);
 else printf("|%9.2lf|%9.2lf|\n", x, F);
}
 printf(" ------------------- \n"); 
  system("PAUSE");	
  return 0;
}
char bufRus[256];
char* Rus(const char* text){
    CharToOem(text, bufRus);
    return bufRus;
    }
Изображения
Тип файла: png оо.png (37.0 Кб, 105 просмотров)
Тип файла: png Безымроянный.png (10.7 Кб, 46 просмотров)
- M вне форума Ответить с цитированием
Старый 17.01.2017, 11:09   #2
Sweta
Форумчанин
 
Регистрация: 22.11.2007
Сообщений: 664
По умолчанию

Первая ошибка здесь-
Код:
for (double x = Xn; x<=Xk; x>=dX)
Интерпретация цикла for (от х начального(это правильно) пока не конечное (тоже правильно) должно быть изменение х на его шаг, т.е x+=dX)
Неприятности приходят и уходят, а жизнь продолжается!
Sweta вне форума Ответить с цитированием
Старый 17.01.2017, 11:10   #3
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,830
По умолчанию

Вам же уже писал по части этих ошибок...

Код:
char* Rus(const char* text);
Убрать из мейна выше.

Цитата:
for (double x = Xn; x<=Xk; x>=dX){
Третий параметр - это ШАГ цикла. Вы же переменную x вообще не меняете.

Код:
 if (x < 5 && c!=0) F = -a*x*x-b ;
 if (x > 5 && c==0) F = (x-a)/x;
 else F= -x/c;
Тут первый иф не имеет никакого значения, т.к. во втором покрываются все варианты и результат перезапишется в F.
p51x вне форума Ответить с цитированием
Старый 17.01.2017, 12:44   #4
- M
 
Регистрация: 14.05.2015
Сообщений: 5
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Вам же уже писал по части этих ошибок...

Код:
char* Rus(const char* text);
Убрать из мейна выше.


Третий параметр - это ШАГ цикла. Вы же переменную x вообще не меняете.

Код:
 if (x < 5 && c!=0) F = -a*x*x-b ;
 if (x > 5 && c==0) F = (x-a)/x;
 else F= -x/c;
Тут первый иф не имеет никакого значения, т.к. во втором покрываются все варианты и результат перезапишется в F.
Исправила программу до такого вида
Теперь стоит вопрос в том как корректно вывести значения.
(Там где отметила красным цветом)

Код:
#include <iostream>
#include <stdlib.h>
#include <windows.h> 

char* Rus(const char* text); 

using namespace std;

int main(int argc, char *argv[])
{
  double Xn, Xk, dX, a, b, c, x,F; 
  cout << Rus("Введите Xn, Xk, dX,  a, b, c\n"); 
  scanf("%lf%lf%lf%lf%lf%lf", &Xn, &Xk, &dX, &a, &b, &c); 
  int a1,b1,c1,F1,i;                     
    a1=(int) a;                       
    b1=(int) b;                       
    c1=(int) c;   
  cout<<"a="<<a<<Rus(" целая часть a1=")<<a1<<endl; 
  cout<<"b="<<b<<Rus(" целая часть b1=")<<b1<<endl;
  cout<<"c="<<c<<Rus(" целая часть c1=")<<c1<<endl;  
  cout<<"i| a | b | c | x | F |\n"<<endl;                   
  x = Xn;
  i=1;           
  while (x <= Xk)
  
     {
     if (x<5 && c!=0) F=-a*x*x-b;
         else if (x>5 && c==0) F=(x-a)/x;
              {
    if (c==0 ) cout <<i<< Rus("| F= Бесконечность x=")<<x<<" c="<<c<<endl;

    else F=-x/c;   
     F1=(int) F;          
       if ((a1 | b1)^(a1 | c1)!=0) 
            cout<<i<<"| "<<a<<" | "<<b<<" | "<<c<<" | "<<x<<" | "<<F<<endl;    
       else cout<<i<<"| "<<a<<" | "<<b<<" | "<<c<<" | "<<x<<" | "<<F1<<endl;
     }         
    x += dX;
    i++;
  } 
  system("PAUSE");	
  return 0;
}

char bufRus[256]; 
char* Rus(const char* text)
{
 CharToOem(text, bufRus); 
 return bufRus;
}
- M вне форума Ответить с цитированием
Старый 17.01.2017, 13:39   #5
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,830
По умолчанию

Зачем вы вывод значения функции запихнули в середину расчета этого значения?
p51x вне форума Ответить с цитированием
Старый 17.01.2017, 13:43   #6
- M
 
Регистрация: 14.05.2015
Сообщений: 5
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Зачем вы вывод значения функции запихнули в середину расчета этого значения?
А куда тогда?
Условие что с должно быть не равно нулю нужно в последнем условии. А во втором с наоборот должно быть равно нулю. Я не могу понять как это совместить
- M вне форума Ответить с цитированием
Старый 17.01.2017, 14:12   #7
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,830
По умолчанию

Код:
 if (x < 5 && c!=0) F = -a*x*x-b ;
 else if (x > 5 && c==0) F = (x-a)/x;
 else F= -x/c;
p51x вне форума Ответить с цитированием
Старый 17.01.2017, 14:29   #8
- M
 
Регистрация: 14.05.2015
Сообщений: 5
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Код:
 if (x < 5 && c!=0) F = -a*x*x-b ;
 else if (x > 5 && c==0) F = (x-a)/x;
 else F= -x/c;
Да, но если программа пойдет по ветке "else F= -x/c;", а c=0, то должно выводиться сообщение что F будет равно бесконечности
У меня в этом вопрос
- M вне форума Ответить с цитированием
Старый 17.01.2017, 15:12   #9
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,830
По умолчанию

Ну, блин, так допишите по примеру:
Код:
 if (x < 5 && c!=0) F = -a*x*x-b ;
 else if (x > 5 && c==0) F = (x-a)/x;
 else if (c != 0) F= -x/c; else { cout << ...; continue; }
Только шаг надо вынести вверх или перед континае дописать.
p51x вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
помогите ПОЖАЛУЙСТА исправить ошибку. лингвист Помощь студентам 0 21.01.2015 20:35
Помогите пожалуйста исправить ошибку!!!Please!!! Irin@ Помощь студентам 1 02.04.2009 20:31
помогите пожалуйста исправить задачу kardan Помощь студентам 2 12.04.2008 10:16
Помогите,пожалуйста,исправить задачу... Загадка Паскаль, Turbo Pascal, PascalABC.NET 1 21.12.2006 00:42