К основному контенту

5 Глава, Лафоре Р.


*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;
}

Комментарии

  1. Не понимаю, зачем тебе ссылка на глобальную переменную? Задание же другое... Или я что то не так делаю?
    #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 ;
    }
    //---------------------------------

    ОтветитьУдалить
  2. А в 12 Упражнение iomanip зачем? :)

    ОтветитьУдалить
  3. #include
    using namespace std;
    ///////////////////////////////////

    struct fraction{
    int sup;
    int sub;
    };

    fraction fadd(fraction a,fraction b);
    fraction fsub(fraction a,fraction b);
    fraction fmul(fraction a,fraction b);
    fraction fdiv(fraction a,fraction b);


    int main(){
    fraction f1,f2, res;
    char ch, ch1;
    cout << "Write first fraction : ";
    cin >> f1.sup >> ch >> f1.sub;

    cout << "Write (+|-|*|/) : ";
    cin >> ch1;

    cout << "Write second fraction : ";
    cin >> f2.sup >> ch >> f2.sub;

    switch(ch1){
    case '+':
    res = fadd(f1,f2);
    break;

    case '-':
    res = fsub(f1,f2);
    break;

    case '*':
    res = fmul(f1,f2);
    break;

    case '/':
    res = fdiv(f1,f2);
    break;

    }

    cout << "Result : " << res.sup << ch << res.sup;






    }


    fraction fadd(fraction a,fraction b){
    fraction res;
    res.sup= a.sup*b.sub + a.sub*b.sup;
    res.sub= a.sub*b.sub;
    return res;

    }

    fraction fsub(fraction a,fraction b){
    fraction res;
    res.sup= a.sup*b.sub - a.sub*b.sup;
    res.sub= a.sub*b.sub;
    return res;

    }


    fraction fmul(fraction a,fraction b){
    fraction res;
    res.sup= a.sup*b.sup;
    res.sub= a.sub * b.sub;
    return res;

    }

    fraction fdiv(fraction a,fraction b){
    fraction res;
    res.sup= a.sup*b.sub;
    res.sub= a.sub * b.sup;
    return res;

    }



    ОтветитьУдалить

Отправить комментарий

Популярные сообщения из этого блога

ВОПРОС К ЧИТАТЕЛЯМ

Уважаемые читатели моего блога и просто проходящие мимо! У меня появилась идея заняться созданием уроков по интересующим вас темам. Предпочтительно на C++, но не ограничиваясь ими, я хочу поделиться своими знаниями не только в виде готового кода но и подробными объяснениями что к чему. Прошу вас, если вы имеете идею и хотели бы разобраться в какой-то теме - отпишитесь в комментариях, что было бы вам интересно. Постараюсь помочь. 

7 глава, Лафоре Р

*1. Напишите функцию reversit(), которая переворачивает строку (массив типа char). Используйте цикл for, который меняет местами первый и последний символы, затем следующие и т. д. до предпоследнего. Строка должна пере- даваться в функцию reversit() как аргумент. Напишите программу для выполнения функции reversit(). Программа долж- на принимать строку от пользователя, вызывать функцию reversit(), а за- тем выводить полученный результат. Используйте метод ввода, который позволяет использовать внутренние пробелы. Протестируйте программу на примере фразы «Аргентина манит негра».

6 глава, Лафоре Р

*1. Создайте класс Int, имитирующий стандартный тип int. Единственное поле этого класса должно иметь тип int. Создайте методы, которые будут устанавливать значение поля, равным нулю, инициализировать его целым значением, выводить значение поля на экран и складывать два значения типа Int. Напишите программу, в которой будут созданы три объекта класса Int, два из которых будут инициализированы. Сложите два инициализирован- ных объекта, присвойте результат третьему, а затем отобразите результат на экране.