Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Исправить код (сортировка массива) 
:(
    Опции темы
Recev
Дата 14.5.2011, 13:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 76
Регистрация: 18.10.2010

Репутация: нет
Всего: нет



Есть шаблон класса массивов (с сортировкой методом выбора):
Код

#include <iostream.h>
#include <conio.h>

const int n = 3;
template <class T> class mass
{
public:
T mas [n][n];

void show()
{
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
cout << mas [i][j] << "   ";
cout << "\n";
}
}

mass()
{   char v;
cout << "Vruchnu: y - Yes, n - No: ";
cin >> v;
if (v =='n') {
    for (int i = 0; i < n; i++)
        for (int j = 0; j < n; j++)
        mas [i][j] = (T) (rand()%8+2);
}
else
{
    for (int i = 0; i < n; i++)
        for (int j = 0; j < n; j++)
        {
        cout << "mas[" << i << "][" << j << "]: ";
        cin >> mas [i][j];
        }
        cout << endl;
}
}

void variant ()
{
//поиск мин елемента
T min = mas [0][0];
int ns, i, j;
    for (i = 0; i < n; i++)
    for (j = 0; j < n; j++)
        if (min > mas [i][j])
        {
        min = mas [i][j];
        ns = j;
        }
cout << "Min element massiva = " << min;
cout << ", nahoditsy v stolbce pod #" << ns + 1 << ";" << endl << endl;

//сортировка:
T mas2 [n];// доп. массив
for(int i = 0; i < n; i++)
{
mas2[i] = mas[i][ns];
}
for (int i = 0; i < n; i++){
  cout << mas2[i] << "\n";
}
cout << endl << endl;
T tmp;
int moves = 0,srav = 0;
int indexmin = 0;
for (i = 0; i < n; i++)
{
indexmin = i;
for (int j = indexmin + 1; j < 5; j++, srav++)
if (mas2[j] < mas2[indexmin])
indexmin = j;
if(indexmin != i)
{

tmp = mas2[indexmin];
mas2[indexmin] = mas2[i];
mas2[i] = tmp;
moves++;
}
}
cout << endl << "Sravneny = " << srav
<< endl << "Perestanovok = " << moves << endl;
for (int i = 0; i < n; i++){
  cout << mas2[i] << "\n";
}
cout << endl << endl;
for(int i = 0; i < n; i++)
{
mas[i][ns] = mas2[i];
}
}

};

void main()
{
mass <int> m1;
cout << "-----Mass1-----\n";
m1.show();
cout << endl;
m1.variant();
m1.show();
cout << endl << "-----Mass2-----\n";
mass <float> m2;
m2.show();
cout << endl;
m2.variant();
m2.show();
cout << endl;
cout << "Press any key to EXIT...";
getch();
}

С int сортировка работает нормально, а с float какой-то боян получается. Помогите исправить.

Это сообщение отредактировал(а) Recev - 14.5.2011, 15:02
PM MAIL   Вверх
borisbn
Дата 14.5.2011, 14:17 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 21
Всего: 135



особо не разбирался, но первое, что не понравилось:
Цитата(Recev @  14.5.2011,  13:30 Найти цитируемый пост)

const int n = 3;        // <---- ТРИ
template <class T> class mass{
public:T mas [n][n];  // <---- ТРИ на ТРИ
...
T mas2 [n];  // <---- ТРИ


Цитата(Recev @  14.5.2011,  13:30 Найти цитируемый пост)

for (int j = indexmin + 1; j < 5; j++, srav++) // <---- ПЯТЬ ???
if (mas2[j] < mas2[indexmin])

откуда 5 ?

P.S. Отформатируй код нормально, а то он ооо-очень тяжело читается.


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
Recev
Дата 14.5.2011, 14:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 76
Регистрация: 18.10.2010

Репутация: нет
Всего: нет



Я как всегда - растяпа.. Не заметил той пятерки.
Спасибо за помощь!
PM MAIL   Вверх
Recev
Дата 14.5.2011, 15:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 76
Регистрация: 18.10.2010

Репутация: нет
Всего: нет



Вот, отформатировал код(люблю RAD C++ XE, Ctrl+D = Format Source smile ), может кому-то еще пригодится:
Код

#include <iostream.h>
#include <conio.h>

const int n = 3;

template<class T>
class mass {
public:
    T mas[n][n];

    void show() {
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++)
                cout << mas[i][j] << "   ";
            cout << "\n";
        }
    }

    mass() {
        char v;
        cout << "Vruchnu: y - Yes, n - No: ";
        cin >> v;
        if (v == 'n') {
            for (int i = 0; i < n; i++)
                for (int j = 0; j < n; j++)
                    mas[i][j] = (T)(rand() % 8 + 2);
        }
        else {
            for (int i = 0; i < n; i++)
                for (int j = 0; j < n; j++) {
                    cout << "mas[" << i << "][" << j << "]: ";
                    cin >> mas[i][j];
                }
            cout << endl;
        }
    }

    void variant() {
        // поиск мин елемента
        T min = mas[0][0];
        int ns, i, j;
        for (i = 0; i < n; i++)
            for (j = 0; j < n; j++)
                if (min > mas[i][j]) {
                    min = mas[i][j];
                    ns = j;
                }
        cout << "Min element massiva = " << min;
        cout << ", nahoditsy v stolbce pod #" << ns + 1 << ";" << endl << endl;

        // сортировка:
        T mas2[n]; // доп. массив
        for (int i = 0; i < n; i++) {
            mas2[i] = mas[i][ns];
        }
        for (int i = 0; i < n; i++) {
            cout << mas2[i] << "\n";
        }
        cout << endl << endl;
        T tmp;
        int moves = 0, srav = 0;
        int indexmin = 0;
        for (i = 0; i < n; i++) {
            indexmin = i;
            for (int j = indexmin + 1; j < n; j++, srav++)
                if (mas2[j] < mas2[indexmin])
                    indexmin = j;
            if (indexmin != i) {

                tmp = mas2[indexmin];
                mas2[indexmin] = mas2[i];
                mas2[i] = tmp;
                moves++;
            }
        }
        cout << endl << "Sravneny = " << srav << endl << "Perestanovok = " <<
            moves << endl;
        for (int i = 0; i < n; i++) {
            cout << mas2[i] << "\n";
        }
        cout << endl << endl;
        for (int i = 0; i < n; i++) {
            mas[i][ns] = mas2[i];
        }
    }

};

void main() {
    mass<int>m1;
    cout << "-----Mass1-----\n";
    m1.show();
    cout << endl;
    m1.variant();
    m1.show();
    cout << endl << "-----Mass2-----\n";
    mass<float>m2;
    m2.show();
    cout << endl;
    m2.variant();
    m2.show();
    cout << endl;
    cout << "Press any key to EXIT...";
    getch();
}

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0665 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.