Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
0 / 0 / 0
Регистрация: 21.12.2011
Сообщений: 16
1

Как работает программа

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

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

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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.12.2011, 22:35
Ответы с готовыми решениями:

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

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

Объясните, как работает программа
Поясните пожалуйста чайнику! Объясните плиз как работает программа, то есть что значит &quot;**&quot; и...

Объясните, как работает программа
программа по трем введеным числам определяет и выводит на экран число имеющее в составе наибольше...

14
Linux-оид
120 / 69 / 9
Регистрация: 15.02.2011
Сообщений: 374
25.12.2011, 23:12 2
вам необходим учебник...без него никак...
0
0 / 0 / 0
Регистрация: 21.12.2011
Сообщений: 16
26.12.2011, 01:07  [ТС] 3
Ну объясните хоть немного ,что тут к чему?
0
0 / 0 / 0
Регистрация: 21.12.2011
Сообщений: 16
10.01.2012, 19:33  [ТС] 4
Расскажите пожалуйста действия этой программы чему будет равно i,t,p,c при определенном массиве
0
36 / 36 / 1
Регистрация: 12.10.2011
Сообщений: 333
10.01.2012, 19:36 5
Что-то в этом коде не правильно)
0
0 / 0 / 0
Регистрация: 21.12.2011
Сообщений: 16
10.01.2012, 21:13  [ТС] 6
Да все рабочие, вот посмотрите пожалуйста http://codepad.org/ftjDjLLs помогите разобраться как тут все проверяется ,откуда узнается больший порядок отрицательных чисел в массиве
Само задание тут надо задать массив и чтобы где больше чисел подряд отрицательных то их в конец
0
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
18 / 18 / 2
Регистрация: 28.12.2011
Сообщений: 176
10.01.2012, 21:41 8
для этого можете сделать вывод после каждого действия, в каждом цикле. Все увидете
0
186 / 186 / 21
Регистрация: 08.01.2011
Сообщений: 1,139
10.01.2012, 21:48 9
Используйте трассировку. Все там будет показывать.
0
Программист
33 / 33 / 8
Регистрация: 08.07.2011
Сообщений: 190
Записей в блоге: 1
10.01.2012, 21:52 10
В данном коде просто вводится целочисленный массив N=10 рамерности с клавиатуры и без изменений выводится.
*UPD: хотя не, передаём же указатель...
10-я строка вообще не понятно зачем.
0
0 / 0 / 0
Регистрация: 21.12.2011
Сообщений: 16
10.01.2012, 22:00  [ТС] 11
Помогите сделать вывод после каждой строки или трассировку?
0
186 / 186 / 21
Регистрация: 08.01.2011
Сообщений: 1,139
10.01.2012, 22:16 12
Цитата Сообщение от hally Посмотреть сообщение
Помогите сделать вывод после каждой строки или трассировку?
Вы в какой среде(компилятор) работаете?
0
0 / 0 / 0
Регистрация: 21.12.2011
Сообщений: 16
10.01.2012, 22:27  [ТС] 13
Microsoft Visual C++ 2008
0
186 / 186 / 21
Регистрация: 08.01.2011
Сообщений: 1,139
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
4043 / 2332 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 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
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.01.2012, 23:26
Помогаю со студенческими работами здесь

Подскажите как работает программа
Программа выводит для заданного массива все простые числа. Помогите понять как работают строки...

Объясните как работает программа
Данная программа делает подсчёт символов. Помогите разобраться как она работает. Сижу смотрю - и...

Объясните как работает программа
Цель задачи была: Возведение X в 59 степень за самое малое количество шагов. 1. Ввод...

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


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru