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

Заменить все элементы, меньшие заданного числа, этим числом - C++

Восстановить пароль Регистрация
 
assasin21rus
2 / 2 / 1
Регистрация: 02.04.2014
Сообщений: 86
18.04.2014, 10:20     Заменить все элементы, меньшие заданного числа, этим числом #1
Дана последовательность целых чисел.
Замечание. Задачи из данного пункта решить двумя способами, используя одномерный массив, а затем двумерный. Размерность массива вводится с клавиатуры.
2. Заменить все элементы, меньшие заданного числа, этим числом.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.04.2014, 10:20     Заменить все элементы, меньшие заданного числа, этим числом
Посмотрите здесь:

C++ В целочисленном массиве заменить все элементы, меньшие 5 числом 111
дана последовательность целых чисел заменить все элементы меньше заданного числа этим числом C++
Массивы (в каждом столбце заменить элементы, меньшие по модулю заданного числа на номер столбца) C++
C++ В последовательности целых чисел заменить все элементы, меньшие заданного числа
C++ Заменить все элементы массива, меньшие заданного числа, этим числом
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
cooller
 Аватар для cooller
564 / 532 / 120
Регистрация: 25.12.2013
Сообщений: 1,456
19.04.2014, 01:50     Заменить все элементы, меньшие заданного числа, этим числом #2
assasin21rus,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include<cstdlib>
 
int main()
{
    size_t sizeArr;
    std::cin>>sizeArr;
    int *arr = new int [sizeArr];
    for(size_t i=0; i<sizeArr; i++)
        std::cout<<(arr[i] = rand()%20 - 10)<<" ";
    int Number;
    std::cout<<"Enter the number: ";
    std::cin>>Number;
    for(size_t i=0; i<sizeArr; i++)
        if(arr[i] < Number)
            arr[i] = Number;
    std::cout<<"\nNew array: ";
    for(size_t i=0; i<sizeArr; i++)
        std::cout<<arr[i]<<" ";
}
some_name
Вежливость-главное оружие
 Аватар для some_name
219 / 219 / 55
Регистрация: 19.02.2013
Сообщений: 1,419
19.04.2014, 03:40     Заменить все элементы, меньшие заданного числа, этим числом #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
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
#include "stdafx.h"
#include <iostream>
 
using  namespace std;
 
void firstWay(int data[], int length, int number);
void secondWay(int data[], int length, int number);
void printArray(int data[], int length);
int *copyArray(int data[], int length);
 
int main(void)
{
    int count;
    std::cout<<"Enter size of array : "; 
    std::cin >> count;
 
    int *data = new int[count];
    for(int i = 0; i < count; ++i){
        data[i] = 10 - rand() % 20;
    }
    printArray(data, count);
 
    int number;
    std::cout<<"Enter number : "; 
    std::cin>>number;   
 
    firstWay(data, count, number);
    secondWay(data, count, number); 
 
    delete[] data;
 
    system("pause");
    return 0;
}
 
void firstWay(int originalData[], int length, int number){
 
    int *data = copyArray(originalData, length);
    //replace items
    for (int i = 0; i < length; ++i){
        if(data[i] < number){
            data[i] = number;
        }
    }
    ///////////////////////////////////////////////delete[] data;
    //print
    printArray(data, length);
}
 
void secondWay(int originalData[], int length, int number){
 
    int *data = copyArray(originalData, length);
    //size matrix
    int size = int(sqrt(length) + 0.5);
    //create matrix
    int **matrix = new int *[size];
    for (int i = 0; i < size; ++i){
        matrix[i] = new int[size];
    }
    //fill matrix
    for (int i = 0, k = 0; i < size && k < length; i++){
        for (int j = 0; j < size; ++j){      
            matrix[i][j] = data[k++];                
        }        
    }
    //replace items
    for (int i = 0, k = 0; i < size && k < length; i++){
        for (int j = 0; j < size; ++j, ++k){
            if(matrix[i][j] < number){               
                data[k] = number;
            }   
        }
    }   
    for (int i = 0; i < size; ++i){
        delete[] matrix[i];
    }
    ////////////////////////////////////////delete[] data;
    delete[] matrix;
    //print
    printArray(data, length);
}
 
void printArray(int data[], int length){
 
    for (int i = 0; i < length; ++i){
        std::cout<<data[i]<<"  ";
    }
    std::cout<<std::endl;
}
 
int * copyArray(int data[], int length){
 
    int *newArray = new int[length];
    for (int i = 0; i < length; ++i){
        newArray[i] = data[i];
    }
    return newArray;
}
Вопрос: почему, если рассоментировать delete[] data, то вылетает ошибка?
cooller
 Аватар для cooller
564 / 532 / 120
Регистрация: 25.12.2013
Сообщений: 1,456
19.04.2014, 03:49     Заменить все элементы, меньшие заданного числа, этим числом #4
some_name, много лишнего, имхо
Ev_Hyper
 Аватар для Ev_Hyper
1814 / 1635 / 435
Регистрация: 15.12.2013
Сообщений: 5,810
19.04.2014, 08:50     Заменить все элементы, меньшие заданного числа, этим числом #5
some_name, по-вашему это правильная реализация?
Код
Enter size of array : 6
9  3  -4  10  1  6
Enter number : 4
9  4  4  10  4  6
9  4  4  10  1  6
Для продолжения нажмите любую клавишу . . .
some_name
Вежливость-главное оружие
 Аватар для some_name
219 / 219 / 55
Регистрация: 19.02.2013
Сообщений: 1,419
19.04.2014, 13:05     Заменить все элементы, меньшие заданного числа, этим числом #6
Подправил
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
void secondWay(int originalData[], int length, int number){
 
    int *data = copyArray(originalData, length);
    //size matrix
    int size = ceil(sqrt(length));
    //create matrix
    int **matrix = new int *[size];
    for (int i = 0; i < size; ++i){
        matrix[i] = new int[size];
    }
    //fill matrix
    for (int i = 0, k = 0; i < size && k < length; i++){
        for (int j = 0; j < size; ++j){ 
                matrix[i][j] = data[k++];                
        }
    }
    //replace items
    for (int i = 0, k = 0; i < size && k < length; i++){
        for (int j = 0; j < size; ++j, ++k){
            if(matrix[i][j] < number){               
                data[k] = number;
            }   
        }
    }   
    for (int i = 0; i < size; ++i){
        delete[] matrix[i];
    }
    ////////////////////////////////////////delete[] data;
    delete[] matrix;
    //print
    printArray(data, length);
}
что насчет delete?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.04.2014, 08:32     Заменить все элементы, меньшие заданного числа, этим числом
Еще ссылки по теме:

Заменить все члены последовательности, большие заданного числа Z, этим числом; подсчитать количество замен C++
C++ Заменить все элементы, меньшие заданного числа, этим числом
Все элементы массива, меньшие заданного числа, увеличить в два раза C++

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

Или воспользуйтесь поиском по форуму:
Ev_Hyper
 Аватар для Ev_Hyper
1814 / 1635 / 435
Регистрация: 15.12.2013
Сообщений: 5,810
23.04.2014, 08:32     Заменить все элементы, меньшие заданного числа, этим числом #7
some_name, у меня ошибка не вылетает.
Возможно, дело в том, что вы вначале удаляете, а потом передаете в функцию:

C++
1
2
3
4
5
  
////////////////////////////////////////delete[] data;
    delete[] matrix;
    //print
    printArray(data, length);
Попробуйте заменить:
C++
1
2
3
4
    delete[] matrix;
    //print
    printArray(data, length);
     delete[] data;
Yandex
Объявления
23.04.2014, 08:32     Заменить все элементы, меньшие заданного числа, этим числом
Ответ Создать тему
Опции темы

Текущее время: 16:56. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru