Сумма отрицательных элементов массива
Отщеплен от топика Помогите написать программу.
Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.
Пожалуйста срочно надо
Написать программу использующую подпрограмму(функцию)/
Сумма отрицательных элементов массива Y.
Для работы подпрограмма должна использовать только свои локальные переменные и формальные аргументы. В подпрограмме должен осуществляться ввод исходных данных, однократный вызов подпрограммы обработки данных и вывод результата на экран.
in c++
#include<iostream> using namespace std; int main() { int a[10005],n,i,ans=0; cin>>n; for(i=1;i<=n;i++) { cin>>a[i]; } for(i=1;i<=n;i++) { if(a[i]<0) { ans+=a[i]; } } cout<<ans<<endl; return 0; }
Бегло читать обычно люди начинают годам к 10. А вот понимать прочитанное... Некоторые вообще обходятся без этого до самой смерти.
Azizullo Qudratullo, если уж пытаешься помочь людям, что само по себе похвально, то помогай правильно. Ещё раз прочитай задание и попытайся понять, что в нём сказано.
Я думаю, программа должна выглядеть так:
// программа для подсчета отрицательных чисел в массиве #include <iostream> // прототип фуннкции для подсчета отрицательных чисел в массиве signed long sum_negtv_numbrs(void); int main(void) { using namespace std; signed long sum; sum = sum_negtv_numbrs(); cout << "\nThe sum of array's negative numbers: " << sum << endl; return (0); } signed long sum_negtv_numbrs() { const int SIZE = 1000; // размер массива int Y[SIZE]; int arrsize; // ввод размера массива std::cout << "Enter array's size: "; std::cin >> arrsize; // ввод чисел из которых будет состоять массив std::cout << "\nEnter into array Y both positive and negative numbers: \n" << std::endl; for (int i = 1; i <= arrsize; i++) { std::cout << "Number " << i << ": "; std::cin >> Y[i]; } signed long summ = 0; // подсчет отрицательных чисел for (int i = 1; i <= arrsize; i++) { if (Y[i] < 0) summ += Y[i]; } return summ; }
Юрий, как вариант, на «троечку» потянет.
Недостатки кода:
for (int i = 0; i < arrsize; i++) { ... }
. В противном случае можно опять-таки получить выход за границу массива при обработке последнего элемента.using namespace std;
лучше использовать в глобальной области видимости.Формальности:
Исходя из вышеизложенного, твой код может выглядеть так:
// программа для подсчета отрицательных чисел в массиве #include <iostream> using namespace std; const int MAXARRSIZE = 10000; // прототип фуннкции для подсчета отрицательных чисел в массиве void sum_negtv_numbrs(int *, int); int main(void) { int *Y; int arrsize; bool ok = true; // ввод размера массива do { ok = true; cout << "Enter array's size (1.." << MAXARRSIZE << "): "; cin >> arrsize; if (arrsize < 1 || arrsize > MAXARRSIZE) { ok = false; cout << "\tDummy! Array size must be ftom 1 to " << MAXARRSIZE << "! Try again..." << endl; } } while (!ok); Y = new int[arrsize]; sum_negtv_numbrs(Y, arrsize); delete [] Y; return (0); } void sum_negtv_numbrs(int *a_Y, int a_arrsize) { // ввод чисел из которых будет состоять массив cout << "\nEnter into array Y both positive and negative numbers: \n" << endl; for (int i = 0; i < a_arrsize; i++) { cout << "Number " << i << ": "; cin >> a_Y[i]; } signed long summ = 0; // подсчет отрицательных чисел for (int i = 0; i < a_arrsize; i++) { if (a_Y[i] < 0) summ += a_Y[i]; } cout << "\nThe sum of array's negative numbers: " << summ << endl; }
Или, если верно моё предположение об опечатке в тексте задания, так:
// программа для подсчета отрицательных чисел в массиве #include <iostream> using namespace std; const int MAXARRSIZE = 10000; // прототип фуннкции для подсчета отрицательных чисел в массиве signed long sum_negtv_numbrs(int *, int); int main(void) { int *Y; int arrsize; bool ok = true; // ввод размера массива do { ok = true; cout << "Enter array's size (1.." << MAXARRSIZE << "): "; cin >> arrsize; if (arrsize < 1 || arrsize > MAXARRSIZE) { ok = false; cout << "\tDummy! Array size must be ftom 1 to " << MAXARRSIZE << "! Try again..." << endl; } } while (!ok); Y = new int[arrsize]; // ввод чисел из которых будет состоять массив cout << "\nEnter into array Y both positive and negative numbers: \n" << endl; for (int i = 0; i < arrsize; i++) { cout << "Number " << i << ": "; cin >> Y[i]; } cout << "\nThe sum of array's negative numbers: " << sum_negtv_numbrs(Y, arrsize) << endl; delete [] Y; return (0); } signed long sum_negtv_numbrs(int *a_Y, int a_arrsize) { signed long summ = 0; // подсчет отрицательных чисел for (int i = 0; i < a_arrsize; i++) { if (a_Y[i] < 0) summ += a_Y[i]; } return summ; }
Спасибо, Алан.
На данном этапе не совсем разбираюсь в этом вопросе. То есть, созданная символическая константа за пределами функции является статической, а созданная в функции автоматической ? ? Тогда, какую роль играет квалификатор const?
Во время написания кода, я думал об этом, а именно, не уже ли пользователь введя размер массива 1001, захочет инициализировать его с клавиатурного ввода :)
Здесь впору инициализировать массив случайными числами.
В этом случае, я руководствовался удобством отображения номера вводимого числа, который совпадает с номером элемента массива. И честно, не совсем понимаю :( в каком случае можно выйти за пределы массива в данном случае. В проверочном условии цикла
for (...; i <= arrsize; ...)
???Буду благодарен за объяснения :)
Пожалуйста, Юрий ))
(1) «Символическая константа» — это скорее
#define
. Здесь я бы употребил термин «константная переменная». Да, такая переменная, определённая внутри функции, является автоматической. А квалификатор const говорит о том, что эта переменная не может быть изменена. И «говорит» он прежде всего оптимизирующему компилятору, который будет выбирать соответствующие алгоритмы оптимизации.Но в цитате говорится не про константу, определяющую размер массива, а про выделение памяти под массив Y в стеке. При размере массива int[1000] и размере int 4 байта, в стеке должно быть выделено почти 4 килобайта памяти под этот массив. А если потребуется сделать размер массива в 100000 элементов? Надо себя приучать писать аккуратный код.
(2) Программы должны быть надёжными. Примеров обратному — уйма, к сожалению. И если в программе имеется дырка, то обязательно найдётся идиот, который сунет туда палец. Изучайте Законы Мэрфи. Надо себя приучать писать аккуратный код.
(3) «Удобство отображения номера» решается элементарно:
cout << "Number " << i+1 << ": ";
.Выход за границу массива можно получить тоже элементарно. Допустим, в твоей программе имеется массив длиной 1000 элементов, и пользователь указал используемый размер массива 1000 (т.е. будут использоваться все имеющиеся элементы). При этом, по правилам С/С++, элементы массива нумеруются от 0 до 999. А переменная цикла в
for (int i = 1; i <= arrsize; i++)
будет принимать значения от 1 до 1000. Т.е. на последней итерации будет обращение к несуществующему элементу Y[1000].