Exercise
Array Of Struct And Menu
Objective
Write a C# program that expand the previous exercise (array of points), so that it displays a menu, in which the user can choose to:
- Add data for one point
- Display all the entered points
- Calculate (and display) the average values for x and y
- Exit the program
Write Your C# Exercise
C# Exercise Example
using System; // Import the System namespace for basic functionality
// Define the Point struct to store 2D point data and RGB color information
struct Point
{
public short x; // X-coordinate of the point (short type)
public short y; // Y-coordinate of the point (short type)
public byte r; // Red color component (byte type)
public byte g; // Green color component (byte type)
public byte b; // Blue color component (byte type)
}
class Program // Define the main class
{
static void Main() // The entry point of the program
{
// Define an array of Point structs with a size of 1000 to store up to 1000 points
Point[] points = new Point[1000];
int pointCount = 0; // Initialize the counter for the number of points entered
bool exit = false; // Variable to control the exit condition of the loop
// Menu loop to repeatedly show the options until the user chooses to exit
while (!exit)
{
// Display the menu with options
Console.WriteLine("\nMenu:");
Console.WriteLine("1. Add data for one point");
Console.WriteLine("2. Display all entered points");
Console.WriteLine("3. Calculate and display average values for x and y");
Console.WriteLine("4. Exit");
Console.Write("Choose an option (1-4): ");
// Read the user's menu choice
string choice = Console.ReadLine();
// Perform actions based on the user's choice
switch (choice)
{
case "1":
// Add data for one point
if (pointCount < points.Length)
{
Console.WriteLine("\nEnter data for Point " + (pointCount + 1) + ":");
Console.Write("Enter X coordinate: ");
points[pointCount].x = short.Parse(Console.ReadLine()); // Get the X coordinate
Console.Write("Enter Y coordinate: ");
points[pointCount].y = short.Parse(Console.ReadLine()); // Get the Y coordinate
Console.Write("Enter Red color value (0-255): ");
points[pointCount].r = byte.Parse(Console.ReadLine()); // Get the red color component
Console.Write("Enter Green color value (0-255): ");
points[pointCount].g = byte.Parse(Console.ReadLine()); // Get the green color component
Console.Write("Enter Blue color value (0-255): ");
points[pointCount].b = byte.Parse(Console.ReadLine()); // Get the blue color component
pointCount++; // Increment the counter for the number of points entered
}
else
{
Console.WriteLine("Maximum number of points reached.");
}
break;
case "2":
// Display all entered points
if (pointCount > 0)
{
Console.WriteLine("\nEntered Points:");
for (int i = 0; i < pointCount; i++)
{
Console.WriteLine($"Point {i + 1}: X = {points[i].x}, Y = {points[i].y}, Color = RGB({points[i].r}, {points[i].g}, {points[i].b})");
}
}
else
{
Console.WriteLine("No points entered yet.");
}
break;
case "3":
// Calculate and display the average values for x and y
if (pointCount > 0)
{
float sumX = 0, sumY = 0;
for (int i = 0; i < pointCount; i++)
{
sumX += points[i].x; // Sum of X coordinates
sumY += points[i].y; // Sum of Y coordinates
}
float avgX = sumX / pointCount; // Calculate average of X
float avgY = sumY / pointCount; // Calculate average of Y
Console.WriteLine($"\nAverage X: {avgX:F2}");
Console.WriteLine($"Average Y: {avgY:F2}");
}
else
{
Console.WriteLine("No points entered yet to calculate averages.");
}
break;
case "4":
// Exit the program
exit = true;
Console.WriteLine("Exiting the program.");
break;
default:
// Handle invalid menu choices
Console.WriteLine("Invalid choice, please select a valid option.");
break;
}
}
}
}