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

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

Восстановить пароль Регистрация
 
krexx
-8 / 0 / 0
Регистрация: 23.01.2011
Сообщений: 52
22.12.2011, 06:06     Комментарии к программе #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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
void out(int * a, int n) {
 
        for (int i=0; i<n; i++)
                std::cout << a[i] << ' ';
 
        std::cout << '\n';
 
}
 
void shiftR(int * a, int n, int v) {
 
        int * buf = new int[v];
 
        memmove(buf,a+n-v,v*sizeof(int));
 
        memmove(a+v,a,(n-v)*sizeof(int));
 
        memmove(a,buf,v*sizeof(int));
 
        delete[] buf;
 
}
 
void delPos(int * a, int n, int pos) {
 
        if (pos!=n-1)
                memmove(a+pos,a+pos+1,(n-pos-1)*sizeof(int));
 
        a[n-1]=0;
 
}
 
int retLastNegPos(int * a, int n) {
        for (int i=n-1; i>=0; i--)
                if (a[i]<0) return i;
 
        return -1;
}
 
int main() {
 
        int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8}; // -4,-9,4,5,4,-4,5,3 };
        int size  = sizeof(arr) / sizeof(arr[0]);
 
        int p;
 
        out(arr,size);
 
        if ((p=retLastNegPos(arr,size))!=-1)
                delPos(arr,size,p);
        else
                shiftR(arr,size,1);
 
        out(arr,size);
 
 
 
        getchar();
        return 0;
}
Добавлено через 20 минут
Help!

Добавлено через 14 часов 50 минут
Как я понимаю помощи ждать бесполезно?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.12.2011, 06:06     Комментарии к программе
Посмотрите здесь:

C++ Комментарии к программе
комментарии к программе C++
C++ Комментарии к программе
Matrix. Комментарии к программе C++
C++ написать комментарии к программе
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
22.12.2011, 06:10     Комментарии к программе #2
Цитата Сообщение от krexx Посмотреть сообщение
Как я понимаю помощи ждать бесполезно?
здесь просто нечего комментировать
greeezz
272 / 165 / 4
Регистрация: 10.07.2011
Сообщений: 441
22.12.2011, 06:16     Комментарии к программе #3
krexx, я же вам написал программу
В ЭТОЙ ТЕМЕ которая вам делает все что вам надо с комментариями чуть ли не в каждой строке.
Вы бы хоть написали что вас там не устроило.
krexx
-8 / 0 / 0
Регистрация: 23.01.2011
Сообщений: 52
23.12.2011, 00:56  [ТС]     Комментарии к программе #4
greeezz, Спасибо большое, но меня попросили написать комментарии именно к этой задаче, которая находится в этой теме!

Добавлено через 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
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
#include <iostream>
using std::cout;
using std::cin;
using std::endl;
 
int main() {
 
        const int size = 10;
        int myArray[size];
        bool err = false;
        int x; // для сдвига массива впроаво
        int newSize; // пользователь может ввести меньше чем SIZE цифр
        int lastNegativIndex = -1; // у массива не бывает отрицательных индексов.
                                                           // поэтому если значение этой переменной
                                                           // останется равное -1 то отрицательных элементоа нет
 
        cout << "Please enter " << size << " digits separated by space\n>";
 
        //читаем цифры предоставленные пользователем и сразу проверяем есть ли отрицательные.
        //если есть то сохраняем индекс последнего встретившегося отрицательного элемента
        //выполнения цикла происходит пока не достигнут предел массива или не достигнут конец строки
        for (int i = 0; i < size && cin.peek() != '\n'; ++i) {
                //если от пользователя получен символ не являющийся целым числом то выходим из цикла
                //и сообщаем пользователю об ошибке
                if (!(cin >> myArray[i])) {
                        err = true;
                        break;
                }
                if (myArray[i] < 0) {
                        lastNegativIndex = i;
                }
                newSize = i + 1;
        }
        if (err) {
                cout << "Provided number is incorrect" << endl;
        } else {
                //если найден отрицательный элемент
                if (lastNegativIndex > -1) {
                        cout << "Last negative element is: " << myArray[lastNegativIndex] << endl;
                        //удаляем его смещая все элемены справа от него на 1 в лево
                        //на место последнего записываем 0
                        for (int i = lastNegativIndex; i < newSize; ++i) {
                                if (i == newSize - 1) {
                                        myArray[i] = 0;
                                } else {
                                        myArray[i] = myArray[i + 1];
                                }
                        }
                } else {
                        //выполняем смещение всех элементов массива в право на Х
                        //сдвиг проще выполнять начиная с крайнего правого элемента
                        cout << "Please provide the offset value ";
                        if (cin >> x && x > 0) {
                                for (int i = newSize - 1; i >= 0; --i) {
                                        if (i < x) {
                                                myArray[i] = 0;
                                        } else {
                                                myArray[i] = myArray[i - x];
                                        }
                                }
                        }
                }
                //печатаем результат
                for (int i = 0; i < newSize; ++i) {
                        cout << myArray[i] << " ";
                }
        }
 
        return 0;
}
Добавлено через 21 минуту
Ребята очень срочно нужны комментарии к этой программе!
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
void out(int * a, int n) {
 
        for (int i=0; i<n; i++)
                std::cout << a[i] << ' ';
 
        std::cout << '\n';
 
}
 
void shiftR(int * a, int n, int v) {
 
        int * buf = new int[v];
 
        memmove(buf,a+n-v,v*sizeof(int));
 
        memmove(a+v,a,(n-v)*sizeof(int));
 
        memmove(a,buf,v*sizeof(int));
 
        delete[] buf;
 
}
 
void delPos(int * a, int n, int pos) {
 
        if (pos!=n-1)
                memmove(a+pos,a+pos+1,(n-pos-1)*sizeof(int));
 
        a[n-1]=0;
 
}
 
int retLastNegPos(int * a, int n) {
        for (int i=n-1; i>=0; i--)
                if (a[i]<0) return i;
 
        return -1;
}
 
int main() {
 
        int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8}; // -4,-9,4,5,4,-4,5,3 };
        int size  = sizeof(arr) / sizeof(arr[0]);
 
        int p;
 
        out(arr,size);
 
        if ((p=retLastNegPos(arr,size))!=-1)
                delPos(arr,size,p);
        else
                shiftR(arr,size,1);
 
        out(arr,size);
 
 
 
        getchar();
        return 0;
}
Заранее спасибо!

 Комментарий модератора 
2.14. Чтобы "поднять" тему в разделе и поиске по форуму, используйте осмысленные сообщения, например "Тема/проблема/задача актуальна". Если вы чего-то достигли в решении проблемы на этот момент, сообщите об этом.
greeezz
272 / 165 / 4
Регистрация: 10.07.2011
Сообщений: 441
23.12.2011, 01:30     Комментарии к программе #5
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
93
94
95
96
97
98
//эта функция принемает в качетсве аргументов указатель на int и переменную типа int
//указатель на int это указатель на первый элемент массива
//переменная int n  это размер этого массива
void out(int * a, int n) {
 
    //в цикле печатаем содержание массива отделяя кажый его элемент пробелом
        for (int i=0; i<n; i++)
                std::cout << a[i] << ' ';
        //после печати массива добавляется символ перехода на новую строку
        std::cout << '\n';
 
}
 
 
//int * a - указатель на int (в вашем случае тут массив элементов типа int)
//int n - размер массива
//int v - величина на которую надо выполнить сдвиг
void shiftR(int * a, int n, int v) {
 
        //выделяется память на новый массив элементов типа int  размером v
        int * buf = new int[v];
 
        // void *memmove(void *to, const void *from, size_t count);
        // в вашем случае :
        //buf - адрес в памяти куда надо начть перемещение
        //a+n-v - начаная с v-нного элемента с конца массива будет осуществляться переност в buff
        //v*sizeof(int) - количество символов которое будет перемещено
        memmove(buf,a+n-v,v*sizeof(int));
 
        //a+v  вычисляется адрес куда будет осуществляться перенос
        //a адрес откуда осуществляться перенос
        //(n-v)*sizeof(int)количество символов которое будет перемещено
        memmove(a+v,a,(n-v)*sizeof(int));
 
        //тут по аналогии с первыми двумя
        memmove(a,buf,v*sizeof(int));
 
        //высвобождается память выделенная под массив buf
        delete[] buf;
 
}
 
//int * a, int n, - тоже самое что и в предыдущих функциях
//int pos -  индекс элемента который надо удалить
void delPos(int * a, int n, int pos) {
 
        //если индекс элемента который надо удалить не последний в массиве
        if (pos!=n-1)
            //все элементы после pos смещаются на 1 влево.
                memmove(a+pos,a+pos+1,(n-pos-1)*sizeof(int));
        //на место значения последнего элемента записывается 0 
        a[n-1]=0;
 
}
 
//поиск последего отрицательного элемента.
//поиск выполняется с конца массива
int retLastNegPos(int * a, int n) {
        for (int i=n-1; i>=0; i--)
            //если отрицательный элемент найден то возвращается его индекс
                if (a[i]<0) return i;
        //иначе возвращается -1
        return -1;
}
 
int main() {
        //массив элементов типа int
        int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8}; // -4,-9,4,5,4,-4,5,3 };
        //вычесляется размер массива
        //путем деления всего объема памяти занимаего массивом на объем памаяти
        //занимаемый одним элементом
        int size  = sizeof(arr) / sizeof(arr[0]);
 
        //ну тупо переменная объявлена
        int p;
 
        //вызов функции печатающей массив
        out(arr,size);
 
        //если найден отрицательный элемент
        if ((p=retLastNegPos(arr,size))!=-1)
            //удаляем отрицательный элемент 
                delPos(arr,size,p);
        //иначе
        else
            //смещаем элементы массива
                shiftR(arr,size,1);
 
        //вызов функции печатающей массив
        out(arr,size);
 
 
        //ждем пока пользователь ченить нажмет
        getchar();
        
        //сообщаем системе что программа выполнена успешно
        return 0;
}
Yandex
Объявления
23.12.2011, 01:30     Комментарии к программе
Ответ Создать тему
Опции темы

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