Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.63/19: Рейтинг темы: голосов - 19, средняя оценка - 4.63
3 / 2 / 1
Регистрация: 09.03.2010
Сообщений: 95
1

Перегружаемые функции

28.04.2010, 20:08. Просмотров 3710. Ответов 30
Метки нет (Все метки)

помогите с программой, и если с можете поясните сами функции, а то совсем в них запуталась, сколько не читала теории. а понять не могу

Прога:
Организовать 2 перегружаемые функции для сортировки числового и символьного массива, предусмотрев параметр заданный по умолчанию. По умолчанию порядок сортировки от минимального к максимальному элементу.

есть моя заготовка по началу:

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
#include <stdafx.h>
#include <stdio.h>
#include <iostream>
 
using namespace std;
 
//void k(int*, int, int =0);
void k(int *x, int n, int dir=0)
{ 
    cout << "funcion int k((int x[])" << endl;
    return ;
}
//void k(char*, int, int=0);
void k(char *x, int n, int dir=0)
{
    cout << "funcion char k((char x[])" << endl;
    return ;
}
 
int main(void)
{
    int *mas;
    int size;
    k(mas, size, 1);
    mas=new int*[n];
    for (int i=0, i<n, i++) cin >>x[i];
 
    mas=new char*[n];
    for (int i=0, i<n, i++) cin >>x[i];
    delete x;
    return 0;
}
и заготовка подруги, но тут уж больно много ошибок выдает компилятор и понять сложно:
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
#include <iostream>
#include <iomanip>
#include <conio.h>
#include <locale.h>
#include <stdio.h>
#include <string.h>
using namespace std;
void vivod(int num[], int n);
void sort (int *a, int N, int f=0);
void sort (char *n, char x, int N, char s=0);
const int N=10;
int main(void)
{
    int t[10], i;
    for(i=0; i<10; i++);
        vivod (t,10);
        sort(t, N);
        _getch();
    return 0;
}
void vivod (int num[10])
{
    int i, n;
    for(i=0; i<n; i++) printf("%d ", num[i]);
}
void sort (int *a, int N, int f=0)
{   int i, buf;
    for (int pass=1; pass < N; pass++)
        for (i=0; i < N-1; i++)
            if (a[i] > a[i+1]) {
                buf=a[i];
                a[i]=a[i+1];
                a[i+1]=buf;
            }
            cout << endl << "Элементы данных в порядке возрастания" << endl;
            for (i=0; i<N; i++)
                cout << setw(6) << a[i];
            cout << endl;
            printf(
             "%6d\n", a 
                 );
 
        _getch();
 
}
void sort (char *n, char x, int N, char s=0)
{   int i,j;
    printf ("Введите строку:");
    printf ("\n");
    for (i=0;i<N;i++)
        gets(n[i]);
        for (i=(N-1);i>0;i--)
            for(j=i;j<N;j++)
                if (strcmp (n[j],n[j-1])<0)
                {
                    strcpy (x,n[j]);
                    strcpy (n[j],n[j-1]);
                    strcpy (n[j-1],x);
                }
            printf("Отсортированные строки:");
            printf("\n");
            for(i=0;i<N;i++)
                puts(n[i]);
}
буду очень благодарна за любую помощь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.04.2010, 20:08
Ответы с готовыми решениями:

перегружаемые функции
Есть задание для массивов типа int и double: 1. найти сумму положительных элементов массива 2....

Перегружаемые функции
Помогите привести в рабочее состояние, а то хз че - не компилиться((( Надо создать 3 перегружаемые...

Написать перегружаемые функции умножения разного количества параметров
Помогите пожалуйста с задачей ничего не понимаю: Написать перегружаемые функции умножения...

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

30
Эксперт С++
2329 / 1702 / 148
Регистрация: 06.03.2009
Сообщений: 3,675
30.04.2010, 21:45 21
Luna17, вот, все работает:
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 <algorithm>
#include <iterator>
 
void Swap(int& l, int& r) {
  int tmp = l;
  l  = r;
  r  = tmp;
}
 
void Swap(char& l, char& r) {
  int tmp = l;
  l  = r;
  r  = tmp;
}
 
void SortExchange(int* arr, int size, int sort_up = 1) {
  for (int i = 1; i < size; ++i) {
    for (int j = size - 1; j >= i; --j)
      if (sort_up == 1? arr[j - 1] > arr[j] : arr[j-1] < arr[j])
        Swap(arr[j], arr[j - 1]);
  }
}
 
void SortExchange(char* arr, int size, int sort_up = 1) {
  for (int i = 1; i < size; ++i) {
    for (int j = size - 1; j >= i; --j)
      if (sort_up == 1? arr[j-1] > arr[j] : arr[j - 1] < arr[j])
        Swap(arr[j], arr[j - 1]);
  }
}
 
int main()
{
  int int_arr[]    = {5, 1, 4, 6, 3, 3, 6, 7, 8, 9, 0};
  int int_arr_size = sizeof(int_arr) / sizeof(int_arr[0]);
 
  char char_arr[]    = {'b', 'c', 'z', 'c', 'd', 'r'};
  int  char_arr_size = sizeof(char_arr) / sizeof(char_arr[0]);
 
  SortExchange(char_arr, char_arr_size);
  std::copy(char_arr, char_arr + char_arr_size, std::ostream_iterator<char>(std::cout, " "));
  std::cout << std::endl;
 
  SortExchange(int_arr , int_arr_size, 0);
  std::copy(int_arr, int_arr + int_arr_size, std::ostream_iterator<int>(std::cout, " "));
  std::cout << std::endl;
 
  return 0;
}
1
3 / 2 / 1
Регистрация: 09.03.2010
Сообщений: 95
02.05.2010, 01:56  [ТС] 22
CyBOSSeR, теперь понятно, я чуть позже выложу что у меня получается, т к заголовочную часть пришлось изменять с прихоти преподавательницы

Добавлено через 15 часов 17 минут
CyBOSSeR,
я переделала прогу под твою, типа, но у меня до main все норм а полсе ошибки выдает мож глянуть и показать что надо сделать чо бы норм работала

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
// m,rjhkgfle.cpp: определяет точку входа для консольного приложения.
//
 
#include <stdafx.h>
#include <stdio.h>
#include <iostream>
#include <string.h> 
 
#include <iomanip>
#include <conio.h>
#include <locale.h>
 
using namespace std;
 
void k (int *x , const int &size)
{
        for (int i = 0; i < size; i++)
        {
            cout << x[i] << " " ;
        }
        cout << '\n';
}
 
 
void k (char *x , const int &size)
{
        for (int i = 0; i < size; i++)
        {
             cout << x[i] << " " ;
        }
        cout << '\n';
}
 
 
void Sort(int *x, const int &size,  int dir=0)
{  
    cout << "funcion int k((int x[])" << endl;
    int buff;
    if (dir == 0)
    {
          for (int i = 0; i < size; i++)
                {
                 for (int j = i+1; j < size; j++)
                    {
                        
                        if (dir == 0? x[j] <= x[j] : x[j+1] < x[j]){buff = x[i]; x[i] = x[j]; x[j] = buff;}
    
 
                 }
                    }
    }
    else (dir == 1);
    {
             for (int i = 1; i < size; ++i) 
            {
                 for (int j = i-1; j >= i; --j)
                 {
                     if (dir == 1? x[j-1] > x[j] : x[j-1] < x[j]){buff = x[i-1]; x[i-1] = x[i]; x[i] = buff;}
                 {
            }
}
         }
    }
 }
 
 
void Sort(char *x, const int &size, int dir=0)
{
        cout << "funcion char k((char x[]) \n" << endl;         
        char buf;
        if (dir == 0)
        {
          for (int i = 1; i < size; i++)
          {
             for (int j = i+1; j >= i; j++)
                 {
                    if (dir == 0? x[j+1] > x[j] : x[j+1] < x[j]){buf = x[i]; x[i] = x[j]; x[j] = buf;} 
                 }
          }
        }
        else (dir == 1);
        {
          char buf;
    for (int i = 1; i < size; ++i) 
        {
             for (int j = i-1; j >= i; --j)
             {
                 if (dir == 1? x[j-1] > x[j] : x[j-1] < x[j]){buf = x[i-1]; x[i-1] = x[i]; x[i] = buf;}
             {
        
        }
}
    }
        }
}
 
int main(void)
{    
 
        int int_x[] = {5, 1, 4, 6, 3, 3, 6, 7, 8, 9, 0};
        int int_x_size =  sizeof(int_x[0]);
    
        char char_x[] = {'b', 'c', 'z', 'c', 'd', 'r'};
        int  char_x_size =  sizeof(char_x[0]);
 
        Sort(char_x, char_x_size );
        std::copy( char_x, char_x + char_x_size, std::ostream_iterator<char>(std::cout, " "));
        std::cout << std::endl;
 
        Sort(int_x , int_x_size, 0);
        std::copy(int_x, int_x + int_x_size, std::ostream_iterator< int >(std::cout, " "));
        std::cout << std::endl;
 
        _getch();
  return 0;
}
Ошибки при компиляции
1>Компиляция...
1>m,rjhkgfle.cpp
1>c:\users\вероника\documents\visual studio 2008\projects\m,rjhkgfle\m,rjhkgfle\m,rjhkgfle.cpp(107) : error C2039: ostream_iterator: не является членом "std"
1>c:\users\вероника\documents\visual studio 2008\projects\m,rjhkgfle\m,rjhkgfle\m,rjhkgfle.cpp(107) : error C2065: ostream_iterator: необъявленный идентификатор
1>c:\users\вероника\documents\visual studio 2008\projects\m,rjhkgfle\m,rjhkgfle\m,rjhkgfle.cpp(107) : error C2062: тип "char" не требуется
1>c:\users\вероника\documents\visual studio 2008\projects\m,rjhkgfle\m,rjhkgfle\m,rjhkgfle.cpp(111) : error C2039: ostream_iterator: не является членом "std"
1>c:\users\вероника\documents\visual studio 2008\projects\m,rjhkgfle\m,rjhkgfle\m,rjhkgfle.cpp(111) : error C2065: ostream_iterator: необъявленный идентификатор
1>c:\users\вероника\documents\visual studio 2008\projects\m,rjhkgfle\m,rjhkgfle\m,rjhkgfle.cpp(111) : error C2062: тип "int" не требуется
1>Журнал построения был сохранен в "file://c:\Users\Вероника\Documents\Visual Studio 2008\Projects\m,rjhkgfle\m,rjhkgfle\Debug\BuildLog.htm"
1>m,rjhkgfle - ошибок 6, предупреждений 0
========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========

Добавлено через 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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
// m,rjhkgfle.cpp: определяет точку входа для консольного приложения.
//
 
#include <stdafx.h>
#include <stdio.h>
#include <iostream>
#include <string.h> 
 
#include <algorithm>
#include <iterator>
 
#include <iomanip>
#include <conio.h>
#include <locale.h>
 
using namespace std;
 
void k (int *x , const int &size)
{
        for (int i = 0; i < size; i++)
        {
            cout << x[i] << " " ;
        }
        cout << '\n';
}
 
 
void k (char *x , const int &size)
{
        for (int i = 0; i < size; i++)
        {
             cout << x[i] << " " ;
        }
        cout << '\n';
}
 
 
void Sort(int *x, const int &size,  int dir=0)
{  
    cout << "funcion int k((int x[])" << endl;
    int buff;
    if (dir == 0)
    {
          for (int i = 0; i < size; i++)
                {
                 for (int j = i+1; j < size; j++)
                    {
                        
                        if (dir == 0? x[j] <= x[j] : x[j+1] < x[j]){buff = x[i]; x[i] = x[j]; x[j] = buff;}
    
 
                 }
                    }
    }
    else (dir == 1);
    {
             for (int i = 1; i < size; ++i) 
            {
                 for (int j = i-1; j >= i; --j)
                 {
                     if (dir == 1? x[j-1] > x[j] : x[j-1] < x[j]){buff = x[i-1]; x[i-1] = x[i]; x[i] = buff;}
                 {
            }
}
         }
    }
 }
 
 
void Sort(char *x, const int &size, int dir=0)
{
        cout << "funcion char k((char x[]) \n" << endl;         
        char buf;
        if (dir == 0)
        {
          for (int i = 1; i < size; i++)
          {
             for (int j = i+1; j >= i; j++)
                 {
                    if (dir == 0? x[j+1] > x[j] : x[j+1] < x[j]){buf = x[i]; x[i] = x[j]; x[j] = buf;} 
                 }
          }
        }
        else (dir == 1);
        {
          char buf;
    for (int i = 1; i < size; ++i) 
        {
             for (int j = i-1; j >= i; --j)
             {
                 if (dir == 1? x[j-1] > x[j] : x[j-1] < x[j]){buf = x[i-1]; x[i-1] = x[i]; x[i] = buf;}
             {
        
        }
}
    }
        }
}
 
int main(void)
{    
 
        int int_x[] = {5, 1, 4, 6, 3, 3, 6, 7, 8, 9, 0};
        int int_x_size =  sizeof(int_x[0]);
    
        char char_x[] = {'b', 'c', 'z', 'c', 'd', 'r'};
        int  char_x_size =  sizeof(char_x[0]);
 
        Sort(char_x, char_x_size );
        std::copy( char_x, char_x + char_x_size, std::ostream_iterator<char>(std::cout, " "));
        std::cout << std::endl;
 
        Sort(int_x , int_x_size, 0);
        std::copy(int_x, int_x + int_x_size, std::ostream_iterator< int >(std::cout, " "));
        std::cout << std::endl;
 
        _getch();
  return 0;
}
0
Эксперт С++
2329 / 1702 / 148
Регистрация: 06.03.2009
Сообщений: 3,675
02.05.2010, 02:05 23
Цитата Сообщение от Luna17 Посмотреть сообщение
C++
1
int int_x_size = *sizeof(int_x[0]);
Luna17, sizeof позволяет получить размер аргумента в байтах. Функции же принимают размер массива в виде количества элементов. Для того чтобы получить количество элементов в массиве необходимо разделить размер массива в байтах на размер элемента массива, т.е.
C++
1
sizeof(arr) / sizeof(arr[0])
Luna17, ничего не переделывай, то что ты переделала - не будет работать, даже если избавится от синтаксических ошибок.
0
3 / 2 / 1
Регистрация: 09.03.2010
Сообщений: 95
02.05.2010, 09:57  [ТС] 24
CyBOSSeR, а с тем что у меня вышло уже совсем ничего нельзя сделать? просто желательно исправить о что есть
0
Эксперт С++
2329 / 1702 / 148
Регистрация: 06.03.2009
Сообщений: 3,675
02.05.2010, 12:22 25
Цитата Сообщение от Luna17 Посмотреть сообщение
CyBOSSeR, а с тем что у меня вышло уже совсем ничего нельзя сделать?
Только если переписать заново, чем тебя не устраивает работающий вариант?
0
3 / 2 / 1
Регистрация: 09.03.2010
Сообщений: 95
02.05.2010, 14:00  [ТС] 26
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
Luna17, вот, все работает:
C++
1
2
3
4
5
6
7
8
9
10
  SortExchange(char_arr, char_arr_size);
  std::copy(char_arr, char_arr + char_arr_size, std::ostream_iterator<char>(std::cout, " "));
  std::cout << std::endl;
 
  SortExchange(int_arr , int_arr_size, 0);
  std::copy(int_arr, int_arr + int_arr_size, std::ostream_iterator<int>(std::cout, " "));
  std::cout << std::endl;
 
  return 0;
}
тем что я не понимаю вот эту часть, и надо что бы было 4 вызова функции
0
Эксперт С++
2329 / 1702 / 148
Регистрация: 06.03.2009
Сообщений: 3,675
02.05.2010, 16:33 27
Luna17, вот вариант попроще, с 4-мя вызовами функции сортировки:
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
#include <iostream>
 
void SortExchange(int* arr, int size, int sort_up = 1) {
  for (int i = 1; i < size; ++i)
    for (int j = size - 1; j >= i; --j)
      if (sort_up == 1? arr[j - 1] > arr[j] : arr[j-1] < arr[j]) {
        int tmp        = arr[j - 1];
            arr[j - 1] = arr[j];
            arr[j]     = tmp;
      }
}
 
void SortExchange(char* arr, int size, int sort_up = 1) {
  for (int i = 1; i < size; ++i) {
    for (int j = size - 1; j >= i; --j)
      if (sort_up == 1? arr[j-1] > arr[j] : arr[j - 1] < arr[j]) {
        char tmp        = arr[j - 1];
             arr[j - 1] = arr[j];
             arr[j]     = tmp;
      }
  }
}
 
int main()
{
  char char_arr[]    = {'b', 'c', 'z', 'c', 'd', 'r'};
  int  char_arr_size = sizeof(char_arr) / sizeof(char_arr[0]);
 
  for (int i = 0; i < char_arr_size; ++i)
    std::cout << char_arr[i] << " ";
  std::cout << std::endl;
 
  SortExchange(char_arr, char_arr_size);
  for (int i = 0; i < char_arr_size; ++i)
    std::cout << char_arr[i] << " ";
  std::cout << std::endl;
 
  SortExchange(char_arr, char_arr_size, 0);
  for (int i = 0; i < char_arr_size; ++i)
    std::cout << char_arr[i] << " ";
  std::cout << std::endl;
 
  int int_arr[]    = {5, 1, 4, 6, 3, 3, 6, 7, 8, 9, 0};
  int int_arr_size = sizeof(int_arr) / sizeof(int_arr[0]);
 
  for (int i = 0; i < int_arr_size; ++i)
    std::cout << int_arr[i] << " ";
  std::cout << std::endl;
 
  SortExchange(int_arr , int_arr_size);
  for (int i = 0; i < int_arr_size; ++i)
    std::cout << int_arr[i] << " ";
  std::cout << std::endl;
 
  SortExchange(int_arr , int_arr_size, 0);
  for (int i = 0; i < int_arr_size; ++i)
    std::cout << int_arr[i] << " ";
  std::cout << std::endl;
 
  return 0;
}
1
3 / 2 / 1
Регистрация: 09.03.2010
Сообщений: 95
02.05.2010, 22:47  [ТС] 28
терь все так, и выводит рез вроде правильно, оч надеюсь, что преподу ничего нового в голову не взбредет,\

у ми то 1 вопрос, для чего мы пишем std и что она делает???
0
1257 / 795 / 108
Регистрация: 16.09.2009
Сообщений: 2,010
02.05.2010, 22:56 29
у ми то 1 вопрос, для чего мы пишем std и что она делает???
Про "Поименованные области" почитай и поймешь что это.
0
Эксперт С++
2329 / 1702 / 148
Регистрация: 06.03.2009
Сообщений: 3,675
02.05.2010, 23:06 30
Цитата Сообщение от Luna17 Посмотреть сообщение
у ми то 1 вопрос, для чего мы пишем std и что она делает???
cout, cin входят в состав пространство имен std, поэтому их использование без указания тем или иным образом имени пространства имен не возможно. Подробнее можешь прочитать здесь.
1
3 / 2 / 1
Регистрация: 09.03.2010
Сообщений: 95
03.05.2010, 22:15  [ТС] 31
CyBOSSeR, пасяб поняла
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.05.2010, 22:15

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Написать перегружаемые функции, которые считают среднее значение массива чисел
Написать перегружаемые функции, которые считают среднее значение массива чисел типа float или double

можно ли делать виртуальными перегружаемые операторы?
например так: virtual a&amp; a::operator=(a&amp; b);

Как совместить код, реализующий методы и перегружаемые операции
Есть такое задание::::) Разработать класс «Вектор» – Vektor размерности n . Определить несколько...

Перегружаемые и виртуальные методы (ошибка)
Ребята, выручайте! Программа должна выводить рандомные числа. Возникает ошибка при запуске. ...


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

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

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