Задача По С++

Тема в разделе "C/C++/C#", создана пользователем vladis222, 9 фев 2012.

  1. vladis222

    vladis222 Active Member

    Регистрация:
    6 дек 2011
    Сообщения:
    31
    Симпатии:
    0
    Здравствуйте, прошу помощи по такому вопросу:у нас 1 лабораторная в этом семестре-работа с переходом от си к си++. цель работы состоит в том, что дана таблица из в которой описаны произв-во комбайнов и тракторов за 50-57 годы. и нужно сформировать рез-т в виде макс процента по отношению, записать его в выходной файл. я часть работы сделал,нашел это значение, но с файлами работаю не чоень, не очень понимаю в какой посл-ти нужно выполнять с ними работу. Подскажите пожалуйста.
    Вот код:<!--shcode--><pre><code class='"#include<iostream>
    using namespace std;
    #include<fstream>
    #include<iomanip>
    const int N= 10;
    const int LN= 20;
    const int LC= 15;
    const int LG_I= 77;
    const int LG_V= 52;

    /* ========================================== ИСХОДНЫЕ ДАННЫЕ =================================================================== */
    struct stricx /* структурный тип и исходная таблица */
    {char name[LN+1'>; /* название cтраны */
    int tr_50; /* Число тракторов в 50 году */
    int tr_57; /* Число тракторов в 75 году */
    float komb_50; /* Число комбайнов в 50 году */
    float komb_57; /* Число комбайнов в 75 году */
    };stricx c[N];
    int n /* Реальное количество стран*/
    /* ========================================== Результаты =================================================================== */
    struct result
    {char name[LN+1]; /* название cтраны, в которой процент прироста парка комбайнов в 50 году по сравнению к 57 году-макс. */
    float abs_prir; /* абсолютный прирост парка комбайнов найденной страны 50-57 годов . */
    }; result c[N];
    //==================================================== ПРОМЕЖУТОЧНЫЕ ДАННЫЕ=====================================================
    int fl=0; /* признак: файл еще не создан */
    ofstream fileout; /* поток (для задания) */
    char namevix[13]; /* имя выходного потока */
    int pvix; /* есть ли в командной строке имя потока ?*/
    char sg_vix[LG_V+1]={"---------------------------------------------------\n"};
    /* =====================================================ГЛАВНАЯ ФУНКЦИЯ ===================================================== */
    main(int argc,char * argv[])
    /* имя выходного - аргумент main */
    /* имя входного - пользователь */
    // Проверка ограничений: задание в командной строке имени выходного файла
    // Проверка ограничений: задание в командной строке имени
    // выходного файла
    if (argc == 0)
    { cerr<<"При вызове программы укажите имя выходного файла !!!\n";
    getch();
    pvix=0; exit(-1);
    };
    strcpy(namevix,argv[1]); // запоминание имени выходного потока
    int clrscr();
    //================================================ФУНКЦИЯ ДЛЯ ЗАДАНИЯ 1 - СОЗДАНИЕ ИСХОДНОЙ ТАБЛИЦЫ===============================*/
    void create_t()
    {int pr;
    int i;
    float r;
    char sg_icx[LG_I+1]="--------------------------------------------------------\n";
    cout <<"Создание таблицы\n";
    if(fl)
    {cerr << "ТАБЛИЦА УЖЕ БЫЛА СОЗДАНА !!!\n";
    int getch();
    exit(-1);
    }
    else
    {fl=1;
    do
    {cout << "Введите количество стран (не более чем "<<N << "): ";
    cin >> n;
    if(n<0 || n>N)
    {pr=1; cout << "Вы ошиблись!\n";}
    else pr=0;
    } while(pr);
    //============================================================== Ввод табличных данных =========================================//
    cout << "Введите данные о странах\n";
    cout << sg_icx;
    cout << "!NN! Название страны ! Кол-во тракторов в 50 году ! Кол-во тракторов в 57 году";
    cout << " Кол-во комбайнов в 50 году ! Кол-во комбайнов в 57 году !\n";
    cout << sg_icx;
    do /* проверка ограничений */
    {for(i=0; i<n; i++)
    {cout << "! " << i+1 << " ";
    cin >> c.name;
    cin >> c.tr_50;
    cin >> c.tr_57;
    cin >> c.komb_50;
    cin >> c.komb_57;

    if(c.tr_50<0 || c.tr_57<0||c.komb_50||c.komb_57<0)
    {pr=1;
    cerr << "Вы ошиблись. Повторите ввод\n"; i--; }
    else pr=0;
    }
    }while(pr);
    cout << sg_icx;
    cout << "Создана таблица из " << i << " записей\n";
    }
    }
    /*========================================================Выполнение задания=============================================================*/
    /*=============Нахождение страны, у которой процент прироста комбайнов в 1957 году по отношению к 1950 году максимальный================*/
    void percent_max()
    {int pr;
    float perc_max;
    int n_max;
    n_max=-1;perc_max=((c[0].komb_57-c[0].komb_50)*0,01);
    for(int i=0;i<n;i++)
    {
    if(((c.komb_57-c.komb_50)*0,01)>((c[0].komb_57-c[0].komb_50)*0,01))
    {perc_max=((c.komb_57-c.komb_50)*0,01); n_max=i;}
    }
    ifstream f;[/CODE]
     
  2. rrrFer

    rrrFer Well-Known Member
    Команда форума C\C++ Team

    Регистрация:
    6 сен 2011
    Сообщения:
    1.324
    Симпатии:
    36
    Код (Text):
    using namespace std;
    #include
    #include
    сначала include, потом using.
    1. создаешь идентификатор файла(файлового потока) в своей программе, например:
    Код (Text):
    std ::ifstream ifst;
    std ::ofstream ofst;
    2. открываешь файл, при этом идентификатор связывается с именем файла:
    Код (Text):
    ifst .open( "in.txt" );
    ofst .open( "ofst.txt" );
    3. че-то как-то пишешь в файл, или читаешь, например:
    Код (Text):
    int n;
    ifst >> n;
    ofst << n;
    4. закрываешь файл.
    Код (Text):
    ifst .close();
    ofst .close();
     
  3. vladis222

    vladis222 Active Member

    Регистрация:
    6 дек 2011
    Сообщения:
    31
    Симпатии:
    0
    Ну я доделал программу, вроде должно быть нормально, но прога выдает непонятные ошибки:

    вот код

    <!--shcode--><pre><code class='"[b'>"]#include<iostream>
    using namespace std;
    #include<fstream>
    #include<iomanip>
    #include<conio.h>
    #include<Windows.h>
    #include<stdlib.h>
    const int N= 10;
    const int LN=20;
    const int LC= 15;
    const int LG_I= 77;
    const int LG_V= 52;

    /* ========================================== ИСХОДНЫЕ ДАННЫЕ =================================================================== */
    struct stricx /* структурный тип и исходная таблица */
    {char name[LN+1]; /* название cтраны */
    int tr_50; /* Число тракторов в 50 году */
    int tr_57; /* Число тракторов в 75 году */
    float komb_50; /* Число комбайнов в 50 году */
    float komb_57; /* Число комбайнов в 75 году */
    } c[N];
    int n; /* Реальное количество стран*/
    /* ========================================== Результаты =================================================================== */
    struct
    { char name[LN+1]; /* название cтраны, в которой процент прироста парка комбайнов в 50 году по сравнению к 57 году-макс. */
    float abs_prir; /* абсолютный прирост парка комбайнов найденной страны 50-57 годов . */
    } c_r[N];
    //==================================================== ПРОМЕЖУТОЧНЫЕ ДАННЫЕ=====================================================
    int fl=0; /* признак: файл еще не создан */
    ofstream fileout; /* поток (для задания) */
    char namevix[13]; /* имя выходного потока */
    int pvix; /* есть ли в командной строке имя потока ?*/
    char sg_vix[LG_V+1]={"---------------------------------------------------\n"};
    char sg_icx[LG_I+1]={"---------------------------------------------------\n"};
    /*=========================================================Прототипы функций==============================================================*/
    void create_t();
    void percent_max();
    /* =====================================================ГЛАВНАЯ ФУНКЦИЯ ===================================================== */
    int main(int argc,char * argv[])
    {
    /* имя выходного - аргумент main */
    /* имя входного - пользователь */
    /*=====================================================Прототипы заданных функций===========================================================*/
    void percent_max();
    // Проверка ограничений: задание в командной строке имени выходного файла
    // Проверка ограничений: задание в командной строке имени выходного файла

    if (argc == 0)
    { cerr<<"При вызове программы укажите имя выходного файла !!!\n";
    getch();
    pvix=0; exit(-1);
    };
    strcpy((namevix),argv[1]); // запоминание имени выходного потока
    void clrscr();

    //======================================================СОЗДАНИЕ ИСХОДНОЙ ТАБЛИЦЫ===============================//
    int pr;/*Проверка на ошибку*/
    int i;
    float r;
    char sg_icx[LG_I+1]={"--------------------------------------------------------\n"};
    cout <<"Создание таблицы\n";
    if(fl)
    {cerr << "ТАБЛИЦА УЖЕ БЫЛА СОЗДАНА !!!\n";
    getch();
    exit(-1);
    }
    else
    {fl=1;
    do
    {cout << "Введите количество стран (не более чем "<<N << "): ";
    cin >> n;
    if(n<0 || n>N)
    {pr=1; cout << "Вы ошиблись!\n";}
    else pr=0;
    } while(pr);


    //============================================================== Ввод табличных данных =========================================//
    cout << "Введите данные о странах\n";
    cout << sg_icx;
    cout << "!NN! Название страны ! Кол-во тракторов в 50 году ! Кол-во тракторов в 57 году";
    cout << " Кол-во комбайнов в 50 году ! Кол-во комбайнов в 57 году !\n";
    cout << sg_icx;
    do /* проверка ограничений */
    {for(int i=0; i<n; i++)
    {cout << "! " << i+1 << " ";
    cin >> c.name;
    cin >> c.tr_50;
    cin >> c.tr_57;
    cin >> c.komb_50;
    cin >> c.komb_57;

    if(c.tr_50<0 || c.tr_57<0||c.komb_50||c.komb_57<0)
    {pr=1;
    cerr << "Вы ошиблись. Повторите ввод\n"; i--; }
    else pr=0;
    }
    }while(pr);
    cout << sg_icx;
    cout << "Создана таблица из " << i << " записей\n";
    }
    }

    /*========================================================Выполнение задания=============================================================*/
    /*=============Нахождение страны, у которой процент прироста комбайнов в 1957 году по отношению к 1950 году максимальный================*/
    /*Создание исходящего и выходного файла*/
    ifstream d;
    d.open("1.txt");
    if (f.fail("1.txt"))
    {cerr <<"Файл " << "1.txt" << " не открыт!!!\n";
    getch();
    exit(-1);
    };
    int i;

    while("1.txt">>c.name>>c[ i].tr_50,c[ i].tr_57,c.komb_50,c.komb_57)
    {
    cout.setf(ios::left); // выравнивание по левому краю
    cout << setw(20) << c[ i].name << '!';
    cout << setw(15) << c[ i].tr_50 << '!';
    cout<< c[ i].tr_57 <<" ! "<<c[ i].komb_50 <<"!"<<c.komb_57 <<"!"<< endl;
    };


    void percent_max()
    {int pr;
    float perc_max;
    int n_max;
    n_max=-1;perc_max=((c[0].komb_57-c[0].komb_50)*0,01);
    for(int i=0;i<n;i++)
    {
    if(((c.komb_57-c.komb_50)*0,01)>((c[0].komb_57-c[0].komb_50)*0,01))
    {perc_max=((c.komb_57-c.komb_50)*0,01); n_max=i;}
    }
    }
    namevix.open("");
    namevix<<setw(4)<<c_r.name<<setw(20)<<perc_max<<endl;
    namevix.close();/*Закрываем файловый поток*/


    }[/CODE]
     
  4. rrrFer

    rrrFer Well-Known Member
    Команда форума C\C++ Team

    Регистрация:
    6 сен 2011
    Сообщения:
    1.324
    Симпатии:
    36
    Вникай, я уже отвечал:
    Код программы максимально мерзок:
    тут видим очень информативный комментарий:
    Код (Text):
    ofstream fileout;                /* поток (для задания) */
    тут видим не менее информативное сообщение об ошибке:
    Код (Text):
    if(n<0 || n>N)
    {pr=1; cout << "Вы ошиблись!\n";}
    идеальное имя переменной: (чем не устроило ifst из моего примера?) :
    Код (Text):
    ifstream d;
    Зачем тебе столько глобальных переменных?

    скажу честно, я не особо искал, но найти что такое "f" не смог. Даже если он и есть - то коварно спрятан - перепиши нормально. Однако, щитаю что ты накопипастил из разных источников и не обратил внимание что имена переменных используются разные.

    а так не кошерно?:
    Код (Text):
    cerr <<"Файл 1.txt не открыт!!!\n";
    "1.txt" - это строка const char*, для нее не перегружен оператор >>. Что-то подсказывает, что вы пытаетесь таки считать с файла - читайте мой пост выше - там был пример.

    и дальше везде только cout, а результат надо писать в файл, имя которого вы требуете у юзера.

    ниче страшного что функция main не закончилась, ведь в С++ разрешены вложенные функции

    Возвращаясь к:
    1. надо понимать что пишешь;
    2. читай ответы на форуме внимательно, некоторые товарищи их старательно и заботливо пишут.
     
  5. vladis222

    vladis222 Active Member

    Регистрация:
    6 дек 2011
    Сообщения:
    31
    Симпатии:
    0
    Спасибо)))
     
Загрузка...

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