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

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

Войти
Регистрация
Восстановить пароль
 
 
Zambal
83 / 3 / 1
Регистрация: 14.11.2011
Сообщений: 68
#1

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

07.11.2012, 15:38. Просмотров 1094. Ответов 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
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Создать перегружаемые функции и шаблоны для типов int и double (C++):

Преобразование типов double в int для задания размерности массива - C++
Объясните, пожалуйста. Не объявляется массив, хотя его размеры объявил как константы. // #ifndef M_PI #define M_PI...

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

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

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

Некорректное преобразование double в int (приведение типов) - C++
Не совсем очевидно. https://ideone.com/7P0EhY #include &lt;iostream&gt; #include &lt;math.h&gt; int main() { float y = pow(64, 1.0...

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

15
ExcellencE
20 / 20 / 2
Регистрация: 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
1291 / 953 / 51
Регистрация: 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.
566 / 549 / 5
Регистрация: 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.
566 / 549 / 5
Регистрация: 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.
566 / 549 / 5
Регистрация: 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.
566 / 549 / 5
Регистрация: 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.
566 / 549 / 5
Регистрация: 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
10.11.2012, 16:17
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.11.2012, 16:17
Привет! Вот еще темы с ответами:

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

Перегрузка функции int double - C++
Напишите функцию max с переменным количеством параметров, которая находит минимальное из чисел типа int или из чисел типа double, тип...

Создать динамический массив, любого простого типа (например: int, long, float, double) - C++
1. Создать проект, который содержит консольную программу Win32. 2. Создать динамический массив, любого простого типа (например: int,...

Преобразовать 2 числа int в 1 число float(double) | double int1.int2 - C++
Всем привет. Изучая азы C++, столкнулся с такой проблемой. Есть два значения типа int, их необходимо преобразовать в одно значение типа...


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

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

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