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

3 глава, Лафоре Р.


*1. Предположим, вы хотите создать таблицу умножения на заданное число.
Напишите программу, которая позволяет пользователю ввести это число,
а затем генерирует таблицу размером 20 строк на 10 столбцов. Первые
строки результата работы программы должны выглядеть примерно сле-
дующим образом:
Введите число: 7
7142128354249566370
77849198105112119126133140
147154161168175182189196203210



*2. Напишите программу, предлагающую пользователю осуществить перевод
температуры из шкалы Цельсия в шкалу Фаренгейта или наоборот, а затем
осуществите преобразование. Используйте в программе переменные веще-
ственного типа. Взаимодействие программы с пользователем может вы-
глядеть следующим образом:
Нажмите 1 для перевода шкалы Цельсия в шкалу Фаренгейта,
2 для перевода шкалы Фаренгейта в шкалу Цельсия: 2
Введите температуру по Фаренгейту: 70
Значение по Цельсию: 21.111111
*3. Операции ввода, такие, как cin, должны уметь преобразовывать последо-
вательность символов в число. Напишите программу, которая позволяет
пользователю ввести шесть цифр, а затем выводит результат типа long на
экране. Каждая цифра должна считываться отдельно при помощи функ-
ции getche(). Вычисление значения переменной производится путем ум-


ножения текущего ее значения на 10 и сложения с последней введенной
цифрой (для того, чтобы из кода символа получить цифру, вычтите из не-
го 48 или '0'). Примером результата работы программы может служить
следующий:
Введите число: 123456
Вы ввели число 123456
*4. Создайте эквивалент калькулятора, выполняющего четыре основных ариф-
метических операции. Программа должна запрашивать ввод пользовате-
лем первого операнда, знака операции и второго операнда. Для хранения
операндов следует использовать переменные вещественного типа. Выбрать
операцию можно при помощи оператора switch. В конце программа долж-
на отображать результат на экране. Результат работы программы с поль-
зователем может выглядеть следующим образом:
Введите первый операнд, операцию и второй операнд: 10 / 3
Результат равен 3.333333
Выполнить еще одну операцию (y/n)? y
Введите первый операнд, операцию и второй операнд: 12 + 100
Результат равен 112
Выполнить еще одну операцию (y/n)? n
5. При помощи цикла for изобразите на экране пирамиду из символов 'X'.
Верхняя часть пирамиды должна выглядеть следующим образом:
х
ххх
ххххх
ххххххх
ххххххххх
Вся пирамида должна быть высотой не 5 линий, как изображено здесь,
а 20 линий. Одним из способов ее построения может служить использова-
ние двух вложенных циклов, из которых внутренний будет заниматься
печатанием символов 'X' и пробелов, а другой осуществлять переход на
одну строку вниз.
6. Измените программу factor, приведенную в этой главе, таким образом,
чтобы она циклически запрашивала ввод пользователем числа и вычисля-
ла его факториал, пока пользователь не введет 0. В этом случае програм-
ма должна завершиться. При необходимости вы можете использовать со-
ответствующие операторы программы factor в цикле do или while.
7. Напишите программу, рассчитывающую сумму денег, которые вы получи-
те при вложении начальной суммы с фиксированной процентной ставкой
дохода через определенное количество лет. Пользователь должен вводить
с клавиатуры начальный вклад, число лет и процентную ставку. Приме-
ром результата работы программы может быть следующий:
Введите начальный вклад: 3000
Введите число лет: 10
Введите процентную ставку: 5.5
Через 10 лет вы получите 5124.43 доллара.

В конце первого года вы получите 3 000 + (3 000*0.055) = 3165 долларов.
В конце следующего года вы получите 3 165 + (3 165*0.055) = 3339.08 дол-
ларов. Подобные вычисления удобно производить с помощью цикла for.
8. Напишите программу, которая циклически будет запрашивать ввод поль-
зователем двух денежных сумм, выраженных в фунтах, шиллингах и пен-
сах (см. упражнения 10 и 12 главы 2). Программа должна складывать
введенные суммы и выводить на экран результат, также выраженный в
фунтах, шиллингах и пенсах. После каждой итерации программа должна
спрашивать пользователя, желает ли он продолжать работу программы.
При этом рекомендуется использовать цикл do. Естественной формой
взаимодействия программы с пользователем была бы следующая:
Введите первую сумму £5 10 6
Введите первую сумму £3 2 6
Всего £8 13 0
Продолжить(y/n) ?
Для того чтобы сложить две суммы, вам необходимо учесть заем одного
шиллинга в том случае, если число пенсов окажется больше 11, и одного
фунта, если число шиллингов окажется больше 19.
9. Представьте, что вы собираетесь пригласить к себе шестерых гостей, но за
вашим столом могут разместиться всего лишь 4 человека Сколькими
способами можно разместить четырех из шести гостей за обеденным сто-
лом? Каждый из шести гостей может разместиться на первом стуле. Каж-
дый из оставшихся пяти гостей может занять второй стул. На третьем
стуле может разместиться один их четырех гостей, и на четвертом — один
из трех оставшихся гостей. Двоим из гостей не достанется ни одного
места. Таким образом, число возможных рассадок гостей за столом равно
6*5*4*3 = 360. Напишите программу, которая будет производить аналогич-
ные вычисления для любого числа гостей и любого числа мест за столом
(при этом предполагается, что число гостей не меньше числа мест). Про-
грамма не должна быть сложной, и вычисление можно организовать с по-
мощью простого цикла for.
10. Модифицируйте программу, описанную в упражнении 7, так, чтобы вме-
сто вычисления текущей суммы на вашем счете она вычисляла, сколько
лет потребуется для того, чтобы при заданной процентной ставке и вели-
чине начального вклада сумма на вашем счете достигла запрашиваемого
вами значения. Для хранения найденного числа лет используйте перемен-
ную целого типа (можно отбросить дробную часть значения, полученного
в результате расчета). Самостоятельно выберите тип цикла, подходящий
для решения задачи.
11. Создайте калькулятор, выполняющий действия над денежными суммами,
выраженными в фунтах, шиллингах и пенсах (см. упражнения 10 и 12
главы 2). Калькулятор должен складывать и вычитать вводимые значе-
ния, а также производить умножение денежной суммы на вещественное
число (операция умножения двух денежных сумм не имеет смысла, по-

скольку квадратных денежных единиц не существует. Деление одной де-
нежной суммы на другую мы тоже не будем рассматривать). Организация
взаимодействия с калькулятором описана в упражнении 4 этой главы.
12. Создайте калькулятор, выполняющий четыре арифметических действия
над дробями (см. упражнение 9 главы 2 и упражнение 4 этой главы).
Формулы, демонстрирующие выполнение арифметических операций над
дробями, приведены ниже.

Сложение: a/b+c/d=(a*d+b*c)/(b*d)
Вычитание: a/b-c/d=(a*d-b*c)/(b*d)
Умножение: a/b*c/d=(a*c)/(b*d)
Деление: a/b/c/d = (a*d)/(b*c)

Пользователь должен сначала ввести первый операнд, затем знак опера-
ции и второй операнд. После вычисления результата программа должна
отобразить его на экране и запросить пользователя о его желании произ-
вести еще одну операцию.


1)



#include "stdafx.h"
#include <iostream>  
#include <iomanip>
using namespace std;
int main()
{
int j, num;
char ch;
cout << "Vvedite chislo: ";
cin >> num;
for (j=1; j<=200;  j++)
{
ch = (j%10) ? ' ' : '\n';
cout << setiosflags (ios::left) << setw (6) << num*j << ch;
}
cout << endl;
  system ("pause");
return 0;


2)


#include <iostream>
#include "stdafx.h"
#include <iomanip>
using namespace std;
int main()
{
float C, F, k;
cout << "Nazhmite 1 dla perevoda shkaly Zelsiya v shkalu Faringeyta i 2 dlya perevoda shkaly Faringeyta v shkalu Zelsiya" << endl;
cin >> k;
if (k == 1)
{
        cout << "Vvedite t po Tselsiu" << endl;
             cin >> C;
             F = C*1.8+32;
cout << "po Faringeytu " << F << endl;
system ("pause");
}
else
{
cout << "Vvedite t po Faringeytu" << endl;
cin >> F;
C = (F-32)/1.8;
cout << "po Zelsiu " << C << endl;
system ("pause");
}
    return 0;
}


4)


#include "stdafx.h"
#include <iostream>
using namespace std;

int main()
{
double op, oper, rez;
char ch;
setlocale (0, "");
do {
cout << "Введите первый операнд, операцию и второй операнд:" << endl;
cin >> op >> ch >> oper;
switch (ch)
{
case '+': rez = op + oper; break;
case '-': rez = op - oper; break;
case '*': rez = op * oper; break;
case '/': rez = op / oper; break;
default:rez = 0;
}
cout << "результат равен" << rez << endl;
cout << "выполнить еще одну операцию? (y,n)";
cin >> ch;
}
while (ch != 'n');
return 0;
}


5)



#include "stdafx.h"
#include <iostream>
using namespace std;
#include <conio.h>
int main()
{
 int y = 39, x=1;
 do { 
int j = y; 
int d = x;
    do { 
cout<<' '; j--; 
}
while (j!=0);
    do { 
cout<<'X'; d--; 
}
while (d!=0);
    y-=2; 
x+=2;
    cout<<endl;
  }
 while (y>0);
 _getche();
return 0; 
}




6)




// factor.cpp
// подсчет факториала числа с помощью цикла for
#include "stdafx.h"
#include <iostream>
using namespace std;

int main()
{
unsigned int j;
unsigned long fact = 1;  
int ch;// тип long для результата
setlocale (0, "");
do 
{
fact =1;
cout << "Введите целое число: ";
cin >> j; 

for(j; j > 0; j--)     // умножение 1 на
fact *= j;                    // numb, numb-1, ..., 2, 1
cout << "Факториал числа равен " << fact << endl;
cout << "еще раз? (нет - 0, да - 1)" << endl;
cin >> ch;
while (ch != 0);

return 0;
}



7)


#include "stdafx.h"
#include <iostream>
using namespace std;

int main()
{
double vklad, let, proz, s, sum;
setlocale (0, "");
cout << "введите начальный вклад: ";
cin >> vklad;
cout << " \nВведите число лет: ";
cin >> let;
cout << "\nВведите процентную ставку: ";
cin >> proz;
sum=vklad;
for (int j = let; j>0; j--)
{
s = sum/100*proz;
sum = s + sum;
}
cout << "Через " << let << " лет вы получите " << sum << " долларов" << endl; 
system ("pause");
return 0;
}




8)





#include "stdafx.h"
#include <iostream>
#include <iomanip> 
using namespace std;
int main()
{
int funt, funt1, shill, shill1, pens, pens1, funt2, shill2, pens2;
char ch;
do {
cout << "Vvedite pervuy summu: " << endl;
cin >> funt1 >> ch >> shill1 >> ch >> pens1;
cout << "Vvedite vtoruy summu: "<< endl;
cin >> funt2 >> ch >> shill2 >> ch >> pens2;
funt = funt1 + funt2;
shill = shill1 + shill2;
if (shill > 19)
{
funt++;
shill = shill - 20;
}
pens = pens1+pens2;
if (pens > 11)
{
shill++;
pens = pens - 12;
}
cout << "Vsego: " << funt << ch << shill << ch << pens << endl;
cout << "Prodolzhyt'? (y/n)" << endl;
cin >> ch;
}
while (ch != 'n');
return 0;                                                     
}






9)




#include "stdafx.h"
#include <iostream>
#include <iomanip> 
using namespace std;
int main()
{
int guest, place, var, variant=1;
cout << "Vvedite kol-vo gostey: ";
cin >> guest;
cout << "\nVvedite kol-vo mest: ";
cin >> place;
var = guest - place;
for (int j = guest; j>var; j--)
variant *= j;
cout << "Chislo variantov: " << variant << endl;
system ("pause");
return 0;                                                     
}





10)




#include "stdafx.h"
#include <iostream>
using namespace std;

int main()
{
double vklad, zhel, proz, s, sum, let=0;
setlocale (0, "");
cout << "введите начальный вклад: ";
cin >> vklad;
cout << " \nВведите желаемую сумму: ";
cin >> zhel;
cout << "\nВведите процентную ставку: ";
cin >> proz;
sum = vklad;
do
{
s = sum/100*proz;
sum = s + sum;
let++;
}
while (sum <= zhel);
cout << "Через " << let << " лет вы получите " << sum << " долларов" << endl; 
system ("pause");
return 0;
}




 11)




#include <iostream>
#include <cstdlib>
int pens_in_ster(int st, int sh, int pn)
{
    return (st*240 + sh*12 + pn);
}
void pens_to_ster(int sump, int& st, int& sh, int& pn)
{
    st = sump/240;
    sh = sump%240/12;
    pn = sump%240%12;
}
int main()
{
    setlocale(LC_ALL, "");
    int st, sh, pn, op, sum, sum1, sum2;
    char ch, div;
    std::cout << "Введите первый операнд: ";
    std::cin >> st >> div >> sh >> div >> pn;
    sum1 = pens_in_ster(st, sh, pn);
    std::cout << "Введите операцию: ";
    std::cin >> ch;
    std::cout << "Введите второй операнд: ";
    if (ch == '*')
        std::cin >> op;
    else
    {
        std::cin >> st >> div >> sh >> div >> pn;
        sum2 = pens_in_ster(st, sh, pn);
    }
    switch (ch)
    {
        case '+': sum = sum1 + sum2; break;
        case '-': sum = abs(sum1 - sum2); break;
        case '*': sum = sum1 * op;
    }
    pens_to_ster(sum, st, sh, pn);
    std::cout << st << div << sh << div << pn << std::endl;
    
    return 0;
}




или





#include "stdafx.h"
#include <iostream>
using namespace std;
int main()
{
int funt, shill, pens, pens1, pens2, sumpens, operand; 
char ch, dot;
setlocale (0, "");
cout << "Введите первый операнд " << endl;
cin >> funt >> dot >> shill >> dot >> pens;
pens1 = funt*20*12 + shill*12 + pens;
cout << "операцию " << endl;
cin >> ch;
cout << " и второй операнд:" << endl;
if (ch == '*')
    cin >> operand;
else
cin >> funt >> dot >> shill >> dot >> pens;
pens2 = funt*20*12 + shill*12 + pens1;
switch (ch)
{
case '+': sumpens = pens+pens2; break;
case '-': sumpens = pens-pens2; break;
case '*': sumpens = pens*operand; break;
}
cout << "Всего: J" << sumpens/(20*12) << dot << sumpens%(20*12)/12 << dot << sumpens%(20*12)%12 << endl;
system ("pause");
return 0;                                                     
}




12)



#include "stdafx.h"
#include <iostream>
#include <iomanip> 
using namespace std;
int main()
{
int a, b, c, d, e, f;
char ch, zn;
do
{
cout << "Vvedite 1-y drob" << endl;
cin >> a >> ch >> b;
cout << "Vvedite znak" << endl;
cin >> zn;
cout << "Vvedite 2-y drob" << endl;
cin >> c >> ch >> d;
switch (zn)
{
case '+': e =a*d + b*c; 
f = b*d; break;
case '-':  e = a*d - b*c;
f = b*d; break;
case '*': e = a*c;
f = b*d; break;
case '/': e = a*d; 
f = b*c; break;
}
cout << e << ch << f << endl;
cout << "esche raz? (y,n)" << endl;
cin >> ch;
}
while (ch != 'n');
return 0;                                                     
}


Комментарии

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

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

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

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

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

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

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