Skip to content

Commit 3c756c4

Browse files
feat: implemented unit converter
1 parent 93d200a commit 3c756c4

File tree

2 files changed

+193
-0
lines changed

2 files changed

+193
-0
lines changed
Lines changed: 193 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,193 @@
1+
#include <iostream>
2+
#include <limits>
3+
#include <iomanip>
4+
#include <cmath>
5+
using namespace std;
6+
7+
void clearInput() {
8+
cin.clear();
9+
cin.ignore(numeric_limits<streamsize>::max(), '\n');
10+
}
11+
12+
double getNumber(const string &prompt) {
13+
double x;
14+
while (true) {
15+
cout << prompt;
16+
if (cin >> x) {
17+
clearInput();
18+
return x;
19+
}
20+
cout << "Invalid number. Try again.\n";
21+
clearInput();
22+
}
23+
}
24+
25+
int getIntInRange(const string &prompt, int lo, int hi) {
26+
int c;
27+
while (true) {
28+
cout << prompt;
29+
if (cin >> c) {
30+
clearInput();
31+
if (c >= lo && c <= hi) return c;
32+
cout << "Choice out of range (" << lo << " - " << hi << "). Try again.\n";
33+
} else {
34+
cout << "Invalid input. Enter a number.\n";
35+
clearInput();
36+
}
37+
}
38+
}
39+
40+
namespace conv {
41+
double metersToKilometers(double m) { return m / 1000.0; }
42+
double kilometersToMeters(double km) { return km * 1000.0; }
43+
double metersToMiles(double m) { return m / 1609.344; }
44+
double milesToMeters(double mi) { return mi * 1609.344; }
45+
double feetToMeters(double ft) { return ft * 0.3048; }
46+
double metersToFeet(double m) { return m / 0.3048; }
47+
48+
double cToF(double c) { return (c * 9.0/5.0) + 32.0; }
49+
double fToC(double f) { return (f - 32.0) * 5.0/9.0; }
50+
double cToK(double c) { return c + 273.15; }
51+
double kToC(double k) { return k - 273.15; }
52+
53+
double gramsToKilograms(double g) { return g / 1000.0; }
54+
double kilogramsToGrams(double kg) { return kg * 1000.0; }
55+
double kilogramsToPounds(double kg) { return kg * 2.2046226218; }
56+
double poundsToKilograms(double lb) { return lb / 2.2046226218; }
57+
58+
double litersToMilliliters(double L) { return L * 1000.0; }
59+
double millilitersToLiters(double mL) { return mL / 1000.0; }
60+
double litersToGallons(double L) { return L * 0.2641720524; }
61+
double gallonsToLiters(double gal) { return gal / 0.2641720524; }
62+
}
63+
64+
void pressEnterToContinue() {
65+
cout << "\nPress ENTER to continue...";
66+
cin.get();
67+
}
68+
69+
void lengthMenu() {
70+
while (true) {
71+
cout << "\n--- Length Converter ---\n";
72+
cout << "1) Meters → Kilometers\n";
73+
cout << "2) Kilometers → Meters\n";
74+
cout << "3) Meters → Miles\n";
75+
cout << "4) Miles → Meters\n";
76+
cout << "5) Feet → Meters\n";
77+
cout << "6) Meters → Feet\n";
78+
cout << "7) Back to Main Menu\n";
79+
int ch = getIntInRange("Choose (1-7): ", 1, 7);
80+
if (ch == 7) return;
81+
82+
double v = getNumber("Enter value: ");
83+
cout << fixed << setprecision(6);
84+
switch (ch) {
85+
case 1: cout << v << " m = " << conv::metersToKilometers(v) << " km\n"; break;
86+
case 2: cout << v << " km = " << conv::kilometersToMeters(v) << " m\n"; break;
87+
case 3: cout << v << " m = " << conv::metersToMiles(v) << " miles\n"; break;
88+
case 4: cout << v << " miles = " << conv::milesToMeters(v) << " m\n"; break;
89+
case 5: cout << v << " ft = " << conv::feetToMeters(v) << " m\n"; break;
90+
case 6: cout << v << " m = " << conv::metersToFeet(v) << " ft\n"; break;
91+
}
92+
pressEnterToContinue();
93+
}
94+
}
95+
96+
void temperatureMenu() {
97+
while (true) {
98+
cout << "\n--- Temperature Converter ---\n";
99+
cout << "1) Celsius → Fahrenheit\n";
100+
cout << "2) Fahrenheit → Celsius\n";
101+
cout << "3) Celsius → Kelvin\n";
102+
cout << "4) Kelvin → Celsius\n";
103+
cout << "5) Back to Main Menu\n";
104+
int ch = getIntInRange("Choose (1-5): ", 1, 5);
105+
if (ch == 5) return;
106+
107+
double v = getNumber("Enter value: ");
108+
cout << fixed << setprecision(4);
109+
switch (ch) {
110+
case 1: cout << v << " °C = " << conv::cToF(v) << " °F\n"; break;
111+
case 2: cout << v << " °F = " << conv::fToC(v) << " °C\n"; break;
112+
case 3: cout << v << " °C = " << conv::cToK(v) << " K\n"; break;
113+
case 4: cout << v << " K = " << conv::kToC(v) << " °C\n"; break;
114+
}
115+
pressEnterToContinue();
116+
}
117+
}
118+
119+
void weightMenu() {
120+
while (true) {
121+
cout << "\n--- Weight Converter ---\n";
122+
cout << "1) Grams → Kilograms\n";
123+
cout << "2) Kilograms → Grams\n";
124+
cout << "3) Kilograms → Pounds\n";
125+
cout << "4) Pounds → Kilograms\n";
126+
cout << "5) Back to Main Menu\n";
127+
int ch = getIntInRange("Choose (1-5): ", 1, 5);
128+
if (ch == 5) return;
129+
130+
double v = getNumber("Enter value: ");
131+
cout << fixed << setprecision(6);
132+
switch (ch) {
133+
case 1: cout << v << " g = " << conv::gramsToKilograms(v) << " kg\n"; break;
134+
case 2: cout << v << " kg = " << conv::kilogramsToGrams(v) << " g\n"; break;
135+
case 3: cout << v << " kg = " << conv::kilogramsToPounds(v) << " lb\n"; break;
136+
case 4: cout << v << " lb = " << conv::poundsToKilograms(v) << " kg\n"; break;
137+
}
138+
pressEnterToContinue();
139+
}
140+
}
141+
142+
void volumeMenu() {
143+
while (true) {
144+
cout << "\n--- Volume Converter ---\n";
145+
cout << "1) Liters → Milliliters\n";
146+
cout << "2) Milliliters → Liters\n";
147+
cout << "3) Liters → Gallons (US)\n";
148+
cout << "4) Gallons (US) → Liters\n";
149+
cout << "5) Back to Main Menu\n";
150+
int ch = getIntInRange("Choose (1-5): ", 1, 5);
151+
if (ch == 5) return;
152+
153+
double v = getNumber("Enter value: ");
154+
cout << fixed << setprecision(6);
155+
switch (ch) {
156+
case 1: cout << v << " L = " << conv::litersToMilliliters(v) << " mL\n"; break;
157+
case 2: cout << v << " mL = " << conv::millilitersToLiters(v) << " L\n"; break;
158+
case 3: cout << v << " L = " << conv::litersToGallons(v) << " gal\n"; break;
159+
case 4: cout << v << " gal = " << conv::gallonsToLiters(v) << " L\n"; break;
160+
}
161+
pressEnterToContinue();
162+
}
163+
}
164+
165+
// --- Main ---
166+
void printMainMenu() {
167+
cout << "\n=============================\n";
168+
cout << " UNIT CONVERTER\n";
169+
cout << "=============================\n";
170+
cout << "1) Length\n";
171+
cout << "2) Temperature\n";
172+
cout << "3) Weight\n";
173+
cout << "4) Volume\n";
174+
cout << "5) Exit\n";
175+
}
176+
177+
int main() {
178+
cout << "Simple Unit Converter (console)\n";
179+
while (true) {
180+
printMainMenu();
181+
int ch = getIntInRange("Choose (1-5): ", 1, 5);
182+
switch (ch) {
183+
case 1: lengthMenu(); break;
184+
case 2: temperatureMenu(); break;
185+
case 3: weightMenu(); break;
186+
case 4: volumeMenu(); break;
187+
case 5:
188+
cout << "Goodbye!\n";
189+
return 0;
190+
}
191+
}
192+
return 0;
193+
}
73.4 KB
Binary file not shown.

0 commit comments

Comments
 (0)