1

Тема: C++ Функції. Методи передачі параметрів

Є діапазон цілих чисел [a, b]. Знайти суму всіх не парних чисел цього діапазону  та підрахувати їх середнє арифметичне. В мене не вдалось вирахувати середнє арифметичне через функцію підставляв все що міг, але не вираховуеться.

Код програми:

#include <iostream>

using namespace std;

int getinvalue()
{
    setlocale(LC_CTYPE, "ukr");
    int x;
    cout << "Введiть значення = "; cin >> x;
    return x;
}
int f1(int a, int b, int count, int aver)
// за значенням
{
    int sum = 0;
    count = 0;
    int x = a;
    while (x <= b)
    {
        sum = sum + x;
        count++;
        ++x;
        aver = sum / b;
    }
    return sum;
};
int main()
{
    int a, b;
    setlocale(LC_CTYPE, "ukr");
    cout << "Блок введения даних \n";
    do
    {
        a = getinvalue();
        b = getinvalue();
        if (a > b) cout << "\n Введите снова \n";
    } while (a > b);

    cout << "\n By Value \n";
    int count = 0, rez = 0, aver = 0;
    cout << " a = " << a << ", b = " << b << ", count = " << count << ", result = " << rez << ", aver = " << aver;
    rez = f1(a, b, count, aver);
    cout << "\n a = " << a << ", b = " << b << ", count = " << count << ", result = " << rez << ", aver = " << aver;

    return 0;
}

2

Re: C++ Функції. Методи передачі параметрів

Ви неправильно робите те, що у вас винесене в заголовок. Але оскільки в тексті завдання нічого про це не сказано, то я б вам порадив прибрати взагалі функцію f1 і розраховувати все в main.
Ну і інтернаціоналізація - цікава тема, але вона не передбачає, що одна програма буде виводити повідомлення трьома різними мовами одночасно. Ви для якої країни пишете?

3

Re: C++ Функції. Методи передачі параметрів

koala написав:

Ви неправильно робите те, що у вас винесене в заголовок. Але оскільки в тексті завдання нічого про це не сказано, то я б вам порадив прибрати взагалі функцію f1 і розраховувати все в main.
Ну і інтернаціоналізація - цікава тема, але вона не передбачає, що одна програма буде виводити повідомлення трьома різними мовами одночасно. Ви для якої країни пишете?

Я пишу для України

4

Re: C++ Функції. Методи передачі параметрів

koala написав:

Але оскільки в тексті завдання нічого про це не сказано, то я б вам порадив прибрати взагалі функцію f1 і розраховувати все в main.
Ну і інтернаціоналізація - цікава тема, але вона не передбачає, що одна програма буде виводити повідомлення трьома різними мовами одночасно. Ви для якої країни пишете?

Звичайно я зробив би через main, але мені сказали зробити через функції. Вибачаюсь, що в моему коді присутня мова агресора

5

Re: C++ Функції. Методи передачі параметрів

Будь ласка, наведіть повне завдання. Можливо, що вам його недоформулювали (наприклад, "реалізувати всі способи, які ми вивчили на парі") - то самі сформулюйте, що саме вам треба зробити (наприклад, перелічить ці способи). Дуже незручно давати поради, а потім отримувати відповідь "ой, а я забув сказати, що там була ще ось така умова".
Ну і ви ж у курсі, що для розв'язання цієї задачі вам не потрібен цикл?

Подякували: leofun011

6

Re: C++ Функції. Методи передачі параметрів

Трохи виправив

#include <iostream>
using namespace std;

int getinvalue()
{
   int x;
   cout << "Введiть значення = "; 
   cin >> x;
   return x;
}

int sum_of_odd(int a, int b, int &count, double &aver)
// за значенням
{
   int sum = 0;
   for(int i = a; i <= b; i++)
   {
      if( i % 2 == 1)
      {
         count++;
         sum += i;
      }
   }
   aver = sum / count;
   return sum;
};


int main()
{
   int a, b;
   setlocale(LC_CTYPE, "ukr");
   cout << "Блок введения даних \n";
   a = getinvalue();
   b = getinvalue();
   if(b < a)
      swap(a, b);

   cout << "\n By Value \n";
   int count = 0, rez = 0;
   double aver = 0;
   //cout << " a = " << a << ", b = " << b << ", count = " << count << ", result = " << rez << ", aver = " << aver;
   rez = sum_of_odd(a, b, count, aver);
   cout << "\n a = " << a << ", b = " << b << ", count = " << count << ", result = " << rez << ", aver = " << aver;

   return 0;
}
Подякували: noname1

7

Re: C++ Функції. Методи передачі параметрів

Olex_V написав:

Трохи виправив

#include <iostream>
using namespace std;

int getinvalue()
{
   int x;
   cout << "Введiть значення = "; 
   cin >> x;
   return x;
}

int sum_of_odd(int a, int b, int &count, double &aver)
// за значенням
{
   int sum = 0;
   for(int i = a; i <= b; i++)
   {
      if( i % 2 == 1)
      {
         count++;
         sum += i;
      }
   }
   aver = sum / count;
   return sum;
};


int main()
{
   int a, b;
   setlocale(LC_CTYPE, "ukr");
   cout << "Блок введения даних \n";
   a = getinvalue();
   b = getinvalue();
   if(b < a)
      swap(a, b);

   cout << "\n By Value \n";
   int count = 0, rez = 0;
   double aver = 0;
   //cout << " a = " << a << ", b = " << b << ", count = " << count << ", result = " << rez << ", aver = " << aver;
   rez = sum_of_odd(a, b, count, aver);
   cout << "\n a = " << a << ", b = " << b << ", count = " << count << ", result = " << rez << ", aver = " << aver;

   return 0;
}

Дуже вам дякую

8

Re: C++ Функції. Методи передачі параметрів

koala написав:

Будь ласка, наведіть повне завдання. Можливо, що вам його недоформулювали (наприклад, "реалізувати всі способи, які ми вивчили на парі") - то самі сформулюйте, що саме вам треба зробити (наприклад, перелічить ці способи). Дуже незручно давати поради, а потім отримувати відповідь "ой, а я забув сказати, що там була ще ось така умова".

1) введення вхідих даних з клавіатури

2) в програмі розробити три варіанти заданої в індивідуальному завданні функції; всі параметри і значення, що повертає функція, передаються:

        1-й варіант – за значенням;

        2-й варіант – за посиланням;

        3-й варіант – за вказівником.

3) для кожного варіанту функції передбачити виведення на консоль:

        - назви способу передачі параметрів;

        - значень параметрів, що передаються у функцію, до і після її виклику;

        - значення, яке повертає функція.

9

Re: C++ Функції. Методи передачі параметрів

Усі параметри і значення. Ну ок. Значить, 1 варіант має повертати два значення - у структурі чи в std::pair, на ваш смак. Бо значень 2 - сума і середнє арифметичне. Через параметри ви їх за значенням не повернете.

Подякували: noname1

10

Re: C++ Функції. Методи передачі параметрів

без циклу

int sum_of_odd(int a, int b, int &count, double &aver)
// за значенням
{
   int sum = 0, a1, an, n = 0;
  
   if(a % 2 == 1)
      a1 = a;
   else
    a1 = a++;
   if(b % 2 == 1)
      an = b;
   else
      an = b--;
   n = (an - a1) / 2 + 1;
   count = n;
   sum = (a1 + an) / 2 * n;
   aver = sum / count;
   return sum;
};
Подякували: noname1

11

Re: C++ Функції. Методи передачі параметрів

Olex_V написав:

без циклу

int sum_of_odd(int a, int b, int &count, double &aver)
// за значенням
{
   int sum = 0, a1, an, n = 0;
  
   if(a % 2 == 1)
      a1 = a;
   else
    a1 = a++;
   if(b % 2 == 1)
      an = b;
   else
      an = b--;
   n = (an - a1) / 2 + 1;
   count = n;
   sum = (a1 + an) / 2 * n;
   aver = sum / count;
   return sum;
};

Дякую

12

Re: C++ Функції. Методи передачі параметрів

Olex_V написав:
   if(a % 2 == 1)
      a1 = a;
   else
    a1 = a++;

Це еквівалентно

a1=a;
a++;

А ви, мабуть, не цього хотіли, а преінкремент використати. Але якщо вже змінювати a, то можна без нової змінної обійтися. А тоді можна зробити

a |= 1;
b = --b|1;

(це якщо хочете викладача заплутати).

Ну і від того, що в коментарі стоїть "за значенням", передача за посиланнями не зупиняється.

13

Re: C++ Функції. Методи передачі параметрів

koala написав:

Ну і від того, що в коментарі стоїть "за значенням", передача за посиланнями не зупиняється.

Так , використав посилання. На коментар не звернув уваги, майже сплю

14

Re: C++ Функції. Методи передачі параметрів

if(a % 2 == 1)
      a1 = a;
   else
    a1 = a++;

так, хотів

a1 = a + 1;