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

Как работает программа - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Модульное программирование. Подпрограммы. http://www.cyberforum.ru/cpp-beginners/thread417488.html
#include <stdio.h> #include <conio.h> #define n 7 int kol (не понимаю, что суда писать) { int l; if(h!=0) {t=0; while(h!=0){l=h%2; h=h/2; if(l==1)t=t+1;};}; return 1;}
C++ оператор if В небоскребе N этажей и всего один подъезд; на каждом этаже по 3 квартиры; лифт может останавливаться только на нечетных этажах. Человек садится в лифт и набирает номер нужной ему квартиры М. На... http://www.cyberforum.ru/cpp-beginners/thread417463.html
C++ Задача про водопровод
Город Восточный постоянно страдает от недостатка воды. Для устранения этой проблемы была построена новая водопроводная труба. Строительство трубы началось с обоих концов одновременно, и спустя...
с++ C++
Задание:Найти простые числа, такие что сумма их цифр,а также сумма цифр следующего за ним простого числа делилась на 7. Вывести число таких чисел.(от 7 до 32байт минимальный диапазон)На с++
C++ Нужно написать программу, печатающую все буквы латинского алфавита от Z до A http://www.cyberforum.ru/cpp-beginners/thread417432.html
Помогите пожалуйста! Нужно написать программу, печатающую все буквы латинского алфавита от Z до A.
C++ Тип char ошыбка в обьявлении исправте хто может Всем здрасте! :) А почему когда я пишу так при обьявлении типа char: char name={f,r,a,n,c,a,null}; Компилятор выдает ошыбку!Помогите пожалуста укажыте пожалуста ошыбку.По идее прога должна... подробнее

Показать сообщение отдельно
BRcr
4008 / 2297 / 155
Регистрация: 03.02.2011
Сообщений: 5,064
Записей в блоге: 10
10.01.2012, 23:26
Вы несколько неправильно скопипастили и изменили код. Вот верный вариант с объяснениями, надеюсь, вам будет полезно
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
using namespace std; // указываем используемое пространство имен; в частности, в пространстве std определены потоки cin, cout
 
// ---------------------------------------------------------------------------
 
void user_func( int *arr, int size ) { // функция принимает указатель на int, который можно использовать как указатель на начало массива
    int i, n, t = 0, p = 0, c = 0;
    for ( i = 0; i < size; i++ ) // цикл прохода по всем элементам массива, начиная с первого
    {
        for ( c = i; c < size && arr[c] < 0; c++ ); /* определяем, является ли в массиве число с индексом "с" отрицательным;
         если является, то увеличиваем "с" на единицу и проводим проверку снова
         если не является, то заканчиваем цикл
         индекс "с" в итоге равен либо текущему индексу "i",
         либо индексу первого положительного элемента после последовательности отрицательных элементов */
        if ( ( c - i ) > t ) // определяем длину последовательности отрицательных элементов как разность между индексами "c" и "i"
                       // если эта длина больше длины "t" предыдущей обнаруженной последовательности отрицательных, то
        {
            t = c - i; // выставляем новую, большую длину большей последовательности
            p = i;     // устанавливаем индекс "p" равным индексу первого элемента большей последовательности
        }
 
    }
    for ( n = t; n > 0; n-- ) // цикл прохода по количеству элементов, равному длине большей последовательности "t"
    {
        c = arr[p];                            // сохраняем первый элемент последовательности в переменной "с"
        for ( int k = p; k < size - 1; k++ ) { // цикл прохода по массиву начиная с индекса "p" и заканчивая предпоследним элементом
            arr[k] = arr[k + 1];               // каждому элементу, начиная с элемента под индексом "р" и заканчивая предпоследним, присваиваем значение его соседа с большим на единицу индексом(сосед "справа")
        }
        arr[size - 1] = c; // последнему элементу массива присваиваем ранее сохраненное значение первого элемента последовательности отрицательных
    }
    /* таким образом мы один за другим перемещаем элементы в отрицательной последовательности в конец массива */
}
 
int _tmain( int argc, _TCHAR *argv[] ) // не обращайте внимание, просто у меня другая версия C++ Builder
{
    const int N = 10; // размер массива; спецификатор const обязателен
    int arr[N] = {0}; // заполнение массива нулями
 
    cout << "Vvedite massiv:\n";
    for ( int l = 0; l < N; l++ ) { // цикл ввода значений массива
        cin >> arr[l];
    }
    user_func( arr, N ); // сортировка; arr в данном случае является указателем на первый элемент массива
 
    cout << endl;                   // конец строки
    for ( int j = 0; j < N; j++ ) { // цикл вывода отсортированного массива
        cout << arr[j] << "  ";
    }
    cout << endl;
 
    system( "pause" ); // пауза выполнения кода; в данном случае эквивалентно функции cin.get() - так что вместе их использовать не нужно, только что-то одно
    return 0;
}
Добавлено через 45 минут
Трассировкой-таки советую научиться пользоваться, не всегда ведь охота будет писать кучу ненужного кода, правда?
Но иногда, чтоб понять сложный алгоритм, бывает полезно видеть всю картину... да и забавно это, если честно.

Вот код:
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
void user_func( int *arr, int size ) {
    int i, n, t = 0, p = 0, c = 0;
    cout << "cycle 1:" << endl;
    for ( i = 0; i < size; i++ )
    {
        cout << "i == " << i << endl;
        for ( c = i; c < size && arr[c] < 0; c++ );
        cout << "\tc == " << c << endl;
        if ( ( c - i ) > t )
        {
            t = c - i;
            p = i;
        }
        cout << "\tt == " << t << endl;
        cout << "\tp == " << p << endl;
 
    }
    cout << "cycle 2:" << endl;
    for ( n = t; n > 0; n-- )
    {
        cout << "n == " << n << endl;
        c = arr[p];
        cout << "\tc == arr[p] == " << c << endl;
        cout << "\tcycle 3:" << endl;
        for ( int k = p; k < size - 1; k++ ) {
            cout << "\t\tarr[" << k << "] == " << arr[k];
            arr[k] = arr[k + 1];
            cout << "\tarr[" << k << "] == " << arr[k] << endl;
        }
        cout << "\t\tarr[" << size - 1 << "] == " << arr[size - 1];
        arr[size - 1] = c;
        cout << "\tarr[" << size - 1 << "] == " << arr[size - 1] << endl;
    }
}
Вот вывод:
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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
Vvedite massiv:
1
-2
-3
4
-5
-6
-7
-8
9
10
cycle 1:
i == 0
        c == 0
        t == 0
        p == 0
i == 1
        c == 3
        t == 2
        p == 1
i == 2
        c == 3
        t == 2
        p == 1
i == 3
        c == 3
        t == 2
        p == 1
i == 4
        c == 8
        t == 4
        p == 4
i == 5
        c == 8
        t == 4
        p == 4
i == 6
        c == 8
        t == 4
        p == 4
i == 7
        c == 8
        t == 4
        p == 4
i == 8
        c == 8
        t == 4
        p == 4
i == 9
        c == 9
        t == 4
        p == 4
cycle 2:
n == 4
        c == arr[p] == -5
        cycle 3:
                arr[4] == -5    arr[4] == -6
                arr[5] == -6    arr[5] == -7
                arr[6] == -7    arr[6] == -8
                arr[7] == -8    arr[7] == 9
                arr[8] == 9     arr[8] == 10
                arr[9] == 10    arr[9] == -5
n == 3
        c == arr[p] == -6
        cycle 3:
                arr[4] == -6    arr[4] == -7
                arr[5] == -7    arr[5] == -8
                arr[6] == -8    arr[6] == 9
                arr[7] == 9     arr[7] == 10
                arr[8] == 10    arr[8] == -5
                arr[9] == -5    arr[9] == -6
n == 2
        c == arr[p] == -7
        cycle 3:
                arr[4] == -7    arr[4] == -8
                arr[5] == -8    arr[5] == 9
                arr[6] == 9     arr[6] == 10
                arr[7] == 10    arr[7] == -5
                arr[8] == -5    arr[8] == -6
                arr[9] == -6    arr[9] == -7
n == 1
        c == arr[p] == -8
        cycle 3:
                arr[4] == -8    arr[4] == 9
                arr[5] == 9     arr[5] == 10
                arr[6] == 10    arr[6] == -5
                arr[7] == -5    arr[7] == -6
                arr[8] == -6    arr[8] == -7
                arr[9] == -7    arr[9] == -8
 
1  -2  -3  4  9  10  -5  -6  -7  -8
Для продолжения нажмите любую клавишу . . .
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru