Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [C++ Visual] БИБЛИОТЕКА STL В ЯЗЫКЕ С++ 
:(
    Опции темы
WolfEater
Дата 14.3.2015, 20:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 14.3.2015

Репутация: нет
Всего: нет



Помогите пожалуйста:
Дан массив из N вещественных чисел. К каждому отрицательному элементу добавить минимальный положительный элемент. Сжать массив, удалив из него все элементы, кратные числу t. Освободившиеся в конце массива элементы заполнить количеством нулей в исходном массиве. Если элементы, расположенные за первым нулевым элементом, упорядочены в порядке возрастания, то найти сумму элементов массива, расположенных до последнего максимального элемента. Удалить из массива элементы, чей знак не совпадает со знаком минимального элемента. Отсортировать по убыванию часть массива между элементами с заданными индексами i1 и i2.

Вот примерный код программы:
Код

#include <vector>
#include <iostream>
#include <math.h>

using namespace std;

void print(vector<float> *Array)
{
    cout << "Array[]: ";
    vector<float>::iterator it = Array->begin();
    while (it != Array->end())
        cout << *it++ << " ";
    cout << endl;
}

float fmin(vector<float> *Array)
{
    vector<float>::iterator it = Array->begin();
    float min = *it;
    while (++it != Array->end())
    if (*it<min)
        min = *it;
    return min;
}

float fmax(vector<float> *Array)
{
    vector<float>::iterator it = Array->begin();
    float max = *it;
    while (++it != Array->end())
    if (*it>max)
        max = *it;
    return max;
}

vector<float>::iterator fzero(vector<float> *Array)
{
    vector<float>::iterator it = Array->begin();
    while (it++ <= Array->end())
    if (*it == 0) return it;
    return it;
}

int issort(vector<float> *Array)
{
    vector<float>::iterator it = fzero(Array);
    while ((it + 1) != Array->end())
    {
        if (*it>*(it + 1))
        {
            cout << *it << ">" << *(it + 1) << endl;
            return 0;
        }
        it++;
    }
    return 1;
}

float fsum(vector<float> *Array)
{
    vector<float>::iterator it = Array->begin();
    float sum = 0, max = fmax(Array);
    while (*(it++) != max)
        sum += *it;
    return sum;
}

void add(vector<float> *Array, float add)
{
    vector<float>::iterator it = Array->begin();
    while (it != Array->end())
    {
        *it += add;
        it++;
    }
}

void task1(vector<float> *Array, float t)
{
    int count = 0;
    vector<float>::iterator it = Array->begin() - 1;
    while (it<Array->end())
    {
        if (floor(*it / t) - *it / t == 0 && *it != 0)
        {
            cout << *it;
            Array->erase(it);
            count++;
        }
        it++;
    }
    while (count-- != 0) Array->push_back(0);
}

void task2(vector<float> *Array)
{
    if (issort(Array))
        cout << "Summ=" << fsum(Array) << endl;
    else cout << "After zero - unsorted" << endl;
}

void task3(vector<float> *Array)
{
    float min = fmin(Array);
    vector<float>::iterator it = Array->begin();
    while (it<Array->end())
    {
        if (min*(*it)<0)
            Array->erase(it);
    it++;
    }
}

void sort(vector<float> *Array, int i1, int i2)
{
    for (int i = i1; i <= i2; i++)
    {
        vector<float>::iterator max = Array->begin() + i;
        vector<float>::iterator it = Array->begin() + i;
        while (it<Array->begin() + i2)
        {
            if (*max<*it)
                max = it;
            float t = *max;
            *max = *it;
            *it = t;
            it++;
        }
    }
}

int main()
{


    int N;
    cout << "Enter N: ";
    cin >> N;

    vector<float> Array(N);
    cout << "Enter Array:" << endl;
    for (int i = 0; i<N; i++) cin >> Array[i];

    print(&Array);
    add(&Array, fmin(&Array));
    print(&Array);

    float t = 0;
    cout << "Enter t: ";
    cin >> t;

    task1(&Array, t);

    print(&Array);

    task2(&Array);

    task3(&Array);
    print(&Array);

    int i1, i2;
    cout << "Enter i1: ";
    cin >> i1;
    cout << "Enter i2: ";
    cin >> i2;

    sort(&Array, i1, i2);
    print(&Array);
    return 0;
}


Сам код работает в другой программе, но на Visual Studio 2013 он вылетает с ошибкой "Debug Assertion Failed". Не могу понять, как исправить эту ошибку. Помогите исправить код или можете предложить свой код к заданию.
PM MAIL   Вверх
rudolfninja
Дата 16.3.2015, 10:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 341
Регистрация: 19.2.2013
Где: г. Минск

Репутация: 3
Всего: 6



Цитата

vector<float>::iterator it = Array->begin() - 1;


Этот код взял из функции task1
Что, по-Вашему, происходит в этой строке? Можете объяснить в чем смысл?
Собственно, в этой строке и падает ошибка и непонятно как этот код "работает в другой программе".  Итератор будет ссылаться на непонятно что, и когда Вы пытаетесь прочитать что-то по этому адресу и падает ASSERT.
Очевидно, что -1 быть не должно, ну или в этой строке содержиться какой-то скрытый неочевидный смысл.


Это сообщение отредактировал(а) rudolfninja - 16.3.2015, 12:04
PM MAIL Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0405 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.