Нужно переделать программу используя функция , чтобы все было универсально - C++

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Jarik
Сообщения: 1
Зарегистрирован: 09 июн 2017, 15:24

09 июн 2017, 15:30

функция к каждому заданию - не так
помогите пожалуйста!
Программу то, я сделал!
а вот теперь нужно все по функциям сделать и чтобы "универсально все было" .( что имеется под универсальностью, чтобы функция сама по себе работала - это я так понял.)


[ATTACH]2381[/ATTACH]
http://rgho.st/6TVgM9Zp2 cpp

Код: Выделить всё

#include <fstream>
#include <iostream>
#include <random>
#include <ctime>
#include <iomanip>
#include <clocale>
using namespace std;
int main()
{ * *srand(time(NULL));
setlocale(LC_ALL,".866");
wstring name;
* * int a = 10, b = 30,x = 0,a1=1,b1=0,number,n1,n2,n3,n4;
* * float ARFM,klv,Sum;
* * ofstream FILE;
* * ifstream file1;
* * int N = rand() % (b - a) + a;
* * wcout <<"\t\nВаша последовательность из * " << N << " чисел" ;
* * wcout <<"\t\nНажмите 1 для ввода с помощью рандома или 2 для самостоятельного ввода";
* * * * while(x > 2 || x < 1)
* * * * {
* * * * * * wcout << "\t\nКак вы будете вводить? ";
* * * * * * cin >> x;
* * * * }
* * switch(x) * * * * * * * * * * * * *// после выбора как вводить в файд непосредственно вводим данным методом
* * * * {
* * * * * * case 1:
* * * * * * * * * * FILE.open("input.txt");
* * * * * * * * * * while(a1 >= b1)
* * * * * * * * * * * * {
* * * * * * * * * * * * * * wcout << "\t\nВведите начало *для рандома: ";
* * * * * * * * * * * * * * cin >> a1;
* * * * * * * * * * * * * * wcout << "\t\nВведите конец для рандома : ";
* * * * * * * * * * * * * * cin >> b1;
* * * * * * * * * * * * }
* * * * * * * * for(int i = 0; i < N; i++) FILE << rand() % (b1 - a1) + a1 << endl;
* * * * * * * * break;
* * * * * * case 2:
* * * * * * * * FILE.open("input.txt");
* * * * * * * * for(int i = 0; i < N; i++)
* * * * * * * * * * * * {
* * * * * * * * * * * * * * int e;
* * * * * * * * * * * * * * wcout << "Введите число: ";
* * * * * * * * * * * * * * cin >> e;
* * * * * * * * * * * * * * FILE << e << endl;
* * * * * * * * * * * * }
* * * * }
* * if(FILE.is_open())
* * * * {
*
* * * * file1.open("input.txt");
* * * * wcout << "\t\nВаша последовательность:" << endl;
* * * * while(!file1.eof()) * * * // eof *-end of file пока поток не закончился
* * * * {
* * * * * * file1 >> number;
* * * * * * if(!file1.eof()) wcout << number << " *";
* * * * }
* * * * file1.close();
* * * * * * wcout << "\n\n\n\nЗадание 1:" << endl;
* * * * * * file1.open("input.txt");
* * * * * * Sum=0;
* * * * * * klv=0;
* * * * * * *for(int i = 1; i <= N; i++)
* * * * * * *{
* * * * * * * * *file1 >> n1;
* * * * * * * * *if (n1>0){Sum+=n1;klv+=1;}
* * * * * * *}
* * * * * * * * * * wcout << "\nСумма =" << Sum << endl;
* * * * * * * * * * wcout << "\nКоличество = " << klv << endl;
* * * * * * ARFM=Sum/klv;
* * * * file1.close();
*
* * * * wcout << "\nСред.арифметическое для положительных чисел *= *" <<setprecision(2)<< ARFM << endl;
* * * * wcout<<"\nЗадание 2"<<endl; * * * * * * * * * * * * * * * * * * * * * * * * * * *// 2 задание
* * * *ofstream file2("output.txt");
* * * * file1.open("input.txt");
*
* * * * n1=0;n2=0;n3=0;
* * * * file1>>n3;
* * * *for(int i=0;i<N;i++)
* * * * {
* * * * * * n1=n2;
* * * * * * n2=n3;
* * * * * * if(file1>>n4) n3=n4;
* * * * * * else n3=0;
* * * * * * if(n1+n3>n2 )
* * * * * * {
* * * * * * * * file2 << n2 << endl;
* * * * * * }
* * * * }
* * * * file1.close();
* * * * file2.close();
* * * * file1.open("output.txt");
*
* * * * *while(!file1.eof())
* * * * {
* * * * * * file1 >> number;
* * * * * * if(!file1.eof()) wcout << number << " *";
* * * * }
* * * * file1.close();
* * * * *wcout << "\n\nЗадание 3:" << endl;
*
* * * * file1.open("output.txt");
* * * * int Max = -1000000, Number = -1;
* * * * while(!file1.eof())
* * * * {
* * * * * * file1 >> number;
* * * * * * if(number%2== 0)
* * * * * * {
* * * * * * * * if(number > Max)
* * * * * * * * {
* * * * * * * * * * Max = number;
* * * * * * * * }
* * * * * * }
* * * * }
* * * * file1.close();
* * * * if(Max ==-1000000)
* * * * {
* * * * * * wcout << "Нет четных" << endl;//четных нету
* * * * }
* * * * else
* * * * {
* * * * * * wcout << "Максимум: " << Max << endl;
* * * * * * file1.open("output.txt");
* * * * * * for(Number; !file1.eof(); Number++)
* * * * * * * * {
* * * * * * * * * * file1 >> number;
* * * * * * * * * * if(Max == number)
* * * * * * * * * * * * {
* * * * * * * * * * * * * * file1.close();
* * * * * * * * * * * * }
* * * * * * * * }
* * * * * * wcout << "Nomer: " << Number << endl;
* * * * }
* * }
* * else wcout << "Файл не открыт . Ошибочка" << endl;
* * return 0;
}
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Слива
Сообщения: 133
Зарегистрирован: 19 мар 2016, 10:15

10 июн 2017, 07:29

Jarik писал(а):

Код: Выделить всё

ofstream FILE;
- как это работает вообще? ofsteam и FILE - это обе системные переменные. Ну это, наверное, может работать только если не включать include, который отвечает за файл. Так что-ли?
Слива
Сообщения: 133
Зарегистрирован: 19 мар 2016, 10:15

10 июн 2017, 07:37

Что-то у меня не работает программа с wcout. Она у Вас работает вообще? И если работает, то где?
Слива
Сообщения: 133
Зарегистрирован: 19 мар 2016, 10:15

10 июн 2017, 14:17

Парни, всем здорово! А что у меня, когда 2-й раз читает файл "input.txt" из этой программы, то выводит постоянно ошибку. Т.е. 1-й раз мы читаем файл в строках 50-57, а когда я(программа) открывает файл во 2-й раз в строках 59-70 - то первое число, которое читается очень большое и не из файла, а откуда-то из другого места. Подскажите, пожалуйста, где косяк, нельзя 2 раза файл открывать в 1-й программе что-ли? Или что-то другое?
Аватара пользователя
Romeo
Сообщения: 3091
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

10 июн 2017, 16:39

А зачем такие шаманства? Неужели нельзя один раз файл прочесть и всё? И если уж нужно читать ещё раз, то вместо close лучше сделай seekg(0).
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Слива
Сообщения: 133
Зарегистрирован: 19 мар 2016, 10:15

10 июн 2017, 17:48

seekg почему-то не помогает. Я потом file1.tellg(); читаю позицию и возвращает -1, что я расцениваю как ошибку. А много раз нельзя что-ли файл открывать и закрывать?(Глюк на глюке, короче :( )
Аватара пользователя
Romeo
Сообщения: 3091
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

10 июн 2017, 18:33

Можно, только если разные объекты создать.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Слива
Сообщения: 133
Зарегистрирован: 19 мар 2016, 10:15

10 июн 2017, 19:12

А один файл нельзя что-ли много раз открывать и закрывать? Я вообще думал, что можно, но что-то здесь глюки какие-то.
Слива
Сообщения: 133
Зарегистрирован: 19 мар 2016, 10:15

10 июн 2017, 19:54

О, блин! Наконец-то я решил эту проблему! Надо, оказывается написать после каждого file1.close(); file1.clear(); для объекта ifstream.
Аватара пользователя
Romeo
Сообщения: 3091
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

10 июн 2017, 22:21

Да, можно так. Это для того, чтобы очистились флаги, в том числе флаг EOF, который сигнализирует о том, что достигнут конец файла.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Ответить