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

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

Восстановить пароль Регистрация
 
Zambal
83 / 3 / 1
Регистрация: 14.11.2011
Сообщений: 68
07.11.2012, 15:38     Создать перегружаемые функции и шаблоны для типов int и double #1
Создать перегружаемые функции и шаблоны для типов 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");
}
недописанный код, потомучто куча ошибок при создании шаблона всплывает, в этом вся проблема.
алгоритм выполнения заданий знаю, непонятно только создание шаблона
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ExcellencE
20 / 20 / 2
Регистрация: 22.08.2011
Сообщений: 79
07.11.2012, 17:37     Создать перегружаемые функции и шаблоны для типов int и double #2
ошибся темой
Zambal
83 / 3 / 1
Регистрация: 14.11.2011
Сообщений: 68
07.11.2012, 18:16  [ТС]     Создать перегружаемые функции и шаблоны для типов int и double #3
в каком месте?
David Sylva
 Аватар для David Sylva
1281 / 943 / 51
Регистрация: 17.05.2012
Сообщений: 2,686
07.11.2012, 18:21     Создать перегружаемые функции и шаблоны для типов int и double #4
10 строка точку с запятой убери, и void main писать не корректно.
Zambal
83 / 3 / 1
Регистрация: 14.11.2011
Сообщений: 68
07.11.2012, 18:27  [ТС]     Создать перегружаемые функции и шаблоны для типов int и double #5
David Sylva, ну корректно не корректно, пока как учат, но исправлю
за ";" спасибо, не углядел
I.M.
 Аватар для I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
07.11.2012, 18:33     Создать перегружаемые функции и шаблоны для типов int и double #6
Цитата Сообщение от Zambal Посмотреть сообщение
Максимальный по модулю элемент массива (Шаблон функции)
По модулю.
А вы просто максимум ищете
Zambal
83 / 3 / 1
Регистрация: 14.11.2011
Сообщений: 68
07.11.2012, 18:35  [ТС]     Создать перегружаемые функции и шаблоны для типов int и double #7
I.M., это да, не дописал, пока мне не интересно лишь само написание шаблонов
I.M.
 Аватар для I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
07.11.2012, 18:35     Создать перегружаемые функции и шаблоны для типов int и double #8
Да и вообще как-то криво ищите максимум. Зачем-то сравниваете два соседних элемента массива
Zambal
83 / 3 / 1
Регистрация: 14.11.2011
Сообщений: 68
07.11.2012, 23:35  [ТС]     Создать перегружаемые функции и шаблоны для типов int и double #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;
}
I.M.
 Аватар для I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
07.11.2012, 23:46     Создать перегружаемые функции и шаблоны для типов int и double #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>
без них не собирается?
Zambal
83 / 3 / 1
Регистрация: 14.11.2011
Сообщений: 68
08.11.2012, 13:40  [ТС]     Создать перегружаемые функции и шаблоны для типов int и double #11
I.M., "совковским" методом программируем, всегда наподключаем библиотек, чтобы висели
Zambal
83 / 3 / 1
Регистрация: 14.11.2011
Сообщений: 68
09.11.2012, 20:07  [ТС]     Создать перегружаемые функции и шаблоны для типов int и double #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;
}
I.M.
 Аватар для I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
09.11.2012, 22:30     Создать перегружаемые функции и шаблоны для типов int и double #13
У вас в функциях Sum есть переменные k, n, которые там не объявлены. Очевидно, их надо передавать параметром
Zambal
83 / 3 / 1
Регистрация: 14.11.2011
Сообщений: 68
10.11.2012, 15:45  [ТС]     Создать перегружаемые функции и шаблоны для типов int и double #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;
}
I.M.
 Аватар для I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
10.11.2012, 16:17     Создать перегружаемые функции и шаблоны для типов int и double #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);
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.11.2012, 13:09     Создать перегружаемые функции и шаблоны для типов int и double
Еще ссылки по теме:

Используя перегрузки, написать функцию для выполнения действий, для следующих типов данных: float, int, double C++
C++ Конфликт типов (int, double, bool)
Преобразование типов double в int для задания размерности массива C++

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

Или воспользуйтесь поиском по форуму:
Zambal
83 / 3 / 1
Регистрация: 14.11.2011
Сообщений: 68
16.11.2012, 13:09  [ТС]     Создать перегружаемые функции и шаблоны для типов int и double #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;
}
Yandex
Объявления
16.11.2012, 13:09     Создать перегружаемые функции и шаблоны для типов int и double
Ответ Создать тему
Опции темы

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