Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
Zambal
83 / 3 / 1
Регистрация: 14.11.2011
Сообщений: 68
#1

Создать перегружаемые функции и шаблоны для типов int и double

07.11.2012, 15:38. Просмотров 1204. Ответов 15
Метки нет (Все метки)

Создать перегружаемые функции и шаблоны для типов int и double. Передачу параметров в функцию осуществить различными способами: с помощью ссылки, указателя.

В одномерном массиве, состоящем из n элементов вычислить:
  1. Максимальный по модулю элемент массива (Шаблон функции)
  2. Сумму элементов массива, расположенных между первым и вторым отрицательными элементами (Перегружаемая функция).
  3. Преобразовать массив таким образом, чтобы сначала располагались все элементы, модуль которых не превышает 1, а потом все остальные (Перегружаемый шаблон функции)

Добавлено через 24 минуты

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
#include "stdafx.h"
#include <Windows.h>
#include <time.h>
#include <math.h>
 
#include <iostream>
using namespace std;
 
template <class S>
S Maximum(int n, S A[n], S B[n]);
{
    int max = 0;
    for(int m = 0; m < n - 1; n++)
    {
        if(A[m] > A[m + 1])
        {
            max = A[m];
            A[m] = A[m + 1];
            A[m + 1] = max;
        }
    }
return max;
}
 
void main()
{
    const int n = 9;
    int A[n]; double B[n];
    srand((unsigned)time(NULL));
 
    for(int i = 0; i < n; i++)
    {
        A[i] = rand()%10;
        B[i] = (float)(rand()%99)/100 + rand()%10;
    }
    
    for(int a = 0; a < n; a++)
        cout<<A[a]<<" ";
    
    cout<<"\n";
 
    for(int b = 0; b < n; b++)
        cout<<B[b]<<" ";
 
system("pause");
}
недописанный код, потомучто куча ошибок при создании шаблона всплывает, в этом вся проблема.
алгоритм выполнения заданий знаю, непонятно только создание шаблона
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.11.2012, 15:38
Ответы с готовыми решениями:

Преобразование типов double в int для задания размерности массива
Объясните, пожалуйста. Не объявляется массив, хотя его размеры объявил как...

Используя перегрузки, написать функцию для выполнения действий, для следующих типов данных: float, int, double
Используя перегрузки, написать функцию для выполнения действий, для следующих...

Шаблоны функции для типов char
покажите пожалуйста пример обработки строки с помощью шаблонов функций....

Конфликт типов (int, double, bool)
Есть простейший класс class A { public: A( long ) {} A( double ){}...

Некорректное преобразование double в int (приведение типов)
Не совсем очевидно. https://ideone.com/7P0EhY #include &lt;iostream&gt;...

15
ExcellencE
20 / 20 / 16
Регистрация: 22.08.2011
Сообщений: 79
07.11.2012, 17:37 #2
ошибся темой
0
Zambal
83 / 3 / 1
Регистрация: 14.11.2011
Сообщений: 68
07.11.2012, 18:16  [ТС] #3
в каком месте?
0
David Sylva
1293 / 955 / 267
Регистрация: 17.05.2012
Сообщений: 2,687
07.11.2012, 18:21 #4
10 строка точку с запятой убери, и void main писать не корректно.
0
Zambal
83 / 3 / 1
Регистрация: 14.11.2011
Сообщений: 68
07.11.2012, 18:27  [ТС] #5
David Sylva, ну корректно не корректно, пока как учат, но исправлю
за ";" спасибо, не углядел
0
I.M.
567 / 550 / 47
Регистрация: 16.12.2011
Сообщений: 1,389
07.11.2012, 18:33 #6
Цитата Сообщение от Zambal Посмотреть сообщение
Максимальный по модулю элемент массива (Шаблон функции)
По модулю.
А вы просто максимум ищете
0
Zambal
83 / 3 / 1
Регистрация: 14.11.2011
Сообщений: 68
07.11.2012, 18:35  [ТС] #7
I.M., это да, не дописал, пока мне не интересно лишь само написание шаблонов
0
I.M.
567 / 550 / 47
Регистрация: 16.12.2011
Сообщений: 1,389
07.11.2012, 18:35 #8
Да и вообще как-то криво ищите максимум. Зачем-то сравниваете два соседних элемента массива
0
Zambal
83 / 3 / 1
Регистрация: 14.11.2011
Сообщений: 68
07.11.2012, 23:35  [ТС] #9
I.M., взял из старой программы похожий код, как разберусь переделаю

Добавлено через 4 часа 53 минуты
первое задание сделано, рассудите насколько хорошо

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
#include "stdafx.h"
#include <Windows.h>
#include <conio.h>
#include <time.h>
#include <math.h>
 
#include <iostream>
using namespace std;
 
template <class S>
const S Max(S* a, size_t size)
{
    S* tmp = a;
    for (unsigned int i = 0; i < size; i++)
    {
        if(a[i] > *tmp)
            *tmp = a[i];
    }
    return *tmp;
}
 
int main()
{
    const int n = 9;
    int A[n]; double B[n];
    srand((unsigned)time(NULL));
 
    for(int i = 0; i < n; i++)
    {
        A[i] = rand()%10;
        B[i] = (float)(rand()%99)/100 + rand()%10;
    }
    
    for(int a = 0; a < n; a++)
        cout << A[a] << " ";
    
    cout << '\n';
 
    for(int b = 0; b < n; b++)
        cout << B[b] << " ";
    
    cout << '\n';
 
    cout << "max in integer array = " << Max(A, sizeof(A)/sizeof(int)) << '\n';
    cout << "max in double array = " << Max(B, sizeof(B)/sizeof(double)) << '\n';
 
system("pause");
return 0;
}
0
I.M.
567 / 550 / 47
Регистрация: 16.12.2011
Сообщений: 1,389
07.11.2012, 23:46 #10
Цитата Сообщение от Zambal Посмотреть сообщение
S* tmp = a;
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
template <class S>
const S Max(S* a, size_t size)
{
    if (!size)return 0;
    
    S tmp = a[0];
    for (size_t i = 1; i < size; ++i)
    {
        if(a[i] > tmp)
            tmp = a[i];
    }
    return tmp;
}
зачем вам
C++
1
2
3
#include <Windows.h>
#include <conio.h>
#include <math.h>
без них не собирается?
1
Zambal
83 / 3 / 1
Регистрация: 14.11.2011
Сообщений: 68
08.11.2012, 13:40  [ТС] #11
I.M., "совковским" методом программируем, всегда наподключаем библиотек, чтобы висели
0
Zambal
83 / 3 / 1
Регистрация: 14.11.2011
Сообщений: 68
09.11.2012, 20:07  [ТС] #12
помогите сделать второе задание, алгоритм нахождения суммы есть, не понимаю как исправить ошибки объявления функций и вызова их в главной функции. Запутался конкретно.

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
#include "stdafx.h"
#include <time.h>
 
#include <iostream>
using namespace std;
 
template <class S>
const S Max(S *a, size_t size)
{
    if (!size) return 0;
    
    S tmp = a[0];
    for (size_t i = 1; i < size; ++i)
    {
        if(abs(a[i]) > abs(tmp))
            tmp = a[i];
    }
    return tmp;
}
 
int *Sum(int *a, int first, int last);
double *Sum(double *a, double first, double last);
 
int main()
{
    const int n = 9;
    int A[n]; double B[n];
    srand((unsigned)time(NULL));
 
    for(int i = 0; i < n; i++)
    {
        A[i] = rand()%10;
        B[i] = (float)(rand()%99)/100 + rand()%10;
    }
    
    for(int a = 0; a < n; a++)
        cout << A[a] << " ";
    
    cout << '\n';
 
    for(int b = 0; b < n; b++)
        cout << B[b] << " ";
    
    cout << '\n';
 
    cout << "max in integer array = " << Max(A, sizeof(A)/sizeof(int)) << '\n';
    cout << "max in double array = " << Max(B, sizeof(B)/sizeof(double)) << '\n';
 
 
    cout << //не понимаю как записать результат
    cout << //не понимаю как записать результат
 
system("pause");
return 0;
}
 
int *Sum(int *a, int first, int last);
{
    for(int i = 0; i < n; i++)
        if(a[i]<0) {first=a[b]; break};
    
    for(int k = e; k >= 0; k--)
        if(a[k] < 0) {last = a[k]; break}
        
    int s = 0;
        for(int b = first + 1; b < last; b++)
            s+=a[b];
 
    return s;
}
 
double *Sum(double *a, double first, double last);
{
    for(int i = 0; i < n; i++)
        if(a[i]<0) {first=a[b]; break};
    
    for(int k = e; k >= 0; k--)
        if(a[k] < 0) {last = a[k]; break}
        
    double s = 0;
        for(int b = first + 1; b < last; b++)
            s+=a[b];
 
    return s;
}
Добавлено через 32 минуты
нашел несколько ошибок в предыдущем варианте, проблема вся та же, помогите
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
#include "stdafx.h"
#include <time.h>
 
#include <iostream>
using namespace std;
 
template <class S>
const S Max(S *a, size_t size)
{
    if (!size) return 0;
    
    S tmp = a[0];
    for (size_t i = 1; i < size; ++i)
    {
        if(abs(a[i]) > abs(tmp))
            tmp = a[i];
    }
    return tmp;
}
 
int Sum(int *a, int first, int last);
double Sum(double *a, double first, double last);
 
int main()
{
    const int n = 9; int first, last;
    int A[n]; double B[n];
    srand((unsigned)time(NULL));
 
    for(int i = 0; i < n; i++)
    {
        A[i] = rand()%10;
        B[i] = (float)(rand()%99)/100 + rand()%10;
    }
    
    for(int a = 0; a < n; a++)
        cout << A[a] << " ";
    
    cout << '\n';
 
    for(int b = 0; b < n; b++)
        cout << B[b] << " ";
    
    cout << '\n';
 
    cout << "max in integer array = " << Max(A, sizeof(A)/sizeof(int)) << '\n';
    cout << "max in double array = " << Max(B, sizeof(B)/sizeof(double)) << '\n';
 
    int *a = new int(A[n]);
    double *b = new double(B[n]);
 
    cout << Sum(a, first, last) << '/n'; //не понимаю как записать результат
    cout << Sum(b, first, last) << '/n'; //не понимаю как записать результат
 
system("pause");
return 0;
}
 
int Sum(int *a, int first, int last);
{
    for(int i = 0; i < n; i++)
        if(a[i]<0) {first=a[i]; break};
    
    for(int k = n; k >= 0; k--)
        if(a[k] < 0) {last = a[k]; break}
        
    int s = 0;
        for(int b = first + 1; b < last; b++)
            s+=a[b];
 
    return s;
}
 
double Sum(double *a, double first, double last);
{
    for(int i = 0; i < n; i++)
        if(a[i]<0) {first=a[i]; break};
    
    for(int k = n; k >= 0; k--)
        if(a[k] < 0) {last = a[k]; break}
        
    double s = 0;
        for(int b = first + 1; b < last; b++)
            s+=a[b];
 
    return s;
}
0
I.M.
567 / 550 / 47
Регистрация: 16.12.2011
Сообщений: 1,389
09.11.2012, 22:30 #13
У вас в функциях Sum есть переменные k, n, которые там не объявлены. Очевидно, их надо передавать параметром
1
Zambal
83 / 3 / 1
Регистрация: 14.11.2011
Сообщений: 68
10.11.2012, 15:45  [ТС] #14
I.M., я уже окончательно запутался, но вот, хотя бы запускается и считает, но выдает не то
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
#include "stdafx.h"
#include <time.h>
 
#include <iostream>
using namespace std;
 
template <class S>
const S Max(S *a, size_t size)
{
    if (!size) return 0;
    
    S tmp = a[0];
    for (size_t i = 1; i < size; ++i)
    {
        if(abs(a[i]) > abs(tmp))
            tmp = a[i];
    }
    return tmp;
}
 
int Sum(int *a, int fa,int la);
 
int main()
{
    const int n = 9; 
    int first = 0, last = 0;
    int A[n]; double B[n];
    srand((unsigned)time(NULL));
 
    for(int i = 0; i < n; i++)
    {
        A[i] = rand()%10-5;
        B[i] = (float)(rand()%99)/100 + rand()%10;
    }
    
    for(int a = 0; a < n; a++)
        cout << A[a] << " ";
    
    cout << '\n';
 
    for(int b = 0; b < n; b++)
        cout << B[b] << " ";
    
    cout << '\n';
 
    cout << "max in integer array = " << Max(A, sizeof(A)/sizeof(int)) << '\n';
    cout << "max in double array = " << Max(B, sizeof(B)/sizeof(double)) << '\n';
 
    for(int f = 0; f < n; f++)
    {
        if(A[f] < 0)
        {
            first = f;
            break;
        }
    }
    
    cout << '\n' << "first=" << first;
 
    for(int f = n - 1; f; f--)
    {
        if(A[f] < 0) 
        {
            last = f;
            break;
        }
    }
    
    cout << '\n' << "last=" << last;
 
    cout << '\n';
 
    cout << "Summa elementov=" << Sum(&A[n], first, last);
system("pause");
return 0;
}
 
int Sum(int *a, int fa,int la)
{
    int s = 0;
    for(int i = fa + 1; i < la; i++)
        s += a[i];
    return s;
}
0
I.M.
567 / 550 / 47
Регистрация: 16.12.2011
Сообщений: 1,389
10.11.2012, 16:17 #15
заменить это
C++
1
2
3
4
5
6
7
8
for(int f = n - 1; f; f--)
    {
        if(A[f] < 0) 
        {
            last = f;
            break;
        }
    }
на
C++
1
2
3
4
5
6
7
8
for(int f = first; f < n; ++f)
    {
        if(A[f] < 0) 
        {
            last = f;
            break;
        }
    }
заменить это
C++
1
cout << "Summa elementov=" << Sum(&A[n], first, last);
на это
C++
1
cout << "Summa elementov=" << Sum(A, first, last);
или это
C++
1
cout << "Summa elementov=" << Sum(&A[0], first, last);
1
Zambal
83 / 3 / 1
Регистрация: 14.11.2011
Сообщений: 68
16.11.2012, 13:09  [ТС] #16
готовая программа
может кто помочь с записью результатов в текстовый файл?
с помощью fstream получилось записать только сами массивы и максимальные по модулю элементы
все остальные результаты из функций не выводятся или портят все в консоле повторным выводом на экран

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
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
#include "stdafx.h"
#include <time.h>
 
#include <iostream>
using namespace std;
 
template <class S>
const S Max(S *a, size_t size)
{
    if (!size) return 0;
    
    S tmp = a[0];
    for (size_t i = 1; i < size; ++i)
    {
        if(abs(a[i]) > abs(tmp))
            tmp = a[i];
    }
    return tmp;
}
 
template <class A>
A sort(A *a, int n)
{
    int i, j;
    A tmp;
    for(i = 1; i < n; i++)
        for(j = n - 1; j >= i; j--)
        {
            if(abs(a[j]) <= 1)
            {
                tmp = a[j - 1];
                a[j - 1] = a[j];
                a[j] = tmp;
            }
        }
 
    for(int i = 0; i < n; i++)
    {
        cout << a[i] << " ";
    }
    cout << '\n';
    return 0;
 
}
 
int Sum(int *a, int n);
double Sum(double *a, int n);
 
int main()
{
    const int n = 9; 
    int firstint = 0, lastint = 0, firstdbl = 0, lastdbl = 0;
    int A[n]; double B[n];
    srand((unsigned)time(NULL));
 
    for(int i = 0; i < n; i++)//sozdanie massivov
    {
        A[i] = rand()%10-5;
        B[i] = (float)(rand()%99)/100 + rand()%10-5;
    }
    
    for(int a = 0; a < n; a++)//vivod massiva A
        cout << A[a] << " ";
 
    
    cout << '\n';
 
    for(int b = 0; b < n; b++)//vivod massiva B
        cout << B[b] << " "; 
 
    cout << '\n';
 
    cout << '\n' << "Max absolut in integer array = " << Max(A, sizeof(A)/sizeof(int)) << '\n';//podschet maximalnogo po modulu v A
    cout << '\n' << "Max absolut in double array = " << Max(B, sizeof(B)/sizeof(double)) << '\n';//podschet maximalnogo po modulu v B
 
    cout << '\n' << "Sum of elements in integer array=" << Sum(&A[0], n) << '\n';//podschet summi mezhdu elementami v A
    cout << '\n' << "Sum of elements in double array=" << Sum(&B[0], n) << '\n';//podschet summi mezhdu elementami v B
 
    sort(&A[0], n);//sortirovka massiva A
    sort(&B[0], n);//sortirovka massiva B
 
system("pause");
return 0;
}
 
int Sum(int *a, int n)
{   
    int fa, la, s = 0;
    for(int f = 0; f < n; f++)
    {
        if(a[f] < 0)
        {
            fa = f;
            break;
        }
    }
    
    cout << '\n' << "First integer=" << fa << '\n';
 
    for(int f = fa + 1; f < n; f++)
    {
        if(a[f] < 0) 
        {
            la = f;
            break;
        }
    }
    
    cout << '\n' << "Last integer=" << la << '\n';
 
    for(int f = fa + 1; f < la; f++)
        s += a[f];
    return s;
}
 
double Sum(double *a, int n)
{
    int fa, la;
    for(int f = 0; f < n; f++)
    {
        if(a[f] < 0)
        {
            fa = f;
            break;
        }
    }
    
    cout << '\n' << "First double=" << fa << '\n';
 
    for(int f = fa + 1; f < n; f++)
    {
        if(a[f] < 0) 
        {
            la = f;
            break;
        }
    }
    
    cout << '\n' << "Last double=" << la << '\n';
 
    double s = 0;
    for(int f = fa + 1; f < la; f++)
        s += a[f];
    return s;
}
0
16.11.2012, 13:09
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.11.2012, 13:09

Неверный результат при преобразования типов данных static_cast<int>(double)
Доброго времени суток, уважаемые программисты! Перейду сразу к сути проблемы:...

Разработайте перегружены функции, в которые передаются два параметра типов int или float и три параметра типов
Разработайте перегружены функции, в которые передаются два параметра типов int...

Какую информацию о функции дает следующий заголовок функции: int froop ( double t )
Какую информацию о функции дает следующий заголовок функции: int froop ( double...


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

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

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