Раздел «Язык Си».ClassMany:

Классы в С++

Простые объекты

Задача про деньги 1.

За 1 доллар дают 1274 кьята 38 пью. За 1 рубль дают 6 центов. В одном долларе 100 центов. Книга стоит K кьят.

Написать программу, чтобы вычислить сколько она будет стоить в России (рубли, копейки)

Решение:

За 1 доллар можно получить 1274 кьята и 38 пью. За книгу уже заплатили K кьят.

Неизвестно, сколько кьят дают за 1 рубль.

Поэтому сначала нужно узнать сколько книга стоит в долларах, а потом можно будет узнать сколько она стоит в рублях.

Чтобы узнать сколько книга стоит в долларах представим, что у нас 100$. Тогда за 100$ получим 127438 кьят.

Пишем программу:

// Начало мантры
#include <iostream>
#include <cstdlib>
using namespace std;
// Конец мантры

// Напишем функцию печать рублей и копеек
// Даем функции только копейки
// функция не отдает никаких чисел, только печатает
void print(int kop){
  cout<<kop/100<<' '<<kop%100<<endl;
}; 

int main(){
  int K; // кьяты
 
  int R,k; // рубли и копейки
  int D, cn; // доллары и центы
  cin>>K;
// За каждые 100$ мы должны получить 127438 кьята
// И все деньги постчитаем в центах.

  cn=K*100*100/127438;
// За 1рубль дают 6 центов, значит за 100 копеек дают 6 центов
// Вычисляем сколько получим копеек
  k=cn*100/6;
 
// Есть функция печати рублей и копеек, если есть только копейки
// Печатаем. Вызываем функцию. 
 print(k);

}

Задача про деньги 2.

У человека было R1 рублей и kop1 копеек. Cначала он получил ещe R2 рублей и kop2

копеек. А потом потратил R3 рублей и kop3

копеек.

Написать программу, чтобы вычислить сколько у него осталось рублей и копеек.

Решение:

Все деньги в задачах состоят из двух частей: рубли и копейки, доллары и центы, кьят и пью ...

Удобно писать программы, когда можно думать о деньгах просто, а не вспоминать, как считаем: в рублях или копейках.

Для этого можно использовать классы.

// Начало мантры
#include <iostream>
#include <cstdlib>
using namespace std;
// Конец мантры

class Rus{
 public:
  int R; // рубли
  int kop; // копейки
  void print(); // печать сразу всего
 
};
// Rus::print() - полное имя функции. Принадлежит Rus (как фамилия)
void Rus::print(){
  cout<<R<<" руб. "<<kop<<" коп."<<endl;
};

int main(){
  Rus money; // кошелек
  money.R = 10; // 10 рублей в кошельке  
  money.kop = 75; // 75 в кошельке

// Напечатаем
  money.print();

}

REFACTORПерепишите и запустите прогамму.

Но это еще не решение задачи.

Нужно:

  1. Складывать деньги
  2. Вычитать деньги

Решение

// Начало мантры
#include <iostream>
#include <cstdlib>
using namespace std;
// Конец мантры

class Rus{
 public:
  int R; // рубли
  int kop; // копейки
// функция получает деньги
  void getMoney(int Rub, int kop);
// Функция складывает деньги
  Rus add(Rus money);
// Функция считает сколько осталось после траты money
  Rus minus(Rus money);
// печать
  void print();

};

void Rus::print(){
   cout<<R<<" руб. "<<kop<<" коп."<<endl;
};

// Функция получения денег.
// можно положить любое число копеек и рублей
// она посчитает правильно

void Rus::getMoney(int R1, int kop1){
       int kp;  // kp  только для getMoney
       kp = R1*100+kop1;  //  все перевели в копейки
       R = kp /100;  // сколько всего получилось рублей
       kop = kp %100; // сколько всего получилось копеек
       
};
// Функция вернет деньги (Rus). 
// Rus::add() - полное имя функции
// Rus money - функция получит тоже деньги
// чтобы складывать 
Rus Rus::add(Rus money){
      Rus tmp; // место для подсчета денег
      
// Считаем все в копейках:
   tmp.kop = (R *100 + kop); // наши деньги
// Добавили money 
   tmp.kop = tmp.kop + money.R * 100 + money.kop;
// Считаем рубли
   tmp.R = tmp.kop / 100;
// обычные копейки
   tmp.kop = tmp.kop % 100;  

// Возвращаем посчитанные деньги
   return tmp;
};

// Вычитание
Rus Rus::minus(Rus money){
     Rus tmp;

// Здесь нужно написать про вычитание
    return tmp;
 
};
int main(){
  Rus dengi, dengiP,dengiM;
  Rus new_dengi;
  int rub, kops;
// Получим деньги:
   cin>>dengi.R; // получили рубли  
   cin>>dengi.kop; // получили копейки
   dengi.print(); // напечатали для проверки

   cin>>rub; // получили рубли  
   cin>>kops; // получили копейки
   dengiP.getMoney(rub, kops);
   dengiP.print(); // напечатали для проверки

// Сложили деньги
   new_dengi = dengi.add(dengiP);
//  Напечатали
   new_dengi.print();

//Тратим деньги
   cin>>rub; // получили рубли  
   cin>>kops; // получили копейки
   dengiM.getMoney(rub, kops);
   new_dengi=dengi.minus(dengiM);
  new_dengi.print();
}

REFACTOR Допишите функцию вычитания денег.

Задача про деньги 3

За 1 доллар дают 65 рублей 33 коп. В одном долларе 100 центов. Автомат по продаже мороженного принимает деньги в рублях и долларах. Сдачу отдает только в долларах и центах. Мороженное стоит D долларов, p центов. Человек положил в автомат R рублей.

Написать программу, чтобы вычислить сколько он получит сдачи в долларах и центах.

Решение:

Задачу решать удобно если у нас есть русские деньги и американские деньги.

Пишем программу

// Начало мантры
#include <iostream>
#include <cstdlib>
using namespace std;
// Конец мантры

class American;
class Rus;

class Rus{
 public:
  int R; //
  int kop; //
// получить деньги с клавиатуры
  void getMoney();
// сложить деньги
  Rus add(Rus dengy);

// вычесть деньги 
  Rus minus(Rus dengy);

// проверить хватает ли на мороженное и посчитать сдачу
  American diff(American money);

// печать 
  void print();
 
};

class American{
public:
  int D; // доллары
  int cent; // центы
// получить деньги с клавиатуры
  void getMoney();
// сложить деньги
  American add(American money);

// посчитать сколько осталось после траты money
  American diff(American money);

// превратить в русские деньги и вернуть русские
  Rus convertToRus();
//
  void print();
};

//________________________________________________________
// Здесь все про русские деньги
//________________________________________________________

// Получить русские деньги с клавиатуры
void Rus::getMoney(){
   cin>>R>>kop;
};

// Печать русских денег
void Rus::print(){
   cout<<R<<" руб. "<<kop<<" коп."<<endl;
};

// Функция вернет деньги (Rus). 
// Rus::add() - полное имя функции
// Rus money - функция получит тоже деньги
// чтобы складывать 
Rus Rus::add(Rus money){
      Rus tmp; // место для подсчета денег
      
// Считаем все в копейках:
   tmp.kop = (R *100 + kop); // наши деньги
 
   tmp.kop = tmp.kop + money.R * 100 + money.kop;
// Считаем рубли
   tmp.R = tmp.kop / 100;
// обычные копейки
   tmp.kop = tmp.kop % 100;  

   return tmp;
};

// Дописать функцию
Rus Rus::minus(Rus dengy){
// Дописать функцию здесь


}; 

// Сдача, которую выдает автомат
// по условию задачи
American Rus::diff(American ice_price){
        American tmp;
// превратим русские деньги в американские
// в центы
        int cent,cRus; //эти центы только для функции
        cRus = (R*100+kop)*100/6533;
     
       cent = cRus - (ice_price.D*100+ice_price.cent);
     
       if(cent>=0){
        tmp.cent=cent%100;
        tmp.D=cent/100;
       }else{
         tmp.cent=cRus%100;
         tmp.D=cRus/100;
       }
        tmp.print();
// Возвращаем деньги
        return tmp;
};

//________________________________________________________
// Здесь все про американские деньги
//________________________________________________________

// получение денег с клавиатуры
void American::getMoney(){
// Здесь дописать функцию получения денег с клавиатуры

};

// Печать американских денег
void American::print(){
   cout<<D<<"$ "<<cent<<" cent"<<endl;
};

// Сложение американских денег (получил)
American American::add(American money){
// Дописать функцию здесь

};

// Вычитание американских денег (потратил)
American American::diff(American money){
// Дописать функцию здесь

};

// Перевод американских денег в русские
Rus American::convertToRus(){
// Временные русские деньги (вернем)
      Rus tmp;
// Все сначала получаем в центах и переводим в копейки
     int cnt = D*100+cent;
     int kp;
   
     kp = cnt*6533/100;
 
// Получаем русские деньги
     tmp.kop = kp%100;
     tmp.R=kp/100;
     tmp.print();
// Возвращаем деньги
     return tmp;              
};


// Проверяем все функции
int main(){
  Rus dengi, dengi_plus,dengi_minus;
  American money, price;
// Получим деньги:
   cin>>dengi.R; // получили рубли  
   cin>>dengi.kop; // получили копейки
   dengi.print();

// Цена мороженного
   cin>>price.D; // получили доллары  
   cin>>price.cent; // получили центы
// Проверили, напечатали
   price.print();

// Купили мороженнон
   money = dengi.diff(price);
//  Напечатали
   money.print();

// Поменяли деньги в другом автомате
   dengi_minus=money.convertToRus();
//  Напечатали
   dengi_minus.print();
}

REFACTOR Допишите все функции и проверьте их

Задача про деньги 4

За 1 доллар дают 1274 кьята 38 пью. В одном долларе 100 центов. Автомат по продаже мороженного принимает деньги во всех валютах. Сдачу отдает только в долларах и центах. Если денег не хватает, то автомат возвращает деньги в долларах и центах. Мороженное стоит D долларов, p центов. Человек положил в автомат K кьят.

Написать программу, чтобы вычислить сколько он получит сдачи в долларах и центах.

REFACTOR Решите эту задачу. Опишите класс Myanmar - деньги Мьянмы

-- TatyanaOvsyannikova2011 - 18 Sep 2015