Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.93
WASP(RUS)
0 / 0 / 0
Регистрация: 16.01.2010
Сообщений: 3
16.01.2010, 01:26     Сложить две денежные суммы в рублях и копейках, заданные прописью. #1
Здравствуйте. Прошу помощи в написании программы. Я сам паскалянт-студент. На паскале в два щета эту прогу бы написал, а тут в Си++ нет типа стринг, и я никак не могу допереть как работать с char и * char. Хотя алгоритм я придумал.

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

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

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

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

Добавлено через 7 минут
Цитата Сообщение от vet Посмотреть сообщение
string нету?????Нада просто заголовочный файл подключать
C++
1
#include <string>
string.h - это как раз char, char *
а класс string в <cstring.h>
vet
 Аватар для 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();
      }
Rififi
 Аватар для Rififi
2330 / 1045 / 43
Регистрация: 03.05.2009
Сообщений: 2,656
16.01.2010, 14:55     Сложить две денежные суммы в рублях и копейках, заданные прописью. #5
Day,

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

на самом деле ничего особенного.
сначала складываешь два числа, потом отделяешь целую и дробную части, и отдельно переводишь их в пропись. всё.
Лестат
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 секунд
что-то типо...
для начала ...
Bloodykeeper
This party getting crazy!
 Аватар для Bloodykeeper
78 / 74 / 1
Регистрация: 22.09.2009
Сообщений: 427
17.01.2010, 00:35     Сложить две денежные суммы в рублях и копейках, заданные прописью. #7
Лестат, ты дурачёк, прежде чем писать мою задачу, прочитал бы условие Тут ещё надо слжить 2 суммы а потом выводить, тут свитч ни к чему.
Лестат
12 / 11 / 1
Регистрация: 24.09.2009
Сообщений: 188
17.01.2010, 00:40     Сложить две денежные суммы в рублях и копейках, заданные прописью. #8
я почти и не смотрел. ( не разбирался )\
Ну насчет дурачка - ну конечно, ,я вообще ничё не умею.................так по-твоему ?
Bloodykeeper
17.01.2010, 00:44
  #9

Не по теме:

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

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

Не по теме:

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

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

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

На паскале бы написал, но тк сессия времени нету совсем.
Миниатюры
Сложить две денежные суммы в рублях и копейках, заданные прописью.  
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]. То как сделать массив строк? Короче туплю я!))) Помогите люди добрые!)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.01.2010, 19:10     Сложить две денежные суммы в рублях и копейках, заданные прописью.
Еще ссылки по теме:

Сравнить две заданные строки на наличие одинаковых слов C++
Вывести содержимое строки в рублях и копейках C++
Записать данную сумму в рублях и копейках: 3 руб. 17 коп. C++

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

Или воспользуйтесь поиском по форуму:
Day
 Аватар для Day
1149 / 954 / 57
Регистрация: 29.10.2009
Сообщений: 1,384
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;
}
/**********************/
Yandex
Объявления
18.01.2010, 19:10     Сложить две денежные суммы в рублях и копейках, заданные прописью.
Ответ Создать тему
Опции темы

Текущее время: 09:36. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru