1

Тема: Вказівники,допоможіть не можу зрозуміти де помилка.

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

#include <iostream>
#include <time.h>

using namespace std;

void Random(int *ar, int n) {
    for(int i = 0; i < n; i++)
        *(ar + i) = rand() % 10;
}

void Show(int *ar, int n) {
    for(int i = 0; i < n; i++)
        cout << *(ar + i) << " ";
    cout << endl;
}

int *Povern_Vkaz(int *arr, int n, int num) {
    for(int i = 0; i < n; i++) {
        if(arr[i] == num) {
            arr[i] = arr[0];
            return arr;
        }
        else return 0;
    }
}

void main() {
    srand(time(0));
    const int n = 6;
    int arr[n];
    int num;

    Random(arr, n); // заповнення
    Show(arr, n);   // виводимо
    cout << " Vvedit chyslo yake povynno buty v masyvi-->" << endl;
    cin >> num;

    int *result = Povern_Vkaz(arr, n, num);
    cout << result << endl;
}

2

Re: Вказівники,допоможіть не можу зрозуміти де помилка.

Будь ласка, ще допишіть, чим вас не влаштовує цей код. А ще прокоментуйте, що саме з завдання ви робите в рядках 23 і 20.

3

Re: Вказівники,допоможіть не можу зрозуміти де помилка.

підкажете що не так ?

4

Re: Вказівники,допоможіть не можу зрозуміти де помилка.

int *Povern_Vkaz(int *arr, int n, int num) {
    for(int i = 0; i < n; ++i) {
        if(arr[i] == num)
            return arr + i;
    }
    return 0;
}

void main() {
    srand(time(0));
    const int n = 6;
    int arr[n];
    int num;

    Random(arr, n); // заповнення
    Show(arr, n);   // виводимо
    cout << " Vvedit chyslo yake povynno buty v masyvi-->" << endl;
    cin >> num;

    int *result = Povern_Vkaz(arr, n, num);
    if(result) {
        // cout << result << endl;   // виводить адресу
        cout << *result << endl;     // виводить значення
    }
    else cout << " Ne znaideno." << endl;
}

Це я поредагував ваші повідомлення.

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

5

Re: Вказівники,допоможіть не можу зрозуміти де помилка.

майже те що треба , але має повертати не число яке знайдено , а перший елемент масиву.

6

Re: Вказівники,допоможіть не можу зрозуміти де помилка.

mary_piku написав:

майже те що треба, але має повертати не число яке знайдено, а перший елемент масиву.

Давайте ще раз уважно прочитаємо завдання :

mary_piku написав:

Написати функцію, яка приймає вказівник на масив,кількість елементів масиву і число

Це в нас є (int *arr, int n, int num),
далі :

mary_piku написав:

, і повертає вказівник на перший елемент масиву , в якому знайдено це число або нуль, якщо число не знайдено.

Є масив (arr - вказівник на його початок), масив складається з елементів, ці елементи мають значення (arr[і]) і мають адреси (arr+i - вказівники), в умові чітко написано "повертає вказівник на елемент масиву", не який-небуть, а на перший з тих, значення яких дорівнює переданому числу (num).
Функція, яка замість вказівника повертає значення елемента == не виконане завдання.

upd:

mary_piku написав:

має повертати не число яке знайдено, а перший елемент масиву.

Деяка логіка в ваших словах проглядається (типу як написано, так і роблю), але з цим звертайтесь до того, хто поставив завдання.

upd2:
Умову

mary_piku написав:

повертає вказівник на перший елемент масиву, в якому знайдено це число або нуль, якщо число не знайдено.

можна трактувати ще і так :
Якщо в масиві знайдено передане число, то повернути arr+1;
Якщо не знайдено - повернути 0.

7

Re: Вказівники,допоможіть не можу зрозуміти де помилка.

А просто написати &arr[ i ]?

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

8

Re: Вказівники,допоможіть не можу зрозуміти де помилка.

koala написав:

А просто написати &arr[ i ]?

Це ж той самий arr+i.

                arr+i    &arr[i]
менше символів    +        -
читабельність     +       +/-   // бо можна подумати, що (&arr)[i], а не &(arr[i]).

9

Re: Вказівники,допоможіть не можу зрозуміти де помилка.

Як на мене, читаність у arr+i якраз нижча - &(arr[ i ]) це очевидно, що адреса i-го елемента; a arr+i може здатися додаванням. Якби в коді були дійсно якісь операції з додаванням вказівників, то було б нормально.

10

Re: Вказівники,допоможіть не можу зрозуміти де помилка.

koala написав:

arr+i може здатися додаванням.

Так це і є додавання. До (int)arr додається i*sizeof(int) і результат подається як (int*).

11

Re: Вказівники,допоможіть не можу зрозуміти де помилка.

leofun01 написав:
koala написав:

arr+i може здатися додаванням.

Так це і є додавання. До (int)arr додається i*sizeof(int) і результат подається як (int*).

Ні, це додавання із множенням. Треба розуміти арифметику вказівників. Так, вона не складна; але те, що записи arr[ i ] та i[ arr ] еквівалентні (бо це arr+i), не робить другий і третій вирази зрозумілими.

Подякували: sensei, leofun01, Chemist-i3