Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/15: Рейтинг темы: голосов - 15, средняя оценка - 4.80
1 / 1 / 0
Регистрация: 22.07.2015
Сообщений: 42

Передача массива в функцию

30.03.2016, 16:51. Показов 3045. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как сделать функцию, в которую будет передавться массив. я что-то не оч понимаю.
вот исходный код
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
 #include <iostream>
#include <stdlib.h>
using namespace std;
int main()
{
    int n;
    cout << "Enter size: ";
    cin >> n;
    int* mass = new int[n];
    cout << "Enter array\n";
    for (int i = 0; i < n; i++)
    {
 
        cout << i << ": ";
        cin >> mass[i];
    }
    int z;
    int kol = 0; //провера на простотукаждого числа массива
    for (int i = 0; i < n; i++)
    {
        z = mass[i];
        int d;
        for (d = 2; d <= z / 2; d++)
        {
            if (z %d == 0)
                break;
        }
        if (d>z / 2)
        {
            kol++;
            if (z == 1) { cout << ""; }
            else
                cout << z << " ";
        }
    }
    delete[] mass;
    cout << "\nkolichestvo " << kol;
 system("pause");
    return 0;
}
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
30.03.2016, 16:51
Ответы с готовыми решениями:

Передача массива в функцию используя указатель на функцию
У меня имеется готовая программа без передачи функции в функцию указателем, мне нужно передать функцию ввода масива в функцию его обработки...

Передача двухмерного массива из функцию в функцию
Допустим у меня есть функция, в которой &quot;генерируется&quot; массив. Но нужно его передать в другую функцию, которая его выведет на экран. ...

Передача массива структур в функцию не указывая размера массива
Я читаю с командной строки файл в котором содержится массив структур. Есть библиотека с функцией в которую я прередаю файл и массив...

5
 Аватар для TimeTwo
102 / 95 / 104
Регистрация: 29.11.2009
Сообщений: 407
30.03.2016, 17:07
Элементы классических массивов (независимо от количества измерений) размещаются в памяти последовательно.

Поэтому в общем случае для доступа к элементу с заданными координатами в функцию надо передать адрес первого элемента и размер всех измерений (кроме "верхнего"). В таком случае массив можно рассматривать как одномерный и вычислять индекс нужного элемента в нем.

Для двумерного массива получаем:
C++
1
2
3
4
T get_elem (T *arr, int cols, int n_row, int n_col) // T это тип ( например, T double)
{  
    return arr[n_row * cols + n_col];
}
Для трехмерного
C++
1
2
3
4
T get_elem (T *arr, int rows, int cols, int i, int j, int k)
{  
    return arr[i * rows * cols + j * cols + k];
}

Далее аналогично.

Если Вы знаете (при написании программы, т.е. знаете константы) размер всех измерений массива, кроме, может быть, самого "верхнего", то компилятор упрощает Вам жизнь и для трехмерного int arr[][4][3] можно написать функцию так:
C++
1
2
3
 int get_elem (int arr[][4][3], int i, int j, int k) {
    return arr[i][j][k];
 }

и, разместив в main подходящие массивы, написать что-то вроде
C++
1
2
3
4
  int a[10][4][3], // 10 плоскостей (матриц), каждая из 4-х строк по 3 элемнта
      b[3][4][3];
    ...
  printf ("%d\n", get_elem(a, 2, 2, 2) + get_elem(b, 2, 2, 2));

Не забывайте, что все индексы с нуля.
1
 Аватар для meJevin
161 / 153 / 92
Регистрация: 18.11.2015
Сообщений: 677
30.03.2016, 17:08
Лучший ответ Сообщение было отмечено kosetik как решение

Решение

Как я понял, тебе нужно в этой функции узнать, сколько в массиве простых чисел.
Вот так тогда:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#include <iostream>
#include <stdlib.h>
using namespace std;
 
int countPrimeElements(int* mass, int size) {
    int z;
    int kol = 0; //провера на простоту каждого числа массива
    for (int i = 0; i < size; i++)
    {
        z = mass[i];
        int d;
        for (d = 2; d <= z / 2; d++)
        {
            if (z %d == 0)
                break;
        }
        if (d>z / 2)
        {
            kol++;
            if (z == 1) { cout << ""; }
            else
                cout << z << " ";
        }
    }
    return kol;
}
 
int main()
{
    int n;
 
    cout << "Enter size: ";
    cin >> n;
 
    int* mass = new int[n];
 
    cout << "Enter array\n";
    for (int i = 0; i < n; i++)
    {
 
        cout << i << ": ";
        cin >> mass[i];
    }
 
    int kol = countPrimeElements(mass, n);
    cout << "\nkolichestvo " << kol << endl;
 
    delete[] mass;
    system("pause");
    return 0;
}
1
1 / 1 / 0
Регистрация: 22.07.2015
Сообщений: 42
30.03.2016, 19:09  [ТС]
TimeTwo, meJevin, Спасибо большое!!!!
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12919 / 6787 / 1817
Регистрация: 18.10.2014
Сообщений: 17,169
30.03.2016, 19:18
Цитата Сообщение от TimeTwo Посмотреть сообщение
В таком случае массив можно рассматривать как одномерный и вычислять индекс нужного элемента в нем.
Это "будет работать" на практике, но это - хак. Формально язык не допускает переинтерпретацию многомерного массива, как одномерного.
0
 Аватар для SolidCoder
19 / 19 / 14
Регистрация: 21.03.2016
Сообщений: 60
30.03.2016, 19:19
Я уже ответил Вам в ЛС, но сделаю перепост тут:



Сделал две версии.
1) Исправил алгоритмическую ошибку и сделал рефакторинг, переведя все в функции и убрав мертвый код
2) Ничего не трогал, а просто перегнал все в одну функцию.

Выбирайте какой нравится. Если ни один не подойдет - пишите, не стесняйтесь.

Сама ошибка:
Ваша программа странно работает, если в массиве есть число 1.

Если на вход дается массив 1 2 3 4 5, то программа выводит 2 3 5 и "kolichestvo 4"

Так и должно быть, что на выводе три элемента, а количество = 4?

Если это ошибка, а это, скорее всего, ошибка, то вот где она:


kol++;
if (z == 1) { cout << ""; }
else
cout << z << " ";

kol++ надо внести в блок else:

C++
1
2
3
4
5
6
if (z == 1) { cout << ""; }
else
{
    cout << z << " ";
    kol++;
}
И да, " cout << ""; " - мертвый код, можно изменить выражение условие на z != 1

1) Код с выполненным рефакторингом и исправленной ошибкой:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#include <iostream>
#include <stdlib.h>
using namespace std;
 
void Enter(int *mass, int n)
{
    cout << "Enter array\n";
    for (int i = 0; i < n; i++)
    {
 
        cout << i << ": ";
        cin >> mass[i];
    }
}
 
bool check(int z)
{
    int d;
    for (d = 2; d <= z / 2; d++)
    {
        if (z %d == 0)
            break;
    }
    if (d>z / 2)
    {
        return true;
    }
    return false;
}
 
int main()
{
    int n;
    cout << "Enter size: ";
    cin >> n;
    int* mass = new int[n];
 
    Enter(mass, n);
 
    int z;
    int kol = 0; //провера на простотукаждого числа массива
    for (int i = 0; i < n; i++)
    {
        if (check(mass[i]))
        {
            if (mass[i] != 1)
            {
                cout << mass[i] << " ";
                kol++;
            }
        }
    }
    delete[] mass;
    cout << "\nkolichestvo " << kol << endl;
    system("pause");
    return 0;
}
2) Просто перевел в функцию, ничего не трогав.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#include <iostream>
#include <stdlib.h>
using namespace std;
 
void func(int *mass, int n, int &kol)
{
    int z;
    //провера на простотукаждого числа массива
    for (int i = 0; i < n; i++)
    {
        z = mass[i];
        int d;
        for (d = 2; d <= z / 2; d++)
        {
            if (z %d == 0)
                break;
        }
        if (d>z / 2)
        {
            kol++;
            if (z == 1) { cout << ""; }
            else
                cout << z << " ";
        }
    }
}
 
int main()
{
    int n;
    cout << "Enter size: ";
    cin >> n;
    int* mass = new int[n];
    cout << "Enter array\n";
    for (int i = 0; i < n; i++)
    {
 
        cout << i << ": ";
        cin >> mass[i];
    }
    int kol = 0; //провера на простотукаждого числа массива
    
    func(mass, n, kol);
 
    delete[] mass;
    cout << "\nkolichestvo " << kol;
    system("pause");
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
30.03.2016, 19:19
Помогаю со студенческими работами здесь

Передача двухмерного массива в функцию и изменение элемента массива
Такая проблема! Нужно передать в функцию двухмерный массив и изменить на елемент который равен 0 и если рядом по матрице находятса нули...

Передача в функцию массива
Всем привет. У меня следующая проблема: мне нужно передать в функцию массив так, чтоб потом при завершении работы его значения поменялись. ...

Передача массива в функцию
Всем привет! Пишу данный кусок кода: public:static char Decompress(char input) { } input красным горит визуа студио...

Передача массива в функцию
в строке getting_text(a) ошибка- используется потенциально неинициализированная локальная переменная-указатель а нужно найти количество...

Передача массива в функцию
Приветствую всех.. В разговоре с коллегами затронули тему передачи массива в функцию. И один из них сказал, что слышал о передаче массива в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru