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

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

25.12.2011, 22:35. Показов 1400. Ответов 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
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
25.12.2011, 22:35
Ответы с готовыми решениями:

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

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

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

14
Linux-оид
 Аватар для OLLEGATOR
120 / 69 / 9
Регистрация: 15.02.2011
Сообщений: 374
25.12.2011, 23:12
вам необходим учебник...без него никак...
0
 Аватар для hally
0 / 0 / 0
Регистрация: 21.12.2011
Сообщений: 16
26.12.2011, 01:07  [ТС]
Ну объясните хоть немного ,что тут к чему?
0
 Аватар для hally
0 / 0 / 0
Регистрация: 21.12.2011
Сообщений: 16
10.01.2012, 19:33  [ТС]
Расскажите пожалуйста действия этой программы чему будет равно i,t,p,c при определенном массиве
0
 Аватар для DebieCooper
36 / 36 / 1
Регистрация: 12.10.2011
Сообщений: 343
10.01.2012, 19:36
Что-то в этом коде не правильно)
0
 Аватар для hally
0 / 0 / 0
Регистрация: 21.12.2011
Сообщений: 16
10.01.2012, 21:13  [ТС]
Да все рабочие, вот посмотрите пожалуйста http://codepad.org/ftjDjLLs помогите разобраться как тут все проверяется ,откуда узнается больший порядок отрицательных чисел в массиве
Само задание тут надо задать массив и чтобы где больше чисел подряд отрицательных то их в конец
0
 Аватар для hally
0 / 0 / 0
Регистрация: 21.12.2011
Сообщений: 16
10.01.2012, 21:40  [ТС]
а можно вот чтобы ты расписал, по действиям например дан массив 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
для этого можете сделать вывод после каждого действия, в каждом цикле. Все увидете
0
186 / 186 / 21
Регистрация: 08.01.2011
Сообщений: 1,139
10.01.2012, 21:48
Используйте трассировку. Все там будет показывать.
0
Программист
33 / 33 / 8
Регистрация: 08.07.2011
Сообщений: 190
Записей в блоге: 1
10.01.2012, 21:52
В данном коде просто вводится целочисленный массив N=10 рамерности с клавиатуры и без изменений выводится.
*UPD: хотя не, передаём же указатель...
10-я строка вообще не понятно зачем.
0
 Аватар для hally
0 / 0 / 0
Регистрация: 21.12.2011
Сообщений: 16
10.01.2012, 22:00  [ТС]
Помогите сделать вывод после каждой строки или трассировку?
0
186 / 186 / 21
Регистрация: 08.01.2011
Сообщений: 1,139
10.01.2012, 22:16
Цитата Сообщение от hally Посмотреть сообщение
Помогите сделать вывод после каждой строки или трассировку?
Вы в какой среде(компилятор) работаете?
0
 Аватар для hally
0 / 0 / 0
Регистрация: 21.12.2011
Сообщений: 16
10.01.2012, 22:27  [ТС]
Microsoft Visual C++ 2008
0
186 / 186 / 21
Регистрация: 08.01.2011
Сообщений: 1,139
10.01.2012, 22:39
Тогда запустите программу в 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
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
10.01.2012, 23:26
Помогаю со студенческими работами здесь

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

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

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

Объясните как работает программа
Цель задачи была: Возведение X в 59 степень за самое малое количество шагов. 1. Ввод (X); 2. X2 = X*X; 3. X4 = X2*X2; ...

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


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение Это мой обзор планшета X220 с точки зрения школьника. Недавно я решила попытаться уменьшить свой. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru