wrtjs Ответов: 4

Я не получаю тот результат, который хотел, помогите мне, пожалуйста


выходные данные должны отображать максимальное количество случаев в каждом районе и общее количество положительных случаев, но я их не получаю

ожидаемый результат таков:
*****************************************************************************************
ANALYSIS OF POSITIVE AND NEGATIVE CASES FOR 2 DAYS
*****************************************************************************************
District with the highest number of positive cases in a day : B (22) Day 1
District with the highest number of negative cases in a day : A (15) Day 2
Total number of cases in A : 30 positives // 23 negatives ##
Total number of cases in B : 34 positives // 20 negatives ##
Total number of cases in C : 25 positives // 22 negatives ##
Total number of cases in D : 26 positives // 19 negatives ##
Average number of cases in A : 15.0 positives // 11.5 negatives ##
Average number of cases in B : 17.0 positives // 10.0 negatives ##
Average number of cases in C : 12.5 positives // 11.0 negatives ##
Average number of cases in D : 13.0 positives // 9.5 negatives ##
*****************************************************************************************


Что я уже пробовал:

#include <iostream>
#include <fstream>
#include <string>
#include <sstream> 
#include<cmath>
using namespace std;

int main()

{
	fstream dataFile;
	string title;
	int row = 56;
	int column = 4;
	string data[row][column];
	int district, calculateMaxMin, cases, day, MaxPos, MinPos;

void calculateMaxMin()
{

	int max=0;
	for()
	{
	  for()
	  {
	   if(data>max)
	   max=data
      }
   } 
   cout<<district<<cases<<day;

Patrice T

Покажите пример ввода, ожидаемый выход и фактический выход.

wrtjs

это и есть ожидаемый результат:
*****************************************************************************************
АНАЛИЗ ПОЛОЖИТЕЛЬНЫХ И ОТРИЦАТЕЛЬНЫХ СЛУЧАЕВ ЗА 2 ДНЯ
*****************************************************************************************
Район с наибольшим количеством положительных случаев заболевания в день : B (22) день 1
Район с наибольшим количеством негативных случаев в день : а (15) день 2
Общее количество случаев в А : 30 положительных // 23 отрицательных ##
Общее количество случаев в группе в : 34 положительных / 20 отрицательных ##
Общее количество случаев В С : 25 положительных // 22 отрицательных ##
Общее количество случаев в D : 26 положительных // 19 отрицательных ##
Среднее количество случаев в A : 15,0 положительных // 11,5 отрицательных ##
Среднее количество случаев в группе в : 17,0 положительных // 10,0 отрицательных ##
Среднее число случаев в с : 12,5 положительных // 11,0 отрицательных ##
Среднее число случаев в D : 13,0 положительных // 9,5 отрицательных ##
*****************************************************************************************

Patrice T

Воспользуйся Улучшить вопрос чтобы обновить ваш вопрос.
Чтобы каждый мог обратить внимание на эту информацию.

wrtjs

это и есть файл данных:
Название: disease_num
1 а 12 8
1 Б 22 10
1 с 15 12
1 Д 14 9
2 а 12 8
2 B 21 10
2 с 15 12
2 D 14 9
3 а 12 8
3 Б 20 10
3 с 15 12
3 D 14 9
4 а 12 8
4 Б 17 10
4 С 15 12
4 D 14 9
5 а 12 8
5 Б 20 10
5 С 15 12
5 D 14 9
6 а 12 8
6 Б 15 10
6 С 15 12
6 D 14 9
7 из 12 8
7 Б 17 10
7 С 27 12
7 D 12 18
8 а 12 8
8 Б 20 10
8 С 15 12
8 D 14 9
9 А 12 8
9 Б 12 10
9 С 15 12
9 D 13 9
10 а 12 8
10 Б 14 10
10 С 15 12
10 D 14 9
11 А 12 8
11 Б 20 10
11 С 15 12
11 D 14 9
12 А 12 20
12 B 21 10
12 С 15 12
12 D 14 9
13 а 12 8
13 B 17 10
13 С 15 12
13 D 14 9
14 а 12 8
14 Б 16 10
14 С 15 12
14 D 14 9

Patrice T

Воспользуйся Улучшить вопрос чтобы обновить ваш вопрос.
Чтобы каждый мог обратить внимание на эту информацию.
вход тоже есть

4 Ответов

Рейтинг:
1

Richard MacCutchan

Следующий код:

for(int ro=0; ro<row;ro++)
{
    for(int col=0; col<column; col++)
    {
        if(col==2)
        {
            stringstream pos(data[ro][col]);
            int posCase = 0;
            pos >> posCase;
            totalPos += posCase;
        }
    }
}

можно было бы упростить до:
for(int ro=0; ro<row;ro++)
{
    stringstream pos(data[ro][2]); // only column 2 value is needed
    int posCase;
    pos >> posCase;
    totalPos += posCase;
}

Однако это только один итог. Вам нужно добавить общие вычисления для всех остальных случаев.


Рейтинг:
1

Rick York

Что бы я сделал, так это сначала определил структуру для хранения ваших данных. Кажется, что данные в каждой строке-это день, район, положительные и отрицательные стороны, но я не уверен в первом поле, так как оно не используется. Одним из возможных вариантов является

struct Cases
{
    int positives;
    int negatives;
};
Затем объявите их массив для использования в каждом районе. Я бы использовал вектор для этого, но у меня такое чувство, что вы еще не знаете об этом. Если вы это сделаете, то используйте один из них. Если нет, то объявите размер и для этого массива. Вот как это может выглядеть :
const int CaseArraySize = 31;  // one for each day of a month

typedef Cases MonthCases[ CaseArraySize ];  // array of data for each day

const int DistrictCount = 4;   // number of districts

// declare an array of data for each district

MonthCases   cases[ DistrictCount ] = { 0 };
Теперь у вас есть массив дел для каждого округа в течение месяца с одним пунктом в день. Вы можете хранить данные района а в слоте 0, данные района в в слоте 1 и т. д... Предполагая, что первое поле-это день, оно будет использоваться в качестве индекса в массиве каждого района. Дни начинаются с 1, но индексы массива начинаются с 0, поэтому к этому дню придется применить смещение на единицу.

Теперь у вас есть все данные, вам нужно определить. Далее вам нужно прочитать файл, строка за строкой. Для каждой строки в файле вам нужно получить День, район, положительное количество и отрицательное количество. Я не буду делать это для вас - вы должны понять это. Есть много способов сделать это и много примеров каждого из них в интернете. Он включает в себя синтаксический анализ токенов, так что это полезная поисковая фраза для использования. Вот как вы можете сохранить эти данные :
districtCases[ district ][ day - 1 ].positives = positiveCount;
districtCases[ district ][ day - 1 ].negatives = negativeCount;
Now that all your data is defined and the data from the file is being stored, your next task is to analyze it. You have the logic for determining the maximum value and you will need something similar to get the negative. You might also want to define a structure to store the statistics for each district. It seems you need a count of positives, count of negatives, minimum number, maximum number, and average so declare a structure that holds all of those values and any other items you will need. It could be called DistrictData. Then write a function to traverse the data array for each district and analyze its data. Here's what a prototype for that might look like :
void AnalyzeDistrictData( MonthCases cases[], DistrictData & distData )
{
}
и логика его вызова будет выглядеть так :
DistrictData  data[ DistrictCount ] = { 0 };

for( int n = 0; n < DistrictCount; ++n )
{
    AnalyzeDistrictData( cases[ n ], data[ n ] );
}
Последнее, что нужно сделать, - это вывести данные в указанном формате. Это будет вопрос отображения данных, полученных в AnalyzeDistrictData для каждого района в цикле, который будет аналогичен предыдущему циклу.

Это шаги, которые я прохожу все время. Я считаю, что если вы сначала определите все необходимые данные, это значительно облегчит вашу работу. Затем вы можете определить функции, необходимые для обработки всех данных, и написать логику для выполнения этой обработки. Это твое домашнее задание, поэтому я не собираюсь делать больше ничего. Я надеюсь, что у вас достаточно подсказок, чтобы закончить работу. Я рекомендую вам попробовать все это. Если вы застряли, то задайте еще один вопрос и обязательно покажите весь код, с которым вы работаете. Удачи.


Рейтинг:
0

OriginalGriff

Это будет в значительной степени зависеть от ваших входных данных, и у нас нет никакого доступа к этому файлу.

Так что все будет зависеть от тебя.
К счастью, у вас есть инструмент, который поможет вам выяснить, что происходит: отладчик. Как вы его используете, зависит от вашей системы компилятора, но быстрый поиск в Google имени вашей IDE и "отладчика" должен дать вам необходимую информацию.


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

Извините, но мы не можем сделать это за вас - пришло время вам освоить новый (и очень, очень полезный) навык: отладку!


Рейтинг:
0

Patrice T

Цитата:
Я не получаю тот результат, который хотел, помогите мне, пожалуйста

Насколько я вижу, ваша программа не пытается вычислить нужные значения или вывести их.
Помощь, которую вы хотите, - это то, что мы делаем вашу домашнюю работу.
Когда у вас есть код, пытающийся выполнить эту работу, покажите код и объясните конкретные проблемы, с которыми вы сталкиваетесь, тогда вы получите помощь в исправлении кода.