0 / 0 / 0
Регистрация: 27.05.2012
Сообщений: 30
1

массив

27.05.2012, 20:07. Показов 671. Ответов 12
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте, нужна помощь в решении задачи. Условие: в одномерном массиве состоящем из n элементов, вычислить сумму элементов между первым и последним нулевыми элементами.
Желательно написать готовое решение на С++
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.05.2012, 20:07
Ответы с готовыми решениями:

Массив: Преобразовать массив, прибавив к четным числам, входящим в массив, значение первого элемента.
Есть задача С клавиатуры вводятся элементы целочисленного массива размера N. Преобразовать его,...

Дан массив, состоящий из 15 элементов целого типа. Получить новый массив, как разность между элементами исходного массив
Дан массив, состоящий из 15 элементов целого типа. Получить новый массив, как разность между...

Ввести массив А. В массив В перенести все элементы массива А, стоящие правее максимального элемента, и имеющие нечетный индекс. Массив В отсортировать
Добрый Вечер! Написал первую часть программы по этому заданию"Ввести массив А. В массив В перенести...

Массив: Как скопировать двумерный массив в другой массив?
Как скопировать двумерный массив в другой массив?

12
829 / 352 / 64
Регистрация: 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;
}
1
Форумчанин
Эксперт CЭксперт С++
8215 / 5045 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
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;
}
0
0 / 0 / 0
Регистрация: 27.05.2012
Сообщений: 30
27.05.2012, 21:08  [ТС] 4
спасибо, но мне кажется что программа не так считает сумму, хотя я могу и ошибаться...
0
122 / 85 / 16
Регистрация: 14.02.2011
Сообщений: 340
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);
???
0
Форумчанин
Эксперт CЭксперт С++
8215 / 5045 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
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. А так это безопасный вариант.
0
122 / 85 / 16
Регистрация: 14.02.2011
Сообщений: 340
27.05.2012, 21:16 7
MrGluck, на 32битныйх машинах, указатель вроде как 2 байта. Любой указатель, что на инт что на чар что на структуру, верно?
в случае
C++
1
2
char arr[20];
unsigned int size = sizeof(arr) / sizeof(*arr);
у вас должно получиться 10 элементов. Поправьте меня если я не прав.
0
Форумчанин
Эксперт CЭксперт С++
8215 / 5045 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
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)
1
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
27.05.2012, 22:07 9
Цитата Сообщение от instagib Посмотреть сообщение
на 32битныйх машинах, указатель вроде как 2 байта
32 битные машины - 32 бита - 32 битные указатели - 32 / 8 == 4. Ну никак не могут они быть 2 байта.
1
0 / 0 / 0
Регистрация: 27.05.2012
Сообщений: 30
28.05.2012, 11:45  [ТС] 10
помогите реализовать эту функцию через шаблоны
0
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
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;
}
2
122 / 85 / 16
Регистрация: 14.02.2011
Сообщений: 340
28.05.2012, 21:25 12
Sivrit, какую функцию, покажи код

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

Не по теме:

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

0
0 / 0 / 0
Регистрация: 27.05.2012
Сообщений: 30
28.05.2012, 22:28  [ТС] 13
instagib, Уже все готово, всем спасибо за помощь.
0
28.05.2012, 22:28
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.05.2012, 22:28
Помогаю со студенческими работами здесь

Дан массив целых чисел,произвести для него следующие операции: для каждого из чисел ,входящего в массив,указать,сколько раз оно входит в массив...
помогите!!!((( дан массив целых чисел,произвести для него следующие операции: для каждого из чисел...

Файл: Загрузка данных из файла: первый столбец записывался в 1й массив, второй столбец - во 2й массив, а 3й столбец - в 3й массив.
Есть текстовый файл, в нем 3 столбца чисел (число строк заранее неизвестно). Напишите пожалуйста...

с клавиатуры ввести массив,во второй массив записать нечетные элементы из первого
с клавиатуры ввести массив,во второй записать нечетные элеиенты из первого.В третий массив записать...

Массив: найти номера столбцов с положительными элементами и записать их в одномерный массив
ввести двумерный массив I . найти номера столбцов с положительными элементами и записать их в...


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

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

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