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

массив - C++

Восстановить пароль Регистрация
 
Sivrit
0 / 0 / 0
Регистрация: 27.05.2012
Сообщений: 30
27.05.2012, 20:07     массив #1
Здравствуйте, нужна помощь в решении задачи. Условие: в одномерном массиве состоящем из n элементов, вычислить сумму элементов между первым и последним нулевыми элементами.
Желательно написать готовое решение на С++
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.05.2012, 20:07     массив
Посмотрите здесь:

C++ Задан вектор X[20]. Положительные числа переписать в массив Y, а отрицательные в массив W
C++ Задать массив вещественных чисел и вставить в исходный массив число
C++ задача записать в массив отрицательные элементы матрицы в массив и вывести их
Массив: Составить массив из двух исходных по заданному принципу заполнения C++
Сформировать массив А из четных элементов исходного массива, а массив В - из нечетных C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
insolent
 Аватар для insolent
826 / 347 / 15
Регистрация: 30.01.2009
Сообщений: 1,204
27.05.2012, 20:51     массив #2
С использованием STL можно было все красиво сделать в пару строк, но думаю, что вам нужно без заумности.
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
#include <iostream>
 
int main()
{
    int arr[] = { 1, 2, 0, 4, 5, 6, 0, 7, 8, 9, 10, 0, 3, 2, 11, 0, 8, 2, 0, 5, 6, 4 };
    int n = sizeof(arr)/sizeof(arr[0]);
 
    std::cout << "=======ARRAY=======" << std::endl;
    for (int i = 0; i < n; i++)
        std::cout << arr[i] << "  ";
 
    std::cout << std::endl;
 
    int firstZero, lastZero;
 
    for (int i = 0; i < n; i++)
        if ( arr[i] == 0 )
        {
            firstZero = i;
            break;
        }
 
    for (int i = n-1; i > 0; i--)
        if ( arr[i] == 0 )
        {
            lastZero = i;
            break;
        }
 
    int Sum = 0;
    for (int i = firstZero; i < lastZero; i++)
        Sum += arr[i];
 
    std::cout << "Position of the first zero element: " << firstZero << std::endl;
    std::cout << "Position of the last zero element: " << lastZero << std::endl;
    std::cout << "Sum: " << Sum << std::endl;
 
    return 0;
}
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4925 / 2668 / 243
Регистрация: 29.11.2010
Сообщений: 7,421
27.05.2012, 21:03     массив #3
1 цикла хватит за глаза
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
 
int main()
{
    int arr[] = { 1, 2, 0, 4, 5, 6, 0, 7, 8, 9, 10, 0, 3, 2, 11, 0, 8, 2, 0, 5, 6, 4 };
    int sum = 0, tmpsum;
    bool b = false;
    const int n = sizeof(arr) / sizeof(*arr);
    for (int i=0; i < n; i++)
    {
        if(b) tmpsum += arr[i];
        if (arr[i] == 0)
        {
            if(!b) b = true;
            else {sum += tmpsum; tmpsum = 0; }
        }
        std::cout<< arr[i]<< " ";
    }
    std::cout<< "\nSum: "<< sum;
    return 0;
}
Sivrit
0 / 0 / 0
Регистрация: 27.05.2012
Сообщений: 30
27.05.2012, 21:08  [ТС]     массив #4
спасибо, но мне кажется что программа не так считает сумму, хотя я могу и ошибаться...
instagib
122 / 85 / 3
Регистрация: 14.02.2011
Сообщений: 341
27.05.2012, 21:10     массив #5
Цитата Сообщение от MrGluck Посмотреть сообщение
const int n = sizeof(arr) / sizeof(*arr)
Цитата Сообщение от insolent Посмотреть сообщение
int n = sizeof(arr)/sizeof(arr[0]);
господа, а не лучше ли писать sizeof(ТИП) из которого сделан массив.
C++
1
2
int arr[] = {}; size = sizeof(arr) / sizeof(int);
char arr[] = {}; size = sizeof(arr) / sizeof(char);
???
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4925 / 2668 / 243
Регистрация: 29.11.2010
Сообщений: 7,421
27.05.2012, 21:12     массив #6
Цитата Сообщение от Sivrit Посмотреть сообщение
спасибо, но мне кажется что программа не так считает сумму, хотя я могу и ошибаться...
Лично я проверил устным счетом. А это так сложно?

Добавлено через 1 минуту
Цитата Сообщение от instagib Посмотреть сообщение
господа, а не лучше ли писать sizeof(ТИП) из которого сделан массив.
C++
1
2
int arr[] = {}; size = sizeof(arr) / sizeof(int);
char arr[] = {}; size = sizeof(arr) / sizeof(char);
???
А зачем? Как бы первый элемент массива как раз имеет размер нужного типа. Иначе можно вобще писать не sizeof(int), а 4. А так это безопасный вариант.
instagib
122 / 85 / 3
Регистрация: 14.02.2011
Сообщений: 341
27.05.2012, 21:16     массив #7
MrGluck, на 32битныйх машинах, указатель вроде как 2 байта. Любой указатель, что на инт что на чар что на структуру, верно?
в случае
C++
1
2
char arr[20];
unsigned int size = sizeof(arr) / sizeof(*arr);
у вас должно получиться 10 элементов. Поправьте меня если я не прав.
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4925 / 2668 / 243
Регистрация: 29.11.2010
Сообщений: 7,421
27.05.2012, 21:18     массив #8
Цитата Сообщение от instagib Посмотреть сообщение
MrGluck, на 32битныйх машинах, указатель вроде как 2 байта. Любой указатель, что на инт что на чар что на структуру, верно?
в случае
C++
1
2
char arr[20];
unsigned int size = sizeof(arr) / sizeof(*arr);
у вас должно получиться 10 элементов. Поправьте меня если я не прав.
*arr это не указатель, это arr[0] (int)
Toshkarik
 Аватар для Toshkarik
1139 / 856 / 50
Регистрация: 03.08.2011
Сообщений: 2,381
Завершенные тесты: 1
27.05.2012, 22:07     массив #9
Цитата Сообщение от instagib Посмотреть сообщение
на 32битныйх машинах, указатель вроде как 2 байта
32 битные машины - 32 бита - 32 битные указатели - 32 / 8 == 4. Ну никак не могут они быть 2 байта.
Sivrit
0 / 0 / 0
Регистрация: 27.05.2012
Сообщений: 30
28.05.2012, 11:45  [ТС]     массив #10
помогите реализовать эту функцию через шаблоны
Toshkarik
 Аватар для Toshkarik
1139 / 856 / 50
Регистрация: 03.08.2011
Сообщений: 2,381
Завершенные тесты: 1
28.05.2012, 13:34     массив #11
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
template< typename T >
T sum( T *array, const int size ) {
   int firstZero = 0,
       lastZero = size - 1,
       sum = 0;
 
   while ( array[ firstZero ] != 0 && firstZero < size )
      firstZero++;
   
   while ( array[ lastZero ] != 0 && lastZero > 0 )
      lastZero--;
 
   for ( int i = firstZero + 1; i < lastZero; i++ )
      sum += array[ i ];
 
   return sum;
}
instagib
122 / 85 / 3
Регистрация: 14.02.2011
Сообщений: 341
28.05.2012, 21:25     массив #12
Sivrit, какую функцию, покажи код

//////// блин лаг,

Не по теме:

у меня отобразилось сообщение в другой теме delete pls))))

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.05.2012, 22:28     массив
Еще ссылки по теме:

Массив: Переписать элементы одномерного массива A, попадающие в интервал [2, 6], в массив B. C++
Заполнить массив строк из файла. Массив заполняется, но выводится не корректно C++
Как в массив скопировать массив, который заполнен через указатели C++

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

Или воспользуйтесь поиском по форуму:
Sivrit
0 / 0 / 0
Регистрация: 27.05.2012
Сообщений: 30
28.05.2012, 22:28  [ТС]     массив #13
instagib, Уже все готово, всем спасибо за помощь.
Yandex
Объявления
28.05.2012, 22:28     массив
Ответ Создать тему
Опции темы

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