Как переписать этот код с функциями без использования глобальных перемен?
Есть код на С++:
#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 шт):
Скорее всего хотели увидеть объявление функции, например такой :
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;
}
Можно всё завернуть в функции:
#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), тогда точно будет без глобальных)
Перемести все глобальные переменные в мейн, а потом просто передавай их в функции.
