Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
1 / 1 / 1
Регистрация: 26.10.2017
Сообщений: 7
1

Функции. Заменить нулевые элементы вектора

06.01.2018, 10:22. Показов 1067. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Дано три вектора А[a], В[b], С[c] целочисленного типа. Для каждого из них найти все нулевые элементы и заменить их единицами. Использовать функции.

Полностью рабочий код:
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
61
62
//программа создает три вектора, находит в них нулевые элементы и заменяет единицами
#include <iostream>
using namespace std;
 
//фукция заполнения и вывода массива
int arraying (int x, int y[]) 
{           
    for (int i=0; i<x; i++)
    {       
        y [i] = rand() % 5 - 2;
        cout << y[i] << "  ";
    }
    return 0;
}
 
//функция замены 0 на 1 и вывода нового массива
int ones (int x, int y[]) 
{
    for (int i=0; i<x; i++)
    {
        if (y[i] == 0) 
            {
                y[i]=1;
            }
        cout << y[i] << "  ";
    }
    return 0;
}
 
int main ()
{
    setlocale(0,"");
 
    int *A=0, *B=0, *C=0, a, b, c;//массивы и их размерности
    
    cout << "Введите через пробел размерности векторов A, B и C: ";
    cin >>a>>b>>c;
    cout << endl;
 
    cout << "Случайный вектор A (" << a << "):\n";   
    A = new int [a];
    arraying (a, A);
    cout << "\n\nНовый вектор A (" << a << "):\n";
    ones (a, A);
        
    cout << "\n\n\nСлучайный вектор B (" << b << "):\n";
    B = new int [b];
    arraying (b, B);
    cout << "\n\nНовый вектор B (" << b << "):\n";
    ones (b, B);
 
    cout << "\n\n\nСлучайный вектор C (" << c << "):\n";
    C = new int [c];
    arraying (c, C);
    cout << "\n\nНовый вектор C (" << c << "):\n";
    ones (c, C);
 
    cout<<"\n\n";
    delete A, B, C;
    system ("pause");
    return 0;
}
Проблема в том, что если я хочу строку A = new int [a]; перенести в функцию arraying как y = new int [x];, то перестает работать функция ones. Объявленные указатели я приравнял к нулю, только ради переноса этой строки в функцию, иначе компилятор просит инициализировать переменную.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.01.2018, 10:22
Ответы с готовыми решениями:

Заменить первые два нулевые элементы заданного вектора В на два первых НЕ нулевые элементы этого вектора
Дано вектор В, состоящий из N действительных чисел. Заменить первые два нулевые элементы заданного...

Заменить первых 2 нулевые элементы заданного вектора соответственно на первых 2 не нулевые элементы этого вектора
Заданный вектор Т, который состоит из n действительных чисел. Заменить первых 2 нулевые элементы...

В массиве найти максимальный элемент и заменить им все нулевые элементы, с вызовом функции
#include &lt;iostream&gt; using namespace std; void Zamena(double a, int n, double max) { for (int i...

Нулевые элементы массива заменить на единицы
В одномерном динамическом массиве: 1 шаг. преобразование исходного массива . Нулевые элементы...

1
277 / 226 / 93
Регистрация: 27.06.2016
Сообщений: 639
06.01.2018, 15:25 2
AlxMute, вы передаёте в arraying указатель и он при этом копируется. Да, запись по нему (запись элементов массива), будет работать, но если y просто присвоить новое значение (новый адрес), то изменится только y, на A это никак не отразится.
Варианты:
1. Возвращать динамический массив из функции int* arraying(int size) (передавать туда указатель смысла уже не будет).
2. Передавать указатель по ссылке (достаточно поменять int* y на int*& y).
3. Передавать указатель при помощи указателя (int **y). Это по сути то же самое, что вар. 2, но вар. 2 имеет в разы более удобный синтаксис.
1
06.01.2018, 15:25
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.01.2018, 15:25
Помогаю со студенческими работами здесь

Заменить нулевые элементы массива суммой элементов
Заменить нулевые элементы массива суммой элементов, значения которых кратны некоторому целому...

Все нулевые элементы матрицы заменить на единицу
Условие: Все нулевые элементы заменить на единицу! Во второй строке у меня там изменённый масив но...

Все отрицательные элементы массива уменьшить в двое, а все нулевые элементы заменить на...
Задан массив М, состоящий из К строк и N столбцов. Все отрицательные элементы уменьшить в двое, а...

Найти в массиве количество нулевых элементов и заменить нулевые элементы на 1
2 Завдання :Найти в массиве и вывести на экран количество нулевых элементов и заменить нулевые...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru