Я пишу программу для класса, которая сортирует массив чисел из текстового файла и выводит наибольший снегопад, второй по величине снегопад и общий диапазон снегопада.
Работает, в основном , Но у меня проблема с программой, которая выводит правильное количество дюймов и второй по величине снегопад.
этот файл .txt содержит это внутри него
2017 180.00
2016 176.50
2015 181.50
2014 208.75
2013 225.75
2012 132.00
2011 178.50
2010 150.50
2009 217.00
2008 185.25
2007 162.75
2006 219.50
2005 164.71
2004 232.00
2003 228.00
2002 254.00
2001 303.60
2000 155.00
1999 231.00
1998 131.50
1997 253.10
1996 328.20
1995 175.90
1994 185.30
1993 159.60
1992 166.20
1991 165.80
//Block comment with name, date, program description
#include <stdlib.h>
#include <stdio.h>
// include other header files that you need
#define MAX_SIZE 100 //can go back 100 years if necessary
#define t 1
#define num 20
int ReadFile (int data1[], double data2[]);
int HighestSnow(double data[], int size);
int NextHighestSnow (double data[], int size, int Highest);
double Range (double data[], int size);
int main (void)
{
int Year[MAX_SIZE];
double Snow[MAX_SIZE],SnowfallRange;
int FileLength, IndexHighest, IndexNextHighest;
int i;
//Describe code
//Read file using function
FileLength = ReadFile(Year,Snow);
for(i = 0; i < FileLength; i++)
printf("The year for the highest snowfall is: [%d] at %lg\n", Year[IndexHighest], Snow[IndexHighest]);
//Print out data in two columns with first being year and second
//being snowfall in inches
IndexHighest = HighestSnow(Snow,FileLength);
printf("The year for the highest snowfall is: [%d] at %lg\n", Year[IndexHighest], Snow[IndexHighest]);
//Print out the year and amount of the highest snowfall
IndexNextHighest = NextHighestSnow(Snow, FileLength, IndexHighest);
printf("The year for the second highest snowfall is: [%d] at %lg\n", Year[IndexNextHighest], Snow[IndexNextHighest]);
//Print out the year and amount of the next highest snowfall
SnowfallRange = Range(Snow,FileLength);
printf("The snow range is: %lg\n", SnowfallRange);
//Print out the range of snowfall (Max-Min) in inches.
return 0;
}
//Code for part 1 goes here, include ALL error checks.
int ReadFile (int data1[], double data2[])
{
FILE *f; //Step 1: Declaring a file pointer
f = fopen("snowfall.txt", "r"); //Step 2: opening a file
if(f == NULL) //Step 3: checking to see if the file exists
{
printf("File does not exit\n");
exit(1);
}
int i;
for(i = 0; fscanf(f,"%d %lf ", &data1[i], &data2[i]) == 2; i++); //Step 4: read the values
fclose(f);
return i;
}
// Code for part 2 goes here
int HighestSnow(double data[], int size)
{
int i, index;
double max = data [0];
for (i = 1; i < size; i++)
{
if (data[i] > max)
{
max = data[i];
index = i;
}
}
return index;
}
/* Code for part 3 goes here*/
int NextHighestSnow(double data[], int size, int Highest)
{
int i;
double secmax = -1;
int arrayindex;
for(i = 0; i > size; i++)
{
if(data[i] > secmax && data[i] < Highest) {
secmax = data[i];
arrayindex = i;
}
}
return arrayindex;
}
/* Code for part 4 goes here*/
double Range (double data[], int size)
{
double maxval = data[HighestSnow(data, size)];
double min = data[0];
int i;
for(i = 1; i < size; i++)
{
if(min > data[i])
min = data[i];
}
return maxval - min;
}
Проблема: Общее количество снегопадов (в дюймах) в штате Мичиган за последние 20 лет указано в файле «snowfall.txt». Файл отформатирован так, что первый столбец - это год, а второй - снегопад в дюймах для этого года. Напишите программу для получения следующей информации: 1. В каком году выпало наибольшее количество снегопадов и сколько выпало в этом году (в дюймах)? 2. В каком году было 2-е место по количеству снегопадов и сколько выпало в этом году (в дюймах)? 3. Каков диапазон общего количества снегопадов за последние 20 лет? ВСЕ операторы printf ДОЛЖНЫ быть в main (), если не указано иное. ПРИМЕЧАНИЕ: помните, что вы можете проверить свои результаты с EXCEL. Следуйте этим подробным инструкциям: 1. Сначала прочтите этот документ полностью. 2. Включите обычный (подробный) блок комментариев, включающий название программы, автора, дату, входные данные, выходные данные и описание, а также директивы препроцессора. 3. Схема (скелет-код) исходного кода показана ниже, и вам НЕОБХОДИМО следовать этой схеме. Вы можете написать другие вспомогательные функции, но вы ДОЛЖНЫ иметь как минимум 4 функции. Вставьте соответствующие операторы printf, где это необходимо, чтобы получить желаемый результат. Схема состоит из четырех разделов, где вы должны ввести свой код и завершить программу. а. Часть 1: Вы должны написать функцию ReadFile, чтобы открыть «snowfall.txt» для ввода и прочитать данные в этом файле в 2 массива. Не забудьте проверить, существует ли файл и не читается ли он после EOF. Сообщение об ошибке, если файл не существует, может быть в функции. Функция вернет количество точек данных в файле. ПРИМЕЧАНИЕ. Помните, что данные приведены в парах: первое число - год, а второе - количество снега в дюймах. Распечатайте данные в двух столбцах из main (). б. Часть 2. Вам необходимо написать функцию HighestSnow, которая принимает массив сумм снегопада, и параметр с именем size, который указывает размер массива. Эта функция возвращает целое число, указывающее номер индекса массива, который соответствует наибольшему снегопаду. Распечатайте год и количество наибольшего снегопада от main (). c. Часть 3: Вам необходимо написать вызов функции NextHighestSnow, который принимает массив сумм снегопада, параметр с именем size, который указывает размер массива, и целое число с именем Highest, указывающее индекс, соответствующий наибольшему снегопаду. Эта функция возвращает целое число, указывающее номер индекса массива, который соответствует 2-му наибольшему снегопаду. Распечатайте год и количество второго по величине снегопада от main (). д. Часть 4. Вам необходимо написать вызов функции Range, которая принимает массив сумм снегопада, и параметр с именем size, который указывает размер массива. Эта функция возвращает разницу между максимальным и минимальным снегопадами за последние 20 лет. Помните, что вы можете вызвать функцию HighestSnow из функции Range. Распечатайте диапазон снегопада в дюймах от основного (). е. Часть 5 (Дополнительные кредиты): Сделайте ваше имя файла вводимым пользователем, т.е. попросите пользователя ввести имя файла ввода.
OUTLINE OF THE SOURCE CODE:
//Block comment with name, date, program description
#include <stdio.h>
// include other header files that you need
#define MAX_SIZE 100 //can go back 100 years if necessary
int ReadFile (int data1[], double data2[]);
int HighestSnow (double data[], int size);
int NextHighestSnow (double data[], int size, int Highest);
double Range (double data[], int size);
int main (void) {
int Year[MAX_SIZE];
double Snow[MAX_SIZE],SnowfallRange;
int FileLength, IndexHighest, IndexNextHighest;
//Describe code
//Read file using function
FileLength = ReadFile(Year,Snow);
//Print out data in two columns with first being year and second
//being snowfall in inches
IndexHighest = HighestSnow(Snow,FileLength);
//Print out the year and amount of the highest snowfall
IndexNextHighest = NextHighestSnow(Snow, FileLength,IndexHighest);
//Print out the year and amount of the next highest snowfall
SnowfallRange = Range(Snow,FileLength);
//Print out the range of snowfall (Max-Min) in inches.
return 0;
}
//Code for part 1 goes here, include ALL error checks.
// Code for part 2 goes here
// Code for part 3 goes here
// Code for part 4 goes here