С++.Файлы.

  • Автор темы Eugene
  • Дата начала
Статус
Закрыто для дальнейших ответов.
E

Eugene

#1
//При этом всем выполнить еще и для бинарного файла...программа почти работает,но нужно изменить функцию "read_file" в ней сам механизм нахождения самого близкого числа к целому,думаю,что нужно найти разность от целой части числа,умноженной на тысячу минус %1000 и тоже самое другого числа,у кого меньше,тот и ближе к своему целому оналогу...но я не могу записать ,чтобы цикл считался справа на лево и слева на право....помогите,плиз....

ВОТ САМА ПРОГРАММА


C++:
#include <stdlib.h>
#include <time.h>				// for time()
#include <fstream>
#include <iostream>
#include <math.h>
using namespace std;

const int p=5;


// создание файла cлучайных целых чисел
void create(ofstream &outfile, int n);	 
void read_file(ifstream &infile,int n); 

int main()
{
srand((unsigned)time(NULL));
int n;//kol-vo chisel v file
n=p;



// cоздадим текстовый файл cл. чисел 
ofstream outfile("file.txt");	 
if (!outfile)
{cout<<"error1"<<endl; 
return 1;
}

create(outfile, n);
outfile.close();
ifstream infile("file.txt");
read_file(infile,n);

return 0;
}


// создание текстового файла cлучайных целых чисел
void create(ofstream &outfile, int n) 
{
for (int i = 1; i <= n; i++)
{
double v= sqrt(rand()%100);
outfile<<v<<endl;	// запись целых чисел в файл 
// каждое число в новой строке
cout<<v<<endl;
}
} 
void read_file(ifstream &infile,int n)//p eto razmer massiva
{
double v,max=0.009,right=0;

int i=0;
double a[p];
infile>>v;
while (!infile.eof())
{
a[i]=v;
infile>>v;

i++;
}
for (i=1;i<n;i++)
{
if ((static_cast <int> (a[i]*1000))-(a[i]*1000)<(static_cast <int> (a[i+1]*1000))-(a[i+1]*1000))
{
right=a[i];
}
else continue;

for (i=(n-1);i>=1;i++)
{
if ((static_cast <int> (a[i]*1000))-(a[i]*1000)<(static_cast <int> (a[i-1]*1000))-(a[i-1]*1000))
{
if (a[i]<right)
{	 
right=a[i];
}

}
else continue;







}
cout<<"samoe blizkoe chislo k zelomu"<<right<<endl;



}
}
 
E

Eugene

#2
Ну ,народ вы и дали,не смогли написать...я уже сам написал,пока вы думали...

ВОТ РАБОТОСПОСОБНЫЙ КОД ПРОГРАММЫ!!!

#include <stdlib.h>
#include <time.h> // for time()
#include <fstream>
#include <iostream>
#include <conio.h> // for getch()
#include <math.h>
using namespace std;

const int p=5;


// создание файла cлучайных целых чисел
void create(ofstream &outfile, int n);
void read_file(ifstream &infile,int n);

int main()
{
srand((unsigned)time(NULL));
int n;//kol-vo chisel v file
n=p;



// cоздадим текстовый файл cл. чисел
ofstream outfile("file.txt");
if (!outfile)
{cout<<"error1"<<endl;
return 1;
}

create(outfile, n);
outfile.close();
ifstream infile("file.txt");
read_file(infile,n);
getch();


return 0;

}


// создание текстового файла cлучайных целых чисел
void create(ofstream &outfile, int n)
{
for (int i = 1; i <= n; i++)
{
double v= sqrt(rand()%100);
// double v=3.067*i;
outfile<<v<<endl; // запись целых чисел в файл
// каждое число в новой строке
cout<<v<<endl;

}

}




//функция,где считается самое близкое число к целому
void read_file(ifstream &infile,int n)//p eto razmer massiva
{
double v,max=0.009,right=0,per=0,per2=0;
int k;//k-колличество итераций

int i=0;
double a[p];
infile>>v;



while (!infile.eof())
{
a=v;
infile>>v;

i++;
}

right=a[0];
for (i=0;i<n;i++)
{
per=a;
per2=a[i+1];

if (fabs(500 - ((per*1000) - (static_cast <int>(per))*1000)) > fabs((500 - ((per2*1000) - (static_cast <int>(per2))*1000))))//|500-343(ot 1.343)| > |500 - 646 (ot 1.646)|
{
if (fabs(500 - ((right*1000) - ((static_cast <int>(right)))*1000)) >= fabs((500 - ((per*1000) - (static_cast <int>(per))*1000))))
{
right=right;
}
else right=a;

}
else continue;


}
cout<<"Otvet:"<<right<<endl;
















/* if (a<(static_cast <int>((a*1000)+500))||a[i+1]<(static_cast <int>((a[i+1]*1000)+500))) //будем сравнивать на двух отрезках от 1000 до 1500 И от 1500 до 2000 ,чтобы избавиться от ошибки (1,245,1,347,1,980) 1000-347будет болше,чем 1980 и оно присвоится переменной right вместо правдивое переменной 1,245
{

if ((1000-((a*1000)-static_cast <int>(a*1000))) > ((1000-((a[i+1]*1000)-static_cast <int> (a[i+1]*1000)))))
{
if ((1000-((right*1000)-static_cast <int>(right*1000))) > ((1000-((a*1000)-static_cast <int> (a*1000)))))
right=right;
else right=static_cast <double>(a);
}
else continue;


}
}
for (i=(n-1);i>=1;i--)
{
if (a>(static_cast <int>((a*1000)+500)))
{

if ((1000-((a*1000)-static_cast <int>(a*1000))) < ((1000-((a[i-1]*1000)-static_cast <int> (a[i-1]*1000)))))
{
right2=a;
}
else cout<<"Otvet:"<<right<<endl;
}
else cout<<"Otvet;"<<right<<endl;
}
if (right==0)
{
cout<<"Otvet:"<<right2<<endl;
}
else


if((1000-((right*1000)-static_cast <int>(right*1000))) < (1000-((right2*1000)-static_cast <int>(right2*1000))))
{
cout<<"Otvet:"<<right<<endl;
}
else cout<<"Otvet:"<<right2<<endl;
*/
}

Комментарии на русском языке,поэтому не определяет...
 
Статус
Закрыто для дальнейших ответов.