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

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

30.01.2017, 12:03. Просмотров 612. Ответов 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
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Динамическое выделение памяти под массив int (C++):

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

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

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

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

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

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

12
MrGluck
Модератор
Эксперт CЭксперт С++
8022 / 4865 / 1425
Регистрация: 29.11.2010
Сообщений: 13,251
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
4 / 4 / 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
4 / 4 / 2
Регистрация: 25.11.2016
Сообщений: 70
30.01.2017, 14:10  [ТС] #5
MrGluck, а можно как-то понятнее расписать?
А как вы предполагаете узнавать размер динамического массива, который вернёт функция getPrimes? - как я понимаю нужно завести счетчик на простое число, он и будет размером для динамического массива
0
MrGluck
Модератор
Эксперт CЭксперт С++
8022 / 4865 / 1425
Регистрация: 29.11.2010
Сообщений: 13,251
30.01.2017, 14:25 #6
Цитата Сообщение от kristofeer Посмотреть сообщение
как я понимаю нужно завести счетчик на простое число, он и будет размером для динамического массива
В моём коде размер динамического массива равен bufSize. Вопрос в том, как вы предполагаете его вернуть т.к. Сигнатура функции и тип возвращаемого значения жёстко заданы заданием. Платформонезависимых методов определения размера динамического массива в С++ нет.

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

Не по теме:

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

0
kristofeer
4 / 4 / 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Эксперт С++
8022 / 4865 / 1425
Регистрация: 29.11.2010
Сообщений: 13,251
31.01.2017, 11:24 #9
kristofeer, я вам готовое задание дал. Вы его специально игнорируете?
0
kristofeer
4 / 4 / 2
Регистрация: 25.11.2016
Сообщений: 70
31.01.2017, 11:32  [ТС] #10
MrGluck, Я правда Вас не игнорирую пытался понять что откуда, но что не знаю трудно понять
int buf[size] - выражение должно иметь константное значение т.е. размер должен быть указан, а он у Вас не задан, компилятор ругается
функцию isPrime - еще не проходили
функцию memmove - еще не проходили
main - отсутствует
0
MrGluck
Модератор
Эксперт CЭксперт С++
8022 / 4865 / 1425
Регистрация: 29.11.2010
Сообщений: 13,251
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
4 / 4 / 2
Регистрация: 25.11.2016
Сообщений: 70
31.01.2017, 11:49  [ТС] #12
MrGluck, понял спс хоть на этом
может кто еще подкинет мыслей буду благодарен
0
Тамика
Котовчанин
918 / 462 / 195
Регистрация: 16.02.2010
Сообщений: 3,264
Записей в блоге: 28
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. ...

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

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

Динамическое выделение памяти под структуру (malloc)
Нашел данное решение на этом форуме, но никак не могу понять как оно работает....


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

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

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