Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.93
WASP(RUS)
0 / 0 / 0
Регистрация: 16.01.2010
Сообщений: 3
#1

Сложить две денежные суммы в рублях и копейках, заданные прописью. - C++

16.01.2010, 01:26. Просмотров 1989. Ответов 14
Метки нет (Все метки)

Здравствуйте. Прошу помощи в написании программы. Я сам паскалянт-студент. На паскале в два щета эту прогу бы написал, а тут в Си++ нет типа стринг, и я никак не могу допереть как работать с char и * char. Хотя алгоритм я придумал.

Задание такое:

Сложить две денежные суммы в рублях и копейках, заданные прописью. Ре-зультат вывести также прописью.

Пишу в IDE Turbo C++ 3.0.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.01.2010, 01:26
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Сложить две денежные суммы в рублях и копейках, заданные прописью. (C++):

дано натуральное число n равное выраженной в копейках цене некоторого товара. выразить цену в рублях и копейках - C++
дано натуральное число n равное выраженной в копейках цене некоторого товара. выразить цену в рублях и копейках. например 3 руб. 08 коп....

Программа должна распечатывать прописью значение суммы в долларах,если введена сумма в рублях,или... - C++
Суммы денег могут вводиться в рублях и долларах.Программа должна распечатывать прописью значение суммы в долларах,если введена сумма в...

Вывести содержимое строки в рублях и копейках - C++
Заданная строка, состоящая из цифр разделенных одним или несколькими пробелами. Числа представляют собой стоимость некоторого товара...

Записать данную сумму в рублях и копейках: 3 руб. 17 коп. - C++
Некоторая сумма денег выражена в копейках, например 317, 5050, 100. Записать данную сумму в рублях и копейках, т. е. в виде: 3 руб. 17...

вывод суммы прописью - C++
как написать функцию которая выводит ссумму прописью, например ввожу 5643- выводит пять тысяч шестьсот сорок три рубля

Сложить две матрици (язык Си) - C++
Добрый вечер! Напишите пожалуйста программу для сложения двух матриц. Если можно с объяснением. Язык Си нам в университете не объясняли, а...

14
vet
175 / 175 / 13
Регистрация: 08.04.2009
Сообщений: 1,309
16.01.2010, 04:23 #2
string нету?????Нада просто заголовочный файл подключать
C++
1
#include <string>
0
Day
1158 / 963 / 57
Регистрация: 29.10.2009
Сообщений: 1,385
16.01.2010, 12:19 #3
Очент интересно!
Задачка весьма нетривиальная
Если выложишь паскалевский вариант
а) буду тебе благодарен
б) Попробую перевести в С или C++ (C++ допустим,)

Добавлено через 7 минут
Цитата Сообщение от vet Посмотреть сообщение
string нету?????Нада просто заголовочный файл подключать
C++
1
#include <string>
string.h - это как раз char, char *
а класс string в <cstring.h>
0
vet
175 / 175 / 13
Регистрация: 08.04.2009
Сообщений: 1,309
16.01.2010, 13:05 #4
Цитата Сообщение от Day Посмотреть сообщение
string.h - это как раз char, char *
С чего ты это взял??Это заголовочный файл с определением типа string, в стиле С


Цитата Сообщение от Day Посмотреть сообщение
string в <cstring.h>
Это заголовочный файл в очень старых версиях компиляторов, все более-менее новые поддерживают только
Код
 <cstring> или <string>
C++
1
2
3
4
5
6
7
8
9
#include<iostream>
#include <string>
using namespace std;
main()
{
      string s = "Ffsfsf";
      cout << s;
      cin.get();
      }
0
Rififi
2360 / 1053 / 44
Регистрация: 03.05.2009
Сообщений: 2,656
16.01.2010, 14:55 #5
Day,

Задачка весьма нетривиальная

на самом деле ничего особенного.
сначала складываешь два числа, потом отделяешь целую и дробную части, и отдельно переводишь их в пропись. всё.
0
Лестат
12 / 11 / 1
Регистрация: 24.09.2009
Сообщений: 188
17.01.2010, 00:34 #6
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#include <stdio.h>
#include <math.h>
#include <conio.h>
 
void main () 
{
        int chislo, rubl, desiatki, kopeiki;
        puts("Please enter a number from 100 to 999\n");
    scanf("%d",&chislo);
        rubl=chislo/100;
        switch (rubl)
    {
        case 1: puts("1 rubl "); break;
        case 2: puts("2 rublya"); break;
        case 3: puts("3 rublya"); break;
        case 4: puts("4 rublya"); break;
        case 5: puts("5 rublei"); break;
        case 6: puts("6 rublei"); break;
        case 7: puts("7 rublei"); break;
        case 8: puts("8 rublei"); break;
        case 9: puts("9 rublei"); break;
    }
 
    desiatki=(chislo%100)/10;
    switch (desiatki)
    {     
        case 1: puts("1"); break;
        case 2: puts("2"); break;
        case 3: puts("3"); break;
        case 4: puts("4"); break;
        case 5: puts("5"); break;
        case 6: puts("6"); break;
        case 7: puts("7"); break;
        case 8: puts("8"); break;
        case 9: puts("9"); break;
        }
 
    kopeiki=(chislo%100)%10;
    switch (kopeiki)
        {
        case 1: puts("1 kopeek"); break;
        case 2: puts("2 kopeek"); break;
        case 3: puts("3 kopeek"); break;
        case 4: puts("4 kopeek"); break;
        case 5: puts("5 kopeek"); break;
        case 6: puts("6 kopeek"); break;
        case 7: puts("7 kopeek"); break;
        case 8: puts("8 kopeek"); break;
        case 9: puts("9 kopeek"); break;
    }                     
                 
}
Добавлено через 40 секунд
что-то типо...
для начала ...
0
Bloodykeeper
This party getting crazy!
78 / 74 / 1
Регистрация: 22.09.2009
Сообщений: 427
17.01.2010, 00:35 #7
Лестат, ты дурачёк, прежде чем писать мою задачу, прочитал бы условие Тут ещё надо слжить 2 суммы а потом выводить, тут свитч ни к чему.
0
Лестат
12 / 11 / 1
Регистрация: 24.09.2009
Сообщений: 188
17.01.2010, 00:40 #8
я почти и не смотрел. ( не разбирался )\
Ну насчет дурачка - ну конечно, ,я вообще ничё не умею.................так по-твоему ?
0
Bloodykeeper
17.01.2010, 00:44
  #9

Не по теме:

нет, "дурачек" конкретно применимо к этой ситуации, к тому же, "дурачёк"-уменьшительно-ласкательное то шо ты всегда сначала не разбираешься...за то потом......на сессию не ходишь =))

0
Лестат
12 / 11 / 1
Регистрация: 24.09.2009
Сообщений: 188
17.01.2010, 00:45 #10
хах, я разбираюсь в экстримальных ситуациях, мозг только тогда активизируется на полную
0
Bloodykeeper
17.01.2010, 00:47
  #11

Не по теме:

Напрашивается интересный ответ, но не буду разводить флуд

0
Day
1158 / 963 / 57
Регистрация: 29.10.2009
Сообщений: 1,385
17.01.2010, 12:53 #12
Цитата Сообщение от vet Посмотреть сообщение
Это заголовочный файл в очень старых версиях компиляторов,
Вполне возможно. Как раз у меня версия старая. Извиняюсь.
Но у Wasp как раз старая версия - Turbo 3.0

По поводу задачи.
Мне показалось, что нужно сложить
"Два рубля восемьдесят семь копеек" и "Сто двадцать один рубль пятьдесят одна копейка"
В этом виде задача мне кажется нетривиальной
0
WASP(RUS)
0 / 0 / 0
Регистрация: 16.01.2010
Сообщений: 3
17.01.2010, 17:00  [ТС] #13
Vet смотри мой скрин, я же писал вроде что пишу в IDE Turbo C++. Там твой код не пашет. НО! В какоей IDE работает твой код?

На паскале бы написал, но тк сессия времени нету совсем.
0
Миниатюры
Сложить две денежные суммы в рублях и копейках, заданные прописью.  
WASP(RUS)
0 / 0 / 0
Регистрация: 16.01.2010
Сообщений: 3
17.01.2010, 17:13  [ТС] #14
У меня идея такая. Я сначала описываю массивы строк со всеми вариантами наименований чисел, например:

C++
1
2
3
4
char * des[9]={"десять","двадцать","тридцать","сорок","пятьдесят","шестьдесят", "семьдесят", "восемьдесят","девяносто"}; 
char * ed[9]={"один","два","три","четыре","пять","шесть","семь","восемь","девять"};
char * sot[9]={"сто", "двести", "триста", "четыреста", "пятьсот", "шестьсот", "семьсот", "восемьсот", "девятьсот"};
....
Потом, вводимую сумму(к примеру шестьсот сорок два рубля) разбиваю на слова(шестьсот, сорок, два) каждое слово проверяю по массивам, значит шестьсот совпадет со строкой в массиве sotni[6]="шестьсот", где эта строка будет на 6 положении. Соответсвенно сорок будет des[4]="сорок", два будет ed[2]="два". Теперь 642 у нас получиться: (6*100)+(4*10)+2=642; Где 6, 4, 2 явялется номер ячейки в массиве. Да, знаю, придется каждое слово проверять по всем массивам. Ну мы не ищем легких путей.

Надеюсь я доступно изложил свою мысль))))).

Так вот не получается у меня сравнивать две строки, так как при сравнении мне выдает ошибку что нельзя сравнить char и *char. И вторая проблема, я не могу понять, Если в C++ строка объявляется, как массив символов char stroka[15]. То как сделать массив строк? Короче туплю я!))) Помогите люди добрые!)
0
Day
1158 / 963 / 57
Регистрация: 29.10.2009
Сообщений: 1,385
18.01.2010, 19:10 #15
Пока без копеек, но идея, надеюсь, понятна
Код
#include <stdio.h>
#include <string.h>
#include <math.h>
static char *prop[]={"ст","двест","трист","четырест",
 "пятьсот","шестьсот", "семьсот","восемьсот","девятьсот",
 "двадцать","тридцать","сорок","пятьдесят","шестьдесят",
                "семьдесят","восемьдесят","девяност",
 "десять","одиннадц","двенадц","тринадц",
 "четырнадц","пятнадц","шестнадц","семнадц","восемнадц","девятнадц",
 "од","дв","три","четыре","пять","шесть", "семь","восемь", "девять",
 "руб", "тысяч","миллион","миллиард", NULL };
static long nn[] = { 100, 200, 300, 400, 500, 600, 700, 800, 900,
 20, 30, 40, 50, 60, 70, 80, 90, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
 1, 2, 3, 4, 5, 6, 7, 8, 9, -1, -2, -3 };
/* ------------------ */
int cmpbeg(char *s, char *p)  // Сравнение начала строки s с p
{
   while(*p != '\0')
    if ((*s++) != (*p++)) return(1);
   return(0);
}
/***************/
long PropisN(char *s) // Разбор Числа прописью
{ int i, n, flag; char *p, *q; unsigned long L, LX, M;

   LX = L = 0;
   flag = 1;  // "руб" не встречался
   p = s;
   while(1) {
     while (*p==' ') p++;
     if (*p=='\0') break;
     for(i=0; prop[i]!=NULL; i++)
       if (cmpbeg(p, prop[i]) == 0) break;
     if (prop[i]==NULL) printf("%s - не распознал\n", p);
     q = strchr(p, ' ');
     if (q!=NULL) {
       *q = '\0';  // Немного портим строку s
       p = q + 1;
     }
     if (prop[i[!=NULL) {
       n = nn[i];
       if (n > 0) L += n;
       else {
         M = pow(1000, -n-1);
         if (n < 0 && L==0) L = 1; // "тысяча", а до нее ничего нет
         LX += L * M;
         L = 0;
         if (n==0) flag = 0;
       }
     }
     if (q==NULL) break; // Нет нового слова - строка кончилась
   }
   if (flag) LX += L;
   return(LX);
}
/* ------------------ */
main()
{ char b[200]; unsigned long L;

a: printf(">");
   gets(b);
   if (strlen(b)==0) return;
   L = PropisN(b);
   printf("%ld\n", L);
   goto a;
}
/**********************/
2
18.01.2010, 19:10
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.01.2010, 19:10
Привет! Вот еще темы с ответами:

Как сложить две матрицы ? - C++
Есть такой код #include &lt;iostream&gt; #include &lt;ctime&gt; #include &lt;cstdlib&gt; #include &lt;iomanip&gt; using namespace std; int main() { ...

Сложить две строки string - C++
Вот собсна код в котором я пытаюсь сложить две string строки: #include &lt;string&gt; int main() { string pyt1 = &quot;ThisIs&quot;; ...

Обменять местами две заданные строки матрицы - C++
Написать на С++. Дан двумерный числовой массив. Составить программу обмена местами заданных двух его строк.

Поменять местами две заданные строки матрицы - C++
С++. Дан двумерный числовой массив. Составить программу обмена местами заданных двух его строк.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru