Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.11.2014, 18:43   #11
zevs 12
Пользователь
 
Регистрация: 10.10.2014
Сообщений: 25
По умолчанию

Lardes пробывал

Цитата:
Сообщение от rrrFer Посмотреть сообщение
Код:
// удаление отрицательных элементов из массива
    for (int i = 0; i < length; i++) {
        if (array[i] <= 0) {
ноль - это отрицательный элемент?



нет ноль это не отрицательный элемент он и не - и не +

короче должно считать количество элементов а не число(((

Последний раз редактировалось Stilet; 08.11.2014 в 20:21.
zevs 12 вне форума Ответить с цитированием
Старый 08.11.2014, 18:47   #12
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

Цитата:
короче должно считать количество элементов а не число(((
Чем "количество элементов" отличается от "числа элементов"?
rrrFer вне форума Ответить с цитированием
Старый 08.11.2014, 20:09   #13
igoreshka3333
Форумчанин
 
Аватар для igoreshka3333
 
Регистрация: 26.09.2014
Сообщений: 176
По умолчанию

Я же тебе решение давал уже? Что в нем не Ясно????????
Код:
#include <iostream>
using namespace std;
int lasteval (int[], int);
void negnumb (int[], int&);
void average (int[], int);

int main ()
{
    int n;
    int* X = new int;
    cout << "\nInsert the size of the array: "; cin >> n;
    X = new int[n];
    cout << "\nFill an array: \n";
    for (int i=0; i<n; i++) { cout << "X[" << i+1 << "]= "; cin >> X[i]; }
    int temp = lasteval(X, n);
    cout << "The last element with an even value: " << temp;
    cout << "\nArray without negative values: \n";
    negnumb (X, n);
    cout << "\nArray with the average of the number: \n";
    average (X, n);
    delete[] X;
    cout << endl;
    system ("pause");
}

//-------------------------------------------------------------
int lasteval (int X[], int n)
{
    int last;
    for (int i=0; i<n; i++)
    {
        if (X[i]%2==0 && X[i]>=0) last = X[i];
    }
    return last;
}
//--------------------------------------------------------------
void negnumb (int X[], int& n )
{
    for (int i=0; i<n; i++)
        if (X[i]<0)
        {
            for (int j=i; j<n; j++)
                X[j] = X[j+1];
            i--;
            n--;
        }
    for (int i=0; i<n; i++)
    {
        cout << "X[" << i+1 << "]= " << X[i];
        cout << endl;
    }
}
//--------------------------------------------------------
void average (int X[], int n)
{
    int temp = 0;
    for (int i=0; i<n; i++)
    {
        temp += X[i];
    }
    int aver = temp/n;
    int* X1 = new int[n+1];
    for (int i=0; i<n; i++)
    {
        X1[i] = X[i];
    }
    X1[n] = aver;
    for (int i=0; i<(n+1); i++)
    {
        cout << "X[" << i+1 << "]= " << X1[i];
        cout << endl;
    }
}
Смотри последнюю функцию - сопоставляй!

Последний раз редактировалось igoreshka3333; 08.11.2014 в 20:14.
igoreshka3333 вне форума Ответить с цитированием
Старый 08.11.2014, 20:17   #14
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

Код:
int* X = new int;
    cout << "\nInsert the size of the array: "; cin >> n;
    X = new int[n];
утечка

Код:
int last;
    for (int i=0; i<n; i++)
    {
        if (X[i]%2==0 && X[i]>=0) last = X[i];
    }
    return last;
UB если все элементы нечетные или отрицательные. По заданию вроде как проверять тут надо было только четность (вторая проверка лишняя 100%)

Код:
int aver = temp/n;
если все элементы были отрицательными - ты получишь деление на ноль.

Код:
int* X1 = new int[n+1];
память из под этого массива ты освободить забыл, при выходе из функции указатель теряется - утечка.

Код смотрел по диагонали, наверняка еще баги естью
rrrFer вне форума Ответить с цитированием
Старый 08.11.2014, 20:28   #15
igoreshka3333
Форумчанин
 
Аватар для igoreshka3333
 
Регистрация: 26.09.2014
Сообщений: 176
По умолчанию

Спасибо за замечания)
Код:
int* X = new int;
- да, эт не красиво!
Код:
void average (int X[], int n)
- это функция, если не обратил внимания, просто выводит на экран значения все элементы массива со сред. арифм. в конце, так что утечка не страшна при выходе, то педантичности ради можно и освободить)))
Цитата:
если все элементы были отрицательными - ты получишь деление на ноль
Будем надеятся, что хоть одно будет положительным!
igoreshka3333 вне форума Ответить с цитированием
Старый 08.11.2014, 21:18   #16
8Observer8
Старожил
 
Регистрация: 02.01.2011
Сообщений: 3,328
По умолчанию

Код:
    int* X = new int;
    cout << "\nInsert the size of the array: "; cin >> n;
    X = new int[n];
Нужно было так написать:
Код:
    int* X;
    cout << "\nInsert the size of the array: "; cin >> n;
    X = new int[n];
Утечка будет только если, к примеру, average() вызвать много раз. Если приложение, в котором есть утечка проработает какое-то время, то закончится вся оперативная память. Потом виртуальная. А дальше не знаю, что будет. Может копьютер перегрузится

А в таком примере можно забить, так как после завершения приложения кусок оперативки вернётся операционке

На практике нужно использовать std::vector. Привыкать на таких вот примерах, как эта задачка. Об утечках можно не беспокоиться. Сравните функции. Почти всё тоже самое:

Код:
void average (int X[], int n)
{
    int temp = 0;
    for ( int i=0; i < n; i++ )
    {
        temp += X[i];
    }
    int aver = temp/n;
    int* X1 = new int[n+1];
    for (int i=0; i<n; i++)
    {
        X1[i] = X[i];
    }
    X1[n] = aver;
    for (int i=0; i<(n+1); i++)
    {
        cout << "X[" << i+1 << "]= " << X1[i];
        cout << endl;
    }
}
Код:
void average (const std::vector<int> &X)
{
    int n = X.size();

    int temp = 0;
    for ( int i=0; i < n; i++ )
    {
        temp += X[i];
    }
    int aver = temp/n;
    std::vector<int> X1(n+1);   // int* X1 = new int[n+1];
    for (int i=0; i<n; i++)
    {
        X1[i] = X[i];
    }
    X1[n] = aver;
    for (int i=0; i<(n+1); i++)
    {
        cout << "X[" << i+1 << "]= " << X1[i];
        cout << endl;
    }
}

Последний раз редактировалось 8Observer8; 08.11.2014 в 21:21.
8Observer8 вне форума Ответить с цитированием
Старый 08.11.2014, 21:35   #17
igoreshka3333
Форумчанин
 
Аватар для igoreshka3333
 
Регистрация: 26.09.2014
Сообщений: 176
По умолчанию

Спасибо! Я бы тоже использовал вектор - так безопасней и возни меньше, но студенту нужен был массив...
igoreshka3333 вне форума Ответить с цитированием
Старый 08.11.2014, 21:47   #18
zevs 12
Пользователь
 
Регистрация: 10.10.2014
Сообщений: 25
По умолчанию

спасибо всем !!!
zevs 12 вне форума Ответить с цитированием
Старый 09.11.2014, 04:37   #19
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

Цитата:
Утечка будет только если, к примеру, average() вызвать много раз. Если приложение, в котором есть утечка проработает какое-то время, то закончится вся оперативная память. Потом виртуальная. А дальше не знаю, что будет. Может копьютер перегрузится

А в таком примере можно забить, так как после завершения приложения кусок оперативки вернётся операционке
Утечка будет в любом случае - нет разницы сколько раз ты вызвал функцию.
Если вызовешь много раз или для больших массивов - утечет больше памяти.

Цитата:
А в таком примере можно забить, так как после завершения приложения кусок оперативки вернётся операционке
Цитата:
Будем надеятся, что хоть одно будет положительным!
Лучше сразу забить на ВУЗ и забрать уже документы из деканата
rrrFer вне форума Ответить с цитированием
Старый 09.11.2014, 09:16   #20
8Observer8
Старожил
 
Регистрация: 02.01.2011
Сообщений: 3,328
По умолчанию

Цитата:
Утечка будет в любом случае - нет разницы сколько раз ты вызвал функцию.
Если вызовешь много раз или для больших массивов - утечет больше памяти.
Я имел ввиду ситуацию, когда память будет реально утекать. Есты вызвать average() один раз, то ничего не утечёт
8Observer8 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Дан массив X(N,M).Найти номера столбцов массива,все элементы которых четны. Из полученных значений сформировать одномерный массив. darwin1 Паскаль, Turbo Pascal, PascalABC.NET 3 16.03.2014 13:31
Одномерный массив 12 элементов,случайные положительные и отрицательные. Найти элемент наиболее близкий к среднему значению(Паскаль 1998y8m1d Помощь студентам 6 16.12.2013 17:06
Найти одномерный массив элементы которого равны минимальным значениям в строках исходной матрицы и одномерный массив элементы... Richik123 Microsoft Office Excel 1 16.10.2013 15:45
Дан одномерный массив. Удалить все элементы последовательности значения,которые кратны k Кристюша5 Паскаль, Turbo Pascal, PascalABC.NET 4 27.05.2012 21:46
Дан файл целых чисел. Удалить из него все отрицательные числа vaako Паскаль, Turbo Pascal, PascalABC.NET 5 12.04.2012 22:45