Форум программистов, компьютерный форум CyberForum.ru

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

Войти
Регистрация
Восстановить пароль
 
Benzema
0 / 0 / 0
Регистрация: 29.03.2015
Сообщений: 58
#1

Вызов функции - C++

05.10.2015, 22:43. Просмотров 258. Ответов 4
Метки нет (Все метки)

Здравствуйте! Такая задача:Разработать и испытать функцию, которая удаляет из целочисленного одномерного массива все элементы, совпадающие по значению с его начальным элементом, и возвращает новый размер массива.
Программу написал, но мне нужно,чтобы проверку каждого элемента массива и его удаление делала функция. А в теле самой программы должно быть только ввод числа элементов и вызов функции. Проблема в том,что пробовал делать проверку каждого элемента в функции но ничего не получилось. Помогите пожалуйста! Вопрос может быть глупый, но не знаю, как сделать. Заранее спасибо!
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
#include <iostream>
 
using namespace std;
 
void delEl(int * &array, int &numOfElem, int iDel) //Функция удаления элементов.
{
    int j;
    for (int j = iDel + 1; j < numOfElem; j++)
    {
        array[j - 1] = array[j];
    }
    numOfElem--;
}
 
int main()
{
    setlocale(LC_ALL, "Russian");
    int numOfElem;
    cout << "Введите число элементов массива: "; //Введите число элементов.
    cin >> numOfElem;
    int * array = new int(numOfElem);
    for (int i = 0; i < numOfElem; i++)
    {
        cout << "Массив[" << i << "] = "; //Ввод каждого элемента массива.
        cin >> array[i];
    }
    for (int i = 1; i < numOfElem; i++) //Проверка каждого элемента в массиве
    {
        if (array[i] == array[0])       //Если i-ый элемент равен нулевому
        {
            delEl(array, numOfElem, i); //То удаляем этот элемент.
        }
    }
    cout << "Новое содержание массива из " << numOfElem << " элементов:" << endl; //Вывод нового массива.
    for (int i = 0; i < numOfElem; i++)
    {
        cout << " " << array[i] << endl;
    }
    system("pause");
    return 0;
}
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.10.2015, 22:43
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Вызов функции (C++):

Вызов функции внутри другой функции с передачей локальной переменной по ссылке - C++
Столкнулся с очень с интересной проблемой. Можно ли так делать? #include &lt;iostream&gt; using std::cout; void f(const int &amp;ref){...

Вызов родовой функции (нужно передать массив в качестве аргумента функции через указатель) - C++
#include &lt;iostream&gt; using namespace std; template &lt;class T1&gt; class mas { public: T1 n; T1 a; void input() ...

Вызов функции в возврате значения функции - C++
Есть функция: int function1(a) { ...... return function2(function1(b),function1(c)); } Как работает такая хитрая система?

Вызов функции в параметре другой функции - C++
программа: #include &lt;iostream&gt; using namespace std; struct E { E() {} }; void f(const E&amp; e)

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

Вызов функции - C++
Привет всем. Вот такая структура кода: void Sailary() void SetShop() void SetMenu() void ResetData() int main()

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
pav1uxa
1792 / 1632 / 622
Регистрация: 23.01.2014
Сообщений: 5,911
Завершенные тесты: 1
05.10.2015, 23:05 #2
Цитата Сообщение от Benzema Посмотреть сообщение
Разработать и испытать функцию, которая удаляет из целочисленного одномерного массива все элементы, совпадающие по значению с его начальным элементом, и возвращает новый размер массива.
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 <algorithm>
#include <iostream>
#include <iterator>
#include <vector>
 
int f(std::vector<int>& v)
{
    v.erase(std::remove(v.begin()+1, v.end(), v.at(0)), v.end());
    return v.size();
}
 
int main()
{
    std::vector<int> v{0, 1, 2, 0, 1, 2, 0, 1, 2};
    int size = v.size();
    std::copy(v.begin(), v.end(), std::ostream_iterator<int>(std::cout, " "));
    std::cout << std::endl << "Arrsy size: " << size << std::endl;
    int newSize = f(v);
    std::copy(v.begin(), v.end(), std::ostream_iterator<int>(std::cout, " "));
    std::cout << std::endl << "New arrsy size: " << newSize << std::endl;
    return 0;
}
Benzema
0 / 0 / 0
Регистрация: 29.03.2015
Сообщений: 58
05.10.2015, 23:07  [ТС] #3
Цитата Сообщение от pav1uxa Посмотреть сообщение
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 <algorithm>
#include <iostream>
#include <iterator>
#include <vector>
 
int f(std::vector<int>& v)
{
    v.erase(std::remove(v.begin()+1, v.end(), v.at(0)), v.end());
    return v.size();
}
 
int main()
{
    std::vector<int> v{0, 1, 2, 0, 1, 2, 0, 1, 2};
    int size = v.size();
    std::copy(v.begin(), v.end(), std::ostream_iterator<int>(std::cout, " "));
    std::cout << std::endl << "Arrsy size: " << size << std::endl;
    int newSize = f(v);
    std::copy(v.begin(), v.end(), std::ostream_iterator<int>(std::cout, " "));
    std::cout << std::endl << "New arrsy size: " << newSize << std::endl;
    return 0;
}
Спасибо конечно, но вектора мы еще не изучали.
pav1uxa
1792 / 1632 / 622
Регистрация: 23.01.2014
Сообщений: 5,911
Завершенные тесты: 1
05.10.2015, 23:42 #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Benzema Посмотреть сообщение
Спасибо конечно, но вектора мы еще не изучали.
А setlocale(), system() изучали?

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
58
59
60
/* Разработать и испытать функцию, которая удаляет из целочисленного
 * одномерного массива все элементы, совпадающие по значению с его
 * начальным элементом, и возвращает новый размер массива
 */
 
#include <iostream>
 
int f(int *array, int size)
{
    int newSize = size;
    for (int i = 1; i < newSize; i++)
    {
        if (array[0] == array[i])
        {
            for (int j = i; j < newSize - 1; j++)
            {
                array[j] = array[j+1];
            }
            newSize--;
            i--;
        }
    }
    return newSize;
}
 
void printArray(int *array, int size)
{
    std::cout << "Array length = " << size << " : ";
    for (int i = 0; i < size; ++i)
    {
        std::cout << array[i] << " ";
    }
    std::cout << std::endl;
}
 
int main()
{
    int arraySize;
    int *array;
    
    std::cout << "Array size = ";
    std::cin >> arraySize;
    std::cout << std::endl;
    
    array = new int[arraySize];
    
    for (int i = 0; i < arraySize; ++i)
    {
        std::cout << "array[" << i <<"] = ";
        std::cin >> array[i];
    }
 
    printArray(array, arraySize);
 
    arraySize = f(array, arraySize);
 
    printArray(array, arraySize);
    
    return 0;
}
Benzema
0 / 0 / 0
Регистрация: 29.03.2015
Сообщений: 58
05.10.2015, 23:56  [ТС] #5
Цитата Сообщение от pav1uxa Посмотреть сообщение
А setlocale(), system() изучали?

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
58
59
60
/* Разработать и испытать функцию, которая удаляет из целочисленного
 * одномерного массива все элементы, совпадающие по значению с его
 * начальным элементом, и возвращает новый размер массива
 */
 
#include <iostream>
 
int f(int *array, int size)
{
    int newSize = size;
    for (int i = 1; i < newSize; i++)
    {
        if (array[0] == array[i])
        {
            for (int j = i; j < newSize - 1; j++)
            {
                array[j] = array[j+1];
            }
            newSize--;
            i--;
        }
    }
    return newSize;
}
 
void printArray(int *array, int size)
{
    std::cout << "Array length = " << size << " : ";
    for (int i = 0; i < size; ++i)
    {
        std::cout << array[i] << " ";
    }
    std::cout << std::endl;
}
 
int main()
{
    int arraySize;
    int *array;
    
    std::cout << "Array size = ";
    std::cin >> arraySize;
    std::cout << std::endl;
    
    array = new int[arraySize];
    
    for (int i = 0; i < arraySize; ++i)
    {
        std::cout << "array[" << i <<"] = ";
        std::cin >> array[i];
    }
 
    printArray(array, arraySize);
 
    arraySize = f(array, arraySize);
 
    printArray(array, arraySize);
    
    return 0;
}
Изучали) Спасибо.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.10.2015, 23:56
Привет! Вот еще темы с ответами:

Вызов функции - C++
Укажите правильный вариант вызова функции вместо пропуска …….. void func(int *p, int n, float k) { } main( ) { int...

Вызов функции - C++
Помогите пожалуйста решить завтра зачет, а задачу не могу решить последнюю. Составить программу формирования элементов массивов Х, У и...

Вызов функции в C++ - C++
есть циклический вызов функции: for (int i=0; i&lt;start; i++) { if (classicZOT())...

Вызов функции - C++
Написать вызов функции для строковых переменных, помогите!


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
05.10.2015, 23:56
Ответ Создать тему
Опции темы

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