2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 Лаба не работает, хоть и сделана без ошибок!
Сообщение21.10.2008, 21:25 


27/08/08
22
Помогите пожалуйста, лаба сделана без ошибок, компилятор их не выдает, но млин при запуске выдает просто черный экран и всё. Что не так? Скажи пожалуйста!


Тема: Последовательный контейнер 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," "));
   
}

 Профиль  
                  
 
 
Сообщение22.10.2008, 15:42 
Заслуженный участник
Аватара пользователя


12/10/05
478
Казань
Что-то у меня это вообще не компилится на MinGW версии 3.4.2 ... :( Какой компилятор Вы использовали?

 Профиль  
                  
 
 
Сообщение24.10.2008, 17:29 
Аватара пользователя


18/10/08
454
Омск
Sanyok писал(а):
Что-то у меня это вообще не компилится на MinGW версии 3.4.2 ... Sad Какой компилятор Вы использовали?

Скорее всего, чтобы это скомпилировалось в MinGW необходимо добавить
Код:
#include <iterator>


Unsleep писал(а):
Помогите пожалуйста, лаба сделана без ошибок, компилятор их не выдает, но млин при запуске выдает просто черный экран и всё. Что не так? Скажи пожалуйста!

У меня ваша программа что-то выводит:
Код:
1.1 1.2 0 10 20
0
0
0
0
0
1.1 1.2 ok2
1.1 1.2

На файле n.txt вида
Код:
1.1 1.2 0.0 10 20

Убедитесь, что программа находит такой файл, иначе на самом деле ничего выводиться не будет.

 Профиль  
                  
 
 Лаб.работа (проблема с выводом)
Сообщение05.11.2008, 18:55 


27/08/08
22
Помогите пожалуйста, написал лабораторную, компилятор не выдает ни одной ошибки, код по заданному заданию написано совершенно правильно. НО, при запуске программа выдает лишь строчку "vot oni:" (ниже в см. коде) и всё! Никого ничего больше!!!

Прочитать значения вектора чисел с плавающей точкой из текстового файла. Удалить из вектора все элементы, у которых дробная часть содержит больше 3-х значащих цифр. Перед каждым элементом, целая часть которого является нечетным числом, вставить значение его квадрата.

Код:
#include<iostream>
#include<vector>
#include<fstream>
#include<cmath>
using namespace std;
int function(double n)
{
   int temp;
if((n/2)-(int)(n/2)==0)

   temp=1;
else temp=0;
return temp;
}
void main()
{
   double temp;
int j,k;
vector <double> v;
vector <double>::iterator i;
fstream f;
f.open("1.txt",ios::in);
cout<<"vot oni:"<<endl;
while(!f.eof())
{    f>>temp;
     if((fabs(temp)-fabs((int)(temp)))!=0)
        v.push_back(temp);
}
for(i=v.begin();i!=v.end();i++)
    cout<<*i<<" ";
cout<<endl;
f.close();

do
{k=0;
for(i=v.begin(),j=0;i!=v.end();i++,j++)
     if((fabs(v[j]*1000)-fabs((int)(v[j]*1000)))>0)
    {    v.erase(i);
        k++;
         break;
    }
}
while(k==1);
for(i=v.begin();i!=v.end();i++)
    cout<<*i<<" ";
cout<<endl;

j=0;
i=v.begin();
for(;i!=v.end();i++,j++)
   if(function(fabs((int)(v[j])))==0)
   {    v.insert(i,v[j]*v[j]);
        k++;
       j++;
       i=v.begin()+j;
   }
for(i=v.begin();i!=v.end();i++)
    cout<<*i<<" ";
cout<<endl;
}




P.S. В файле 1.txt все элементы (числа) правильно расположены и написаны.

 Профиль  
                  
 
 
Сообщение06.11.2008, 09:17 
Супермодератор
Аватара пользователя


29/07/05
8248
Москва
 !  PAV:
Строгое замечание за дублирование. Темы объединены.

 Профиль  
                  
 
 
Сообщение06.11.2008, 16:40 


30/09/06
68
Одесса
Кто сказал, что код правильный?
Основной цикл обработки написан ошибочно.
Попробуйте так:
функция main()
{
double temp;
int j,k;
vector <double> v;
vector <double>::iterator i;
fstream f;
f.open("1.txt",ios::in);
cout<<"vot oni:"<<endl;
while(!f.eof())
{ f>>temp;
if((fabs(temp)-fabs((int)(temp)))!=0)
v.push_back(temp);
}
for(i=v.begin();i!=v.end();i++)
cout<<*i<<" ";
cout<<endl;
f.close();

//исправлен
k=0;
for(i=v.begin(),j=0;i!=v.end();i++,j++)
if((fabs(v[j]*1000)-(int)fabs((v[j]*1000)))>0)
v.erase(i);



for(i=v.begin();i!=v.end();i++)
cout<<*i<<" ";
cout<<endl;

j=0;
i=v.begin();
for(;i!=v.end();i++,j++)
if(function(fabs((int)(v[j])))==0)
{ v.insert(i,v[j]*v[j]);
k++;
j++;
i=v.begin()+j;
}
for(i=v.begin();i!=v.end();i++)
cout<<*i<<" ";
cout<<endl;
}
У меня работает.

 Профиль  
                  
 
 
Сообщение08.11.2008, 12:15 


27/08/08
22
Lotos писал(а):
Кто сказал, что код правильный?
Основной цикл обработки написан ошибочно.
Попробуйте так:
функция main()
{
double temp;
int j,k;
vector <double> v;
vector <double>::iterator i;
fstream f;
f.open("1.txt",ios::in);
cout<<"vot oni:"<<endl;
while(!f.eof())
{ f>>temp;
if((fabs(temp)-fabs((int)(temp)))!=0)
v.push_back(temp);
}
for(i=v.begin();i!=v.end();i++)
cout<<*i<<" ";
cout<<endl;
f.close();

//исправлен
k=0;
for(i=v.begin(),j=0;i!=v.end();i++,j++)
if((fabs(v[j]*1000)-(int)fabs((v[j]*1000)))>0)
v.erase(i);



for(i=v.begin();i!=v.end();i++)
cout<<*i<<" ";
cout<<endl;

j=0;
i=v.begin();
for(;i!=v.end();i++,j++)
if(function(fabs((int)(v[j])))==0)
{ v.insert(i,v[j]*v[j]);
k++;
j++;
i=v.begin()+j;
}
for(i=v.begin();i!=v.end();i++)
cout<<*i<<" ";
cout<<endl;
}
У меня работает.


Всё попрежнему :( Можешь весь код выложить? Посмотрел в созданый файл - вроде числа нормально расположены, cкинь какие ты числа указал, ну или вообще содержимое файла 1.txt

 Профиль  
                  
 
 
Сообщение08.11.2008, 15:06 


30/09/06
68
Одесса
Текстовый файл имеет вид:
1.2 1.3678 1.4 2.5 1.6 1.7

Весь код я выложила, только подключения убрала у меня среда разработки Builder. :?

Если твоя среда разработки VisualStudio, то в консоли возможен не вывод информации в случае ошибки чтения из файла. Что у тебя в файле (даже стало интересно? :?:

 Профиль  
                  
 
 
Сообщение08.11.2008, 15:28 
Супермодератор
Аватара пользователя


29/07/05
8248
Москва
Unsleep
а пройти по коду с отладчиком не пробовали?

 Профиль  
                  
 
 
Сообщение08.11.2008, 22:43 


27/08/08
22
Lotos писал(а):
Текстовый файл имеет вид:
1.2 1.3678 1.4 2.5 1.6 1.7

Весь код я выложила, только подключения убрала у меня среда разработки Builder. :?

Если твоя среда разработки VisualStudio, то в консоли возможен не вывод информации в случае ошибки чтения из файла. Что у тебя в файле (даже стало интересно? :?:


Вообщем я нашел свою проблему. Проблема исчерпана - лабораторная сделана. Всём спасибо =)

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 10 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group