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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сортировка массива 
:(
    Опции темы
Lotles
Дата 6.4.2010, 06:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Ошибок не выдает, но работает неправильно. Подскажите где ошибка

Код

#include "stdafx.h"
#include <conio.h>
#include <time.h>
#include <math.h>
using namespace std;
int main(){
    srand(time(0));
int a[10];
int i,temp;
for (i=0;i<10;i++)
    a[i]=rand() % 10;
    int k=0;
    while (k<10){
        for (i=k;i<10;i++){
            if (a[i]<a[k])
            {
                temp=a[k];
                a[k]=a[i];
                a[i]=temp;
            }
            cout << a[k];
            k++;
        }
    }
    return 0;
}

PM MAIL Skype   Вверх
Atiskara
Дата 6.4.2010, 07:34 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



алгоритм смущает. на каждом шаге цикла for (i=k;i<10;i++){} k и i инкрементируются одинаково, и принимая во внимание, что на входе в оба цикла обе переменные равны нулю, происходит сравнение одного и того же значения массива. ну и после прогона внутриннего массива, внешний while заканчивается на первом круге, потому как k уже оказывается = 10. 

Это сообщение отредактировал(а) Atiskara - 6.4.2010, 07:35
PM MAIL   Вверх
bsa
Дата 6.4.2010, 17:08 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

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



скажу другими словами. Тут есть типичная ошибка начинающего программиста (все это проходили) - использование одной и той же переменной счетчика цикла в двух вложенных циклах. Это раз. А два, это то, что ты инкрементируешь k внутри цикла for(), хотя по идее, нужно это делать скорее внутри while().
PM   Вверх
Atiskara
Дата 7.4.2010, 09:01 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(bsa @ 6.4.2010,  17:08)
использование одной и той же переменной счетчика цикла в двух вложенных циклах. Это раз.

эти 2 цикла не вложены ;) обрати внимание на отсутствие многострочного блока в первом цикле)).
PM MAIL   Вверх
toxx
Дата 7.4.2010, 09:25 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Atiskara @ 7.4.2010,  09:01)
Цитата(bsa @ 6.4.2010,  17:08)
использование одной и той же переменной счетчика цикла в двух вложенных циклах. Это раз.

эти 2 цикла не вложены ;) обрати внимание на отсутствие многострочного блока в первом цикле)).

Ему нужно обратить внимание на то, что  k инкремируется не там=) 

думаю bsa критиковать не стоит=) 
PM MAIL   Вверх
xvr
Дата 7.4.2010, 10:35 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

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



Цитата(Atiskara @ 7.4.2010,  09:01)
Цитата(bsa @ 6.4.2010,  17:08)
использование одной и той же переменной счетчика цикла в двух вложенных циклах. Это раз.

эти 2 цикла не вложены ;) 

Вложенны
Цитата

обрати внимание на отсутствие многострочного блока в первом цикле)).
но не эти, а другие 2  smile (строки 13 и 14)

Это сообщение отредактировал(а) xvr - 7.4.2010, 10:35
PM MAIL   Вверх
stat007
Дата 7.4.2010, 12:24 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: -2
Всего: -4



Lotles, Изучай STL!!!
Код

#include <iostream>
#include <algorithm>
#include <conio.h>
#include <time.h>
#include <math.h>
using namespace std;
int main(){
    srand(time(0));
int a[10];
int i,temp;
for (i=0;i<10;i++)
    a[i]=rand() % 10;
    int k=0;
    while (k<10){
        for (i=k;i<10;i++)
        {
            sort(a,a+10);
            cout << a[k]<<" ";
            k++;
        }
    }
    cout<<endl;
    system("pause");
    return 0;
}

PM MAIL   Вверх
Chiren
Дата 7.4.2010, 14:33 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Так будет работать правильно:

Код

#include "stdafx.h"
#include <conio.h>
#include <time.h>
#include <math.h>
#include <iostream>
using namespace std;

int main()
{
    srand(time(0));
    int a[10];
    int i, temp;
    for (i = 0;i < 10; ++i)
        a[i] = rand() % 10;
    int k;
    for (k = 0; k < 10; ++k)
    {
        for (i=k; i < 10; ++i)
        {
            if (a[i] < a[k])
            {
                temp = a[k];
                a[k] = a[i];
                a[i] = temp;
            }
        }
        cout << a[k] << "  ";
    }
    return 0;
}


PM MAIL   Вверх
bsa
Дата 7.4.2010, 14:35 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

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



Цитата(Atiskara @  7.4.2010,  09:01 Найти цитируемый пост)
эти 2 цикла не вложены ;)
точно. ох уж эти новички, так отформатируют код...

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

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

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

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

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


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

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


 




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


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

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