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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Sivrit
0 / 0 / 0
Регистрация: 27.05.2012
Сообщений: 30
#1

массив - C++

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

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

Дан массив размерности n. Заполнить массив случайными числами в диапазоне [-100;100]. Перевернуть массив: - C (СИ)
Дан массив размерности n. Заполнить массив случайными числами в диапазоне . Перевернуть массив: a↔a, a↔a и т.д. Для работы с массивом...

Вывести на печать массив X, массив Z, массив Y, произведение элементов массива X, упорядоченный массив Y - QBasic
Вывести на печать массив X, массив Z, массив Y, произведение элементов массива X, упорядоченный массив Y. ...

Дан массив целых чисел а(12). Переписать в массив х четные, а в массив у нечетные элементы массива а - Turbo Pascal
Помогите пожалуйста решить эту задачу. Массив a выводит на печать. Я пишу a mod 2 = 0 , а он мне 41 ошибку выдает. Что делать? Вот...

Дан одномерный массив A из N элементов. Переписать положительные элементы массива в массив B, а отрицательные в массив C - Pascal
Дан одномерный массив A из N элементов. Переписать положительные элементы массива в массив B, а отрицательные в массив C.

Сформировать массив, который будет состоять из чисел, входящих как в массив A, так и в массив B - C (СИ)
Задание: На основе исходных массивов A и B (n и m – рабочие размеры массивов) сформировать массив C, который будет состоять из чисел,...

Массив: Отсортировать полученный массив 3 способами: по строкам, по столбцам( возр.), 3) и весь массив - Delphi
Помогите, пожалуйста ,решить задачу. Очень нужно. Задан массив (4*6). Элементы задаются по правилу: если j>3, то Aij=i+j, иначе...

Массив: Как сделать так, чтобы результирующий массив представлял собой измененный по заданным правилам первый массив? - C++ Builder
Доброй ночи форумчане, очередной нубо-вопрос не требует отлагательств имеется одномерный массив, из которого по заданным условиям...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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
Модератор
Эксперт CЭксперт С++
6984 / 4155 / 592
Регистрация: 29.11.2010
Сообщений: 11,021
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
Сообщений: 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);
???
MrGluck
Модератор
Эксперт CЭксперт С++
6984 / 4155 / 592
Регистрация: 29.11.2010
Сообщений: 11,021
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
Сообщений: 340
27.05.2012, 21:16     массив #7
MrGluck, на 32битныйх машинах, указатель вроде как 2 байта. Любой указатель, что на инт что на чар что на структуру, верно?
в случае
C++
1
2
char arr[20];
unsigned int size = sizeof(arr) / sizeof(*arr);
у вас должно получиться 10 элементов. Поправьте меня если я не прав.
MrGluck
Модератор
Эксперт CЭксперт С++
6984 / 4155 / 592
Регистрация: 29.11.2010
Сообщений: 11,021
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
1139 / 856 / 51
Регистрация: 03.08.2011
Сообщений: 2,384
Завершенные тесты: 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
1139 / 856 / 51
Регистрация: 03.08.2011
Сообщений: 2,384
Завершенные тесты: 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
Сообщений: 340
28.05.2012, 21:25     массив #12
Sivrit, какую функцию, покажи код

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

Не по теме:

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

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

Массив. Разделить на два: массив элементов с четными и массив с нечетными индексами - Pascal ABC
VII.Одномерные массивы 50. Задан массив с количеством элементов N. Сформировать два массива: в первый включить элементы исходного массива...

Построить массив d из элементов, которые входят как в массив a так и в массив b - C (СИ)
Дан массив a и b состоящий из n элементов. Построить массив d из элементов, которые входят как в массив a так и в массив b. Желательно с...

Вывести массив а(i, j), одномерный массив b(i) и полученный массив АВ с помощью функции Cells - VBA
Задача 1 Написать программу для решения следующей задачи: для числа n вводимого с клавиатуры (с помощью функции InputBox())...

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

Двумерный массив.Дан массив 5 х 5. Определить сумму элементов тех строк, где диагональный элемент равен нулю и записать их в отдельный массив. - Turbo Pascal
помогите составить программу. во задание:Дан массив 5 х 5. Определить сумму элементов тех строк, где диагональный элемент равен нулю и...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru