Помощь в решении задачи на С++. Программирование с использованием подпрограмм.
Есть задача: Рассчитать потребляемую мощность прибором, включенным в сеть напряжением 220 В, при изменении его сопротивления от 4,5 Ом до 13,5 Ом (шаг изменения 0,5 Ом). Результат оформить в виде таблицы.
Есть мысль, что вручную эту задачу можно решить с помощью формулы: P=U^2/R.
Но как написать программу на языке С++, чтобы она через определенный шаг рассчитывала по формуле значение мощности и потом вывела на экран все мощности сразу, я не понимаю. Помогите пожалуйста.
Код:
#include <cstdlib>
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
double voltage = 220.0,//volts
resistance_min = 4.5,//ohm
resistance_max = 13.5,//ohm
resistance_step = 0.5,//ohm
resistance,
power;//W
cout << "The dependence of the power consumption \n";
cout << "of the load resistance at a voltage of ";
cout << voltage << " volts.\n" << endl;
cout << "resistance, ohm" << " | " << "power, W" << endl;
cout << "-----------------------------------" << endl;
for(resistance = resistance_min; resistance <= resistance_max; resistance += resistance_step){
power = voltage * voltage / resistance;
cout << resistance << "\t|\t" << power << endl;
}
cout << "-----------------------------------" << endl;
system("PAUSE");
return EXIT_SUCCESS;
}
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
double voltage = 220.0,//volts
resistance_min = 4.5,//ohm
resistance_max = 13.5,//ohm
resistance_step = 0.5,//ohm
resistance,
power;//W
cout << "The dependence of the power consumption \n";
cout << "of the load resistance at a voltage of ";
cout << voltage << " volts.\n" << endl;
cout << "resistance, ohm" << " | " << "power, W" << endl;
cout << "-----------------------------------" << endl;
for(resistance = resistance_min; resistance <= resistance_max; resistance += resistance_step){
power = voltage * voltage / resistance;
cout << resistance << "\t|\t" << power << endl;
}
cout << "-----------------------------------" << endl;
system("PAUSE");
return EXIT_SUCCESS;
}
Код:
#include <iostream>
#include <iomanip> //для манипуляторов setw и т.п.
#include <clocale> //для setlocale
using namespace std;
const double RMIN = 4.5;
const double RMAX = 13.5;
const double RSTEP = 0.5;
const char *LN = "-------------------------------------------------";
#define WFLD setw(12) //вводим WFLD который будет у нас означать манипулятор
//ширины setw(12)
double power(double r); //функция расчета мощ. по значению сопрот.
int main() {
setlocale(0,"");//для русификации
cout << "Таблица. Зависимость мощности от сопротивления." << endl;
cout << LN << endl;
cout << "|" << WFLD << "R, Ом" << WFLD << "|" << WFLD << "P, Вт"
<< WFLD << "|" << endl;
cout << LN << endl;
double R = RMIN;
while ( !(R > RMAX) ) {
cout << "|" << WFLD << R << WFLD << "|" << WFLD << power(R)
<< WFLD << "|" << endl;
R += RSTEP;
}
cout << LN << endl;
return 0;
}
double power(double r) {
return 220.0*220.0/r;
}
#include <iomanip> //для манипуляторов setw и т.п.
#include <clocale> //для setlocale
using namespace std;
const double RMIN = 4.5;
const double RMAX = 13.5;
const double RSTEP = 0.5;
const char *LN = "-------------------------------------------------";
#define WFLD setw(12) //вводим WFLD который будет у нас означать манипулятор
//ширины setw(12)
double power(double r); //функция расчета мощ. по значению сопрот.
int main() {
setlocale(0,"");//для русификации
cout << "Таблица. Зависимость мощности от сопротивления." << endl;
cout << LN << endl;
cout << "|" << WFLD << "R, Ом" << WFLD << "|" << WFLD << "P, Вт"
<< WFLD << "|" << endl;
cout << LN << endl;
double R = RMIN;
while ( !(R > RMAX) ) {
cout << "|" << WFLD << R << WFLD << "|" << WFLD << power(R)
<< WFLD << "|" << endl;
R += RSTEP;
}
cout << LN << endl;
return 0;
}
double power(double r) {
return 220.0*220.0/r;
}
Цитата: sadovoya
P.S. Ответ Meander вполне годится
Когда посмотрел на Ваш код, он показался мне более элегантным чем мой. Хотя длина кодов, примерно, одинакова, Вы применили больше возможностей языка. Но, вот, setlocale меня смущает, однажды использовал ее и все было нормально, а при переносе экзешника на другую машину появились кракозябры. Видимо, это очень древняя функция. А, вообще, по условию ТС можно десятки вариаций программ написать, слишком абстрактно, имхо. Для этой задачи, ключевой совет: используй цикл.
setlocale из заголовка <clocale> - из "сишного" подмножества языка. С ней проблем меньше, чем с "продвинутыми" современными из <locale>. Там все до конца еще не доведено с национальными локалями, как я понял (хотя еще от конкретного компилятора зависит). У меня проблем пока не было, есть только нюансы с кросплатформенностью linux-windows. На форуме была довольно длинная тема по setlocale и "крокозябрам".
Цитата: sadovoya
Еще у вас что-то невнятное в вопросе сказано об использовании подпрограмм.
Так эта задача по теме "Программирование с использованием подпрограмм". Спасибо большое.