0 / 0 / 0
Регистрация: 10.05.2015
Сообщений: 13
1

Удаление и замена элементов в одномерном массиве

04.06.2015, 15:57. Показов 4999. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день. Помогите пожалуйста с задачей.

Дан одномерный массив Yk. Удалить все элементы с дробной частью. Заменить все элементы с четными номерами на значение второго положительного элемента массива.

Проблема следующая: программа должна сначала удалить действительные числа, а затем заменить все элементы с четными номерами на значение второго положительного элемента массива. Но у меня получается 2 массива: массив без действительных чисел и массив с заменёнными числами, включая действительные числа.

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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
// Pract2.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
#include "conio.h"
#include <iostream>
#include <cmath>
# include <stdio.h>
# include <stdlib.h>
#include <time.h>
 
using namespace std; // объявление переменных
int i, k, a, Ki;
double*Y = NULL,
n,
fractpart,    //дробная часть               
intpart;           // целая часть
 
 
 
void in() //ввод массива
{
    cout << "Выберите тип ввода массива";
    cout << "1-ручной ввод, 2-рандомный ввод данных в массив" << endl;
    cin >> a;
    if (a == 1)
    {
        cout << "Введите количество элементов массива:" << endl;
        cin >> k;
        Y = new double[k]; //создаём массив
        for (i = 0; i < k; i++)
            cin >> Y[i];
    }
    else
    {
        cout << "Введите количество элементов массива  :" << endl;
        srand((unsigned)time(NULL)); // каждый раз будут новые числа в массиве
        cin >> k;
        Y = new double[k]; //создаём массив
        for (i = 0; i < k; i++)
            Y[i] = (float)(rand() % 1000) / 50; //заполняем массив рандомными числами
    }
}
 
void out() //вывод массива
{
    cout << "Массив:" << endl;
    for (i = 0; i < k; i++)
        cout << Y[i] << " ";
    cout << endl;
}
 
void del() //Удаление дробных элементов в массиве
{
    cout << "Массив с удалёнными элементами, содержащие дробную часть" << endl;
    for (int i = 0; i < k; i++)
    { 
        fractpart = modf(Y[i], &intpart); // вычисляем дробную часть, извлекая из числа целую часть
        if (fractpart == 0)  cout << Y[i] << " ";
    }
    cout << endl;
}
 
void change() //замена переменных с чётными номерами
{
    cout << "Массив с заменёнными элементами. Он же финальный результат" << endl;
    cout << "Массив с заменёнными элементами." << endl;
    Ki = 0;
    n = 0;
     //Цикл поиска второго положительного числа в массиве
    for (int i = 0; i < k && Ki != 2; i++)
    {
        if (Y[i] > 0)
        {
            Ki++;
            n = Y[i];
        }
 
        if (Ki == 2)
        {
            //Цикл замены четного номера элемента
            for (int i = 0; i < k; i ++)
                if (i % 2 != 0) // так как в c++ нумерация элементов массива начинается с 0
                Y[i] = n;
        }
    }
    for (int i = 0; i < k; i++)
        cout << Y[i] << " ";
    cout << endl;
}
 
void main()
{
    setlocale(LC_ALL, ""); //Подключаем русский язык
    in();
    out();
    del();
    change();
    system("pause");//"задерживаем" командную строку
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.06.2015, 15:57
Ответы с готовыми решениями:

Замена элементов в одномерном массиве
Помогите пожалуйста с написанием данной программы: Дан массив натуральных чисел. Заменить все...

Замена элементов по возрастанию в одномерном массиве
Есть рандомно заданный массив, к примеру (кол-во элементов может меняться). Требуется заменить его...

Удаление элементов в одномерном массиве
Задание: Что есть: int main (){ int n, X; cout &lt;&lt; &quot;n=&quot;; cin &gt;&gt; n; cout &lt;&lt; &quot;x=&quot;; cin &gt;&gt;...

Удаление, перестановка элементов в одномерном массиве.
Дан массив целых чисел (n=10), заполненій случайным образом числами из промежутка 1. удалить из...

5
94 / 48 / 63
Регистрация: 16.06.2014
Сообщений: 386
04.06.2015, 16:28 2
Цитата Сообщение от PROJECT SPARKY Посмотреть сообщение
C++
1
void del() //Удаление дробных элементов в массиве { cout << "Массив с удалёнными элементами, содержащие дробную часть" << endl; for (int i = 0; i < k; i++) { fractpart = modf(Y[i], &intpart); // вычисляем дробную часть, извлекая из числа целую часть if (fractpart == 0) cout << Y[i] << " "; } cout << endl; }
Не вижу тут никакого удаления, просто не выводите элементы с дробной частью.
Сделайте, например, так: создайте новый массив из элементов без дробной части и передавайте его в функцию change().
0
0 / 0 / 0
Регистрация: 10.05.2015
Сообщений: 13
04.06.2015, 16:56  [ТС] 3
Вот только он теперь ругается на ошибку прав доступа при чтении.

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
void del() //Удаление дробных элементов в массиве
{
    X = new double[b];
    cout << "Массив с удалёнными элементами, содержащие дробную часть" << endl;
    for (int i = 0; i < k; i++)
    { 
        fractpart = modf(Y[i], &intpart); // вычисляем дробную часть, извлекая из числа целую часть
        if (fractpart == 0)
        {
            X[j] = Y[i];
            cout << X[j] << " ";
            b++;//записываем размер нового массива
        }
    }
    cout << endl;
}
 
void change() //замена переменных с чётными номерами
{
    cout << "Массив с заменёнными элементами. Он же финальный результат" << endl;
    cout << "Массив с заменёнными элементами." << endl;
    Ki = 0;
    n = 0;
     //Цикл поиска второго положительного числа в массиве
    for (int j = 0; j < b && Ki != 2; j++)
    {
        if (X[j] > 0)
        {
            Ki++;
            n = X[j];
        }
 
        if (Ki == 2)
        {
            //Цикл замены четного номера элемента
            for (int j = 0; j < b; j ++)
                if (j % 2 != 0) // так как в c++ нумерация элементов массива начинается с 0
                X[j] = n;
        }
    }
    for (int j = 0; j < b; j++)
        cout << X[j] << " ";
    cout << endl;
}
 
}
0
0 / 0 / 0
Регистрация: 10.05.2015
Сообщений: 13
04.06.2015, 17:07  [ТС] 4
Удаление и замена элементов в одномерном массиве


Вот на этом месте.

Удаление и замена элементов в одномерном массиве


И вот так она теперь меняет элементы.
0
94 / 48 / 63
Регистрация: 16.06.2014
Сообщений: 386
04.06.2015, 17:11 5
Лучший ответ Сообщение было отмечено PROJECT SPARKY как решение

Решение

1. Размерность массива X должна быть той же, что и у массива Y.
2. Переменную j инициализируй нулём.
3. Одиннадцатую строку кода из третьего поста замени на
C++
1
cout << X[j++] << " ";
1
0 / 0 / 0
Регистрация: 10.05.2015
Сообщений: 13
04.06.2015, 17:21  [ТС] 6
Большое спасибо. Теперь заработало как надо.
0
04.06.2015, 17:21
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.06.2015, 17:21
Помогаю со студенческими работами здесь

Поиск и удаление элементов в одномерном массиве
Всем привет! Задача такая: Найти нужный элемент в массиве и удалить его. Если есть повторы, их...

Удаление,вставка, перемещение элементов в одномерном массиве
решите задачку, на завтра нужна для зачёта.. нужно решить через процедуры. Дан массив целых...

Замена местами элементов относительно центрального элемента в одномерном массиве
Добрый день! Подскажите как будет выглядеть функция, которая реализовывает замену местами...

В одномерном массиве, состоящем из вещественных элементов вычислить номер минимального элемента в массиве, сумму элементов массива
В одномерном массиве, состоящем из 10 вещественных элементов вычислить: 1. Номер минимального...

Поиск и замена в одномерном массиве
Дан одномерный массив, который содержит не более 60 символов, которые образуют слова, разделенные...

Поиск и замена в одномерном массиве
Решите задачи данной группы, оформив решение в виде процедур генерации, вывода и обработки...


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

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

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