*1. Вернитесь к рассмотрению примера CIRCAREA главы 2 «Основы програм-
мирования на C++». Напишите функцию с именем circarea(), которая ана-
логичным образом вычисляет площадь круга. Функция должна принимать
один аргумент типа float и возвращать значение типа float. Напишите функ-
цию main(), которая просит пользователя ввести значение радиуса, вызы-
вает функцию circarea(), а затем отображает результат вычисления на экране.
*2. Возведение числа n в степень р — это умножение числа n на себя р раз.
Напишите функцию с именем power(), которая в качестве аргументов при-
нимает значение типа double для n и значение типа int для р и возвращает
значение типа double. Для аргумента, соответствующего степени числа, за-
дайте значение по умолчанию, равное 2, чтобы при отсутствии показателя
степени при вызове функции число n возводилось в квадрат. Напишите
функцию main(), которая запрашивает у пользователя ввод аргументов для
функции power(), и отобразите на экране результаты ее работы.
*3. Напишите функцию с именем zeroSmaller(), в которую передаются с по-
мощью ссылок два аргумента типа int, присваивающую меньшему из ар-
гументов нулевое значение. Напишите программу для проверки работы
функции.
*4. Напишите функцию, принимающую в качестве аргументов два значения
типа Distance и возвращающую значение наибольшего из аргументов (не-
обходимую информацию можно найти в примере RETSTRC).
5. Напишите функцию с именем hms_to_secs(), имеющую три аргумента типа
int: часы, минуты и секунды. Функция должна возвращать эквивалент пе-
реданного ей временного значения в секундах (типа long). Создайте про-
грамму, которая будет циклически запрашивать у пользователя ввод значе-
ния часов, минут и секунд и выводить результат работы функции на экран.
6. Модифицируйте программу, описанную в упражнении 11 главы 4 «Струк-
туры», складывающую два структурных значения типа time. Теперь про-
грамма должна включать в себя две функции. Первая, time_to_secs(), при-
нимает в качестве аргумента значение типа time и возвращает эквивалентное
значение в секундах типа long. Вторая, secs_to_time(), в качестве аргумента
принимает число секунд, имеющее тип long, а возвращает эквивалентное
значение типа time.
7. Взяв в качестве основы функцию power() из упражнения 2, работающую
только со значением типа double, создайте перегруженные функции с этим
же именем, принимающими в качестве аргумента значения типа char, int,
long и float. Напишите программу, вызывающую функцию power() со все-
ми возможными типами аргументов.
8. Напишите функцию с именем swap(), обменивающую значениями два сво-
их аргумента типа int (обратите внимание, что изменяться должны значе-
ния переменных из вызывающей программы, а не локальных переменных
функции). Выберите способ передачи аргументов. Напишите вызывающую
программу main(), использующую данную функцию.
9. Переработайте программу из упражнения 8 так, чтобы функция swap()
принимала в качестве аргументов значения типа time (см. упражнение 6).
10. Напишите функцию, которая при каждом вызове будет выводить на эк-
ран количество раз, которое она вызывалась ранее. Напишите программу,
которая будет вызывать данную функцию не менее 10 раз. Попробуйте
реализовать данную функцию двумя различными способами: с использо-
ванием глобальной переменной и статической локальной переменной для
хранения числа вызовов функции. Какой из способов предпочтительней?
Почему для решения задачи нельзя использовать обычную локальную пе-
ременную?
11. Напишите программу, использующую структуру sterling, которая описана
в упражнении 10 главы 4. Программа должна получать от пользователя
значения двух денежных сумм, выраженных в фунтах, шиллингах и пен-
сах, складывать эти значения и выводить результат на экран в том же
формате. Необходимо разработать три функции. Первая из них должна
получать от пользователя число фунтов, шиллингов и пенсов и возвра-
щать соответствующее значение типа sterling. Вторая функция должна при-
нимать в качестве аргументов два значения типа sterling, складывать их и
возвращать значение, также имеющее тип sterling. Третья функция долж-
на принимать аргумент типа sterling и выводить его значение на экран.
12. Модифицируйте калькулятор, созданный в упражнении 12 главы 4, так,
чтобы каждая арифметическая операция выполнялась с помощью функ-
ции. Функции могут называться fadd(), fsub(), fmul() и fdiv(). Каждая из
функций должна принимать два структурных аргумента типа fraction и воз-
вращать значение того же типа.
1)
#include "stdafx.h"
#include <iostream>
using namespace std;
float circarea(float);
float rad, area;
const float PI = 3.14159F;
int main()
{
setlocale (0, "");
cout << "Введите радиус окружности: ";
cin >> rad;
circarea(rad);
cout << "Площадь круга равна " << area << endl;
system ("pause");
return 0;
}
float circarea (float radius)
{
area = PI * rad * rad;
return area;
}
2)
#include "stdafx.h"
#include <iostream>
using namespace std;
double power(double, int=2);
double n, res=1;
int p;
int main()
{
cout << "enter the number" << endl;
cin >> n;
cout << "the power of the number" << endl;
cin >> p;
power (n, p);
cout << "result: " << res << endl;
system ("pause");
return 0;
}
double power(double numb, int pow)
{
for (int j=1; j <= pow; j++)
res *= n;
return res;
}
3)
#include "stdafx.h"
#include <iostream>
using namespace std;
void zeroSmaller(int&, int&);
int n1, n2;
int main()
{
cout << "enter the 1-st number" << endl;
cin >> n1;
cout << "enter the 2-nd number" << endl;
cin >> n2;
zeroSmaller (n1, n2);
cout << n1 << " " << n2 << endl;
system ("pause");
return 0;
}
void zeroSmaller(int& num1, int& num2)
{
if (num1 > num2)
num2 = 0;
else num1 = 0;
}
4)
#include "stdafx.h"
#include <iostream>
using namespace std;
struct Distance
{
int feet;
float inches;
};
Distance addengl(Distance, Distance);
void engldisp(Distance);
int main()
{
setlocale (0, "");
Distance d1, d2, biggest;
cout << "\nВведите число футов: "; cin >> d1.feet;
cout << "Введите число дюймов: "; cin >> d1.inches;
cout << "\nВведите число футов: "; cin >> d2.feet;
cout << "Введите число дюймов: "; cin >> d2.inches;
biggest = addengl(d1, d2);
cout << endl;
engldisp(biggest); cout << endl;
system ("pause");
return 0;
}
Distance addengl(Distance dd1, Distance dd2)
{
Distance big;
int sum1, sum2;
sum1 = dd1.feet * 12 + dd1.inches;
sum2 = dd2.feet * 12 + dd2.inches;
if (sum1 > sum2)
big = dd1;
else big = dd2;
return big;
}
void engldisp(Distance big)
{
cout << "Большее значение: " << big.feet << "\'-" << big.inches << "\"";
}
5)
#include "stdafx.h"
#include <iostream>
using namespace std;
int hour, mins, secs;
unsigned long hms_to_secs(int, int, int);
int main()
{
unsigned long seconds;
char ch;
do
{
cout << "Enter the hours" << endl; cin >> hour;
cout << "Enter the minutes" << endl; cin >> mins;
cout << "Enter the seconds" << endl; cin >> secs;
seconds = hms_to_secs(hour, mins, secs);
cout << "all seconds: " << seconds << endl;
cout << "Repeat? (y/n) ";
cin >> ch;
}
while (ch != 'n');
}
unsigned long hms_to_secs(int h, int m, int s)
{
unsigned long seconds = h*60*60 + m*60 + s;
return seconds;
}
6)
#include "stdafx.h"
#include <iostream>
using namespace std;
struct Time
{
int hours;
int minutes;
int seconds;
};
Time t1, t2, tsum;
long time_to_secs (Time);
Time secs_to_time (long);
int main()
{
long totalsecs;
char ch;
cout << "Enter the 1-st time (hours. minutes. seconds)" << endl;
cin >> t1.hours >> ch >> t1.minutes >> ch >> t1.seconds;
cout << "Enter the 2-nd time (hours. minutes. seconds)" << endl;
cin >> t2.hours >> ch >> t2.minutes >> ch >> t2.seconds;
totalsecs = time_to_secs(t1) + time_to_secs(t2);
tsum = secs_to_time(totalsecs);
cout << "Time: " << tsum.hours << ch << tsum.minutes << ch << tsum.seconds << endl;
system ("pause");
return 0;
}
long time_to_secs (Time time)
{
long totalsecs = ((time.hours * 3600) + (time.minutes * 60) + time.seconds);
return totalsecs;
}
Time secs_to_time (long totalsecs)
{
tsum.hours = totalsecs/(60*60);
tsum.minutes = totalsecs % (60*60)/60;
tsum.seconds = totalsecs % (60*60) % 60;
return tsum;
}
7)
#include "stdafx.h"
#include <iostream>
using namespace std;
double power(double n, int p=2);
double power(char n, int p=2);
double power(int n, int p=2);
double power(long n, int p=2);
double power(float n, int p=2);
double n;
int p;
int main()
{
cout << "result double: " << power (3.563678456434, 5) << endl;
cout << "result char: " << power ('r', 5) << endl;
cout << "result int: " << power (3, 5) << endl;
cout << "result long: " << power (3L, 5) << endl;
cout << "result float: " << power (3.3F, 5) << endl;
system ("pause");
return 0;
}
double power(double n, int p)
{
double res = n;
for (int j=1; j <= p; j++)
res *= n;
return res;
}
double power(char n, int p)
{
char res = n;
for (int j=1; j <= p; j++)
res *= n;
return res;
}
double power(int n, int p)
{
int res = n;
for (int j=1; j <= p; j++)
res *= n;
return res;
}
double power(long n, int p)
{
long res = n;
for (int j=1; j <= p; j++)
res *= n;
return res;
}
double power(float n, int p)
{
float res = n;
for (int j=1; j <= p; j++)
res *= n;
return res;
}
8)
#include "stdafx.h"
#include <iostream>
using namespace std;
void swap(int&, int&);
int main()
{
int n1, n2;
cout << "Enter 1-st number" << endl;
cin >> n1;
cout << "Enter 2-st number" << endl;
cin >> n2;
swap(n1, n2);
cout << n1 << ' ' << n2 << endl;
system ("pause");
return 0;
}
void swap(int& num1, int& num2)
{
int temp = num1;
num1 = num2;
num2 = temp;
}
9)
#include "stdafx.h"
#include <iostream>
using namespace std;
struct Time
{
int hours;
int minutes;
int seconds;
};
Time t1, t2;
void swap(Time&, Time&);
int main()
{
char ch;
cout << "Enter the 1-st time (hours. minutes. seconds)" << endl;
cin >> t1.hours >> ch >> t1.minutes >> ch >> t1.seconds;
cout << "Enter the 2-nd time (hours. minutes. seconds)" << endl;
cin >> t2.hours >> ch >> t2.minutes >> ch >> t2.seconds;
swap(t1, t2);
cout << t1.hours << ch << t1.minutes << ch << t1.seconds << endl;
cout << t2.hours << ch << t2.minutes << ch << t2.seconds << endl;
system ("pause");
return 0;
}
void swap(Time& num1, Time& num2)
{
Time temp = num1;
num1 = num2;
num2 = temp;
}
10)
#include "stdafx.h"
#include <iostream>
using namespace std;
int times=1;
void call (int&);
int main()
{
call (times);
call (times);
call (times);
call (times);
call (times);
call (times);
call (times);
call (times);
call (times);
call (times);
system ("pause");
return 0;
}
void call (int& tms)
{
cout << "I was called " << tms << " times" << endl;
tms++;
}
11)
#include "stdafx.h"
#include <iostream>
using namespace std;
struct sterling
{
int pounds;
int shilling;
int pens;
};
sterling s1, s2, sum;
char dot;
sterling input (sterling);
sterling addition (sterling, sterling);
void output (sterling);
int main()
{
s1 = input(s1);
s2 = input(s2);
sum = addition (s1, s2);
output (sum);
system ("pause");
}
sterling input (sterling str)
{
cout << "Enter pounds" << endl;
cin >> str.pounds >> dot >> str.shilling >> dot >> str.pens;
return str;
}
sterling addition (sterling str1, sterling str2)
{
sterling sum;
int sumpens = (str1.pounds *20*12 + str1.shilling *12 + str1.pens) + (str2.pounds *20*12 + str2.shilling *12 + str2.pens);
sum.pounds = sumpens/(20*12);
sum.shilling = sumpens % (20*12)/12;
sum.pens = sumpens%(20*12)%12;
return sum;
}
void output (sterling sum)
{
cout << "All J" << sum.pounds << dot << sum.shilling << dot << sum.pens << endl;
}
12)
#include "stdafx.h"
#include <iostream>
#include <iomanip>
using namespace std;
struct fraction
{
int numerator;
int denominator;
};
fraction f1, f2, sumf;
fraction fadd (fraction, fraction);
fraction fsub (fraction, fraction);
fraction fmul (fraction, fraction);
fraction fdiv (fraction, fraction);
int main()
{
char ch = '/', zn;
do
{
cout << "enter 1-st fraction" << endl;
cin >> f1.numerator >> ch >> f1.denominator;
cout << "Enter symbol" << endl;
cin >> zn;
cout << "enter 2-nd fraction" << endl;
cin >> f2.numerator >> ch >> f2.denominator;
switch (zn)
{
case '+': sumf = fadd (f1, f2); break;
case '-': sumf = fsub (f1, f2); break;
case '*': sumf = fmul (f1, f2); break;
case '/': sumf = fdiv (f1, f2); break;
}
cout << sumf.numerator << ch << sumf.denominator << endl;
cout << "esche raz? (y,n)" << endl;
cin >> ch;
}
while (ch != 'n');
return 0;
}
fraction fadd (fraction f1, fraction f2)
{
sumf.numerator =f1.numerator * f2.denominator + f1.denominator * f2.numerator;
sumf.denominator = f1.denominator * f2.denominator;
return sumf;
}
fraction fsub (fraction f1, fraction f2)
{
sumf.numerator = f1.numerator * f2.denominator - f1.denominator * f2.numerator;
sumf.denominator = f1.denominator * f2.denominator;
return sumf;
}
fraction fmul (fraction f1, fraction f2)
{
sumf.numerator = f1.numerator * f2.denominator;
sumf.denominator = f1.denominator * f2.denominator;
return sumf;
}
fraction fdiv (fraction f1, fraction f2)
{
sumf.numerator = f1.numerator * f2.denominator;
sumf.denominator = f1.denominator * f2.numerator;
return sumf;
}
Не понимаю, зачем тебе ссылка на глобальную переменную? Задание же другое... Или я что то не так делаю?
ОтветитьУдалить#include
using namespace std;
int countCallFanc();
//int n; //глобальная переменная (решение_1)
int main()
{
for (int i = 0; i < 10; i++) {
cout << i << " ~~~~ ";
cout << " #" << countCallFanc() << endl;
}
system("pause");
return 0;
}
//---------------------------------
int countCallFanc()
{
static int n; // статическая лакальная (решение_2)
return ++n ;
}
//---------------------------------
А в 12 Упражнение iomanip зачем? :)
ОтветитьУдалить