![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
Unsleep |
![]()
Сообщение
#1
|
Школьник ![]() Группа: Продвинутые Сообщений: 13 Регистрация: 4.6.2008 Город: Красноярск Учебное заведение: СФУ ![]() |
Вызвался откомментить, и только получив работу понял что я этого сделать не могу. Помогите пожалуйста, сделайте комментарии если не к каждой строке то к самым важным!
Вообщем, вот самое условие! Тема: Последовательный контейнер vector. Функции члены: push_back(), insert(), erase(). Прочитать значения вектора чисел с плавающей точкой из текстового файла. Удалить из вектора все элементы, у которых дробная часть содержит больше 3-х значащих цифр. Перед каждым элементом, целая часть которого является нечетным числом, вставить значение его квадрата. #include <iostream> #include <fstream> #include <algorithm> #include <cstdlib> #include <vector> using namespace std; float sq(float x){return x*=x;} bool f1 (float x){//не более 3х значащих цифр в дробнйо части if (*x*1000-(int)*x-1000)) return 0; else return 1; } bool f2(float x){ //нечетное ли число if((int)x%2) return 0; else return 1; } void main(){ ifstream in("n.txt");//читаем из файла в поток vector<float> v; float x; while(in>>x,!in.eof())//добавляем числа в вектор v.push_back(x); copy(v.begin(),v.end(),ostream_iterator<float>(cout," "));//выводим на экран cout<<endl; vector<float>::iterator i=v.begin(); int cel=0; for(i=v.begin(); i!=v.end()(IMG:style_emoticons/default/wink.gif){//удаляем, если дробная часть >3х символов cout<<(*i*1000)-(long)(*i*1000)<<endl; if(f1(*i)) v.erase(i); else ++i; } copy(v.begin(),v.end(),ostream_iterator<float>(cout," ")); cout<<"ok2"<<endl; vector<float>::iterator s=v.begin(); for(s=v.begin(); s!=v.end();++s) { if(f2(*s)) {v.insert(s,sq(*s)); ++s;} } copy(v.begin(),v.end(),ostream_iterator<float>(cout," ")); } Как сказано в условии если в дробной части более 3х цифр, то удалить из вектора все эти элементы - для этого написана специальная логическая функция, которая шла перед мейном. принцип был такой умножаем число на тыщу и отнимаем целую часть, умноженную на тыщу. но у с++ есть такая забавная фишка. то есть когда число большое (знаков после запятой много) он верно домножает на 1000, верно выделяет целую часть и домножает на тыщу... но когда отнимает показывает совершенно не то, мудрые люди говорили, что надо переписать эту функцию без вычитания, раз он на нем лажает . |
Inspektor |
![]()
Сообщение
#2
|
Аспирант ![]() ![]() ![]() Группа: Активисты Сообщений: 384 Регистрация: 11.6.2008 Город: Крыжополь Учебное заведение: БГТУ Вы: студент ![]() |
Цитата Вызвался откомментить, и только получив работу понял что я этого сделать не могу. Помогите пожалуйста, сделайте комментарии если не к каждой строке то к самым важным! Комментарии должен писать автор кода, даже если религия ему этого не позволяет. Комментить чужой код при живом авторе- это извращение. |
creer |
![]()
Сообщение
#3
|
Студент ![]() ![]() Группа: Продвинутые Сообщений: 121 Регистрация: 28.10.2007 Город: Екатеринбург Учебное заведение: УГТУ-УПИ Вы: студент ![]() |
Функция f1 работать не должна вообще (IMG:style_emoticons/default/smile.gif)
Выгляднть она должна хотя бы так: Код bool f1 (double x) { if ((x*1000-(int)(x*1000))==0) return true; else return false; } Комментить все - это скучно и долго. Если что-то непонятно, то можете написать сюда более конкретный вопрос (IMG:style_emoticons/default/smile.gif). А так, например, в том же Страуструпе это все объясняется. |
![]() ![]() |
![]() |
Текстовая версия | Сейчас: 28.5.2025, 10:39 |
Зеркало сайта Решебник.Ру - reshebnik.org.ru