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

Параметр передаваемый в функцию - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.70
Forza35
1 / 1 / 0
Регистрация: 30.06.2009
Сообщений: 16
17.08.2009, 12:41     Параметр передаваемый в функцию #1
Добрый день, уважаемые, посетители форума.
Вот я написал быструю сортировку:

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
// quicksort.cpp: главный файл проекта.
 
#include "stdafx.h"
#include <iostream>
#include <conio.h>
#include <stdlib.h>
using namespace std;
 
int partition(int s[],int l,int r)
{
    int i=l,j=r,x=s[r];
    while(true)
    {
        if(i<j)
        {
        while(s[i]<x)
        {
            i++;
        }
            
        while(s[j]>x)
        {
            j--;
            if(j==l)
                break;
        }
        if(s[i]==s[j])
        break;
        else
        swap(s[i],s[j]);
 
        }
        else
            break;
    }
    return i;
}
void quicksort(int s[],int l,int r)
{
    if(l<r)
    {
        int med=partition(s,l,r);
        quicksort(s,l,med-1);
        quicksort(s,med+1,r);
    }
    else
        return;
}
Хочу сделать класс sort, который будет выглядеть примерно так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
class sort
{
private:
int *s;
int nl
public:
sort(int N)
{
n=N;
s=new int[n];
}
};
И одним из методов должен быть quicksort, только первым параметром должен быть не массив целых чисел, а объект класса sort. Как это сделать? я думал примерно так sort q. и после точки надо написать поле, но у меня Intellisense ругается и не выводит поля(
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Monte-Cristo
 Аватар для Monte-Cristo
2807 / 1372 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
17.08.2009, 12:57     Параметр передаваемый в функцию #2
Цитата Сообщение от Forza35 Посмотреть сообщение
только первым параметром должен быть не массив целых чисел, а объект класса sort.
а зачем? вы хотите одним объектом сортировать другой? вы понимаете парадигму ООП?
novi4ok
549 / 502 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
17.08.2009, 13:03     Параметр передаваемый в функцию #3
опишите как вы себе интерфейс вашего класса представляете. другими словами, как клиенты должны будут использовать ваш класс.
Forza35
1 / 1 / 0
Регистрация: 30.06.2009
Сообщений: 16
17.08.2009, 13:36  [ТС]     Параметр передаваемый в функцию #4
Ну у меня еще как такого предмета ООП не было, будет только в грядущем семестре, дак я самостоятельно еще ток с ним разбираться пытаюсь. Извините, конечно мб не допонял чего, но буду работать. Я просто хотел сделать класс сортировок, и там 4 обменные сортировки как методы. и вот к примеру я создаю класс сорт, задем в самой программе.
создаю объект этого класса ну к примеру sort s(10), и дольше просто хотелось бы вызвать метод какой-нить сортировки, ну вот к примеру, s.quicksort(?,0,9). Вот как-то так
Monte-Cristo
 Аватар для Monte-Cristo
2807 / 1372 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
17.08.2009, 13:57     Параметр передаваемый в функцию #5
просто не понятно зачем объект передавать. у тебя Класс будет хранить массив, которые сортировать и методы: методы сортировок - т.е. ты выбираешь каким методом отсортировать. т.е. ты это имел ввиду? я честно говоря не совсем тебя понял.
Forza35
1 / 1 / 0
Регистрация: 30.06.2009
Сообщений: 16
17.08.2009, 14:00  [ТС]     Параметр передаваемый в функцию #6
Так точно, я имел ввиду именно это. Можно написать тупо функции этих сортировок. Но хотелось бы единым классом сделать) вот к примеру я написал bublesort. Он без параметров дак там проблем нету, sort q(10);q.bublesort() и все. А в quicksort надо параметры передавать.
Puporev
Модератор
 Аватар для Puporev
50743 / 38674 / 12483
Регистрация: 18.05.2008
Сообщений: 87,772
17.08.2009, 14:01     Параметр передаваемый в функцию #7
Классы-это объекты, например матрицы. А сортировка это метод класса, процедура или функция, хотя у вас это вроде одно и то же.
Monte-Cristo
 Аватар для Monte-Cristo
2807 / 1372 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
17.08.2009, 14:16     Параметр передаваемый в функцию #8
Цитата Сообщение от Forza35 Посмотреть сообщение
А в quicksort надо параметры передавать
ну это понятно. я понять не могу, зачем передавать объект в quicksort?

Добавлено через 6 минут 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
class CSort
{
    private:
        int *Array; // собственно, сам массив
        int n;      // кол-во элементов массива
    public:
        CSort(int N)
        {
            n = N;
            Array = new int[n];
            // ну тут в приницпе можно еще и заполнять как-то
        }
        
        ~Csort()
        {
            delete[] Array;
        }
        
        void bubblesort()
        {
            // вот тут ты уже просто, берешь и прямо сортируешь массив
            // Array.
        }
        
        void quicksort(/* передаешь параметры сортировки */)
        {
            // вот тут ты тоже просто, берешь и прямо сортируешь массив
            // Array.
        }       
};
Добавлено через 47 секунд
можно добавить методы для заполнения массива
novi4ok
549 / 502 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
17.08.2009, 14:53     Параметр передаваемый в функцию #9
Monte-Cristo, хочу покритиковать и ваше решение. танцевать будем от потенциального клиента. что ему нужно?
0. у клиента есть массив чего-то (пускай для простоты - целых) известной длины. и он хочет этот массив упорядочить в той же памяти.
1. Forza35 хочет предложить несколько методов, причем сгруппировать их в специальный класс.

спрашивается:
зачем нам для этой цели нужен вообще объект такого класса? чтоб была возможность вызвать конструктор-деструктор?

что и для кого мы собираемся здесь хранить?
C++
1
2
3
    private:
        int *Array; // собственно, сам массив
        int n;      // кол-во элементов массива
Forza35, не нужно стремиться при каждом решении обязательно применить все что вы успели выучить, или бояться показаться недостаточно объекно-ориентированым. мир решаемых задач очень многообразен для того, чтобы втиснуть его в рамки любой технологии. не забывайте здравый смысл, и старайтесь выбрать наиболее простое решение из возможных (не забывая предусмотреть некоторую гибкость, но не перегибать с этим тоже )

считаю лучшим решением - класс с набором статических функций. будет та же эффективность (даже несколько выше), при более простом использовании. т.е.

C++
1
2
3
4
5
6
7
8
9
10
11
12
class CMySort {
  static sortMeghodOne (int *pArray, unsigned long size){
   ...
  }
  static sortMeghodTwo (int *pArray, unsigned long size, ... some additional arguments){
   ...
  }
  static sortMeghodThree (int *pArray, unsigned long size, ... some additional arguments){
   ...
  }
...  
}
использование - примитивное:

C++
1
2
3
int array [3] = {3,-20,200};
CMySort::sortMeghodOne (array, 3);
...
Forza35
1 / 1 / 0
Регистрация: 30.06.2009
Сообщений: 16
17.08.2009, 14:57  [ТС]     Параметр передаваемый в функцию #10
Спасибо, Monte-Cristo, что ты со мной возишься) Но вот я так и делал как ты предлагаешь, только вот проблема вот в чем(мб я и не допонимаю что-нибудь) в функции main я создам объект типа Csort. а в сортировку мне надо передать объект типа инт(int s[]) но у меня же не будет в главной программе объекта типа int, а будет объект Csort)
вот как будет выглядеть:
C++
1
2
3
4
5
int main()
{
Csort q(10); 
q.quicksort( ,0,9); 
}
вот первым параметром у меня должен быть целочисленный массив, точней указатель на него, а у меня есть только объект типа Csort.

Добавлено через 3 минуты 4 секунды
Спасибо вам обоим)
novi4ok
549 / 502 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
17.08.2009, 15:00     Параметр передаваемый в функцию #11
Цитата Сообщение от Forza35 Посмотреть сообщение
Спасибо, Monte-Cristo, что ты со мной возишься) Но вот я так и делал как ты предлагаешь, только вот проблема вот в чем(мб я и не допонимаю что-нибудь) в функции main я создам объект типа Csort. а в сортировку мне надо передать объект типа инт(int s[]) но у меня же не будет в главной программе объекта типа int, а будет объект Csort)
вот как будет выглядеть:
C++
1
2
3
4
5
int main()
{
Csort q(10); 
q.quicksort( ,0,9); 
}
вот первым параметром у меня должен быть целочисленный массив, точней указатель на него, а у меня есть только объект типа Csort.

Добавлено через 3 минуты 4 секунды
Спасибо вам обоим)
ну вот, теперь оказывается, что и сортировать ничего не нужно. главное - класс чтоб был
Monte-Cristo
 Аватар для Monte-Cristo
2807 / 1372 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
17.08.2009, 15:13     Параметр передаваемый в функцию #12
novi4ok, критика это хорошо.
Но, позволь возразить:

Цитата Сообщение от novi4ok Посмотреть сообщение
зачем нам для этой цели нужен вообще объект такого класса? чтоб была возможность вызвать конструктор-деструктор?
у Forza35 изначально был код, в котором это маячило:
Цитата Сообщение от Forza35 Посмотреть сообщение
private:
int *s;
int nl
во-вторых, если необходимы только функции сортировок, тогда рациональней использовать пространство имен. (имхо, он для этих целей и создавался).
Как вариант, использовать static методы класса. Но это сводится уже к противостоянию структур и классов ( в c++ и те и те поддерживают методы.. да они отличаются спецификатором доступа по-умолчанию, но как правило, программист всегда их задает вручную (чтоб наверняка)).

С пространством имен это выглядело бы так:

C++
1
2
3
4
5
6
namespace Sorts 
{
    bubblesort(/*массив пердаем и т.д.*/);
    quicksort(/*массив пердаем и т.д.*/);
    shellsort(/*массив пердаем и т.д.*/);
}
и вызывались бы они так:

C++
1
Sorts::bublesort(/*массив пердаем и т.д.*/);
Forza35
1 / 1 / 0
Регистрация: 30.06.2009
Сообщений: 16
17.08.2009, 15:26  [ТС]     Параметр передаваемый в функцию #13
Спасибо, что натолкнули на идею оба. Monte-Cristo, я просто не видел еще такого как создание пространство имен. Т.е. вот я его задам подключу к программе "using namespace Sorts" и тогда мне просто можно вызвать так:
bubblesort(/*массив пердаем и т.д.*/);
quicksort(/*массив пердаем и т.д.*/);
shellsort(/*массив пердаем и т.д.*/);
Соглашусь, вначале я хотел сделать фигню какую-то) Теперь вроде чуть-чуть понял, сейчас сделал как novi4ok говорил. Сейчас попробую как
Monte-Cristo.
И не могли бы вы еще помочь, чтоб не создавать отдельную тему. Почему в проекте
cоздаю класс а функция swap не работает? в консольном приложении дак работает. Хотя stdlib я подключал

Добавлено через 40 секунд
у меня Visual studio 2008
Monte-Cristo
 Аватар для Monte-Cristo
2807 / 1372 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
17.08.2009, 15:37     Параметр передаваемый в функцию #14
Цитата Сообщение от Forza35 Посмотреть сообщение
Т.е. вот я его задам подключу к программе "using namespace Sorts" и тогда мне просто можно вызвать так:
bubblesort(/*массив пердаем и т.д.*/);
quicksort(/*массив пердаем и т.д.*/);
shellsort(/*массив пердаем и т.д.*/);
угу.
в принципе, если сделать как сказал novi4ok - то тогда,
ты будешь к функциям тоже ссылаться через спецификатор доступа ::.. т.е.
класс::метод
но это возможно только для static методов. но нп мое имхо, пространство имен для этих целей и создавалось.

Добавлено через 2 минуты 4 секунды
Цитата Сообщение от Forza35 Посмотреть сообщение
И не могли бы вы еще помочь, чтоб не создавать отдельную тему. Почему в проекте
cоздаю класс а функция swap не работает? в консольном приложении дак работает.
потому что, наверное, swap входит в пространство имен std;
в консольном приложении ты наверное прописывал всегда
C++
1
using namespace std;
для доступа к swap попробуй вызвать его так:
C++
1
std::swap
skvor
640KB мне хватило на всё.
118 / 49 / 2
Регистрация: 07.06.2009
Сообщений: 442
17.08.2009, 16:41     Параметр передаваемый в функцию #15
Forza35, мне кажется, вы думаете в обратную сторону.

При объектно-ориентированном подходе, в вашей задаче, надо не в функцию передавать массив, а самому массиву приделать метод, который будет его самого сортировать.

C++
1
2
3
4
5
6
7
8
9
10
11
12
class ClassArray
{ public:
     Type Array; //Некоторое описание собственно массива
     void Sort() { .... } //Описание функции (метод), которая может сортировать Array
}
main()
{ ClassArray A; //Объявление объекта (экземпляр массива)
   .......... //Инициализация
   .......... //Вывод первоначального значения массива
  A.Sort(); //Сортировка
  .......... //Вывод результата
}
Ну где-то так, если не задавать вопросы про разные там сокрытия данных и т.п.
novi4ok
549 / 502 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
17.08.2009, 17:04     Параметр передаваемый в функцию #16
Цитата Сообщение от Monte-Cristo Посмотреть сообщение
рациональней использовать пространство имен.
еще лучше подошло бы для данной задачи! мне просто в голову не пришло в том момент.

Цитата Сообщение от skvor Посмотреть сообщение
Forza35, мне кажется, вы думаете в обратную сторону.
При объектно-ориентированном подходе, в вашей задаче,...
все зависит от того, какую задачу мы пытаемся решить: создать удобный инструмент для сортировки, или изощриться приделать о-ориентированый подход во что бы то ни стало.
как дополнение: суть объектно-ориентированного подхода не в том, чтобы на каждый пук написать class{..., а представить в виде иерархии классов (очень важно! иначе все это теряет основное преимущество) сущности предметной области решаемой задачи. а здесь у нас - массив целых, который мы хотим иметь возможность сортировать разными способами. и все!
skvor
640KB мне хватило на всё.
118 / 49 / 2
Регистрация: 07.06.2009
Сообщений: 442
17.08.2009, 17:17     Параметр передаваемый в функцию #17
Цитата Сообщение от novi4ok Посмотреть сообщение
все зависит от того, какую задачу мы пытаемся решить
Ну, это хозяин пусть сам решает - пишем сортировку или в ООП-е разбираемся. Но я не видел ни одного человека, который начал бы осваивать ООП с программы, для которой использование ООП целесообразно. Даже для студенческих задач 2 курса, думаю нет практической надобности в объектах.
Forza35
1 / 1 / 0
Регистрация: 30.06.2009
Сообщений: 16
18.08.2009, 00:59  [ТС]     Параметр передаваемый в функцию #18
Ну, как я сказал, у меня ООП еще не было. Только будет. А это мне просто про обменную сортировку надо подготовить материал к сентябрю и сделать вообще в Delphi. Но я выбрал C++. Потому, что планирую развиваться в этой области. Еще раз спасибо всем. Сделаю через пространство имен.

Добавлено через 2 часа 39 минут 42 секунды
#include "stdafx.h"
#include <iostream>
#include <stdlib.h>
#include <conio.h>
#include <ctime>
using namespace std;
int partition(int s[],int l,int r)
{
int i=l,j=r,x=s[r];
while(true)
{
if(i<j)
{
while(s[i]<x)
{
i++;
}

while(s[j]>x)
{
j--;
if(j==l)
break;
}
if(s[i]==s[j])
break;
else
swap(s[i],s[j]);

}
else
break;
}
return i;
}
void quicksort(int s[],int l,int r)
{
if(l<r)
{
int med=partition(s,l,r);
quicksort(s,l,med-1);
quicksort(s,med+1,r);
}
else
return;
}
class sort
{
private:
int *s;
int n;
public:
sort(int N)
{
n=N;
s=new int[n];
}



void qs()
{
quicksort(s,0,n-1);
}

void randomize(int maxvalues)
{
srand(time(NULL));
for(int j=0;j<n;j++)
s[j]=rand()%maxvalues;
}
void show()
{ for(int j=0;j<n;j++)
cout<<s[j]<<" ";
}
};
int main()
{
sort q(10);
q.randomize(100);
q.qs();
q.show();
getch();
return 0;



}
решил проблему примерно так. Что скажете на такое решение? Но сделаю все равно через namespace. Ток я в проекте windows form не знаю где описывать namespace sort, а как создавать class знаю. Мб подскажете тогда где? у меня Visual studio 2008.
zim22
depict1
 Аватар для zim22
276 / 141 / 2
Регистрация: 11.07.2009
Сообщений: 606
18.08.2009, 09:12     Параметр передаваемый в функцию #19
Цитата Сообщение от skvor Посмотреть сообщение
Но я не видел ни одного человека, который начал бы осваивать ООП с программы, для которой использование ООП целесообразно
ООП - это сложная штука. и чтобы его понять очень желательно прочитать книжечки по "объектно ориентированному анализу и проектированию". А то люди слово класс написали - и всё, у них программа теперь ООП
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.08.2009, 11:53     Параметр передаваемый в функцию
Еще ссылки по теме:

Не меняется переданный в функцию параметр C++
C++ Передать параметр в функцию
C++ Задать функцию как параметр функции
C++ Как передать параметр в функцию?
C++ Передать функцию как параметр

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

Или воспользуйтесь поиском по форуму:
skvor
640KB мне хватило на всё.
118 / 49 / 2
Регистрация: 07.06.2009
Сообщений: 442
18.08.2009, 11:53     Параметр передаваемый в функцию #20
Цитата Сообщение от zim22 Посмотреть сообщение
ООП - это сложная штука. и чтобы его понять очень желательно прочитать книжечки по "объектно ориентированному анализу и проектированию". А то люди слово класс написали - и всё, у них программа теперь ООП
Это уже не ко мне. Вы смешали две большие разницы - использование классов, и возможную самооценку подобной программы, которую, конечно, нельзя называть объектно-ориентированной.

std::cout<<"Хело волд"; //Тоже объектно ориентированный подход
Нельзя заставлять читать всего Бьярна нашего Страуструпа, понимаете-ли и до конца, прежде чем писать "Здравствуй, Мир!"
Yandex
Объявления
18.08.2009, 11:53     Параметр передаваемый в функцию
Ответ Создать тему
Опции темы

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