I have to write a program that read from a file that contains the folowing:
toto, M, 50 fifi, F, 60 soso, F, 70 lolo, M, 60 fifi, F, 60
And then find the following:
Which mark is most repeated, and how many times is it repeated?
- average all students
- average all male
- average all female
How many are below average mark?
How many more than average mark?
And reverse.
How many students’ names start with T and end with T in a file?
(all results should be placed in an out file)
I’ve done it all with no errors but its not writing on the file can any one tell me why and please I don’t want to use any new methods as (LINQ and other advance stuff).
using System; using System.Collections.Generic; using System.Text; using System.IO; namespace Exam_Ex { class Program { public static int[] ReadFile(string FileName, out string[] Name, out char[] Gender) { Name = new string[1]; int[] Mark = new int[1]; Gender = new char[1]; if (File.Exists(FileName)) { FileStream Input = new FileStream(FileName, FileMode.Open, FileAccess.Read); StreamReader SR = new StreamReader(Input); string[] Current; int Counter = 0; string Str = SR.ReadLine(); while (Str != null) { Current = Str.Split(','); Name[Counter] = Current[0]; Mark[Counter] = int.Parse(Current[2]); Gender[Counter] = char.Parse(Current[1].ToUpper()); Counter++; Array.Resize(ref Name, Counter + 1); Array.Resize(ref Mark, Counter + 1); Array.Resize(ref Gender, Counter + 1); Str = SR.ReadLine(); } } return Mark; } public static int MostFreq(int[] M, out int Frequency) { int Counter = 0; int Frequent = 0; Frequency = 0; for (int i = 0; i < M.Length; i++) { Counter = 0; for (int j = 0; j < M.Length; j++) if (M[i] == M[j]) Counter++; if (Counter > Frequency) { Frequency = Counter; Frequent = M[i]; } } return Frequent; } public static int Avg(int[] M) { int total = 0; for (int i = 0; i < M.Length; i++) total += M[i]; return total / M.Length; } public static int AvgCond(char[] G, int[] M, char S) { int total = 0; int counter = 0; for (int i = 0; i < G.Length; i++) if (G[i] == S) { total += M[i]; counter++; } return total / counter; } public static int BelowAvg(int[] M, out int AboveAvg) { int Bcounter = 0; AboveAvg = 0; for (int i = 0; i < M.Length; i++) { if (M[i] < Avg(M)) Bcounter++; else AboveAvg++; } return Bcounter; } public static int CheckNames(string[] Name, char C) { C = char.Parse(C.ToString().ToLower()); int counter = 0; string Str; for (int i = 0; i < Name.Length - 1; i++) { Str = Name[i].ToLower(); if (Str[0] == C || Str[Str.Length - 1] == C) counter++; } return counter; } public static void WriteFile(string FileName, string[] Output) { FileStream FS = new FileStream(FileName, FileMode.OpenOrCreate, FileAccess.Write); StreamWriter SW = new StreamWriter(FS); for (int i = 0; i < Output.Length; i++) SW.WriteLine(Output[i]); } static void Main(string[] args) { int[] Mark; char[] Gender; string[] Name; string[] Output = new string[8]; int Frequent, Frequency, AvgAll, MaleAvg, FemaleAvg, BelowAverage, AboveAverage, NamesCheck; Mark = ReadFile("c:\\IUST1.txt", out Name, out Gender); Frequent = MostFreq(Mark, out Frequency); AvgAll = Avg(Mark); MaleAvg = AvgCond(Gender, Mark, 'M'); FemaleAvg = AvgCond(Gender, Mark, 'F'); BelowAverage = BelowAvg(Mark, out AboveAverage); NamesCheck = CheckNames(Name, 'T'); Output[0] = "Frequent Mark = " + Frequent.ToString(); Output[1] = "Frequency = " + Frequency.ToString(); Output[2] = "Average Of All = " + AvgAll.ToString(); Output[3] = "Average Of Males = " + MaleAvg.ToString(); Output[4] = "Average Of Females = " + FemaleAvg.ToString(); Output[5] = "Below Average = " + BelowAverage.ToString(); Output[6] = "Above Average = " + AboveAverage.ToString(); Output[7] = "Names With \"T\" = " + NamesCheck.ToString(); WriteFile("d:\\output.txt", Output); } } }
I haven’t test it. But you should call
SW.close()after finished writing stuffs.