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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 22, средняя оценка - 4.91
Luna17
3 / 3 / 1
Регистрация: 09.03.2010
Сообщений: 95
#1

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

28.04.2010, 20:08. Просмотров 2718. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.04.2010, 20:08
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Перегружаемые функции (C++):

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

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

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

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

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

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

30
enari
18 / 18 / 2
Регистрация: 26.04.2010
Сообщений: 35
28.04.2010, 21:16 #2
мда =).... Лучше дайте задание, а то очень много вопросов откуда взята переменная n если она не где не определена... =)))))

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
#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)
{
        char *arrchar;
        int *arrayint;
        const int size = 10;
    arrayint = new int [size];
        for (int i=0; i<size; i++)
        {
        cin >>arrayint[i];
        }
        delete [] arrayint;  // Удаление динамически выделеного массива
    arrchar = new char [size];
        for (int i=0; i<size; i++)
        {
        cin >>arrchar[i];
        }
        delete [] arrchar;  // Удаление динамически выделеного массива
    return 0;
}
Как вы наверное заметили массивы после заполнения сразу удаляется. Вам нужно за комментировать строки удаления массива... и написать нормальный перегруженные функции.. и пробовать вызвать функции подставляя разные массивы (символьный, целочисленный)
0
Luna17
3 / 3 / 1
Регистрация: 09.03.2010
Сообщений: 95
28.04.2010, 21:20  [ТС] #3
задание написано выше, в самом начале

Добавлено через 1 минуту
[/QUOTE]
Как вы наверное заметили массивы после заполнения сразу удаляется. Вам нужно за комментировать строки удаления массива... и написать нормальный перегруженные функции.. и пробовать вызвать функции подставляя разные массивы (символьный, целочисленный)[/QUOTE]

как закоментировать? а эти перегруженные функции разве не нормальные?
0
enari
18 / 18 / 2
Регистрация: 26.04.2010
Сообщений: 35
28.04.2010, 21:36 #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
#include <stdio.h>
#include <iostream>
 
using namespace std;
 const int n =10;
//void k(int*, int, int =0);
void k(int *x, int n, int dir=0)
{
        cout << "funcion int k((int x[]) \n" << endl;
        return ;
}
//void k(char*, int, int=0);
void k(char *x, int n, int dir=0)
{
    cout << "funcion char k((char x[]) \n" << endl;
        return ;
}
 
int main(void)
{
        char *arrchar;
        int *arrayint;
        const int size = 10;
    arrayint = new int [size];
        for (int i=0; i<size; i++)
        {
        cin >>arrayint[i];
        }
      //    delete [] arrayint;  // Удаление динамически выделеного массива
    arrchar = new char [size];
        for (int i=0; i<size; i++)
        {
        cin >>arrchar[i];
        }
       //   delete [] arrchar;  // Удаление динамически выделеного массива
       k(arrayint,size);
       k(arrchar,size);
 
 
    return 0;
}
P.S. Смекнули как комментировать ?
0
Luna17
3 / 3 / 1
Регистрация: 09.03.2010
Сообщений: 95
28.04.2010, 21:43  [ТС] #5
Цитата Сообщение от enari Посмотреть сообщение
и пробовать вызвать функции подставляя разные массивы (символьный, целочисленный)
ок, это я поняла, теперь ? мож показать хотя б на 1ом примере рабочем сортировку массивва
0
CyBOSSeR
Эксперт С++
2303 / 1673 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
28.04.2010, 21:55 #6
Luna17, сортировок в интернете море и на этом форуме в частности. Например здесь.
0
Luna17
3 / 3 / 1
Регистрация: 09.03.2010
Сообщений: 95
28.04.2010, 22:02  [ТС] #7
у ми траблы с изменением сортировки в разных порядках
0
CyBOSSeR
Эксперт С++
2303 / 1673 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
28.04.2010, 22:05 #8
Luna17, вот
C++
1
2
3
4
5
6
7
void sort_exchange(int arr[], int n, bool sort_up = true) {
  for (int i=1; i < n; ++i) {
    for (int j=n-1; j >= i; --j)
      if (sort_up? arr[j-1] > arr[j] : arr[j-1] < arr[j])
        swap(arr[j],arr[j-1]);
  }
}
В зависимости от значения sort_up, сортировка будет идти в том или ином направлении.
1
Luna17
3 / 3 / 1
Регистрация: 09.03.2010
Сообщений: 95
28.04.2010, 22:09  [ТС] #9
понятно, значит изменять только true на 1 или 0
0
CyBOSSeR
Эксперт С++
2303 / 1673 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
28.04.2010, 22:15 #10
Цитата Сообщение от Luna17 Посмотреть сообщение
понятно, значит изменять только true на 1 или 0
Ты вообще о чем? sort_up булева переменная, которая может принимать либо значение true, либо false.
0
enari
18 / 18 / 2
Регистрация: 26.04.2010
Сообщений: 35
28.04.2010, 22:15 #11
На Вашем примере
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
#include <stdio.h>
#include <iostream>
 
using namespace std;
 
void Display (int *arr , const int &size)
{
    for (int i = 0; i < size; i++)
    {
     cout << arr[i] << " " ;
    }
    cout << '\n';
}
 
void Display (char *arr , const int &size)
{
    for (int i = 0; i < size; i++)
    {
     cout << arr[i] << " " ;
    }
    cout << '\n';
}
 
 
void Sort(int *arr, const int &size)
{  int buff;
        for (int i = 0; i < size; i++)
        {
         for (int j = i+1; j < size; j++)
         {
           if (arr[j] <= arr[i]) {buff = arr[i]; arr[i] = arr[j]; arr[j] = buff;}
         }
        }
}
 
void Sort(char *x, int n, int dir=0)
{
    cout << "funcion char k((char x[]) \n" << endl;
    /* Здесь ваш Код */
        return ;
}
 
int main(void)
{    int stop;
        char *arrchar;
        int *arrayint;
        const int size = 10;
    arrayint = new int [size];
        for (int i=0; i<size; i++)
        {
        cin >>arrayint[i];
        }
        Display(arrayint,size);
      //    delete [] arrayint;  // Удаление динамически выделеного массива
   arrchar = new char [size];
        for (int i=0; i<size; i++)
        {
        cin >>arrchar[i];
        }
       //   delete [] arrchar;  // Удаление динамически выделеного массива */
       Sort(arrayint,size);
       Display(arrayint,size);
       //k(arrchar,size);
 
 
    return 0;
}
1
Luna17
3 / 3 / 1
Регистрация: 09.03.2010
Сообщений: 95
28.04.2010, 22:20  [ТС] #12
просто у меня в проге должна сортировка менятся в зависимости от 1 или 0, значит надо сделать переменную int

Добавлено через 2 минуты
enari,
cпасибки но вот над этой частью я туплю не понимаю ее
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void Sort(int *arr, const int &size)
{  int buff;
                for (int i = 0; i < size; i++)
                {
                 for (int j = i+1; j < size; j++)
                 {
                   if (arr[j] <= arr[i]) {buff = arr[i]; arr[i] = arr[j]; arr[j] = buff;}
                 }
                }
}
 
void Sort(char *x, int n, int dir=0)
{
        cout << "funcion char k((char x[]) \n" << endl;
        /* Здесь ваш Код */
                return ;
0
CyBOSSeR
Эксперт С++
2303 / 1673 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
28.04.2010, 22:21 #13
Luna17, как я понимаю ты пишешь на Си? Тогда да, именно так и нужно сделать.
0
Luna17
3 / 3 / 1
Регистрация: 09.03.2010
Сообщений: 95
28.04.2010, 22:26  [ТС] #14
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
Luna17, как я понимаю ты пишешь на Си? Тогда да, именно так и нужно сделать.
да именно так
0
enari
18 / 18 / 2
Регистрация: 26.04.2010
Сообщений: 35
28.04.2010, 22:48 #15
Я вам показал сортировку массива целочисленных чисел... Ваша задача теперь сделать сортировку символьного массива...

C++
1
2
3
4
5
6
7
8
        
for (int i = 0; i < size; i++) 
    {
      for (int j = i+1; j < size; j++) 
        {
           if (arr[j] <= arr[i]) {buff = arr[i]; arr[i] = arr[j]; arr[j] = buff;}
         }
        }
Здесь берется первый элемент и сравнивается со всеми начиная i+1 на условие что он больше или равен... а далее если оно так и есть там обычный обмен значениями, а переменная buff для временного хранения значения.

Добавлено через 11 минут
P.S. Можно вопрос !
Метод Пузырька только для C в С++ его не используют ?
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.04.2010, 22:48
Привет! Вот еще темы с ответами:

Функции. Как после одного возвратного значения функции отталкиваться от возврата другой функции - C++
Написал код, в котором 2 функции одна возвращает стринговое значение, вторая должна бы вернуть значение, отталкиваясь от первой. Возможно...

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

excel. создать таблицу значение кусочно-непрерывной функции y на интервале [xmin; xmax] с шагом h, для расчета функции y используя логические функции - Delphi

Какое значение возвращают функции (в частности, логические функции) по умолчанию в Лазарус? - Lazarus
Я наткнулся на одну неприятность. До сих пор я считал, что result в функциях по умолчанию равен false (если функция логическая) и 0 (если...


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

Или воспользуйтесь поиском по форуму:
15
Yandex
Объявления
28.04.2010, 22:48
Ответ Создать тему
Опции темы

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