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

Прокомментируйте код - C++

Восстановить пароль Регистрация
 
ZayacV
2 / 2 / 2
Регистрация: 27.10.2013
Сообщений: 72
16.05.2014, 08:21     Прокомментируйте код #1
здравствуйте. помогите пожалуйста, нужны комментарии в двух функциях) код не я писал поэтому затрудняюсь и мне нужно понять каждую строчку, так как я начинающий программист) за раннее спасибо

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
//произведение элементов массива, расположенных между первым и вторым нулевыми элементами.
int multy(int arr[], int n)
{
    int mult = 1, null_1 = 0, null_2 = 0;
    int i;
    for(i=0; arr[i] != 0; i++) 
    {
        if(i > n)
        {
            cout << "Нулевых элементов нет!" << endl;
            //return;
            break;
        }
    }
    if(arr[i] == 0)
        null_1 = i;
    int p;
    for(p=null_1+1; arr[p]!=0; p++)
    {
        if(p > n)
        {
            cout << "Второго нулевого элемента нет!" << endl;
            //return;
            break;
        }
    }
    if(arr[p] == 0)
        null_2 = p;
    if((null_1 == i) && (null_2 == i+1))
    {
        cout << "Элементов между нулевыми элементами нет!" << endl;
        //return;
    }
    null_1++;
    while(null_1 < null_2)
    {
        mult *= arr[null_1]; 
        null_1++;
    }
    return mult;
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//Преобразовать массив таким образом, чтобы в первой его половине располагались элементы, стоявшие в нечетных позициях, а во второй половине — элементы, стоявшие в четных позициях.
void sort(int arr[], int n)
{
    int temp;
    for (int i=0; i<n-1; i+=2)
    {
        temp = arr[i];
    arr[i] = arr[i+1];
    arr[i+1] = temp;
    }
    for (int k=1; k<=n/2; ++k)
    {
    for (int c=0; c<((n%2==1 && k==n/2)? 2:1); ++c)
    {
            temp = arr[k];
        for (int i=k+1; i<n; ++i) 
            arr[i-1] = arr[i];
        arr[n-1] = temp;
    }
    }
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.05.2014, 08:21     Прокомментируйте код
Посмотрите здесь:

C++ Прокомментируйте код
прокомментируйте пожалуйста код C++
C++ Прокомментируйте пожалуйста код
Прокомментируйте код. C++
прокомментируйте код пожалуйста C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ilot
Модератор
Эксперт С++
1767 / 1142 / 223
Регистрация: 16.05.2013
Сообщений: 3,020
Записей в блоге: 5
Завершенные тесты: 1
16.05.2014, 09:25     Прокомментируйте код #2
Я позволил себе несколько переписать ваш код так как он немного слабоват. Хотя свой вариант я не тестил ошибок быть не должно:
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//произведение элементов массива, расположенных между первым и вторым нулевыми элементами.
int multy(int arr[], int n)
{
    int mult = 1, null_1 = -1, null_2 = -1; //Задаем начальные значения для произведения и двух индексов выражающих диапазон
    //запускаем цикл по всем элементам массива
    for(int i = 0; i < n; ++i) {
        //Если нашли нулевой элемент и первый индекс не установлен устанавливаем первый индекс
        if ((arr[i] == 0) && (null_1 == -1)) 
            null_1 = i;
        //иначе если нашли нулевой элемент(первый индекс установлен) устанавливаем второй индекс и прекращаем поиск по массиву
        else if(arr[i] == 0) {
            null_2 = i;
            break;
        }
    }
    //Проверяем установлены ли оба индекса и не пустой ли найденный интервал
    if ((null_1 == -1) || (null_2 == -1) || (null_1 + 1 == null_2))
        std::cout << "Отсутствует требуемый диапазон или диапазон пуст!" << std::endl;
    //Ищем произведение элементов в диапазоне
    for(int i = null_1 + 1; i < null_2; ++i)
        mult *= arr[i];
    return mult;
}

Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//Преобразовать массив таким образом, чтобы в первой его половине располагались элементы, стоявшие в нечетных позициях, а во второй половине — элементы, стоявшие в четных позициях.
void sort(int arr[], int n)
{
    //Переменная для хранения временных величин
    int temp;
    //Переменная необходимая для выбора последнего элемента. Он должен быть нечетным
    int index = (n % 2)? n - 2: n - 1;
    //Запускаем цикл по половине массива
    for (int i = 0; i < n / 2; i += 2) {
        //Меняем местами элементы с индексами i и index - i
        temp = arr[index - i];
        arr[index - i] = arr[i];
        arr[i] = temp;
    }    
}
ZayacV
2 / 2 / 2
Регистрация: 27.10.2013
Сообщений: 72
16.05.2014, 15:20  [ТС]     Прокомментируйте код #3
спасибо что объяснили) исправленный код я пока не запускал, но думаю что все сработает) главное что все понял

Добавлено через 1 час 8 минут
мда, не так-то все просто оказалось))) сортировка происходит неправильно (((
Цитата Сообщение от Ilot Посмотреть сообщение
//Преобразовать массив таким образом, чтобы в первой его половине располагались элементы, стоявшие в нечетных позициях, а во второй половине — элементы, стоявшие в четных позициях.
void sort(int arr[], int n)
{
* * //Переменная для хранения временных величин
* * int temp;
* * //Переменная необходимая для выбора последнего элемента. Он должен быть нечетным
* * int index = (n % 2)? n - 2: n - 1;
* * //Запускаем цикл по половине массива
* * for (int i = 0; i < n / 2; i += 2) {
* * * * //Меняем местами элементы с индексами i и index - i
* * * * temp = arr[index - i];
* * * * arr[index - i] = arr[i];
* * * * arr[i] = temp;
* * } * *
}
Ilot
Модератор
Эксперт С++
1767 / 1142 / 223
Регистрация: 16.05.2013
Сообщений: 3,020
Записей в блоге: 5
Завершенные тесты: 1
16.05.2014, 15:25     Прокомментируйте код #4
Уточните, что значит не правильно.
ZayacV
2 / 2 / 2
Регистрация: 27.10.2013
Сообщений: 72
16.05.2014, 15:45  [ТС]     Прокомментируйте код #5
сначала ведь располагаются те элементы которые стоят в нечетных позициях, а затем элементы которые стоят в четных позициях.
тоесть:

исходный массив: 2 3 0 4 -3 4 0 5 0 8
sort массив: 3 4 4 5 8 2 0 -3 0 0

вот так должно было отсортироваться!


а на скрине видно, что массив преобразовался неправильно
Миниатюры
Прокомментируйте код  
Ilot
Модератор
Эксперт С++
1767 / 1142 / 223
Регистрация: 16.05.2013
Сообщений: 3,020
Записей в блоге: 5
Завершенные тесты: 1
16.05.2014, 16:30     Прокомментируйте код #6
В с++ нумерация индексов начинается с 0!
Но если вас это не устраивает замените строчку:
C++
1
int index = (n % 2)? n - 2: n - 1;
на
C++
1
int index = (n % 2)? n - 1: n - 2;
Yandex
Объявления
16.05.2014, 16:30     Прокомментируйте код
Ответ Создать тему
Опции темы

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