Вообще дано такое задание:
И вроде как я знаю, как записать в другой текстовый файл количество положительных, отрицательных чисел и т.д. Непонятно только то, как начать работать с матрицей из текстового файла. Кто подскажет, буду благодарен.
Вот мой первоначальный код (где, собственно, ничего ещё нет):
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main()
{
setlocale(LC_ALL, "");
ifstream file1("C:\\Это папка\\Матрица.txt");
ofstream file2("C:\\Это папка\\Готовая матрица.txt", ios::app);
file1.close();
file2.close();
cin.get();
}
P.S.: Ну вот, кстати, как указывать позиции (наибольшего отрицательного и наименьшего положительного значений, к примеру) я тоже не знаю, так что если кто подскажет, как это реализовать, отдельное вам спасибо.
Вот костыльное решение, Тут все кроме вывода в файл результатов.
Это уж сделайте сами
P.S. "наибольшее и наименьшее отрицательное" - минимум то уже есть!
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include <sstream>
#include <algorithm>
#include <numeric>
decltype(auto) get_data(std::string file_name) {
static std::vector<int> v;
std::ifstream in{file_name};
for(std::string line; std::getline(in, line);) {
std::istringstream ss{line};
int n{0};
while(ss >> n) {
if (ss.fail()) {
ss.clear();
abort(); // обработку пилите сами
}
v.push_back(n);
}
}
return v;
}
int main() {
auto v{get_data("m")};
auto min_max{std::minmax_element(std::begin(v), std::end(v))};
std::cout << "min : " << *min_max.first << " min pos : " << std::distance(std::begin(v), min_max.first) << std::endl;
std::cout << "max : " << *min_max.second << " max pos : " << std::distance(std::begin(v), min_max.second) << std::endl;
auto average{static_cast<double>(std::accumulate(std::begin(v), std::end(v), 0)) / v.size()};
std::cout << "average : " << average << std::endl;
unsigned int neg_count{0}, pos_count{0}, zero_count{0};
auto f{[&](const int& i){i >= 0 ? (i == 0 ? ++zero_count : ++pos_count) : ++neg_count;}};
std::for_each(std::begin(v), std::end(v), f);
std::cout << "pos : " << pos_count << std::endl;
std::cout << "zero : " << zero_count << std::endl;
std::cout << "neg : " << neg_count << std::endl;
return 0;
}
Формат входного файла:
N M
a00 a01 ... a0M
...
aN0 aN1 ... aNM
Пример входного файла input.txt:
5 4
2 2 3 -14
-1 2 3 1
12 0 1 -8
2 2 2 2
5 -3 2 0
Программа:
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int findZeros(int** matrix, int n, int m) {
int s = 0;
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++)
{
if (matrix[i][j] == 0) {
s++;
}
}
return s;
}
int findPositive(int** matrix, int n, int m) {
int s = 0;
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++)
{
if (matrix[i][j] > 0) {
s++;
}
}
return s;
}
int findNegative(int** matrix, int n, int m) {
int s = 0;
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++)
{
if (matrix[i][j] < 0) {
s++;
}
}
return s;
}
int summ(int** matrix, int n, int m) {
int s = 0;
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++)
{
s=s+matrix[i][j];
}
return s;
}
void findMax(int** matrix, int n, int m, int &x, int &y) {
x = 0;
y = 0;
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++)
{
if (matrix[i][j] > matrix[x][y]) {
x = i;
y = j;
}
}
}
void findMin(int** matrix, int n, int m, int &x, int &y) {
x = 0;
y = 0;
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++)
{
if (matrix[i][j] < matrix[x][y]) {
x = i;
y = j;
}
}
}
void findMaxNegative(int** matrix, int n, int m, int &x, int &y) {
int doWeSeeNegativeBefore = 0;
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++)
{
if (matrix[i][j] < 0) {
if (doWeSeeNegativeBefore == 0) {
doWeSeeNegativeBefore = 1;
x = i;
y = j;
}
else
if (matrix[i][j] > matrix[x][y]) {
x = i;
y = j;
}
}
}
}
void findMinPositive(int** matrix, int n, int m, int &x, int &y) {
int doWeSeePositiveBefore = 0;
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++)
{
if (matrix[i][j] > 0) {
if (doWeSeePositiveBefore == 0) {
doWeSeePositiveBefore = 1;
x = i;
y = j;
}
else
if (matrix[i][j] < matrix[x][y]) {
x = i;
y = j;
}
}
}
}
int main()
{
setlocale(LC_ALL, "");
string inputFile = "input.txt";
string outputFile = "output.txt";
int n, m;
ifstream file{ inputFile};
file >> n >> m;
int **array= new int*[n];
for (int i = 0; i < n; i++) {
array[i] = new int[m];
}
for (int i=0;i<n;i++)
for (int j = 0; j < m; j++)
{
file >> array[i][j];
}
cout << "Массив: " << endl;
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++)
{
cout << array[i][j] << " ";
}
cout << endl;
}
file.close();
ofstream out{ outputFile };
out << "Количество положительных= " << findPositive(array, n, m) << endl;
out << "Количество отрицательных= " << findNegative(array, n, m) << endl;
out << "Количество нулей= " << findZeros(array, n, m) << endl;
out << "Среднее арифметическое= " << (float)summ(array, n, m)/(n*m) << endl;
int rowMax,colMax,rowMin,colMin;
findMax(array, n, m, rowMax, colMax);
findMin(array, n, m, rowMin, colMin);
out << "Максимальный= " << array[rowMax][colMax] << " в строке " << rowMax << " в стролбце " << colMax << endl;
out << "Минимальный= " << array[rowMin][colMin] << " в строке " << rowMin << " в стролбце " << colMin << endl;
findMaxNegative(array, n, m, rowMax, colMax);
findMinPositive(array, n, m, rowMin, colMin);
out << "Максимальный отрицательный= " << array[rowMax][colMax] << " в строке " << rowMax << " в стролбце " << colMax << endl;
out << "Минимальный положительный= " << array[rowMin][colMin] << " в строке " << rowMin << " в стролбце " << colMin << endl;
out.close();
cin.get();
}
Пример выходного файла output.txt:
Количество положительных= 14
Количество отрицательных= 4
Количество нулей= 2
Среднее арифметическое= 0.75
Максимальный= 12 в строке 2 в стролбце 0
Минимальный= -14 в строке 0 в стролбце 3
Максимальный отрицательный= -1 в строке 1 в стролбце 0
Минимальный положительный= 1 в строке 1 в стролбце 3
Прочитать как текст,потом парсить каждый токен,число или скобку,например с помощью стека-свертки,внести все это в матрицу программы и обработать ее.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Подскажите пожалуйста, как вызывать после окна авторизации окно с основным функционалом(дочернее окно), при этом нужно использовать mvvm паттерн
Пишу программу для интегрирования методом Монте КарлоС моей перспективы код рабочий, а результаты получаются более менее схожие
Помогите найти решение проблемыПосле того как я пытаюсь перенести на форму с панели элементов Adobe PDF Reader, генерируется ошибка "Сбой при импорте...