Лаба не работает, хоть и сделана без ошибок!
Пользователи, просматривающие топик: none
|
Зашли как: Guest
|
Имя |
Сообщение |
<< Старые топики Новые топики >> |
|
|
Лаба не работает, хоть и сделана без ошибок! - 2008-10-21 22:12:00.370000
|
|
|
Unsleep
Сообщений: 8
Оценки: 0
Присоединился: 2008-10-15 18:21:39.370000
|
Помогите пожалуйста, лаба сделана без ошибок, компилятор их не выдает, но млин при запуске выдает просто черный экран и всё. Что не так? Скажи пожалуйста! Тема: Последовательный контейнер 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 (double x)
{
if ((x*1000-(int)(x*1000))==0)
return true;
else
return false;
}
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();){
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," "));
}
|
|
|
RE: Лаба не работает, хоть и сделана без ошибок! - 2008-10-22 00:58:58.810000
|
|
|
_SaZ_
Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
|
Даже не читая задания скажу, что через std::vector<float> ты ничего не сделаешь. Почему? Я уже писал - смотри формат чисел с плавающей точкой. Для таких чисел недопустимы точные сравнения ( 0.1 == (float)a ). Тебе нужно читать числа, как слова (строки), и проверять, стоит ли на 4-м справа месте точка. Если да - то число оставлять =). Так же проверить, есть ли вообще дробная часть у числа. std::vector<string> в помощь.
|
|
|
RE: Лаба не работает, хоть и сделана без ошибок! - 2008-11-05 20:05:01.146666
|
|
|
Denaturat
Сообщений: 1741
Оценки: 453
Присоединился: 2008-10-27 20:50:06.380000
|
quote:
ORIGINAL: _SaZ_ Почему? Я уже писал - смотри формат чисел с плавающей точкой. Для таких чисел недопустимы точные сравнения ( 0.1 == (float)a ). хм. а умножить число на 1000 и сравнить антье числа с самим числом?
|
|
|
RE: Лаба не работает, хоть и сделана без ошибок! - 2008-11-06 00:36:08.080000
|
|
|
_SaZ_
Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
|
Не прокатит. Погугли на тему: почему нельзя сравнивать числа с плавающей точкой.
|
|
|
RE: Лаба не работает, хоть и сделана без ошибок! - 2008-11-06 17:26:31.823333
|
|
|
Denaturat
Сообщений: 1741
Оценки: 453
Присоединился: 2008-10-27 20:50:06.380000
|
quote:
ORIGINAL: _SaZ_ Не прокатит. Погугли на тему: почему нельзя сравнивать числа с плавающей точкой. извини, но тебя в детстве головой не били?
cout << (hasFraction(1., 0) ? "true" : "false") << endl; // false
cout << (hasFraction(1.2, 0) ? "true" : "false") << endl; // true
cout << (hasFraction(1.2, 1) ? "true" : "false") << endl; // false
cout << (hasFraction(1.23, 1) ? "true" : "false") << endl; // true
|
|
|
RE: Лаба не работает, хоть и сделана без ошибок! - 2008-11-06 17:42:52.636666
|
|
|
_SaZ_
Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
|
Тебя точно били. Ещё раз для тех, кто в танке и часто бился головой - http://www.rsdn.ru/article/alg/float.xml#EZNAC
|
|
|
RE: Лаба не работает, хоть и сделана без ошибок! - 2008-11-06 21:11:09.773333
|
|
|
Archivarius
Сообщений: 164
Оценки: 0
Присоединился: 2008-10-26 00:16:25.630000
|
Видимо черный экран потому что прога файл найти не может. Попробуй путь явно задать. Например "C:\\n.txt". Вот здесьvector<float>::iterator s=v.begin();
for(s=v.begin(); s!=v.end();++s) зачем два раза s=v.begin() ?
|
|
|
RE: Лаба не работает, хоть и сделана без ошибок! - 2008-11-06 22:42:13.070000
|
|
|
_SaZ_
Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
|
Видимо чёрный экран потому, что сформированный вектор оказывается пустым, и проге нечего выводить ;). Эта тема уже сегодня активно обсуждалась.
|
|
|
RE: Лаба не работает, хоть и сделана без ошибок! - 2008-11-07 20:45:19.523333
|
|
|
Archivarius
Сообщений: 164
Оценки: 0
Присоединился: 2008-10-26 00:16:25.630000
|
Да не, в Visual C++ скопировал, у меня чёто там выводит. На счет правильности даже не вникал что именно, но что-то есть..
|
|
|
RE: Лаба не работает, хоть и сделана без ошибок! - 2008-11-07 21:11:43.680000
|
|
|
Denaturat
Сообщений: 1741
Оценки: 453
Присоединился: 2008-10-27 20:50:06.380000
|
quote:
ORIGINAL: Archivarius Да не, в Visual C++ скопировал, у меня чёто там выводит. На счет правильности даже не вникал что именно, но что-то есть.. тут у нас развлечение: пишем лабу по этому заданию; присоединяйся. ЯП - C++, но ограничения на библиотеки думаю можно снять ;) а, впрочем, на других языках тоже можно
|
|
|
RE: Лаба не работает, хоть и сделана без ошибок! - 2008-11-08 01:54:11.836666
|
|
|
_SaZ_
Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
|
Может после выходных и я присоединюсь. У меня пока фотошоп "горит"…
|
|
|
RE: Лаба не работает, хоть и сделана без ошибок! - 2008-11-08 19:42:58.280000
|
|
|
Denaturat
Сообщений: 1741
Оценки: 453
Присоединился: 2008-10-27 20:50:06.380000
|
quote:
ORIGINAL: _SaZ_ Может после выходных и я присоединюсь. У меня пока фотошоп "горит"… жду с нетерпением. реализация парсеров на C++ - очень улекателное занятие, с интересом понаблюдаю
|
|
|
|
|