Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
kristofeer
5 / 5 / 2
Регистрация: 25.11.2016
Сообщений: 70
1

Динамическое выделение памяти под массив int

30.01.2017, 12:03. Просмотров 732. Ответов 12
Метки нет (Все метки)

плиз хелп
Написать функцию getPrimes, которая принимает массив типа int и его размер. Функция должна вернуть указатель на новый динамический массив, заполненный простыми числами из первого массива.
Если в первом массиве простых чисел нет, создавать динамический массив не надо пусть в этом случае getPrimes вернет нулевой указатель (NULL).
Проверку числа на простоту нужно оформить в виде отдельной функции isPrime, принимающей число и возвращающий признак его простоты (true, если число простое, иначе false),
и вызывать isPrime из getPrimes для проверки каждого элемента.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.01.2017, 12:03
Ответы с готовыми решениями:

Динамическое выделение памяти под массив
Я хочу функцию использовать пару раз, количество команд будет уменьшаться, и "n" надо менять. Как...

Динамическое выделение памяти под массив
Доброго времени суток. Как реализовать динамическое выделение памяти под массив, к примеру размера...

Динамическое выделение памяти под двумерный массив
1) Ввести построчно элементы двумерного массива чисел. Количество столбцов задается. Количество...

Динамическое выделение памяти под двумерный массив
Нужно написать программу, динамически выделяем память под двумерный массив, функции ввода-вывода,...

Динамическое выделение памяти под двумерный массив
Здравствуйте. Как мне правильно и грамотно (!) выделять память под двумерные массивы? Откуда...

12
MrGluck
Модератор
Эксперт CЭксперт С++
8113 / 4965 / 1436
Регистрация: 29.11.2010
Сообщений: 13,456
30.01.2017, 12:24 2
А как вы предполагаете узнавать размер динамического массива, который вернёт функция getPrimes?

Добавлено через 7 минут
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
#include <cmath>
#include <cstring>
#include <iostream>
 
bool isPrime(const int n)
{
    for (int i = 2, end = sqrt(n); i <= end; i++)
        if (n % i == 0)
            return false;
    return n > 1;
}
 
int* getPrimes(const int *arr, const int size)
{
    int buf[size], bufSize = 0;
    for (int i = 0; i < size; i++)
        if (isPrime(arr[i]))
            buf[bufSize++] = arr[i];
    if (bufSize)
    {
        int *res = new int[bufSize];
        memmove(res, buf, bufSize * sizeof(*buf));
        return res;
    }
    else
        return nullptr;
}
0
kristofeer
5 / 5 / 2
Регистрация: 25.11.2016
Сообщений: 70
30.01.2017, 12:36  [ТС] 3
есть массив
C++
1
2
3
4
5
6
7
8
const int ARRSIZE = 31;
    int arr[ARRSIZE]{ 0, 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};
 
    cout << "Массив простых чисел: \n";
    for (int i = 0; i < ARRSIZE; i++) {
        cout << arr[i] << " | ";
    }
    cout << endl;
0
GbaLog-
30.01.2017, 12:41
  #4

Не по теме:

Цитата Сообщение от MrGluck Посмотреть сообщение
размер динамического массива
C++ для начинающих
Ну вы же понимаете, что я хочу сказать, да?

0
kristofeer
5 / 5 / 2
Регистрация: 25.11.2016
Сообщений: 70
30.01.2017, 14:10  [ТС] 5
MrGluck, а можно как-то понятнее расписать?
А как вы предполагаете узнавать размер динамического массива, который вернёт функция getPrimes? - как я понимаю нужно завести счетчик на простое число, он и будет размером для динамического массива
0
MrGluck
Модератор
Эксперт CЭксперт С++
8113 / 4965 / 1436
Регистрация: 29.11.2010
Сообщений: 13,456
30.01.2017, 14:25 6
Цитата Сообщение от kristofeer Посмотреть сообщение
как я понимаю нужно завести счетчик на простое число, он и будет размером для динамического массива
В моём коде размер динамического массива равен bufSize. Вопрос в том, как вы предполагаете его вернуть т.к. Сигнатура функции и тип возвращаемого значения жёстко заданы заданием. Платформонезависимых методов определения размера динамического массива в С++ нет.

Добавлено через 2 минуты
Цитата Сообщение от GbaLog- Посмотреть сообщение
Ну вы же понимаете, что я хочу сказать, да?
Если вы про вектор, но в ТЗ явно указано что должна возвращать функция.
0
GbaLog-
30.01.2017, 14:28
  #7

Не по теме:

Цитата Сообщение от MrGluck Посмотреть сообщение
Если вы про вектор, но в ТЗ явно указано что должна возвращать функция.
Не, я не про вектор, а про динамический массив и типы в с++, ну да ладно, пора бы уже просто принять тот факт, что указатель и динамический массив путают. :(
Это не к вам относится, просто путают некоторые.

0
kristofeer
5 / 5 / 2
Регистрация: 25.11.2016
Сообщений: 70
31.01.2017, 10:53  [ТС] 8
Так и не понял MrGluck, можно понятнее что и где имеется ввиду, я ток начал учится а препод в институте гонит вперед очень быстро
вот что я на ваял, нужна помощь с функцией getPrimes

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
#include<iostream>
using namespace std;
 
/*Написать функцию 
getPrimes, которая принимает массив типа int и его размер. Функция должна вернуть указатель на новый динамический массив, заполненный простыми числами из первого массива. 
Если в первом массиве простых чисел нет, создавать динамический массив не надо -- пусть в этом случае getPrimes вернет нулевой указатель (NULL).
Проверку числа на простоту нужно оформить в виде отдельной функции isPrime, принимающей число и возвращающий признак его простоты (true, если число простое, иначе false), 
и вызывать isPrime из getPrimes для проверки каждого элемента.
Не забывайте в конце программы освобождать динамически выделенную память. 
*/
 
bool isPrime(int *arr, const int ARRSIZE){
 
    int i{};
    //cout << "Простые числа из массива: ";
    for (int x = 0; x < ARRSIZE; x++) { // проганяем наши значения 
        for (i = 2; i <= sqrt(arr[x]); i++) { // sqrt - квадратный корень 
            if (arr[x] % i == 0) break; // составные
        }
        if (i > sqrt(arr[x])) return true; // cout << arr[x] << " | "; // простые
    }
    return false;
}
 
int getPrimes(int *arr, const int ARRSIZE) {
 
    
        
}
 
int main() {
    setlocale(LC_ALL, "Russian");
 
    const int ARRSIZE = 30;
    int arr[ARRSIZE]{ 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 };
 
    cout << "Массив простых чисел: \n";
    for (int i = 0; i < ARRSIZE; i++) {
        cout << arr[i] << " | ";
    }
    cout << endl;
 
    //isPrime(arr, ARRSIZE);
    //cout << endl;
}
0
MrGluck
Модератор
Эксперт CЭксперт С++
8113 / 4965 / 1436
Регистрация: 29.11.2010
Сообщений: 13,456
31.01.2017, 11:24 9
kristofeer, я вам готовое задание дал. Вы его специально игнорируете?
0
kristofeer
5 / 5 / 2
Регистрация: 25.11.2016
Сообщений: 70
31.01.2017, 11:32  [ТС] 10
MrGluck, Я правда Вас не игнорирую пытался понять что откуда, но что не знаю трудно понять
int buf[size] - выражение должно иметь константное значение т.е. размер должен быть указан, а он у Вас не задан, компилятор ругается
функцию isPrime - еще не проходили
функцию memmove - еще не проходили
main - отсутствует
0
MrGluck
Модератор
Эксперт CЭксперт С++
8113 / 4965 / 1436
Регистрация: 29.11.2010
Сообщений: 13,456
31.01.2017, 11:40 11
Цитата Сообщение от kristofeer Посмотреть сообщение
int buf[size] - выражение должно иметь константное значение т.е. размер должен быть указан, а он у Вас не задан, компилятор ругается
У меня в параметрах функции стоит const int size и это константное значение.
Так что в int buf[size] размер массива указан и компилятор может ругаться только если вы криво правили мой код.

Цитата Сообщение от kristofeer Посмотреть сообщение
функцию isPrime - еще не проходили
Цитата Сообщение от kristofeer Посмотреть сообщение
Проверку числа на простоту нужно оформить в виде отдельной функции isPrime
Цитата Сообщение от MrGluck Посмотреть сообщение
bool isPrime(const int n)
вы же сами в задании указали, что её надо написать.

Цитата Сообщение от kristofeer Посмотреть сообщение
функцию memmove - еще не проходили
так пройдите.

Цитата Сообщение от kristofeer Посмотреть сообщение
main - отсутствует
main в задании не требовался. Тем более, я без понятий,
Цитата Сообщение от MrGluck Посмотреть сообщение
как вы предполагаете узнавать размер динамического массива, который вернёт функция getPrimes?
Так что код написано ровно под задание.

Пожалуй, вам стоит самостоятельно ознакомиться с основами и определиться что хотите в задании. Ответ дан, выпиливаюсь из темы.
1
kristofeer
5 / 5 / 2
Регистрация: 25.11.2016
Сообщений: 70
31.01.2017, 11:49  [ТС] 12
MrGluck, понял спс хоть на этом
может кто еще подкинет мыслей буду благодарен
0
Тамика
Котовчанин
929 / 470 / 199
Регистрация: 16.02.2010
Сообщений: 3,305
Записей в блоге: 32
31.01.2017, 15:15 13
kristofeer, у меня есть мысль. Изучите хотя бы основы С++. Это недолго.
0
31.01.2017, 15:15
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.01.2017, 15:15

Динамическое выделение памяти под массив структур (new/delete)
Люди добрые, подскажите пожалуйста, где в моем коде закралась ошибка? Интернет перечитал, во всех...

Динамическое выделение памяти под строки
Доброго времени суток. Изучаю основы C++, дошел до раздела &quot;указатели и динамическое выделение...

Динамическое выделение памяти под структуру
#include &lt;iostream&gt; using namespace std; struct person { char*name; char *adres; int age; };...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru