Как переписать этот код с функциями без использования глобальных перемен?

Есть код на С++:

#include <iostream>
#include <stdlib.h>
#include <cmath>
#include <conio.h>
#include <time.h>
#include <windows.h>
#include <stdio.h>
using namespace std;

int main(){
SetConsoleCP(1251);
SetConsoleOutputCP(1251);

int ac, bc, cc, i = 0;
double a, b, c, x, xn, xk, dx, F;
cout << "Введіть a = "; cin >> a;
cout << "Введіть b = "; cin >> b;
cout << "Введіть c = "; cin >> c;
cout << "Введіть Х поч. = "; cin >> xn;
cout << "Введіть Х кін. c = "; cin >> xk;
cout << "Введіть крок H = "; cin >> dx;
ac = a;
bc = b;
cc = c;
cout << "\n\nn X" << ' ' << 'F' << endl << endl;

for (x = xn; x < xk; x += dx) {
    if ((c < 0) && (b != 0)) {
        F = a * x * x + b * b * x;
    }
    if ((c > 0) && (b == 0)) {
        F = (x - a) / (x + c);
    }
    else {
        F = x / c;
    }
    if ((ac & bc) | (ac & cc) != 0) {
        cout << ++i << " | " << x << " | " << F << endl;
    }
    else {
        cout << ++i << " | " << x << " | " << F << endl;
    }
}

return 0; }

Код должен выводить табличку с значениями функций, например:

введите сюда описание изображения

Его нужно переписать с использованием функций и БЕЗ использования глобальных перемен (вообще). Сижу пол дня и не могу допереть как ПРАВИЛЬНО сделать это. Спасибо всем, кто откликнется :) P.S: как всегда, за код не судите, еще совсем зеленый в С++


Ответы (3 шт):

Автор решения: AlexGlebe

Скорее всего хотели увидеть объявление функции, например такой :

double Func(double x,double a,double b,double c) {
  if ((c < 0) && (b != 0)) 
    return a * x * x + b * b * x;
  if ((c > 0) && (b == 0)) 
    return (x - a) / (x + c);
  return  x / c; }

Внутри вашего кода ошибка, забыли else добавить между if-ами. Это приводит к бессмысленному первому присвоению, всё равно дальше всё изменится.

Непонятно условие с битовыми операциями. if((ac & bc) | (ac & cc) != 0) Что вы хотели от него добиться? Всё равно код одинаковый.

С добавлением функции с аргументами (без глобальных переменных) получается вот такое :

for (x = xn; x < xk; x += dx) {
  F = Func(x,a,b,c);
  ++ i ;
  cout << i << " | " << x << " | " << F << endl;
  }
→ Ссылка
Автор решения: OPTIMUS PRIME

Можно всё завернуть в функции:

#include <iostream>
#include <string>

using namespace std;

double get_double(string msg)
{
    double x;

    cout << msg;
    cin >> x;

    return x;
}

double F(double a, double b, double c, double x)
{
    if ((c < 0) && (b != 0)) return a * x * x + b * b * x;
    if ((c > 0) && (b == 0)) return (x - a) / (x + c);
    
    return x / c;
}

void bubu() // Не знаю, что оно считает, следовательно bubu.
{
    double a = get_double("Input a = ");
    double b = get_double("Input b = ");
    double c = get_double("Input c = ");

    double xn = get_double("Input xn = ");
    double xk = get_double("Input xk = ");
    double dx = get_double("Input dx = ");

    cout << "\n\nn X F\n\n";

    for (double x = xn, i = 0; x < xk; x += dx)
    {
        cout << ++i << " | " << x << " | " << F(a, b, c, x) << endl;
    }
}

int main()
{
    bubu();
    return 0;
}

Но названия самих функций не считаются "глобальными переменными" ?
Можно еще весь код перенести

int main
{
  []{
    // сюда.
  }();
}

Самовызывающаяся функция (Immediately-invoked Function Expression), тогда точно будет без глобальных)

→ Ссылка
Автор решения: shisui

Перемести все глобальные переменные в мейн, а потом просто передавай их в функции.

→ Ссылка