#include <iostream>
using namespace std;
// Default frequency = 1000 Hz
// Default deadtime = 0 us
void setPWM(int duty, int frequency = 1000, int deadtime = 0) {
cout << duty << " " << frequency << " " << deadtime;
}
int main() {
int duty, mode;
cin >> duty >> mode;
if (mode == 0) {
setPWM(duty); // use both defaults
}
else if (mode == 1) {
int frequency;
cin >> frequency;
setPWM(duty, frequency); // override frequency only
}
else if (mode == 2) {
int frequency, deadtime;
cin >> frequency >> deadtime;
setPWM(duty, frequency, deadtime); // override both
}
return 0;
}
Explanation & Logic Summary:
Default arguments allow setPWM to be called with 1, 2, or 3 parameters using a single function definition.
The required parameter (duty) appears first, followed by optional parameters with default values.
duty is provided, both frequency and deadtime use defaults.frequency is provided, only deadtime uses its default.This enforces C++’s rule that default arguments must appear at the end of the parameter list.
Firmware Relevance & Real-World Context:
PWM drivers frequently expose optional configuration parameters such as frequency and dead-time.
In real firmware:
Using default arguments enables clean, scalable embedded APIs that support both simple and advanced use cases without code duplication.
This mirrors real-world motor control, LED dimming, and power electronics firmware design.
Input
50 0
Expected Output
50 1000 0