Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
kristofeer
4 / 4 / 0
Регистрация: 25.11.2016
Сообщений: 69
#1

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

30.01.2017, 12:03. Просмотров 390. Ответов 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++):

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

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

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

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

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

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

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

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

Не по теме:

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

0
kristofeer
4 / 4 / 0
Регистрация: 25.11.2016
Сообщений: 69
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Эксперт С++
7490 / 4605 / 691
Регистрация: 29.11.2010
Сообщений: 12,589
31.01.2017, 11:24 #9
kristofeer, я вам готовое задание дал. Вы его специально игнорируете?
0
kristofeer
4 / 4 / 0
Регистрация: 25.11.2016
Сообщений: 69
31.01.2017, 11:32  [ТС] #10
MrGluck, Я правда Вас не игнорирую пытался понять что откуда, но что не знаю трудно понять
int buf[size] - выражение должно иметь константное значение т.е. размер должен быть указан, а он у Вас не задан, компилятор ругается
функцию isPrime - еще не проходили
функцию memmove - еще не проходили
main - отсутствует
0
MrGluck
Модератор
Эксперт CЭксперт С++
7490 / 4605 / 691
Регистрация: 29.11.2010
Сообщений: 12,589
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 / 0
Регистрация: 25.11.2016
Сообщений: 69
31.01.2017, 11:49  [ТС] #12
MrGluck, понял спс хоть на этом
может кто еще подкинет мыслей буду благодарен
0
Тамика
Котовчанин
917 / 460 / 145
Регистрация: 16.02.2010
Сообщений: 3,190
Записей в блоге: 27
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
Привет! Вот еще темы с ответами:

Динамическое выделение памяти под объект - C++
Здравствуйте, меня интересует несколько вопросов по поводу конструкции new. Есть такой код: struct element { std::string...

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

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

Динамическое выделение памяти под строки в стиле Си - C++
В программе пользователь вводит строку неизвестного заранее размера. Ее нужно передать в функцию для работы с ней. Как это оформить на c++?...


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

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

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