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

Комментарии к функции - C++

Восстановить пароль Регистрация
 
Norfolkrussia
0 / 0 / 0
Регистрация: 10.11.2012
Сообщений: 14
02.04.2013, 15:53     Комментарии к функции #1
Программа меняет в списке элемент на ближайший следующий за ним, который больше его. Если такого элемента нет то заменяет нулем.
Не могу разобраться, какие действия выполняются в функции maxNeighbour.
Помогите прокомментировать, пожалуйста.
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
#include "stdafx.h" 
#include "conio.h" 
#include <iostream> 
 
using namespace std; 
 
void maxNeighbour( int *table, int size ) 
{ 
 int *nоninit = new int[size*2], q = 0; 
 
 for ( int i = 0; i < size; ++i ) 
 { 
 while ( q > 0 ) 
 { 
 if ( table <= noninit[q-1] ) break; 
 table[noninit[q-2]] = table; 
 q -= 2; 
 } 
 q += 2; 
 noninit[q-1] = table; 
 noninit[q-2] = i; 
 } 
 
 while ( q > 0 ) 
 { 
 table[noninit[q-2]] = 0; 
 q -= 2; 
 } 
 
 delete[] noninit; 
} 
 
void main( ) 
{ 
 int table[] = { 1, 3, 2, 5, 3, 4 }; 
 int tsize = 6; 
 int k; 
 for ( k = 0; k < tsize; ++k ) cout << table[k] << " "; 
 cout << endl; 
 
 maxNeighbour( table, tsize ); 
 
 for ( k = 0; k < tsize; ++k ) cout << table[k] << " "; 
 cout << endl; 
 getch(); 
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ijonhson
 Аватар для ijonhson
47 / 47 / 1
Регистрация: 09.03.2011
Сообщений: 584
02.04.2013, 17:04     Комментарии к функции #2
а код рабочий?
Norfolkrussia
0 / 0 / 0
Регистрация: 10.11.2012
Сообщений: 14
02.04.2013, 17:11  [ТС]     Комментарии к функции #3
Да, полностью работает.
ijonhson
 Аватар для ijonhson
47 / 47 / 1
Регистрация: 09.03.2011
Сообщений: 584
02.04.2013, 17:17     Комментарии к функции #4
может чего-то дописать забыл?
в этой строке:
C++
1
if ( table <= noninit[q-1] ) break;
Norfolkrussia
0 / 0 / 0
Регистрация: 10.11.2012
Сообщений: 14
02.04.2013, 17:25  [ТС]     Комментарии к функции #5
Да если б код мой был. Мне надо помочь разобраться в нем. Не поможешь прокомментировать как там что работает в этой функции, ну и дополнить, если что-то не так. Хотя программу тестил работает как надо.
ijonhson
 Аватар для ijonhson
47 / 47 / 1
Регистрация: 09.03.2011
Сообщений: 584
02.04.2013, 17:56     Комментарии к функции #6
не может она работать нельзя сравнивать указатель на массив с целым числом,в зависимости от того что должно быть тут table[?] она может работать по разному

Добавлено через 25 минут
то что код переписан с тетрадки или учебника понятно по встречающимся русским символам в коде,перепишите всё символ в символ и постараемся помочь.
Norfolkrussia
0 / 0 / 0
Регистрация: 10.11.2012
Сообщений: 14
02.04.2013, 18:39  [ТС]     Комментарии к функции #7
http://forum2007.algolist.ru/showfla...530/Main/10867
Вот отсюда взял код.
ijonhson
 Аватар для ijonhson
47 / 47 / 1
Регистрация: 09.03.2011
Сообщений: 584
02.04.2013, 20:56     Комментарии к функции #8
никогда такого не делал взгляни подойдёт?
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
49
50
51
52
53
54
55
56
57
58
59
60
#include <iostream>
 
using namespace std;
 
void maxNeighbour( int *table, int size )//в функцию передайтся 
// массив int,переменная size(если size не является размером массива функция не
//будет выполняться корректно)
{
    int *noninit = new int[size*2], q = 0;/*выделяем память под
    массив типа int(так как в массив записывается значения элементов
     и их индекс размер массива умножаем на 2),инициализируем переменную q
    (используется как счётчик)*/
 
    for ( int i = 0; i < size; ++i )/*проход по элементам массива table
    поиск и замена элементов */
    {
        while ( q > 0 )/*при первой итерации цикла for уcловие=false
    соответственно цикл пропускается и выполняется код следующий за циклом
    при последующих итерациях выполняется следующий код*/
        {
            if ( table[i] <= noninit[q-1] ) break;/*выходим из цикла 
            если table[i] больше table[noninit[q-2]]*/ 
            table[noninit[q-2]] = table[i];
            /*если меньше заменяем все элементы до table[i] 
            которые меньше table[i] на значение table[i]*/
            q -= 2;//переходим к предыдущему элементу 
           
        }
        q += 2;
        noninit[q-1] = table[i];//инициализируется элемент q-1 массива
        //noninit элементом i массива table
        noninit[q-2] = i; //записываем в массив noninit индекс элемента  
    }
 
    while ( q > 0 )/*если после циклов остались элементы не соответствующие 
    условию то их индексы записаны в массиве noninit при это индекс<=q,
    индекс-четное число*/
    {
        table[noninit[q-2]] = 0;
        q -= 2;
    }
 
    delete[] noninit;
}
 
int main( )
{
    int table[] = { 1, 3, 2, 5, 3, 4 };
    const int tsize = sizeof( table ) / sizeof( table[0] );
 
    int k;
    for ( k = 0; k < tsize; ++k ) cout << table[k] << " ";
    cout << endl;
 
    maxNeighbour( table, tsize );
 
    for ( k = 0; k < tsize; ++k ) cout << table[k] << " ";
    cout << endl;
    system("pause");
}
Norfolkrussia
0 / 0 / 0
Регистрация: 10.11.2012
Сообщений: 14
02.04.2013, 21:37  [ТС]     Комментарии к функции #9
ijonhson, Спасибо большое. Теперь все стало куда более понятно
ijonhson
 Аватар для ijonhson
47 / 47 / 1
Регистрация: 09.03.2011
Сообщений: 584
02.04.2013, 21:48     Комментарии к функции #10
и зачем было вручную переписывать весь код
1)дольше
2)наделал ошибок
почему не выделить текст и ctrl+c ctrl+v или правой кнопкой мыши->копировать ->вставить
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.04.2013, 21:53     Комментарии к функции
Еще ссылки по теме:

Комментарии C++
Удалить из строки комментарии вида '/* . */". Игнорировать вложенные комментарии C++
Комментарии C++

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

Или воспользуйтесь поиском по форуму:
Norfolkrussia
0 / 0 / 0
Регистрация: 10.11.2012
Сообщений: 14
02.04.2013, 21:53  [ТС]     Комментарии к функции #11
Да я просто пока тестил, немного поменял его под свои нужды. Потом лень было снова ссылку на исходник искать и попытался придать первозданный вид коду, видимо удалил немного лишнего.
Yandex
Объявления
02.04.2013, 21:53     Комментарии к функции
Ответ Создать тему
Опции темы

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