Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 26, средняя оценка - 4.73
Zalik
2 / 2 / 0
Регистрация: 24.05.2010
Сообщений: 94
#1

Найти сумму первых элементов массива, произведение которых не превышает заданного числа М - C++

15.03.2012, 17:40. Просмотров 3375. Ответов 44
Метки нет (Все метки)

Имеется последовательность чисел a1, a2, ... ,aN, образована по правилу аi=random(N). Найти сумму первых из них (считая слева направо), произведение которых не превышает заданного числа М.
Очень прошу помочь!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.03.2012, 17:40
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Найти сумму первых элементов массива, произведение которых не превышает заданного числа М (C++):

Найти максимальную сумму чисел, произведение которых не превышает заданного числа. - C++
Вводим массив(статический).Найти максимальную сумму чисел, произведение которых не превышает заданного числа.

Найти произведение первых трех элементов массива, больших заданного числа - C++
В массиве а1, а2, ..., а25 найти произведение первых трех элементов, больших чем 5.

Найти сумму элементов массива значения которых меньше заданного числа - C++
Дан одномерный массив 6 элементов. Найти сумму элементов массива значения которых меньше 0.25 Массив x-{3.5,-6.3,2.1,0.1,5.1,-2.1}

Найти сумму элементов массива, удалить из него все элементы, модуль которых не превышает 1 - C++
Помогите, пожалуйста 1. Найти сумму элементов массива с нечетными номерами. 2. Найти сумму элементов массива, расположенных между...

Вычислить произведение элементов массива S, значение которых не больше заданного негативного числа - C++
Здесь задали на Борланде С++ ну просто нечто (я нуб в этом деле) 1.Вычислить произведение элементов массива S ,значение которых не больше...

Вычислить произведение элементов массива S, значение которых не больше заданного негативного числа - C++
Здесь задали на Борланде С(не С++) ну просто нечто (я нуб в этом деле) 1.Вычислить произведение элементов массива S ,значение которых не...

44
-=ЮрА=-
Заблокирован
Автор FAQ
16.03.2012, 17:40 #31
PS Zalik, переставь строку в этом цикле
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
for(i = 0; i < N; i++)
* * * * {
* * * * * * * * umnog *= massiv[i];
* * * * * * * * if(M < umnog)
* * * * * * * * * * * * break;
summa += massiv[i];
* * * * }
1
dimcoder
Полярный
466 / 439 / 68
Регистрация: 11.09.2011
Сообщений: 1,138
16.03.2012, 17:50 #32
-=ЮрА=-, если я поправил вас в утверждении
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
if -а достаточно чтобы алгоритм не обломился
и вы упорно отказываетесь в это верить, это не значит что мне
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
по..
Также я не понимаю, почему вы до сих пор упорно продолжаете игнорировать мои предыдущие сообщения и аргументы, ваши опровержения которых являются по сути несущественными.
1
-=ЮрА=-
16.03.2012, 17:55
  #33

Не по теме:

dimcoder, достал, поправь лучше алгоритм ТС, если ты конечно в нём видишь ошибки...

1
Nameless One
Эксперт С++
5775 / 3425 / 255
Регистрация: 08.02.2010
Сообщений: 7,448
16.03.2012, 17:55 #34
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
C++
1
2
3
time_t t;
// ...
srand(time(&t));
Зачем в time передавать адрес переменной, которая не будет использоваться в дальнейшем?
0
-=ЮрА=-
Заблокирован
Автор FAQ
16.03.2012, 20:37 #35
Цитата Сообщение от Nameless One Посмотреть сообщение
Зачем в time передавать адрес переменной, которая не будет использоваться в дальнейшем?
- обычно я пишу на многократную генерацию

C
1
2
3
4
5
6
7
time_t t;
while(1)
{
      srand(time(&t));
      //....
      rand();
}
- и этим стараюсь оградить свой код от псевдослучайных последовательностей, хотя для данного алгоритма в принципе можно и srand(time(NULL)); Всё же думаю лучше пусть пользователь сразу привыкнет использовать такую конструкцию, чтобы не ломать голову, а почему эе в коде ниже последовательности повторяются
C
1
2
3
4
5
6
while(1)
{
      srand(time(NULL));
      //....
      rand();
}
Добавлено через 17 минут
Nameless One, можешь как эксперт сказать в большинстве IDE при создании exe уже заложен внутренний фильтр badalloc или нет, т.к. в определённом месте топик уже вышел за рамки конструктивной беседы...
Итак, приложения слинкованные в Release без try catch с компиляором GNU выдали програмное прерывание, с компилятором VisualStudio и BorlandC 6 прошли "предполагаемое место краха" без проблем, где же правда?Мне интересно услышать конкреное мнение, т.к. спор спором но граблей c badalloc в IDE c которыми работаю я не встречал: при невозможности выделения памяти даже в catch(badalloc) алгоритм не заходит, вот сижу и думу думаю...
1
Nameless One
Эксперт С++
5775 / 3425 / 255
Регистрация: 08.02.2010
Сообщений: 7,448
17.03.2012, 10:23 #36
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
- и этим стараюсь оградить свой код от псевдослучайных последовательностей
вот это не понял

Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Nameless One, можешь как эксперт сказать в большинстве IDE при создании exe уже заложен внутренний фильтр badalloc или нет
какой такой «внутренний фильтр»?

Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Итак, приложения слинкованные в Release без try catch с компиляором GNU выдали програмное прерывание
т.е. исключение, я правильно понял?

Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
с компилятором VisualStudio и BorlandC 6 прошли "предполагаемое место краха" без проблем, где же правда?
это уже баг конкретной реализации. По умолчанию new (если не указана функция для выделения памяти) должна выбрасывать исключение. Любое другое поведение — это уже отклонение от стандарта. Хотя, в принципе, MS VC++ 6.0 как раз этим и славится. В то время как поведение GCC в данном случае адекватно требованиям стандарта.

Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Мне интересно услышать конкреное мнение, т.к. спор спором но граблей c badalloc в IDE c которыми работаю я не встречал: при невозможности выделения памяти даже в catch(badalloc) алгоритм не заходит, вот сижу и думу думаю...
а не нужно гадать, нужно просто почитать черновик стандарта
1
-=ЮрА=-
Заблокирован
Автор FAQ
17.03.2012, 11:07 #37
Цитата Сообщение от Nameless One Посмотреть сообщение
Хотя, в принципе, MS VC++ 6.0 как раз этим и славится. В то время как поведение GCC в данном случае адекватно требованиям стандарта.
- я тестировал на 2008-й обижаешь.
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
#include <iostream>
#include <iomanip>
#include <ctime>
using namespace std;
 
int main()
{
    int * arr       = NULL;
    unsigned long n = 1000000000;
    for(int i = 0; i < 3; i++)
    {
        try
        {
            if(!(arr = new int[n]))
                cout<<"Allocation memory error\n";
            else
            {
                cout<<"Allocation done"<<endl
                    <<"Num of elements : "<<n<<endl
                    <<"Memory adress   : "<<arr<<endl;
            }
        }
        catch(bad_alloc &e)
        {
            cout<<e.what()<<endl;
            arr = NULL;
        }
    }
    system("pause");
    return 0;
}
Посмотри скрин работы приложения собранного в 9-ке(надо и скрины пошагового прохождения прилеплю, в catch не заходим). По поводу опций компилятора, как я понял GNU отстроен так чтобы линковать код выбрасывающий исключения, студия уже линкует с тем расчётом чтобы исключений не было. У меня вопрос - что лучше продумывать кучи реакций на исключительные ситуации, либо писать простенькие фильтры, а всё остальное за тебя сделает линковшик. Лично я за 2-й вариант. Так если посудить исключение может выбрасывать и scanf да и printf наверное, что весь код в try catch заворачивать?(какая-та глупость на мой взгляд)

На счёт случайных, долго пояснять - суть сводилась к тому что srand(time(NULL)) каждый раз засеивает внутренний генератор чисел одним и тем же начальным числом, думаю не нужно развивать тему как может отработать алгоритм при одних и тех же начальных условиях time(&t) в любом случае всегда вернёт отличное число(милисекунды то от 1970-го тикают всегда)
0
Миниатюры
Найти сумму первых элементов массива, произведение которых не превышает заданного числа М  
Nameless One
Эксперт С++
5775 / 3425 / 255
Регистрация: 08.02.2010
Сообщений: 7,448
17.03.2012, 11:17 #38
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Посмотри скрин работы приложения собранного в 9-ке(надо и скрины пошагового прохождения прилеплю, в catch не заходим). По поводу опций компилятора, как я понял GNU отстроен так чтобы линковать код выбрасывающий исключения, студия уже линкует с тем расчётом чтобы исключений не было. У меня вопрос - что лучше продумывать кучи реакций на исключительные ситуации, либо писать простенькие фильтры, а всё остальное за тебя сделает линковшик. Лично я за 2-й вариант. Так если посудить исключение может выбрасывать и scanf да и printf наверное, что весь код в try catch заворачивать?(какая-та глупость на мой взгляд)
извини, я не понял, выбрасывает ли код, скомпилированный cl.exe, исключение, или нет? Если да, то какая версия выбрасывает, а какая нет? (Как ты наверно догадался, сам я проверить не могу)

Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
суть сводилась к тому что srand(time(NULL)) каждый раз засеивает внутренний генератор чисел одним и тем же начальным числом
нет, не одним и тем же

Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
думаю не нужно развивать тему как модет отработать алгоритм при одних и тех же начальных условиях time(&t) в любом случае всегда вернёт отличное число(милисекунды то от 1970-го тикают всегда)
srand(time(NULL)) и srand(time(&t)) будут работать одинаково всегда. От того, передашь ли ты функции time аргумент или нет, не зависит ее возвращаемое значение. Почитай документацию на функцию time
1
-=ЮрА=-
Заблокирован
Автор FAQ
18.03.2012, 10:40 #39
Цитата Сообщение от Nameless One Посмотреть сообщение
От того, передашь ли ты функции time аргумент или нет, не зависит ее возвращаемое значение.
- однако посмотри на скрин а также компиляцию этого алгоритма
C
1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>
#include <time.h>
 
int main()
{
    int i = 0;
    for(; i < 10; i++)
        printf("%u\n",time(NULL));
    printf("Press any key to continue\n");
    getchar();
    return 0;
}
http://codepad.org/qIYNWBC6
0
Миниатюры
Найти сумму первых элементов массива, произведение которых не превышает заданного числа М  
-=ЮрА=-
Заблокирован
Автор FAQ
18.03.2012, 10:47 #40
На счёт студии, не хочу резать скрины однако скажу что даже при пошаговом прохождении
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
try
* * * * * * * * {
* * * * * * * * * * * * if(!(arr = new int[n]))
* * * * * * * * * * * * * * * * cout<<"Allocation memory error\n";
* * * * * * * * * * * * else
* * * * * * * * * * * * {
* * * * * * * * * * * * * * * * cout<<"Allocation done"<<endl
* * * * * * * * * * * * * * * * * * * * <<"Num of elements : "<<n<<endl
* * * * * * * * * * * * * * * * * * * * <<"Memory adress * : "<<arr<<endl;
* * * * * * * * * * * * }
* * * * * * * * }
* * * * * * * * catch(bad_alloc &e)
* * * * * * * * {
* * * * * * * * * * * * cout<<e.what()<<endl;
* * * * * * * * * * * * arr = NULL;
* * * * * * * * }
- в catch ветвь не заходим. Я и писал что студия линкует без генерации bad_alloc (тест делал на 2008-й версии, с релиза остальных версий прошло менее 3-х лет и использовать их нельзя - есть такой принцип, обкатай 3 года дождись от разработчика пакетов с аддонами и исправлениями а потом уже пиши, так что 10-ку не пробовал)

Добавлено через 4 минуты
Грешным делом подумал вдруг за 10-ть итераций time(NULL) не успевает изменить возвращаемое значение И запустил тест 100 тыс http://codepad.org/cCwx2uLg
2309 1332053092
2310 1332053093
да тик уже виден, про time(NULL) вопрос снял, однако за bad_alloc всё в силе
0
Nameless One
Эксперт С++
5775 / 3425 / 255
Регистрация: 08.02.2010
Сообщений: 7,448
18.03.2012, 10:57 #41
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
- однако посмотри на скрин а также компиляцию этого алгоритма
И ты серьезно думаешь, что эти 10 итераций будут выполняться дольше, чем одна секунда, чтобы ты успел увидеть разницу? Для наглядности можно сделать простую задержку (использовалась юниксовая функция sleep):
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <time.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
 
int main(void)
{
    size_t i;
 
    for(i = 0; i < 10; ++i, sleep(1))
    printf("%zd\n", time(NULL));
    
    exit(0);
}
И получаем ожидаемый результат:
Найти сумму первых элементов массива, произведение которых не превышает заданного числа М

Я ведь уже советовал прочитать документацию. Функция time возвращает число секунд, прошедших с начала Эпохи (01.01.70). Если переданный ей аргумент не равен NULL, то time просто записывает по этому адресу свое возвращаемое значение. Т.е. если мы имеем
C
1
2
time_t t1, t2;
t1 = time(&t2);
то будет соблюдаться равенство t1 = t2. А это значит, что по сути переданный функции time аргумент вообще никак не влияет на возвращаемое значение
0
Nameless One
Эксперт С++
5775 / 3425 / 255
Регистрация: 08.02.2010
Сообщений: 7,448
18.03.2012, 11:00 #42
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
- в catch ветвь не заходим. Я и писал что студия линкует без генерации bad_alloc
просто студия в этом плане не придерживается стандарта, только и всего. Чтобы студия «линковала без генерации bad_alloc», должна была бы существовать отдельная версия линкуемого бинарника стандартной библиотеки. А так студия просто не поддерживает этот аспект стандарта
0
-=ЮрА=-
Заблокирован
Автор FAQ
18.03.2012, 11:01 #43
Nameless One, да я уже поправился ещё до твоего ответа, дело тут не в time а в bad_alloc

Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Грешным делом подумал вдруг за 10-ть итераций time(NULL) не успевает изменить возвращаемое значение И запустил тест 100 тыс http://codepad.org/cCwx2uLg
2309 1332053092
2310 1332053093
да тик уже виден, про time(NULL) вопрос снял, однако за bad_alloc всё в силе
Читай мои посты полностью а вообще что обсуждать у тебя линукс и GNU а у меня Windows и Studio, конструктивно говорить с тобой не выходит всегда я у тебя идиотом слыву, ок...
0
Nameless One
Эксперт С++
5775 / 3425 / 255
Регистрация: 08.02.2010
Сообщений: 7,448
18.03.2012, 11:03 #44
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Читай мои посты полностью
а я их и читаю полностью. Просто когда я начинал писать то сообщение, твоего ответа я не видел

Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
у тебя линукс и GNU а у меня Windows и Studio
к вопросу о time это отношения никакого не имеет

Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
конструктивно говорить с тобой не выходит всегда я у тебя идиотом слыву, ок...
тебя никто не заставлял делать утверждения, которые заведомо не соответствуют истине
1
Nameless One
Эксперт С++
5775 / 3425 / 255
Регистрация: 08.02.2010
Сообщений: 7,448
18.03.2012, 11:07 #45
Тема скатилась в офтоп, все интересные подробности мы для себя уже выяснили, за сим я ее и закрываю
0
18.03.2012, 11:07
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.03.2012, 11:07
Привет! Вот еще темы с ответами:

Найти произведение элементов массива, результат умножения цифр которых больше заданного К - C++
Помогите, пожалуйста, найти произведение тех элементов массива, содержащего натуральные числа, произведение цифр которых больше заданного K.

Найти произведение элементов массива, больше заданного числа А - C++
Новичок в С++, пока даже лекций по циклам не было, но уже дали задание. Не представляю себе, что написать в цикле (можно if и while...

В матрице А (mxn) найти найти сумму элементов по колонкам, значения которых по модулю меньше заданного числа К - C++
a) задать значения элементов массива при объявления переменных; b) значения элементов массива ввести с клавиатуры....

Найти в массиве количество четных чисел, сумма цифр в которых не превышает заданного числа P - C++
Найти количество четных чисел, сумма цифр в которых не превышает заданного числа P. При вводе Р=11 все считает правильно , но стоит...


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

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

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