Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > C++ Fail


Автор: geranija 22.4.2006, 11:21
Please, помогите с этим заданием

Если и первый, и последний элемент файла - оба они или позитивние или негативние, тогда все хранявшиеся в файле нигативние числа увеличить на 1.

Зарание, спасибо!  smile 

 

Автор: asdf 22.4.2006, 18:13
Код
#include <iostream>
#include <fstream>
#include <vector>

using namespace std;

int main(void)
{
    const char* PATH="d:\\file.txt";
    ifstream if1(PATH);

    vector <int> numbers;

    while ( if1.peek()!=EOF ){
        int number;
        if1 >> number;
        numbers.push_back(number);
    }
    if1.close();

    if ( numbers.back()*numbers.front()>0 ){
        int s=numbers.size();
        for (int i=0;i<s;i++)
            if ( numbers.at(i)<0 ) numbers.at(i)++ ;

        ofstream of1(PATH);
        of1<<numbers.front();
        for (int i=1;i<s;i++)
            of1<<' '<<numbers.at(i);
        of1.close();
    }
    return 0;
}
 

Автор: geranija 22.4.2006, 18:46
Ничего не понимаю  smile это уж больно сложным языком написанно для 1 курса  smile  

Автор: DeadSoul 22.4.2006, 19:51
asdf, если использовать stl, но на полную.
Код

#include <iostream>
#include <fstream>
#include <iterator>
#include <vector>
#include <functional>
#include <algorithm>

class MyOper: public std::unary_function<void,int>
{
public:
    void operator()(int& some )
    {
        if ( some >= 0 )
            return;
        ++some;
    }
};

int _tmain(int argc, _TCHAR* argv[])
{
    std::ifstream fin("C:/1.txt");
    std::vector<int> data;
    std::copy( std::istream_iterator<int>(fin), std::istream_iterator<int>(), std::back_inserter(data) );

    if ( !data.empty() && data.front()*data.back()>0 )
        std::for_each( data.begin(), data.end(), MyOper() );

    std::copy( data.begin(), data.end(), std::ostream_iterator<int>( std::cout, " " ) );
    return 0;
}


 

Автор: nostromo 24.4.2006, 09:48
Замечательно!!! 

Хорошая тенденция. Просят на C++, значит и надо писать на C++,
а не на С с классами, который пытаются выдать за C++ некоторые преподы и старперы.

 

Автор: DeadSoul 24.4.2006, 10:03
nostromo, а ведь красиво. Ни одного цикла. smile  

Автор: nostromo 24.4.2006, 10:08
... Не говоря уже об отсутствии проблем с освобождением памяти. А кое-кто говорит, что это слишком сложно  smile   

Автор: asdf 24.4.2006, 10:51
Цитата(nostromo)
а не на С с классами, который пытаются выдать за C++ некоторые преподы и старперы.

Ну, не говори. У нас например заставляли переписывать лабы для избежания классов (писали под Турбо Си, естественно).



Изменение 29-ой строки, для вывода в файл....
Код
std::copy( data.begin(), data.end(), std::ostream_iterator<int>( static_cast<std::ostream&>(std::ofstream("c:/1.txt")), " " ) );
 

Автор: nostromo 24.4.2006, 11:23
Я совсем не против С или С с классами. Все это необходимо, только нужно называть вещи своими именами.

P.S. Скоро переедем во флейм.  smile  

Автор: asdf 24.4.2006, 12:04
Не перед всеми преподами умничать одинаково полезно.
Скорее всего и у geranija непростой случай.
Цитата(nostromo @  24.4.2006,  11:23 Найти цитируемый пост)
только нужно называть вещи своими именами.

Извиняй, сам на программиста не тяну.
 

Автор: nostromo 24.4.2006, 13:05
Цитата

Не перед всеми преподами умничать одинаково полезно.
Скорее всего и у geranija непростой случай.

Правда жизни ...

Цитата

Извиняй, сам на программиста не тяну.

Ложная скромность?
Мне кажется, что владение базовыми вещами из STL, Boost давно уже переросло из признака "крутизны" программиста в насущную необходимость. Попробуйте найти работу в нормальной фирме без этих вещей. Хуже того, чтобы перейти от того, чем пичкают в школе и универе к осознания необходимости этих библиотек простой практики программирования недостаточно. Это пропасть. Чтобы понять, что в некотором месте выгоднее использовать лямбда-функции нужно по крайней мере знать, что это такое.

 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)