1

Тема: 3 функції. Без використання операторів if і switch.

Попередня назва теми: Допоможіть вирішити помилку (С++).
Реалізувати 3 функції, кожна з яких приймає вказівник на динамічний масив дійсних чисел і кількість елементів масиву. Перша функція повертає мінімальний елемент масиву, друга – максимальний, третя – середнє арифметичне. У головній функції створіть масив з 3-х вказівників на ці функції. Додайте меню, в якому користувач може вибрати бажану операцію. Напишіть програму без використання операторів if і switch.
при такому кодi в 53 рядку видає помилку немає перетвореня int в int*

#include <iostream>
#include <time.h>
using namespace std;
int* add_end(int *ar, int &n, int num);
int* func3(int *ar, int n);
int* func2(int *ar, int n);
int* func1(int *ar, int n);
void set(int *ar, int n);
void print(int *ar, int n);
void main() {
    setlocale(LC_ALL, "ru");
    srand(time(0));
    int n;
    cout << "Введiть розмiр масиву: ";
    cin >> n;
    int* ar = new int[n];
    set(ar, n);
    print(ar, n);
    int*(*p[3])(int*, int) = { func1,func2,func3 };
    int choice;
    
    cin >> choice;
    int c = *p[choice - 1](ar, n);
    cout << "Результат:" << c << "\n";
    system("pause");
}
int* add_end(int *ar, int &n, int num) {
    int* p = new int[n + 1];
    for (int i = 0; i < n; i++) {
        p [i] = ar [i];
    }
    p [n] = num;
    delete[]ar;
    n++;
    return p;
}
int* func3(int *ar, int n) {
    
}
int* func2(int *ar, int n) {
    
}
int* func1(int *ar, int n) {
    int* p = new int[0];
    int b = 0;
    int num = 0;
    for (int i = 0; i < n; i++) {
        b = 0;
        for (int c = 1; c < ar[i]; c++) {
                ar[i] % c == 0 ? (ar[i] >= 0 ? (b++) : (b = b)) : b = b;
        }
        num = ar[i];
        b > 2 ? (ar = add_end(ar, n, num)) : (b = b);
    }
    delete[]ar;
    return p;
}
void set(int *ar, int n) {
    for (int i = 0; i < n; i++) {
        *(ar + i) = rand() % 101 - 50;
    }
}
void print(int *ar, int n) {
    for (int i = 0; i < n; i++) {
        cout << *(ar + i) << " ";
    }
    cout << "\n";
}

2

Re: 3 функції. Без використання операторів if і switch.

не ту умову завдання скинув
Реалізувати 3 функції, кожна з яких приймає вказівник на динамічний масив і кількість елементів і повертає вказівник на новий масив. Перша функція шукає прості числа і заносить їх в новий масив, друга - всі числа кратні трьом і заносить їх в новий масив, третя - всі парні числа і заносить їх в новий масив. У головній функції створіть масив з 3-х вказівників на ці функції. Додайте меню, в якому користувач може вибрати бажану операцію. Напишіть програму без використання операторів if і switch.

3

Re: 3 функції. Без використання операторів if і switch.

в умові завдання Напишіть програму без використання операторів if і switch.

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

4

Re: 3 функції. Без використання операторів if і switch.

в 53 замість b > 2 має бути b < 3 але це не вирішує проблеми

5 Востаннє редагувалося koala (26.09.2018 15:00:25)

Re: 3 функції. Без використання операторів if і switch.

while(x){
  ...
  break;
}

працює точно як if. Гадаю, завдання було не в тому, щоб уникнути саме if/switch, а в тому, щоб уникнути розгалужень узагалі, замінивши їх рекурсією та масивами вказівників. Це реально. Наприклад, щоб скопіювати динамічний масив, доведеться робити щось на кшталт

typedef void (*CopyFunc)(int *,int*, int);
void copy(int *from, int *to, int size);
void copy_stop(int *,int*, int){}
CopyFunc next_copy[2]={&copy,&copy_stop};
void copy(int *from, int *to, int size){
  *to=*from;
  next_copy[size==0](from+1,to+1,size-1);
}

6

Re: 3 функції. Без використання операторів if і switch.

Рішення про прості є тут: http://replace.org.ua/topic/18/

7

Re: 3 функції. Без використання операторів if і switch.

помилку вирішив але працює не так як потрібно
хз навіщи там б = б але з ним нема помилки

#include <iostream>
#include <time.h>
using namespace std;
int* add_end(int *ar, int &n, int num);
int* func3(int *ar, int &n);
int* func2(int *ar, int &n);
int* func1(int *ar, int &n);
void set(int *ar, int n);
void print(int *ar, int n);
void main() {
    setlocale(LC_ALL, "ru");
    srand(time(0));
    int n;
    cout << "Введiть розмiр масиву: ";
    cin >> n;
    int* ar = new int[n];
    set(ar, n);
    print(ar, n);
    int*(*p[3])(int*, int&) = { func1,func2,func3 };
    int choice;

    cin >> choice;
    *ar = *p[choice - 1](ar, n);
    print(ar, n);
    system("pause");
}
int* add_end(int *ar, int &n, int num) {
    int* p = new int[n + 1];
    for (int i = 0; i < n; i++) {
        p[i] = ar[i];
    }
    p[n] = num;
    delete[]ar;
    n++;
    return p;
}
int* func3(int *ar, int &n) {
    return ar;
}
int* func2(int *ar, int &n) {
    return ar;
}
int* func1(int *ar, int &n) {
    n = 0;
    int* p = new int[0];
    int b = 0;
    int num = 0;
    for (int i = 0; i < n; i++) {
        b = 0;
        for (int c = 1; c < ar[i]; c++) {
            ar[i] % c == 0 ? (ar[i] >= 0 ? (b++) : (b = b)) : b = b;
        }
        num = ar[i];
        b < 3 ? (ar = add_end(ar, n, num)) || (b = b) : (b = b);
    }
    delete[]ar;
    return p;
}
void set(int *ar, int n) {
    for (int i = 0; i < n; i++) {
        *(ar + i) = rand() % 101 - 50;
    }
}
void print(int *ar, int n) {
    for (int i = 0; i < n; i++) {
        cout << *(ar + i) << " ";
    }
    cout << "\n";
}

8

Re: 3 функції. Без використання операторів if і switch.

помилки немає але й не працює

#include <iostream>
#include <time.h>
using namespace std;
int* add_end(int *ar, int &n, int num);
int* func3(int *ar, int &n);
int* func2(int *ar, int &n);
int* func1(int *ar, int &n);
void set(int *ar, int n);
void print(int *ar, int n);
void main() {
    setlocale(LC_ALL, "ru");
    srand(time(0));
    int n;
    cout << "Введiть розмiр масиву: ";
    cin >> n;
    int* ar = new int[n];
    set(ar, n);
    print(ar, n);
    int*(*p[3])(int*, int&) = { func1,func2,func3 };
    int choice;

    cin >> choice;
    *ar = *p[choice - 1](ar, n);
    print(ar, n);
    system("pause");
}
int* add_end(int *ar, int &n, int num) {
    int* p = new int[n + 1];
    for (int i = 0; i < n; i++) {
        p[i] = ar[i];
    }
    p[n] = num;
    delete[]ar;
    n++;
    return p;
}
int* func3(int *ar, int &n) {
    return ar;
}
int* func2(int *ar, int &n) {
    return ar;
}
int* func1(int *ar, int &n) {
    n = 0;
    int* p = new int[n];
    int b = 0;
    int num = 0;
    for (int i = 0; i < n; i++) {
        b = 0;
        for (int c = 1; c < ar[i]; c++) {
            ar[i] % c == 0 ? (ar[i] >= 0 ? (b++) : (b = b)) : b = b;
        }
        cout << "b" << b << "\n";
        num = ar[i];
        b < 3 ? (ar = add_end(ar, n, num)) || (b = b) : (b = b);
    }
    delete[]ar;
    return p;
}
void set(int *ar, int n) {
    for (int i = 0; i < n; i++) {
        *(ar + i) = rand() % 101 - 50;
    }
}
void print(int *ar, int n) {
    for (int i = 0; i < n; i++) {
        cout << *(ar + i) << " ";
    }
    cout << "\n";
}

9

Re: 3 функції. Без використання операторів if і switch.

фор не працює

#include <iostream>
#include <time.h>
using namespace std;
int* add_end(int *ar, int &n, int num);
int* func3(int *ar, int &n);
int* func2(int *ar, int &n);
int* func1(int *ar, int &n);
void set(int *ar, int n);
void print(int *ar, int n);
void main() {
    setlocale(LC_ALL, "ru");
    srand(time(0));
    int n;
    cout << "Введiть розмiр масиву: ";
    cin >> n;
    int* ar = new int[n];
    set(ar, n);
    print(ar, n);
    int*(*p[3])(int*, int&) = { func1,func2,func3 };
    int choice;

    cin >> choice;
    *ar = *p[choice - 1](ar, n);
    print(ar, n);
    system("pause");
}
int* add_end(int *ar, int &n, int num) {
    int* p = new int[n + 1];
    for (int i = 0; i < n; i++) {
        p[i] = ar[i];
    }
    p[n] = num;
    delete[]ar;
    n++;
    return p;
}
int* func3(int *ar, int &n) {
    return ar;
}
int* func2(int *ar, int &n) {
    return ar;
}
int* func1(int *ar, int &n) {
    cout << "n" << n << "\n";
    n = 0;
    cout << "n" << n << "\n";
    int* p = new int[n];
    int b = 0;
    int num = 0;
    cout << "n" << n << "\n";
    for (int i = 0; i < n; i++) {
        b = 0;
        cout << "n" << n << "\n";
        for (int c = 1; c < ar[i]; c++) {
            cout << "n" << n << "\n";
            ar[i] % c == 0 ? (ar[i] >= 0 ? (b++) : (b = b)) : b = b;
        }
        cout << "b" << b << "\n";
        num = ar[i];
        b < 3 ? (ar = add_end(ar, n, num)) || (b = b) : (b = b);
    }
    cout << "n" << n << "\n";
    delete[]ar;
    return p;
}
void set(int *ar, int n) {
    for (int i = 0; i < n; i++) {
        *(ar + i) = rand() % 101 - 50;
    }
}
void print(int *ar, int n) {
    for (int i = 0; i < n; i++) {
        cout << *(ar + i) << " ";
    }
    cout << "\n";
}
#include <iostream>
#include <time.h>
using namespace std;
int* add_end(int *ar, int &n, int num);
int* func3(int *ar, int &n);
int* func2(int *ar, int &n);
int* func1(int *ar, int &n);
void set(int *ar, int n);
void print(int *ar, int n);
void main() {
    setlocale(LC_ALL, "ru");
    srand(time(0));
    int n;
    cout << "Введiть розмiр масиву: ";
    cin >> n;
    int* ar = new int[n];
    set(ar, n);
    print(ar, n);
    int*(*p[3])(int*, int&) = { func1,func2,func3 };
    int choice;

    cin >> choice;
    *ar = *p[choice - 1](ar, n);
    print(ar, n);
    system("pause");
}
int* add_end(int *ar, int &n, int num) {
    int* p = new int[n + 1];
    for (int i = 0; i < n; i++) {
        p[i] = ar[i];
    }
    p[n] = num;
    delete[]ar;
    n++;
    return p;
}
int* func3(int *ar, int &n) {
    return ar;
}
int* func2(int *ar, int &n) {
    return ar;
}
int* func1(int *ar, int &n) {
    cout << "n" << n << "\n";
    n = 0;
    cout << "n" << n << "\n";
    int* p = new int[n];
    int b = 0;
    int num = 0;
    cout << "n" << n << "\n";
    for (int i = 0; i < n; i++) {
        b = 0;
        for (int c = 1; c < ar[i]; c++) {
            ar[i] % c == 0 ? (ar[i] >= 0 ? (b++) : (b = b)) : b = b;
        }
        cout << "b" << b << "\n";
        num = ar[i];
        b < 3 ? (ar = add_end(ar, n, num)) || (b = b) : (b = b);
    }
    cout << "n" << n << "\n";
    delete[]ar;
    return p;
}
void set(int *ar, int n) {
    for (int i = 0; i < n; i++) {
        *(ar + i) = rand() % 101 - 50;
    }
}
void print(int *ar, int n) {
    for (int i = 0; i < n; i++) {
        cout << *(ar + i) << " ";
    }
    cout << "\n";
}

10

Re: 3 функції. Без використання операторів if і switch.

чому цикл фор не працює?

11

Re: 3 функції. Без використання операторів if і switch.

що зробити щоб цикл працював?

12 Востаннє редагувалося Parsifal (26.09.2018 15:39:59)

Re: 3 функції. Без використання операторів if і switch.

все зрозумів там н присвоїв менше 0, тепер помилка зявилась

13

Re: 3 функції. Без використання операторів if і switch.

ось нова помилка

#include <iostream>
#include <time.h>
using namespace std;
int* add_end(int *ar, int &n, int num);
int* func3(int *ar, int &n);
int* func2(int *ar, int &n);
int* func1(int *ar, int &n);
void set(int *ar, int n);
void print(int *ar, int n);
void main() {
    setlocale(LC_ALL, "ru");
    srand(time(0));
    int n;
    cout << "Введiть розмiр масиву: ";
    cin >> n;
    int* ar = new int[n];
    set(ar, n);
    print(ar, n);
    int*(*p[3])(int*, int&) = { func1,func2,func3 };
    int choice;
    cin >> choice;
    *ar = *p[choice - 1](ar, n);
    print(ar, n);
    system("pause");
}
int* add_end(int *ar, int &n, int num) {
    int* p = new int[n + 1];
    for (int i = 0; i < n; i++) {
        p[i] = ar[i];
    }
    p[n] = num;
    delete[]ar;
    n++;
    return p;
}
int* func3(int *ar, int &n) {
    int nn = n;
    n = 0;
    int* p = new int[n];
    int num = 0;
    for (int i = 0; i < nn; i++) {
        num = ar[i];
        ar[i] % 2 == 0 ? (p = add_end(ar, n, num)) || (i += i) : (i += i);
    }
    delete[]ar;
    return p;
}
int* func2(int *ar, int &n) {
    int nn = n;
    n = 0;
    int* p = new int[n];
    int num = 0;
    for (int i = 0; i < nn; i++) {
        num = ar[i];
        ar[i] % 3 == 0 ? (p = add_end(ar, n, num)) || (i += i) : (i += i);
    }
    delete[]ar;
    return p;
}
int* func1(int *ar, int &n) {
    int nn = n;
    n = 0;
    int* p = new int[n];
    int b = 0;
    int num = 0;
    for (int i = 0; i < nn; i++) {
        b = 0;
        for (int c = 1; c < ar[i]; c++) {
            ar[i] % c == 0 ? (ar[i] >= 0 ? (b++) : (b += b)) : b += b;
        }
        num = ar[i];
        b < 3 ? (p = add_end(ar, n, num)) || (b += b) : (b += b);
    }
    delete[]ar;
    return p;
}
void set(int *ar, int n) {
    for (int i = 0; i < n; i++) {
        *(ar + i) = rand() % 101 - 50;
    }
}
void print(int *ar, int n) {
    for (int i = 0; i < n; i++) {
        cout << *(ar + i) << " ";
    }
    cout << "\n";
}

14

Re: 3 функції. Без використання операторів if і switch.

https://i.imgur.com/n08BinL.png

15

Re: 3 функції. Без використання операторів if і switch.

Наскільки я бачу, ви ввели номер функції 5.

16

Re: 3 функції. Без використання операторів if і switch.

так але подивіть на дату скріншота, просто помилка така ж

17

Re: 3 функції. Без використання операторів if і switch.

У будь-якому разі помилка через неправильні вказівники. Дебажте, де саме вона виникає.

18

Re: 3 функції. Без використання операторів if і switch.

при виклику функції,але іноді функція спрацьовує і виводить пустий рядок

19

Re: 3 функції. Без використання операторів if і switch.

коли я видаляю тернарного оператора то завжди появляється пустий рядок, можливо в тернарному операторі проблема але що тоді робити без іфа і свіча

20

Re: 3 функції. Без використання операторів if і switch.

попробував замінити тернарного оператора іфом але помилка всеріно появлась а коли просто видалив тернарного оператора помилка пропала і виводить пустий рядок