1

Тема: Проблема із функцією

https://dochub.com/vzaluskiy23/YpDBonNVrDv31G8RMX93r7/screenshot-2-png.jpg?dt=HaNjozyMePLosicCpWk5
Це має бути типу менюшки. Проблема в тому, що 2 та 3 пункт менє не працює, і я не розумію чому.
Header.h

#pragma once
#include<iostream>
using namespace std;
struct my_array {
    int size;
    int* data;
}; 
void input(my_array&);
void random(my_array&);
void geometry_average_odd(my_array&);
void riznuca_miz_2_max(my_array&);

Main1

#include"Header.h"

void main() {
    srand(time(0));
    my_array m;
    m.data = 0; m.size = 0;
    void(*my_commands[]) (my_array&) = { input, random, geometry_average_odd,  riznuca_miz_2_max };
    int user_choice = 0;
    while (true) {
        system("cls");
        cout << "Oberit potribny vam diu: " << endl;
        cout << "0 - Vvesty massuv" << endl;
        cout << "1 - randomni chysla v massuv" << endl;
        cout << "2 - znaytu geometrychny riznucy" << endl;
        cout << "3 - riznuca miz dvoma naybilshymy elementamu" << endl;
        cout << "4 - exit" << endl;
        cin >> user_choice;
        if (user_choice == 4) {
            break;
        }
        if (user_choice >= 0 && user_choice < 4) {
            my_commands[user_choice](m);
        }

    }
}

Main2

#include"Header.h"

void input(my_array& a) {
    if (a.data != 0) {
        delete[] a.data;
    }
    cout << "Vvedit kilkist elementiv massuvy: ";
    cin >> a.size;
    a.data = new int[a.size];
    for (int i = 0; i < a.size; i++) {
        cin >> a.data[i];
    }
    cout << "Massuv zapovneno!" << endl;
    system("pause");
}

void random(my_array& a) {
    if (a.data != 0) {
        delete[] a.data;
    }
    a.data = new int[a.size];
    cout << "Vvedit kilkist elementiv massuvy: ";
    cin >> a.size;
    cout << "Vvedit diapazon massuvy: ";
    int a1, a2;
    cin >> a1 >> a2;
    for (int i = 0; i < a.size; i++) {
        a.data[i] = rand() % (a2 - a1 + 1) + a1;
    }
    cout << "Massuv zapovneno!" << endl;
    system("pause");
}

void geometry_average_odd(my_array& a) {
    cout << "Viidiidid";
    int geometryarr = 1;
    for (int i = 0; i < a.size; i++) {
        if (a.data[i] % 2 == 0) {
        }
        else {
            geometryarr *= a.data[i];
        }
    }
    cout << "Seredne geometrychne elementiv massuvy: " << geometryarr << endl; 
}

void riznuca_miz_2_max(my_array& a) {
    if (a.data == 0) {
        cout << "Spochatky vvedit massuv!";
    }
    a.data = new int[a.size];
    int max = 0, max1 = 0;
    for (int j = 0; j < a.size; j++) {
        if (a.data[j] > max) {
            max = a.data[j];
        }
        for (int i = 0; i < a.size; i++) {
            if (a.data[i] > max1) {
                if (max = max1) {
                    return;
                }
                else {
                    max1 = a.data[i];
                }
            }
        }
    }
    int riznuca = 0;
    if (max > max1) {
        riznuca = max - max1;
    }
    else if (max < max1) {
        riznuca = max1 - max;
    }
    cout << "Riznuca miz dvoma maxim elementamu = " << riznuca << endl;
}

2

Re: Проблема із функцією

Добрий вечір. Ви не могли б уточнити, що значить "не працює"? Взагалі негативний спосіб опису - описувати те, чого код НЕ робить - мало допомагає. "Програма запитує кількість чисел і завершується з повідомленням про SEGFAULT", наприклад, значно краще за "не працює". Що конкретно відбувається? Я нашвидкуруч протестував - у мене працює.

3

Re: Проблема із функцією

Не працює це значить коли я вибираю цифру 2 або 3 воно нічо не виводить, а коли 0,1 та 4 то все працює належним чином

koala написав:

Добрий вечір. Ви не могли б уточнити, що значить "не працює"? Взагалі негативний спосіб опису - описувати те, чого код НЕ робить - мало допомагає. "Програма запитує кількість чисел і завершується з повідомленням про SEGFAULT", наприклад, значно краще за "не працює". Що конкретно відбувається? Я нашвидкуруч протестував - у мене працює.

4

Re: Проблема із функцією

vzaluskiy23 написав:

Не працює це значить коли я вибираю цифру 2 або 3 воно нічо не виводить, а коли 0,1 та 4 то все працює належним чином

О, тепер зрозуміло.

system("pause");

додайте. Я просто в середовищі без system тестував, тому не побачив. І взагалі system - це поганий смак у програмуванні, ви запускаєте значно складнішу за свою програму лише для того, щоб почистити екран чи прочитати і викинути один символ з клавіатури.
Принагідно:
- середнє геометричне - це корінь n-го степеня з добутку n чисел, а ви корінь не берете;
- ви перезаписуєте масив у riznuca_miz_2_max.

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