С++.Файлы.

Тема в разделе "C/C++/C#", создана пользователем Eugene, 11 май 2010.

Статус темы:
Закрыта.
  1. Eugene

    Eugene Гость

    //При этом всем выполнить еще и для бинарного файла...программа почти работает,но нужно изменить функцию "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;



    }
    }
     
  2. Eugene

    Eugene Гость

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

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

    #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;
    */
    }

    Комментарии на русском языке,поэтому не определяет...
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей