Удаляется старое значение в файле

112
22 апреля 2022, 07:20

В коде я расписал функции: File(), Modify() и Add_Sum_Avarage(). File() должна заполнять файл числами, Modify() делает некоторую модификацию(у меня умножает на -1, если число отрицательное), Add_Sum_Avarage() высчитывает сумму всей последовательности, находит среднее арифметическое(эти числа добавляются в конец контейнера), находит максимум и минимум и высчитывает среднее арифметическое между ними, потом добавляет это среднее к каждому элементу последовательности.

Проблема заключается в том, что когда в main пишу сначала

Код:

           File(50, 5);
           std::deque<double> D = inputfile_to_deque();
           Modify(D);
           Add_Sum_Avarage(D);

выводится Modify() и Add_Sum_Avarage(). Когда пишу Код:

          File(50, 5);
          std::deque<double> D = inputfile_to_deque();
          Add_Sum_Avarage(D);
          Modify(D);

выводится только Modify(). В чем проблема? Должно выводится все File(), Modify() и Add_Sum_Avarage().

Код:

#include <iostream>
#include <fstream>
#include <string>
#include <ctime>
#include <vector>
#include <deque>
#include <list>
#include <algorithm>
#include <iterator>
#include <cmath>
void File(int N, int count){
    
    std::ofstream out("input.txt");
    for (int i = 1; i <= count; ++i) {
        out << rand() % (2 * N + 1) - N << std::endl;
    }
    out << "File is done!" << std::endl;
}
std::vector<double> inputfile_to_vector() {
    std::vector<double> vec;
    std::fstream in("input.txt", std::fstream::in | std::fstream::out);
    if (!in.is_open()) std::cout << "Cannot open file!\n";
    else {
        for (int x; in >> x; ) {
            vec.push_back(x);
        }
    }
    return vec;
}
std::deque<double> inputfile_to_deque() {
    std::deque<double> deq;
    std::fstream in("input.txt", std::fstream::in | std::fstream::out);
    if (!in.is_open()) std::cout << "Cannot open file!\n";
    else {
        for (int x; in >> x; ) {
             deq.push_back(x);
        }
    }   
    return deq;
}
std::list<double> inputfile_to_list() {
    std::list<double> list;
    std::fstream in("input.txt", std::fstream::in | std::fstream::out);
    if (!in.is_open()) std::cout << "Cannot open file!\n";
    else {
        for (int x; in >> x; ) {
            list.push_back(x);
        }
    }
    return list;
}
template <class T>
T& Modify(T& X) {
    std::ofstream out("input.txt");
    
    typename T::iterator p;
    
    for (auto& i : X) {
        if (i < 0) {
            i *= -1;
        }
        out << i << " ";
    }
    return X;
}
template <class T>
 void Add_Sum_Avarage(T& conteiner) {
    std::ofstream out("input.txt");
    typename T::iterator pos;
    typename T::iterator pos1;
    typename T::iterator pos2;
    int MAX = 0;
    int MIN = 0;    
    int S = 0, N = 0;
    double SA = 0;
    for (const auto& i : conteiner) out << i << std::endl;
    for (pos = conteiner.begin(); pos != conteiner.end(); ++pos) {
        S += *pos;
        SA += *pos;
        N++;
    }   
    conteiner.push_back(S);
    conteiner.push_back(SA / N);
   
    out << "\nSum of container = " << S << std::endl;
    out << "Average of container = " << (SA / N) << std::endl;
    for (pos1 = conteiner.begin(); pos1 != conteiner.end(); ++pos1)
        if (MAX < *pos1) MAX = *pos1; out << "\nMAX = " << MAX << std::endl;
    for (pos2 = conteiner.begin(); pos2 != conteiner.end(); ++pos2)
        if (MIN > * pos2) MIN = *pos2; out << "MIN = " << MIN << std::endl;
    double Avarage = (MAX + MIN) / 2.0;
    out << "Avarage of max and min = " << Avarage << '\n' << std::endl;
    for (const auto& i : conteiner) out << (i + std::abs(Avarage)) << std::endl;    
}
int Random() { return rand() % (2 * 50 + 1) - 50; }
int main(){
    
    srand(time(NULL));
    
    File(50, 5);
    
    std::cout << "Making of container..." << std::endl; 
    std::vector<double> V = inputfile_to_vector();
    std::deque<double> D = inputfile_to_deque();
    std::list<double> L = inputfile_to_list();
    
    std::cout << "Changing of container..." << std::endl;   
    Modify(D);
    Add_Sum_Avarage(D);
}
READ ALSO
Как работают модули из c++20?

Как работают модули из c++20?

Решил таки посмотреть, какие изменения были введены в 20-ом стандарде и одно из первых изменений поставило меня в тупик: модулиЯ долго пытался...

146
не запускается программа на c++

не запускается программа на c++

компилятор выдает ошибки: maincpp:34:21: error: expected ‘;’ before string constant cout « "\n x=" « x « " y=" « y « " a=" « a « " с=" « с « " U=" « U; ^~~~~~~ main

102
Как скомпилировать проект с несколькими файлами в Sublime Text 3

Как скомпилировать проект с несколькими файлами в Sublime Text 3

Подскажите как я могу компилировать проекты в Sublime Text 3Пытался настроить "Build System" файл, но безрезультатно

182