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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
hally
0 / 0 / 0
Регистрация: 21.12.2011
Сообщений: 16
#1

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

25.12.2011, 22:35. Просмотров 774. Ответов 14
Метки нет (Все метки)

Поясните пожаль что и для чего в этой программе ? и что за что отвечает заранее спасибо

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;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.12.2011, 22:35
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как работает программа (C++):

Как работает программа - C++
Не могу понять, как работает эта программа (код нашёл на каком – то из сайтов): // crt_strtok.c // compile with: /W3 // In this...

Объясните как работает программа - C++
Данная программа делает подсчёт символов. Помогите разобраться как она работает. Сижу смотрю - и ступор просто #include &lt;stdio.h&gt; ...

Как работает данная программа - C++
изучаю тему преобразования типов (в данном случае тип Counter преобразуется в int) и вот набрала код из книги, но не понимаю как он...

Объясните как работает программа - C++
Если символ: не пробел, не новая строка, не табуляция. То in присваивается no(все слова). Дальше я вообще не понял как программа работает....

Объясните как работает программа - C++
Задание звучит так: &quot;Разработать функцию, в которую передаются в качестве аргументов массив типа float и его размер. Функция должна...

объясните как работает программа - C++
A в степени K, как работает эта программа, за что отвечают m и s ? #include &quot;stdafx.h&quot; #include &quot;iostream&quot; using namespace std; ...

14
OLLEGATOR
Linux-оид
116 / 65 / 3
Регистрация: 15.02.2011
Сообщений: 353
25.12.2011, 23:12 #2
вам необходим учебник...без него никак...
0
hally
0 / 0 / 0
Регистрация: 21.12.2011
Сообщений: 16
26.12.2011, 01:07  [ТС] #3
Ну объясните хоть немного ,что тут к чему?
0
hally
0 / 0 / 0
Регистрация: 21.12.2011
Сообщений: 16
10.01.2012, 19:33  [ТС] #4
Расскажите пожалуйста действия этой программы чему будет равно i,t,p,c при определенном массиве
0
DebieCooper
34 / 34 / 1
Регистрация: 12.10.2011
Сообщений: 296
10.01.2012, 19:36 #5
Что-то в этом коде не правильно)
0
hally
0 / 0 / 0
Регистрация: 21.12.2011
Сообщений: 16
10.01.2012, 21:13  [ТС] #6
Да все рабочие, вот посмотрите пожалуйста http://codepad.org/ftjDjLLs помогите разобраться как тут все проверяется ,откуда узнается больший порядок отрицательных чисел в массиве
Само задание тут надо задать массив и чтобы где больше чисел подряд отрицательных то их в конец
0
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= при каждой проверке числа в массиве
0
TamTam
18 / 18 / 1
Регистрация: 28.12.2011
Сообщений: 176
10.01.2012, 21:41 #8
для этого можете сделать вывод после каждого действия, в каждом цикле. Все увидете
0
Chelioss
180 / 180 / 4
Регистрация: 08.01.2011
Сообщений: 1,133
10.01.2012, 21:48 #9
Используйте трассировку. Все там будет показывать.
0
Whiteha
Программист
33 / 33 / 4
Регистрация: 08.07.2011
Сообщений: 190
Записей в блоге: 1
10.01.2012, 21:52 #10
В данном коде просто вводится целочисленный массив N=10 рамерности с клавиатуры и без изменений выводится.
*UPD: хотя не, передаём же указатель...
10-я строка вообще не понятно зачем.
0
hally
0 / 0 / 0
Регистрация: 21.12.2011
Сообщений: 16
10.01.2012, 22:00  [ТС] #11
Помогите сделать вывод после каждой строки или трассировку?
0
Chelioss
180 / 180 / 4
Регистрация: 08.01.2011
Сообщений: 1,133
10.01.2012, 22:16 #12
Цитата Сообщение от hally Посмотреть сообщение
Помогите сделать вывод после каждой строки или трассировку?
Вы в какой среде(компилятор) работаете?
0
hally
0 / 0 / 0
Регистрация: 21.12.2011
Сообщений: 16
10.01.2012, 22:27  [ТС] #13
Microsoft Visual C++ 2008
0
Chelioss
180 / 180 / 4
Регистрация: 08.01.2011
Сообщений: 1,133
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().
1
BRcr
4009 / 2298 / 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
Для продолжения нажмите любую клавишу . . .
1
10.01.2012, 23:26
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.01.2012, 23:26
Привет! Вот еще темы с ответами:

Объясните, как работает программа - C++
программа по трем введеным числам определяет и выводит на экран число имеющее в составе наибольше едениц. Пожалуйста, объясните подробно...

Объясните, как работает программа - C++
объясните как работает программа #include &lt;iostream&gt; #include &lt;conio.h&gt; using namespace std; bool Р(int n) { for (int i =...

Не понимаю, как работает программа - C++
// Programm F 61 // Преобразование Fixed-Float # include stdio.h; # include conio.h; # include &quot;BinaryInt.h&quot; # include...

Подскажите как работает программа - C++
Программа выводит для заданного массива все простые числа. Помогите понять как работают строки 14-20 и 24-32 Спасибо #include...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru