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

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

Восстановить пароль Регистрация
 
hally
 Аватар для hally
0 / 0 / 0
Регистрация: 21.12.2011
Сообщений: 16
25.12.2011, 22:35     Как работает программа #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
#include "stdafx.h"
#include <iostream>
using namespace std;
 
void user_func(int arr[10], int size) {
int i,n,t = 0,p = 0,c = 0;
for(i = 0; i < size; i++) 
{
    for(c = i; c < size && arr[c] < 0; c++); 
    if((c - i) > t) 
    {
       t = c - i;
       p = i;
    }
    for(n = t; n > 0; n--) 
    {
        c = arr[p];
        for(int k = p; k < size - 1; k++)
            arr[k] = arr[k + 1];
        arr[size - 1] = c;
    }
}
int  main() {
const int N = 10;
int arr[N]  = {0};
         cout << "Vvedite massiv:\n";
for(int l = 0; l < N; l++) 
     cin >> arr[l];
cin.ignore();
user_func(arr, N);
cout << "";
for(int j = 0; j < N; j++)
    cout << arr[j] << "  ";
cout << endl;
cin.get();
system("PAUSE");
return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.12.2011, 22:35     Как работает программа
Посмотрите здесь:

Как работает программа C++
Как работает данная программа C++
Объясните, как работает программа C++
Объясните как работает программа C++
Подскажите как работает программа C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
OLLEGATOR
Linux-оид
 Аватар для OLLEGATOR
115 / 64 / 3
Регистрация: 15.02.2011
Сообщений: 353
25.12.2011, 23:12     Как работает программа #2
вам необходим учебник...без него никак...
hally
 Аватар для hally
0 / 0 / 0
Регистрация: 21.12.2011
Сообщений: 16
26.12.2011, 01:07  [ТС]     Как работает программа #3
Ну объясните хоть немного ,что тут к чему?
hally
 Аватар для hally
0 / 0 / 0
Регистрация: 21.12.2011
Сообщений: 16
10.01.2012, 19:33  [ТС]     Как работает программа #4
Расскажите пожалуйста действия этой программы чему будет равно i,t,p,c при определенном массиве
DebieCooper
 Аватар для DebieCooper
34 / 34 / 1
Регистрация: 12.10.2011
Сообщений: 285
10.01.2012, 19:36     Как работает программа #5
Что-то в этом коде не правильно)
hally
 Аватар для hally
0 / 0 / 0
Регистрация: 21.12.2011
Сообщений: 16
10.01.2012, 21:13  [ТС]     Как работает программа #6
Да все рабочие, вот посмотрите пожалуйста http://codepad.org/ftjDjLLs помогите разобраться как тут все проверяется ,откуда узнается больший порядок отрицательных чисел в массиве
Само задание тут надо задать массив и чтобы где больше чисел подряд отрицательных то их в конец
hally
 Аватар для hally
0 / 0 / 0
Регистрация: 21.12.2011
Сообщений: 16
10.01.2012, 21:40  [ТС]     Как работает программа #7
а можно вот чтобы ты расписал, по действиям например дан массив 1 2 -3 4 -5 -6 -7 8 -9 10
И сделать чему будет равно i= ,t= ,c= ,p= при каждой проверке числа в массиве
TamTam
18 / 18 / 1
Регистрация: 28.12.2011
Сообщений: 176
10.01.2012, 21:41     Как работает программа #8
для этого можете сделать вывод после каждого действия, в каждом цикле. Все увидете
Chelioss
179 / 179 / 4
Регистрация: 08.01.2011
Сообщений: 1,131
10.01.2012, 21:48     Как работает программа #9
Используйте трассировку. Все там будет показывать.
Whiteha
Программист
33 / 33 / 4
Регистрация: 08.07.2011
Сообщений: 190
Записей в блоге: 1
10.01.2012, 21:52     Как работает программа #10
В данном коде просто вводится целочисленный массив N=10 рамерности с клавиатуры и без изменений выводится.
*UPD: хотя не, передаём же указатель...
10-я строка вообще не понятно зачем.
hally
 Аватар для hally
0 / 0 / 0
Регистрация: 21.12.2011
Сообщений: 16
10.01.2012, 22:00  [ТС]     Как работает программа #11
Помогите сделать вывод после каждой строки или трассировку?
Chelioss
179 / 179 / 4
Регистрация: 08.01.2011
Сообщений: 1,131
10.01.2012, 22:16     Как работает программа #12
Цитата Сообщение от hally Посмотреть сообщение
Помогите сделать вывод после каждой строки или трассировку?
Вы в какой среде(компилятор) работаете?
hally
 Аватар для hally
0 / 0 / 0
Регистрация: 21.12.2011
Сообщений: 16
10.01.2012, 22:27  [ТС]     Как работает программа #13
Microsoft Visual C++ 2008
Chelioss
179 / 179 / 4
Регистрация: 08.01.2011
Сообщений: 1,131
10.01.2012, 22:39     Как работает программа #14
Тогда запустите программу в Microsoft Visual C++ 2008 не через F5( или зеленая кнопка play ), а с помощью F10. Курсор(желтая стрелка с лева от кода ) остановится на первой строке кода функции main. Это значит, что следующий шаг это выполнение этой строки. Нажмите еще раз F10 и тогда вы перейдете к следующей инструкции, а предыдущая инструкция исполнится. И т.д.
После выполнения очередной инструкции вы можете посмотреть у какой переменной какое значение. Для этого наведите мышкой на нужную переменную.
Т.е. прошли очередную инструкцию, потом смотрите какое значение приняла переменная, которая вычислялась в этой инструкции.
Если вы остановились на инструкции, где вызывается функция user_fun, и нажмете F10, то эта инструкция исполнится, т.е. функция сработает. А как попасть в саму функцию? Нажмите не F10, а F11. Тогда вы перейдете во внутрь функции. F11 это заход в функцию, а если эта инструкции не содержит функции, то инструкция просто выполняется. F10 это исполнение инструкции без захода в функцию. Помните, что F11 заходит во все функции, которые встретит в инструкции. Допустим, если на инструкции в вашем коде
C++
1
cin.ignore();
нажать F11, то вы перейдет внутрь функции ignore().
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.01.2012, 23:26     Как работает программа
Еще ссылки по теме:

C++ Объясните, как работает программа
Объясните как работает программа C++
C++ Arrays, как работает данная программа?

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

Или воспользуйтесь поиском по форуму:
BRcr
 Аватар для BRcr
4003 / 2292 / 155
Регистрация: 03.02.2011
Сообщений: 5,064
Записей в блоге: 10
10.01.2012, 23:26     Как работает программа #15
Вы несколько неправильно скопипастили и изменили код. Вот верный вариант с объяснениями, надеюсь, вам будет полезно
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
Для продолжения нажмите любую клавишу . . .
Yandex
Объявления
10.01.2012, 23:26     Как работает программа
Ответ Создать тему
Опции темы

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