• API
• FAQ
• Tools
• Archive
SHARE
TWEET

# Untitled

a guest Dec 9th, 2019 75 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
1. /*
2. Author: Colin Fitzpatrick
3. Date: 12/1/2019
4. Filename: Triangle.cpp
5. Purpose: Given 3 integer values representing the sides of a
6. triangle from an input file, will determine properties
7. Error Checking: N/A
8. Assumptions: A valid input file is named
9. Input/Output: Output sent to screen and results.out or error.log.
10. */
11.
12. #include <iostream> //Input/Output stream
13. #include <iomanip> //Use for precision and layout
14. #include<fstream> //Use for inputting and outputting from a file
15. #include <cmath> //Use for square root
16. #include <string> //Use for strings
17. using namespace std;
18.
19.
20. // Function prototypes
21. bool IsTriangle(int sideA, int sideB, int sideC); //IsTriangle Prototype
22.
23. bool IsRight(int sideA, int sideB, int sideC); //IsRight Prototype
24.
25. bool IsScalene(int sideA, int sideB, int sideC);//IsScalene Prototype
26.
27. bool IsIsosceles(int sideA, int sideB, int sideC);//IsIsosceles Prototype
28.
29. bool IsEquilateral(int sideA, int sideB, int sideC);//IsEquilateral Prototype
30.
31. void CalcPerimeter(int sideA, int sideB, int sideC, float& perimeter, float& sumPerimeter);//CalcPerimeter Prototype
32.
33. void CalcArea(int sideA, int sideB, int sideC, float perimeter, float& sumArea);//CalcArea Protoype
34.
35. void CalcAverages(float sumArea, float sumPerimeter, int totalTri, float& areaAverage, float& perAverage);
36.
37. void PrintErrorHeading(ofstream& dout, string outputError);
38.
39. void PrintHeading(ofstream& dout, string outputFileRes, int totalTri, int totalRight, int totalScal, int totalIso, int totalEqu,
40.     float areaAverage, float perAverage);//PrintHeading Prototype
41.
42. void PrintErrorLog(ofstream& dout, string outputError, int sideA,
43.     int sideB, int sideC, int& pass);//PrintErrorLog Prototype
44.
45. void GetStatistics(int triResult, int rightResult, int scalResult, int isoResult, int equResult, int& totalTri,
46.     int& totalRight, int& totalScal, int& totalIso, int& totalEqu); //GetStats Prototype
47.
48. void PrintStatistics(ofstream& dout, string outputFileRes, int totalTri, int totalRight, int totalScal, int totalIso, int totalEqu,
49.     float areaAverage, float perAverage); //PrintStats Prototype
50.
51.
52. int main()
53. {
54.
55.
56.     int sideA; //Side 1
57.     int sideB; //Side 2
58.     int sideC; //Side 3
59.     int totalTri = 0; //Total amount of triangles
60.     int totalRight = 0; //Total amount of right triangles
61.     int totalScal = 0; //Total amount of scalene triangles
62.     int totalIso = 0; //Total amount of isosceles triangles
63.     int totalEqu = 0; //Total amount of equilateral triangles
64.     int pass = 0; // Used to count how many times Error log heading is printed
65.
66.     bool triResult; //IsTriangle result
67.     bool scalResult;  //IsScalene result
68.     bool rightResult;  //IsRight result
69.     bool isoResult; //IsIsoscoles result
70.     bool equResult;//Is Equilateral result
71.
72.     float sumArea = 0;  //Sum of all triangles
73.     float sumPerimeter = 0; //Sum of perimeter of all triangles
74.     float perimeter = 0; //Perimeter of each triangle
75.     float perAverage = 0; //Average perimeter
76.     float areaAverage = 0;  //Average area
77.
78.     string inputFile; //Intput file name
79.     string outputFileRes = "results.out"; //results file name
80.     string outputError = "error.log"; //error log file name
81.     ifstream din;  //File input
82.     ofstream dout; //File output
83.
84. //Gets user input and checks validity
85.     do
86.     {
87.         cout << "Enter a file name below:" << endl;
88.         cin >> inputFile;
89.         din.open(inputFile);
90.     } while (!din);
91.
92.     din >> sideA >> sideB >> sideC;
93.
94.     while (din)
95.     {
96.         triResult = IsTriangle(sideA, sideB, sideC);//Saves results of IsTriangle in triResult
97.
98.         rightResult = IsRight(sideA, sideB, sideC);//Saves results of IsRight in rightResult
99.
100.         scalResult = IsScalene(sideA, sideB, sideC);//Saves results of IsScalene in scalResult
101.
102.         isoResult = IsIsosceles(sideA, sideB, sideC);//Saves results of IsIsosceles in isoResult
103.
104.         equResult = IsEquilateral(sideA, sideB, sideC); //Saves results of IsEquilateral in equResult
105.
106.         //For if it does not form a triangle
107.         if (triResult == false)
108.         {
109.             PrintErrorLog(dout, outputError, sideA, sideB, sideC, pass);
110.         }
111.         else
112.         {
113.             //For if it does form a triangle
114.             GetStatistics(triResult, rightResult, scalResult, isoResult, equResult, totalTri, totalRight, totalScal, totalIso, totalEqu);
115.             CalcArea(sideA, sideB, sideC, perimeter, sumArea);
116.             CalcPerimeter(sideA, sideB, sideC, perimeter, sumPerimeter);
117.
118.         }
119.
120.         din >> sideA >> sideB >> sideC;
121.     }
122.
123.     //Calls CalcAverages
124.     CalcAverages(sumArea, sumPerimeter, totalTri, areaAverage, perAverage);
125.
127.     PrintHeading(dout, outputFileRes, totalTri, totalRight, totalScal,
128.         totalIso, totalEqu, areaAverage, perAverage);
129.
130.     //Calls PrintStatistics
131.     PrintStatistics(dout, outputFileRes, totalTri, totalRight, totalScal,
132.         totalIso, totalEqu, areaAverage, perAverage);
133.
134.     din.close(); //Closes din
135.     dout.close();//Closes dout
136.
137.     system("pause");
138.     return 0;
139. }
140.
141.
142.
143. //Function definitions
144. bool IsTriangle(int sideA, int sideB, int sideC)
145. {
146.     //Pre: inputs the three sides from main
147.     //Post: returns true or false to the caller
148.     //Purpose: returns true if the sides form a triangle, false otherwise
149.
150.     if (sideA + sideB > sideC && sideB + sideC > sideA && sideC + sideA > sideB)
151.     {
152.         return true;
153.     }
154.     else
155.     {
156.         return false;
157.     }
158. }
159.
160. bool IsRight(int sideA, int sideB, int sideC)
161. {
162.     //Pre: Inputs three sides from main
163.     //Post: returns true or false to the caller
164.     //Purpose: Returns true if the triangle is a right triangle, false otherwise
165.
166.     if ((sideB * sideB) + (sideC * sideC) == (sideA * sideA))
167.     {
168.         return true;
169.     }
170.     else
171.     {
172.         return false;
173.     }
174. }
175.
176. bool IsScalene(int sideA, int sideB, int sideC)
177. {
178.     //Pre: Inputs three sides from main
179.     //Post: returns true or false to the caller
180.     //Purpose: returns true if the triangle is a scalene triangle, false otherwise
181.
182.     if (sideA != sideB && sideB != sideC && sideA != sideC)
183.     {
184.         return true;
185.     }
186.     else
187.     {
188.         return false;
189.     }
190. }
191.
192. bool IsIsosceles(int sideA, int sideB, int sideC)
193. {
194.     //Pre: Inputs three sides from main
195.     //Post: returns true or false to the caller
196.     //Purpose: returns true if the triangle is a isosceles triangle, false otherwise
197.
198.     if (sideA == sideB || sideB == sideC || sideC == sideA)
199.     {
200.         return true;
201.     }
202.     else
203.     {
204.         return false;
205.     }
206. }
207.
208. bool IsEquilateral(int sideA, int sideB, int sideC)
209. {
210.     //Pre: Inputs three sides from main
211.     //Post: returns true or false to the caller
212.     //Purpose: returns true if the triangle is a equilateral triangle, false otherwise
213.
214.     if (sideA == sideB && sideB == sideC)
215.     {
216.         return true;
217.     }
218.     else
219.     {
220.         return false;
221.     }
222. }
223.
224. void CalcArea(int sideA, int sideB, int sideC, float perimeter, float& sumArea)
225. {
226.     //Pre: Inputs three sides from main
227.     //Post: returns the area to the caller
228.     //Purpose: if gicen the sides of a triangle, it calculates the area and returns it
229.
230.     float total;
231.     float perHalf;
232.
233.     perHalf = perimeter / 2.0f;
234.
235.     total = sqrt(perHalf * (perHalf - (float)sideA) * (perHalf - (float)sideB) * (perHalf - (float)sideC));
236.
237.     sumArea = sumArea + total;
238. }
239.
240. void CalcPerimeter(int sideA, int sideB, int sideC, float& perimeter, float& sumPerimeter)
241. {
242.     //Pre: Inputs parameters from main
243.     //Post: returns perimeter and sum to the caller
244.     //Purpose: If parameters are given, returns perimeter and sum
245.
246.     perimeter = (float)sideA + (float)sideB + (float)sideC;
247.
248.     sumPerimeter = perimeter + sumPerimeter;
249. }
250.
251. void GetStatistics(int triResult, int rightResult, int scalResult, int isoResult, int equResult, int& totalTri,
252.     int& totalRight, int& totalScal, int& totalIso, int& totalEqu)
253. {
254.     // Pre: Parameters inputted from main
255.     // Post: Determines whether or not the sides form the different triangle types
256.     // Purpose: Determines if the sides form any triangle types and increment counters by one
257.
258.     //totalTri counter
259.     if (triResult == true)
260.     {
261.         totalTri++;
262.     }
263.
264.     //totalRight counter
265.     if (rightResult == true)
266.     {
267.         totalRight++;
268.     }
269.
270.     //totalScal counter
271.     if (scalResult == true)
272.     {
273.         totalScal++;
274.     }
275.
276.     //totalIso counter
277.     if (isoResult == true)
278.     {
279.         totalIso++;
280.     }
281.
282.     //totalEqu counter
283.     if (equResult == true)
284.     {
285.         totalEqu++;
286.     }
287. }
288.
289. void PrintHeading(ofstream& dout, string outputFileRes, int totalTri, int totalRight, int totalScal, int totalIso,
290.     int totalEqu, float areaAverage, float perAverage)
291. {
292.     // Pre: Parameters inputted from main
293.     // Post: Results header printed
294.     // Purpose: Prints the results file heading
295.
296.     dout.open(outputFileRes);
297.
299.     dout << fixed << showpoint << setprecision(2);
300.     dout << "**********************************************************" << endl;
301.     dout << "*" << setw(57) << "*" << endl;
302.     dout << "*" << setw(38) << "Triangle Statistics" << setw(19) << "*" << endl;
303.     dout << "*" << setw(31) << "Output file name: " << outputFileRes << setw(15) << "*" << endl;
304.     dout << "*" << setw(57) << "*" << endl;
305.     dout << "**********************************************************" << endl;
306.
307.     //Calls PrintStatistics
308.     PrintStatistics(dout, outputFileRes, totalTri, totalRight, totalScal, totalIso, totalEqu, areaAverage, perAverage);
309.
310.     dout.close(); //Closes dout
311. }
312.
313. void PrintStatistics(ofstream& dout, string outputFileRes, int totalTri, int totalRight,
314.     int totalScal, int totalIso, int totalEqu, float areaAverage, float perAverage)
315. {
316.     // Pre: Parameters inputted from main
317.     // Post: Triangle statistics are printed
318.     // Purpose: Prints triangle statistics to file
319.
320.     dout << endl;
321.     dout << "The file has the following statistics:" << endl;
322.     dout << setw(5) << totalTri << "   total # of triangle(s)" << endl;
323.     dout << setw(5) << totalIso << "   isosceles triangle(s)" << endl;
324.     dout << setw(5) << totalEqu << "   equilateral triangle(s)" << endl;
325.     dout << setw(5) << totalScal << "   scalene traingle(s)" << endl;
326.     dout << setw(5) << totalRight << "   right triangle(s)" << endl;
327.     dout << setw(8) << areaAverage << " is the average area of all triangles" << endl;
328.     dout << setw(8) << perAverage << " is the average perimeter of all triangles" << endl;
329. }
330.
331. void PrintErrorHeading(ofstream& dout, string outputError)
332. {
333.     // Pre: Parameters inputted from main
334.     // Post: Error log heading outputted
335.     // Purpose: Prints the error log heading
336.
337.     dout.open(outputError);
338.
339.     dout << fixed << showpoint << setprecision(2);
340.     dout << "**********************************************************" << endl;
341.     dout << "*" << setw(57) << "*" << endl;
342.     dout << "*" << setw(38) << "Triangle Statistics" << setw(19) << "*" << endl;
343.     dout << "*" << setw(30) << "Output file name: " << outputError << setw(18) << "*" << endl;
344.     dout << "*" << setw(57) << "*" << endl;
345.     dout << "**********************************************************" << endl;
346.     dout << endl;
347.     dout << "The following sides are invalid:" << setw(5) << endl;
348.
349.     dout.close();
350. }
351.
352. void PrintErrorLog(ofstream& dout, string outputError, int sideA, int sideB, int sideC, int& pass)
353. {
354.     // Pre: Parameters inputted from main
355.     // Post: Sides that create errors are outputted to error.log
356.     // Purpose: Outputs sides that create errors to error log with the reason for the error
357.
358.     while (pass == 0)
359.     {
361.         pass++;
362.     }
363.
364.     dout.open(outputError, ios::app); //Found on google, I couldn't get it to work without it.
365.
366.     dout << setw(5);
367.
368.     if (sideA < 0 || sideB < 0 || sideC < 0)
369.     {
370.         dout << sideA << setw(3) << sideB << setw(3) << sideC
371.             << setw(3) << "  - side(s) can not be negative" << endl;
372.     }
373.     else if (sideA == 0 || sideB == 0 || sideC == 0)
374.     {
375.         dout << sideA << setw(3) << sideB << setw(3) << sideC
376.             << setw(3) << "  - side(s) can not be zero" << endl;
377.     }
378.     else
379.     {
380.         dout << sideA << setw(3) << sideB << setw(3) << sideC
381.             << setw(3) << "  - side(s) can not form triangle" << endl;
382.     }
383.
384.     dout.close();
385. }
386.
387. void CalcAverages(float sumArea, float sumPerimeter, int totalTri, float& areaAverage, float& perAverage)
388. {
389.     // Pre: paramaters are inputted from main
390.     // Post: Calculates average area and perimeter
391.     // Purpose: Calculates average area and perimeter and returns results
392.
393.     areaAverage = sumArea / (float)totalTri;
394.
395.     perAverage = sumPerimeter / (float)totalTri;
396. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy.

Top