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

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

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

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

25.08.2014, 14:04. Просмотров 836. Ответов 14
Метки нет (Все метки)

Использование функций-шаблонов:
для работы с двумерными массивами
арифметических типов данных разработать шаблоны ввода и вывода массива, а
также шаблон для решения основной задачи:Заменить все элементы, меньшие заданного числа, этим числом.
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
#include "iostream" 
#include "conio.h"
using namespace std;
 
template < typename Х>
void inputArray(char name, X **a, int n,int m)
{
cout<<name; 
for (int i=0; i<n; ++i) 
    for(int j=0;j<m;++j)
        {
            cout<<"a["<<i<<"]["<<j<<"]=";
            cin>>a[i][j];
    }
}
template < typename Х>
void printArray(char *name, X **a, int n, int m)
{
cout<<name; 
for (int i=0; i<n; ++i)
{
    cout<<endl;
    for(int j=0;j<m;++j)
        cout<<a[i]<<"\t";
}
    cout<<endl;
}
 
template < typename Х>
void zamenaArray( X **a, int n,int m, int k)
{
cout<<name;
cout<<"k="; cin>>k;
for (int i=0; i<n; ++i) 
    for(int j=0;j<m;++j)
        if (a[i][j]<k) a[i][j]=k;
}
int main()
{
    int n,m,k; cout<<"n=\tm=";
    cin>>n>>m;
    int **a=new int *[n];
    for(int i=0;i<n;++i)
        a[i]=new int [m];
    void inputArray("array a:", n, m);
    void zamenaArray(a,n,m, k);
    void printArray("array a:",a, n, m);
    getch();
    return 0;
}
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.08.2014, 14:04
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Заменить все элементы, меньшие заданного числа, этим числом (C++):

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

Заменить все элементы массива, меньшие заданного числа, этим числом - C++
I. Дана последовательность целых чисел. Замечание. Использовать двумерный массив. Количество строк и столбцов двумерного массива...

В последовательности целых чисел заменить все элементы, меньшие заданного числа, этим числом - C++
Собственно такая задача) Буду благодарен за любую помощь.

Заменить все члены последовательности, большие заданного числа Z, этим числом; подсчитать количество замен - C++
Дана последовательность действительных чисел а1, а2,..., an. Заменить все ее члены, большие данного Z, этим числом. Подсчитать количество...

В последовательности целых чисел заменить все элементы, меньшие заданного числа - C++
Дана последовательность целых чисел. Заменить все элементы, меньшие заданного числа, этим числом.

Заменить все элементы массива, меньшие 5-ти, числом 111 - C++
дан целочисленный массив X . Надо заменить все элементы меньше 5-ти с цифром 111.

14
John Prick
804 / 737 / 145
Регистрация: 27.07.2012
Сообщений: 2,108
Завершенные тесты: 3
25.08.2014, 14:24 #2
Ну и в чём проблема?

Вот так ничего выглядит:
C++
1
2
template <typename T, int N, int M>
void inputArray(char * name, T (&arr)[N][M]) /* ... */
0
July
0 / 0 / 0
Регистрация: 16.08.2014
Сообщений: 21
25.08.2014, 14:51  [ТС] #3
Цитата Сообщение от John Prick Посмотреть сообщение
Ну и в чём проблема?
Компилятор выдает вот такие ошибки:
(7): синтаксическая ошибка: идентификатор "X"
(18): error C2061: синтаксическая ошибка: идентификатор "X"
(31): error C2061: синтаксическая ошибка: идентификатор "X"
(46): error C2182: inputArray: недопустимое использование типа "void"
(46): error C2078: слишком много инициализаторов
(47): error C2182: zamenaArray: недопустимое использование типа "void"
(47): error C2078: слишком много инициализаторов
(48): error C2182: printArray: недопустимое использование типа "void"
(48): error C2078: слишком много инициализаторов
Я не знаю как их исправить)
0
John Prick
804 / 737 / 145
Регистрация: 27.07.2012
Сообщений: 2,108
Завершенные тесты: 3
25.08.2014, 14:57 #4
Что это?
C++
1
2
3
    void inputArray("array a:", n, m);
    void zamenaArray(a,n,m, k);
    void printArray("array a:",a, n, m);
Надо так:
C++
1
2
3
    inputArray("array a:", a, n, m);
    zamenaArray(a, n, m, k);
    printArray("array a:", a, n, m);
Добавлено через 1 минуту
Здесь:
C++
1
void inputArray(char name /*...*/
Нужен указатель на char
C++
1
void inputArray(char * name /*...*/
Добавлено через 2 минуты
Если ты используешь указатель на указатель в качестве представления двумерного массива, то вычислять индексы элементов неоходимо вручную:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
template < typename Х>
void inputArray(char * name, X ** a, int n, int m)
{
    cout<<name; 
    for (int i=0; i<n; ++i) 
    {
        for(int j=0;j<m;++j)
        {
            cout<<"a["<<i<<"]["<<j<<"]=";
            cin >> a[i * m + j]; // вот так
        }
    }
}
0
aLarman
642 / 563 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
Завершенные тесты: 1
25.08.2014, 15:13 #5
Цитата Сообщение от John Prick Посмотреть сообщение
указатель на указатель в качестве представления двумерного массива, то вычислять индексы элементов неоходимо вручную:
че за бред

Добавлено через 3 минуты
July, попробуйте так
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
#include <iostream>
#include "conio.h"
using namespace std;
 
template <typename T>
void inputArray(T **a, int n,int m)
{
    for (int i=0; i<n; ++i) 
        for(int j=0;j<m;++j)
        {
            cout<<"a["<<i<<"]["<<j<<"]=";
            cin>>a[i][j];
        }
}
template <typename T>
void printArray(T**a, int n, int m)
{
    for (int i=0; i<n; ++i)
    {
        cout<<endl;
        for(int j=0;j<m;++j)
            cout<<a[i][j]<<"\t";
    }
    cout<<endl;
}
 
template < typename T>
void zamenaArray( T **a, int n,int m, int k)
{
    cout<<"k="; cin>>k;
    for (int i=0; i<n; ++i) 
        for(int j=0;j<m;++j)
            if (a[i][j]<k) a[i][j]=k;
}
int main()
{
    int n,m,k; cout<<"n=\tm=";
    cin>>n>>m;
    int **a=new int *[n];
    for(int i=0;i<n;++i)
        a[i]=new int [m];
    inputArray(a, n, m);
    zamenaArray(a,n,m, k);
    printArray(a, n, m);
    getch();
    return 0;
}
0
John Prick
804 / 737 / 145
Регистрация: 27.07.2012
Сообщений: 2,108
Завершенные тесты: 3
25.08.2014, 15:18 #6

Не по теме:

Цитата Сообщение от aLarman Посмотреть сообщение
че за бред
Ты забыл добавить "придурок".



Согласен, хрень написал. Вручную индекс надо вычислять, если передавать в функцию двумерный массив, а в функции его принимать, как простой указатель:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
template < typename Х>
void inputArray(char * name, X * a, int n, int m)
{
    cout<<name; 
    for (int i=0; i<n; ++i) 
    {
        for(int j=0;j<m;++j)
        {
            cout<<"a["<<i<<"]["<<j<<"]=";
            cin >> a[i * m + j]; // вот так
        }
    }
}
 
int main(void)
{
    int arr[10][20];
    inputArray(arr, 10, 20);
}
0
aLarman
642 / 563 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
Завершенные тесты: 1
25.08.2014, 15:20 #7
Цитата Сообщение от John Prick Посмотреть сообщение
Согласен, хрень написал.
и написали ее повторно, кто гарантирует что 2ый массив будет расположен в памяти, последовательно?, т.е строка за строкой
хотя...пр стат.определении массива может быть так и будет...но при динам.вообще не факт
0
John Prick
804 / 737 / 145
Регистрация: 27.07.2012
Сообщений: 2,108
Завершенные тесты: 3
25.08.2014, 15:28 #8
Цитата Сообщение от aLarman Посмотреть сообщение
кто гарантирует что 2ый массив будет расположен в памяти, последовательно?, т.е строка за строкой
Стандарт?
0
aLarman
642 / 563 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
Завершенные тесты: 1
25.08.2014, 15:29 #9
Цитата Сообщение от aLarman Посмотреть сообщение
пр стат.определении массива может быть так и будет...но при динам.вообще не факт
повторюсь
0
July
0 / 0 / 0
Регистрация: 16.08.2014
Сообщений: 21
25.08.2014, 16:29  [ТС] #10
Я немного подправила:
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
#include "iostream" 
#include "conio.h"
using namespace std;
 
template < typename Х>
void inputArray(char *name, X **a, int n,int m)
{
cout<<name; 
for (int i=0; i<n; ++i) 
    for(int j=0;j<m;++j)
        {
            cout<<"a["<<i<<"]["<<j<<"]=";
            cin>>a[i][j];
    }
}
template < typename Х>
void printArray(char *name, X **a, int n, int m)
{
cout<<name; 
for (int i=0; i<n; ++i)
{
    cout<<endl;
    for(int j=0;j<m;++j)
        cout<<a[i][j]<<"\t";
}
    cout<<endl;
}
 
template < typename Х>
void zamenaArray(X **a, int n,int m, int k)
{
cout<<name;
cout<<"k="; cin>>k;
for (int i=0; i<n; ++i) 
    for(int j=0;j<m;++j)
        if (a[i][j]<k) a[i][j]=k;
}
int main()
{
    int n,m,k; cout<<"n=\tm=";
    cin>>n>>m;
    int **a=new int *[n];
    for(int i=0;i<n;++i)
        a[i]=new int [m];
    inputArray("array a:",a, n, m);
    zamenaArray(a,n,m, k);
    printArray("array a:",a, n, m);
    getch();
    return 0;
}
и он выдает ошибки:
(7): error C2061: синтаксическая ошибка: идентификатор "X"
(18): error C2061: синтаксическая ошибка: идентификатор "X"
(31): error C2065: X: необъявленный идентификатор
(31): error C2065: a: необъявленный идентификатор
(31): error C2062: тип "int" не требуется
(40): error C2143: синтаксическая ошибка: отсутствие ";" перед "{"
(40): error C2447: {: отсутствует заголовок функции (возможно, используется формальный список старого типа)

Добавлено через 8 минут
прграмма запусается, но на функции замены прерывается
Цитата Сообщение от July Посмотреть сообщение
zamenaArray(a,n,m, k);
и выдает ошибку "использована неинициализированная локальная переменная "k""
0
aLarman
642 / 563 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
Завершенные тесты: 1
25.08.2014, 16:32 #11
July, я Вам предложил вариант, он не работает?
0
July
0 / 0 / 0
Регистрация: 16.08.2014
Сообщений: 21
25.08.2014, 17:17  [ТС] #12
Компилятор выдает ошибку "использована неинициализированная локальная переменная "k"", на функции zamenaArray(a,n,m, k);
0
aLarman
642 / 563 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
Завершенные тесты: 1
25.08.2014, 17:49 #13
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
это предупреждение
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
#include <iostream>
#include "conio.h"
using namespace std;
 
template <typename T>
void inputArray(T **a, int n,int m)
{
    for (int i=0; i<n; ++i) 
        for(int j=0;j<m;++j)
        {
            cout<<"a["<<i<<"]["<<j<<"]=";
            cin>>a[i][j];
        }
}
template <typename T>
void printArray(T**a, int n, int m)
{
    for (int i=0; i<n; ++i)
    {
        cout<<endl;
        for(int j=0;j<m;++j)
            cout<<a[i][j]<<"\t";
    }
    cout<<endl;
}
 
template < typename T>
void zamenaArray( T **a, int n,int m, int k)
{
    for (int i=0; i<n; ++i) 
        for(int j=0;j<m;++j)
            if (a[i][j]<k) a[i][j]=k;
}
int main()
{
    int n,m,k; cout<<"n=\tm=";
    cin>>n>>m;
    int **a=new int *[n];
    for(int i=0;i<n;++i)
        a[i]=new int [m];
    inputArray(a, n, m);
    cout<<"Enter k = ";
    cin>>k;
    zamenaArray(a,n,m, k);
    printArray(a, n, m);
    getch();
    return 0;
}
1
DrOffset
7376 / 4453 / 1009
Регистрация: 30.01.2014
Сообщений: 7,304
25.08.2014, 19:07 #14
Цитата Сообщение от John Prick Посмотреть сообщение
Стандарт?
Нет такой гарантии. Чтобы твой код работал нужно определять массив так:
C++
1
int arr[10 * 20];
0
July
0 / 0 / 0
Регистрация: 16.08.2014
Сообщений: 21
26.08.2014, 13:44  [ТС] #15
спасибо большое
0
26.08.2014, 13:44
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.08.2014, 13:44
Привет! Вот еще темы с ответами:

Заменить в массиве все элементы меньшие 5 числом 111 - C++
Дан целочисленный массив X. Заменить в нем все элементы, меньшие 5 числом 111.

В целочисленном массиве заменить все элементы, меньшие 5 числом 111 - C++
Дан целочисленный массив X. Заменить в нем все элементы, меньшие 5 числом 111. Именуйте темы осмысленно!

Массивы (в каждом столбце заменить элементы, меньшие по модулю заданного числа на номер столбца) - C++
В матрице mxn в каждом столбце заменить элементы, меньшие по модулю заданного числа на номер столбца и подсчитать число таких замен по...

Все элементы массива, меньшие заданного числа, увеличить в два раза - C++
Дана последовательность целых чисел,нужно все элементы, меньше заданного числа,увеличить в два раза


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

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

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