Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.05.2013, 11:38   #1
mixon-21
Я только Учусь
Форумчанин
 
Аватар для mixon-21
 
Регистрация: 06.03.2013
Сообщений: 193
По умолчанию Двухмерный масив

Подскажите с чево начать
Дан массив чисел размерностью 10 элементов. Написать функцию, которая сортирует массив по возрастанию или по убыванию, в зависимости от третьего параметра функции. Если он равен 1, сортировка идет по убыванию, если 0, то по возрастанию. Первые 2 параметра функции - это массив и его размер, третий параметр по умолчанию равен 1.


Цитата:
#include<iostream>
#include<time.h>
using namespace std;
template <typename T>
void mas(T m[],T h){
for(int i=0; i<h; i++)

}
void main(){
srand(time(NULL));
const int h=10;
int m[h];
for(int i=0; i<h; i++) {
m[i]=rand()%100;
cout<<m[i]<<'\t';
}
mas(m,h);
}
mixon-21 вне форума Ответить с цитированием
Старый 14.05.2013, 12:03   #2
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

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

Пока не пишите обобщённый (использующий шаблоны) код, ограничьтесь массивом из элементов типа int.
Если не знаете, как написать сортировку по возрастанию, отбросьте пока часть про третий параметр и сосредоточьтесь на сортировке в одном направлении.

Да. Пусть есть функция с заголовком
Код:
void SortArray(int* array, size_t length){
  /*Сортирует массив array длины length по возрастанию*/
}
Можете написать её тело?
Abstraction вне форума Ответить с цитированием
Старый 14.05.2013, 12:50   #3
mixon-21
Я только Учусь
Форумчанин
 
Аватар для mixon-21
 
Регистрация: 06.03.2013
Сообщений: 193
По умолчанию

Вот сортировка на увеличение. А как сделать на уменьшение?????

Цитата:
void mas(int m[],int h){
int k,x,l,i;
for( i=0; i<h; i++){
k=i;
x=m[i];
for(int j=i+1;j<h;j++)
if(m[j]<x){
k=j;
x=m[j];
}
m[k]=m[i];
m[i]=x;
}
}
void main(){
srand(time(NULL));
const int h=10;
int m[h];
for(int i=0; i<h; i++) {
m[i]=rand()%100;
cout<<m[i]<<'\t';
}
mas(m,h);
for(int i=0;i<h;i++){
cout<<m[i]<<"\t";
}
cout<<"\n\n";

}
mixon-21 вне форума Ответить с цитированием
Старый 14.05.2013, 13:03   #4
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

1) Программный код оформляйте тегом форума CODE, а не QUOTE - последний убивает отступы.
Код:
void mas(int m[],int h){
  int k,x,l,i;
  for( i=0; i<h; i++){
    k=i;
    x=m[i];
    for(int j=i+1;j<h;j++)
      if(m[j]<x){
        k=j;
        x=m[j];
      }
    m[k]=m[i];
    m[i]=x;
  }
}
2) Не используйте однобуквенные переменные с такой частотой. Непонятно же нифига.
Код:
void SortArrayAscending(int array[],int length){
  //int k,x,l,i; И переменная l в коде не используется вовсе - зачем она здесь?
  for(int i=0; i<length; i++){
    int maxIndex = i;
    int maxValue = m[i];
    for(int j=i+1; j<length; j++)
      if(m[j]<minValue){
        minIndex=j;
        minValue=m[j];
      }
    m[minIndex]=m[i];
    m[i]=minValue;
  }
}
3) И пишите комментарии.
Код:
//Упорядочивает массив array по ВОЗРАСТАНИЮ
void SortArrayAscending(int array[], int length){
  //Для каждого элемента массива,
  for(int i=0; i<length; i++){
    //Ищем МИНИМАЛЬНЫЙ элемент среди элементов i..(length-1)
    int minIndex = i;
    int minValue = m[i];
    for(int j=i+1; j<length; j++)
      if(m[j]<minValue){
        minIndex=j;
        minValue=m[j];
      }
    //Всё, поиск закончен. Меняем местами текущий (i-ый) объект и минимальный
    m[minIndex]=m[i];
    m[i]=minValue;
  }
}
4) А теперь внимание, вопрос: что нужно изменить в коде, чтобы он начал сортировать по УБЫВАНИЮ? Сейчас ответить должно быть заметно проще.

Последний раз редактировалось Abstraction; 14.05.2013 в 14:12. Причина: Всё-таки благополучно запутался в "убывании" и "возрастании". Поправил.
Abstraction вне форума Ответить с цитированием
Старый 14.05.2013, 13:45   #5
mixon-21
Я только Учусь
Форумчанин
 
Аватар для mixon-21
 
Регистрация: 06.03.2013
Сообщений: 193
По умолчанию

поменять знак<на >


Код:

    for(int j=i+1; j<length; j++)
      if(array[j]>maxValue){
        maxIndex=j;
        maxValue=array[j];
Правильно????????????????
mixon-21 вне форума Ответить с цитированием
Старый 14.05.2013, 14:08   #6
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Бинго. Заодно обнаружил свой ляп - Ваша изначальная функция сортировала по ВОЗРАСТАНИЮ. Поправил названия переменных. Это к вопросу о том, как важно называть переменные осмысленно с самого начала.
А теперь, у нас есть две функции - SortArrayDescending и SortArrayAscending. Используя их,
Цитата:
Написать функцию, которая сортирует массив по возрастанию или по убыванию, в зависимости от третьего параметра функции. Если он равен 1, сортировка идет по убыванию, если 0, то по возрастанию.
Если третий аргумент не есть 0 или 1, функция не должна делать ничего.

Последний раз редактировалось Abstraction; 14.05.2013 в 14:14.
Abstraction вне форума Ответить с цитированием
Старый 14.05.2013, 14:09   #7
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

(дубль, удалено)
Abstraction вне форума Ответить с цитированием
Старый 14.05.2013, 14:34   #8
mixon-21
Я только Учусь
Форумчанин
 
Аватар для mixon-21
 
Регистрация: 06.03.2013
Сообщений: 193
По умолчанию

А где взять третий аргумент?
mixon-21 вне форума Ответить с цитированием
Старый 14.05.2013, 15:30   #9
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Цитата:
А где взять третий аргумент?
???
Пишете третью функцию - SortArray(int* array, size_t length, int sortingMode). Она проверяет свой третий аргумент и в зависимости от его значения либо завершается, либо вызывает SortArrayDescending, либо SortArrayAscending. Это во всех отношениях лучше, чем пытаться делать "универсальную" сортировку, которая будет проверять значение sortingMode при каждом сравнении - легче написать, легче понять, быстрее работает.
Abstraction вне форума Ответить с цитированием
Старый 14.05.2013, 15:52   #10
mixon-21
Я только Учусь
Форумчанин
 
Аватар для mixon-21
 
Регистрация: 06.03.2013
Сообщений: 193
По умолчанию

Не понял а что в самой функции должно быть пример можно плиз
mixon-21 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Двухмерный массивы fatorial Помощь студентам 15 23.11.2010 16:00
Одномерный масив , двухмерный массив Woxx Паскаль, Turbo Pascal, PascalABC.NET 0 10.09.2010 09:28
Двухмерный масив в С# timanok Помощь студентам 5 09.06.2010 16:54
Двухмерный массив Lev.F Помощь студентам 1 30.05.2010 21:31
Двухмерный масив alen666 Помощь студентам 3 07.12.2008 13:31