Member 12881862 Ответов: 2

Сканируйте файл в массив и назначьте имя числам в C


У меня есть 12 номеров в файле. Цифры указаны для Янаруара, февраля, марта и так далее. Я планирую использовать массив, и я могу сканировать числа и находить среднее, сумму, самое высокое, самое низкое и так далее, но мне нужно, чтобы программа отображала, например, "самое высокое число было Джанаури с 123". не просто отображать 123 как самое большое число. Также моя программа не отображает данные по порядку. Но все остальное работает.

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

#include<stdio.h>
#include<stdlib.h>

#define SIZE 12
#define FREQ_SIZE 101

void printData (const float values[], int num_values);
float findLargest (const float values[], int num_values);
float findSmallest (const float values[], int num_values);
void findTotAvg (const float values[], int num_values, float * total, float * average);
void makeFreq (const float values[], int num_values, int freq_ary[], int freq_size);
int readData (float values[], int max_size);
int findMode (const int freq_ary[], int freq_size);
void bubbleSort(float values[], int num_values);

int main ()
{
	float values[SIZE];
	int freq_ary[FREQ_SIZE]={0};
	float total, average, largest, smallest, median;
	int num_values, mode;
	int i;


	// read the data from a file
	num_values = readData (values, SIZE);

	// print the values
	//printData (values, num_values);

	// find the total and average of the values
	findTotAvg (values, num_values, &total, &average);

	// find the largest value
	findLargest (values, SIZE);
	largest = findLargest (values, SIZE);

	// find the smallest value
	findSmallest (values, SIZE);
	smallest = findSmallest (values, SIZE);

	// find the mode
	mode = findMode(freq_ary, FREQ_SIZE);

	bubbleSort(values,num_values);

	if(num_values % 2 == 0)
	{//Even number of scores
		median = (values[num_values/2] + values[num_values/2+1])/2;
	}
	else
	{//Odd number of scores
		median = values[num_values/2+1];
	}

	printf ("Total: %5.1f\n", total);
	printf ("Average: %5.1f\n", average);
	printf ("Largest: %5.1f\n", largest);
	printf ("Smallest: %5.1f\n", smallest);
	printf ("Median: %5.1f\n", median);
	printf ("\n\nSorted marks : \n\n");
	printf (values,num_values);
	return 0;
}

int readData (float values[], int max_size)
{
	FILE * inFile;
	int num_values = 0;
	int result;
	float temp;

	inFile = fopen ("C:\\Users\\Windows User\\Desktop\\dogs.txt", "r");
	if (!inFile)
	{
		printf ("Error opening data file!\n");
		return 100;
	}

	// read the data from the file
	num_values = 0;
	result = fscanf(inFile, "%f", &temp);
	while (result == 1 && num_values <= max_size && !feof(inFile))
	{
		if(temp >=0.0 && temp <= 100.0) values[num_values] = temp;
		num_values++;
		result = fscanf(inFile, "%f", &temp);
	}
	return num_values;
	fclose(inFile);
}


// print the values
void printData (const float values[], int num_values)
{
	int i;

	for (i=0; i < num_values; ++i)
	{
		printf ("%f\n", values[i]);
	}
	printf("\n\n");
}


float findLargest (const float values[], int num_values)
{
	float largest;
	int i;

	// find the largest value
	largest = values[0];
	for (i=1; i < num_values; ++i)
	{
		if (values[i] > largest)
		{
			largest = values[i];
		}
	}

	return largest;
}

// find the smallest value
float findSmallest (const float values[], int num_values)
{
	float smallest;
	int i;

	smallest = values[0];
	for (i=1; i < num_values; ++i)
	{
		if (values[i] < smallest)
		{
			smallest = values[i];
		}
	}

	return smallest;
}

// find the total and average of the values
void findTotAvg (const float values[], int num_values, float * total, float * average)
{
	int i;

	*total = 0;
	for (i=0; i < num_values; ++i)
	{
		*total = *total + values[i];
	}
	*average = *total / num_values;
}

void makeFreq (const float values[], int num_values, int freq_ary[], int freq_size)
{
	int f, i;

	// zero out freq array
	for (f=0; f < freq_size; f++)
		freq_ary[f] =0;

	// build frequency
	for (i=0; i < num_values; i++)
	{
		freq_ary[(int)(values[i])]++;
	}
}

// the mode is the index of the largest value in the frequency array
int findMode (const int freq_ary[], int freq_size)
{
	int mode;
	int i;

	// find the largest value
	mode = 0;
	for (i=1; i < freq_size; ++i)
	{
		if (freq_ary[i] > freq_ary[mode])
		{
			mode = i;
		}
	}

	return mode;
}

void bubbleSort(float values[], int num_values){
	int i,j;
	float temp;
	for(i=0;i<num_values;i++){ for(j="0;j<num_values-i-1;j++){" if(values[j]=""> values[j+1]){
				temp = values[j];
				values[j] = values[j+1];
				values[j+1] = temp;
			}
		}
	}
}

2 Ответов

Рейтинг:
4

Member 12881862


Хм, я мог бы попробовать это сделать, но я подумывал о том, чтобы вставить петлю? что-то в этом роде. ИДК, я вижу это в своей голове, Просто сейчас у меня проблемы с тем, чтобы вставить это в свой код.
-----------------------------------

#определить MAX_MONTHS 12

Файл *файл =.... / / откройте файл

инт adoptionCounts[MAX_MONTHS];

int n = 0;
int результат;
делать
{
result = fscanf(file, "%d", & adoptionCounts[i]);
если (результат == 1)
n = n + 1;
} while (результат == 1);

// счета усыновления должны быть заполнены n месяцами

...

int min = find_min(adoptionCounts, n);


Рейтинг:
2

Rick York

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