Member 14636287 Ответов: 2

Программа для печати в порядке возрастания и убывания n чисел с использованием пользовательских функций на языке C++


я не знаю, как использовать пользовательские функции для правильной работы программы

Что я уже пробовал:

#include <iostream>
using namespace std;
sort Ascending( ); 
sort Descending( ); 
int main(){
	int num[100],n;
int i,j,man;
cout<<"enter n for the numbers you want to sort"<<endl<<endl;
cin>>n;
	for(i=0;i<n;i++){		
			cout<<"enter number"<<endl;
	cin>>num[i];
	}
	for(i=0;i<n;i++){
		for(j=0;j<n;j++){
			if(num[i]<num[j]){
				man=num[i];
				num[i]=num[j];
				num[j]=man;
			}			
		}
	}
	cout<<"ascending "<<endl;
	for(i=0;i<n;i++){
	cout<<" "<<num[i]<<endl;;
	}
	for(i=0;i<n;i++){
		for(j=0;j<n;j++){
			if(num[i]>num[j]){
				man=num[i];
				num[i]=num[j];
				num[j]=man;
			}			
		}
	}
	cout<<" descending"<<endl;
	for(i=0;i<n;i++){
		cout<<" "<<num[i]<<endl;
}
return 0;
}

Richard MacCutchan

Это происходит потому, что вы поместили код сортировки встроенным в main. Вам нужно переместить процедуры сортировки в их собственные функции.

2 Ответов

Рейтинг:
0

CPallini

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

#include <iostream>
#include <vector>
#include <utility>
using namespace std;

void sort_ascending(vector<int> & v);
void sort_descending(vector <int> & v);

int main()
{

  size_t n;
  cout << "enter n for the numbers you want to sort" << endl;
  cin >> n;
  cout << endl;

  vector<int> v(n);

  for (size_t i =0; i < n; ++i)
  {
    cout << "enter number " << (i+1) << " of " << n << endl;
    cin >> v[i];
  }
  cout << "ascending:\n";
  sort_ascending( v);
  for (auto x : v)
    cout << x << "\n";

  cout << "descending:\n";
  sort_descending(v);
  for (auto x : v)
    cout << x << "\n";
}

void sort_ascending( vector<int> & v)
{
  for (size_t i=0; i < v.size()-1; ++i)
    for (size_t j= i+1; j < v.size(); ++j)
      if ( v[i] > v[j] ) swap(v[i], v[j]);
}

void sort_descending( vector<int> & v)
{
  for (size_t i=0; i < v.size()-1; ++i)
    for (size_t j= i+1; j < v.size(); ++j)
      if ( v[i] < v[j] ) swap(v[i], v[j]);
}


Это возможная реализация Ан упражнение С другой стороны, если вы пишете производственный код, то отбросьте свою собственную (пузырьковую!) реализацию sort и используйте тот, который предоставлен компанией C++ вместо этого стандартная библиотека.
#include <iostream>
#include <algorithm>
#include <functional>
#include <vector>
using namespace std;

int main()
{
  size_t n;
  cout << "enter n for the numbers you want to sort" << endl;
  cin >> n;
  cout << endl;

  vector<int> v(n);

  for (size_t i =0; i < n; ++i)
  {
    cout << "enter number " << (i+1) << " of " << n << endl;
    cin >> v[i];
  }

  cout << "ascending:\n";
  sort(v.begin(), v.end());
  for (auto x : v)
    cout << x << "\n";

  cout << "descending:\n";
  sort(v.begin(), v.end(), std::greater<int>());
  for (auto x : v)
    cout << x << "\n"
}


Рейтинг:
0

OriginalGriff

"Определяемая пользователем функция" - это просто функция, которую вы объявляете, так же как вы объявляете main я #n код, который вы показываете.
Фактически, вы почти показываете прототипы для двух функций непосредственно выше main - поэтому все, что вам нужно сделать, это дать им действительные имена и переместить код для "сортировки по возрастанию" в одну функцию, а "сортировки по убыванию" в другую. Затем вы можете позвонить им из main просто используя имя функции, за которым следуют скобки (при необходимости с любыми значениями параметров внутри скобок):

void MyFunction();    //Prototype - lets you use it in main before the definition

void main()
   {
   ...
   MyFunction();
   ...
   }
void MyFunction()
   {
   // your code here
   }


Richard MacCutchan

Если вы поместите полную функцию выше main в исходном коде, то нет никакой необходимости в прототипах. Одна из самых раздражающих особенностей C/C++ (IMHO).

OriginalGriff

Верно - но поскольку у него уже есть "почти прототипы", имеет смысл продолжить с ними.

Компиляторы C раньше были достаточно медленными, не добавляя еще один проход только для того, чтобы забрать прямые ссылки :смех: