Произведение элементов массива с четными номерами
Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.
Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.
В одномерном массиве, состоящем из «целых элементов, вычислить:
Превратить массив так, чтобы сначала располагались все положительные элементы, а потом — все отрицательные (элементы, равные 0, считать положительных).
Срочно нужен код программы =\
Олег, как должна осуществляться инициализация массива, с клавиатуры или массив инициализируется случайными числами?
Олег, у меня пока есть два варианта, с инициализацией массива случайными числами и с клавиатуры. Программы считают произведение четных элементов массива (кстати если значение четного элемента массива == 0, то произведение тоже == 0) и переинициализируют массив сначала положительными, а затем отрицательными числами с выводом их на экран.
Задание
если честно не понятно, если можешь объясни и постарайся выкладывать свои наброски кода с пояснениями ;)
Олег, в общем, есть такой код с инициализацией массива случайными числами:
и есть код с инициализацией массива с клавиатуры:
Юрий, не пояснишь, какой смысл вот в этом пассаже:
И далее, почти аналогичный кусок с
long long*product = new long long(1);
Почему ты просто не использовал автоматические переменные?
Тоже интересный кусок:
Не проще было написать
Первый вариант программы мне понравился больше: всё сделано брутально, в лоб, без извращений ))
Во втором варианте появились подленькие функции, которые не только запутали код, но и автора.
Почему, например, функция
Product()
отвечает не только за вычисление произведения элементов массива в чётных позициях, но и за ввод массива с клавиатуры?В конце функции
Product()
есть занимательный фрагмент:Уничтожение динамических переменных после
return
'а — не прокатит. Утечка памяти «по маленькому» — только переменнаяproduct
, посколькуarr
уничтожать вообще-то нельзя, потому что этот массив возвращается вызывающему коду.Зато здесь (в вызывающем коде):
получаем утечку памяти «по большому»: выделили память под массив и присвоили переменной arr адрес первого элемента, затем в функции
Product()
ещё раз выделили память под массив, вернули указатель на первый элемент и присвоили его опять переменной arr, оставив тем самым первый блок памяти бесхозным. Ну и в завершение уничтожили arr, но как простую динамическую переменную, а не как массив.И это всё ещё и работает?!
Учусь, Алан, учусь :)
Спасибо, за комментарии тебе и Черепу, вы меня держите в тонусе :)
в этом месте, я решил таким образом обезопасить значение введенного значения от дальнейших изменений (я не мог сразу создать автоматическую переменную, так как значение вводит пользователь)
Этот кусок
long long*product = new long long(1)
; ты прав, нужно было объявить, как автоматическую переменную.Твой код с нахождением четного элемента мне нравиться больше — лаконичнее.
Алан, подскажи, выделенную память в подпрограмме
Product()
, дабы избежать путаницы, мне, наверное, нужно было удалить не в подпрограмме, а в вызывающей функции?Вроде, с учетом сделанных замечаний, получилось довольно брутально и с присутствием подленьких функций :)))
Спасибо.
Юрий, так гораздо лучше ))