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

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - 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