Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
1 / 1 / 0
Регистрация: 13.03.2013
Сообщений: 20

Функция потока

13.03.2013, 02:01. Показов 843. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Подскажите пожалуйста, как сделать Перевод числа оформить как функцию потока. Ввод числа происходит до запуска потока, а вывод строки – по его завершению. Собственно функции реализованы, но проблемы с декомпозицией в одну функцию.

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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
//#include <stdafx.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <locale>
 
 static char *sot[]={"сто","двести","триста","четыреста",
             "пят","шест", "сем","восем","девят" };
 static char *desiat[]={" dvadsat"," тридцать"," сорок"," пят"," шест",
                " сем"," восем"," девяносто" };
 static char *edm[]={""," один"," два"," три"," четыре"," пять"," шесть",
             " семь"," восемь",
             " девять"," десять"," один"," две"," три",
             " четыр"," пят"," шест"," сем"," восем"," девят" };
 static char *edw[]={" одна"," две" };
 static char *nmtr[]={" тысяч"," миллион"," миллиард", " триллион",
               " квадриллион", " квинтиллион", " сектиллион", " септаллион", NULL };
         
 static char *nokm[]={ "а" , "ов" };
 static char *nokt[]={ "а", "и", "" };
/* ------------------ */
 int sklon(int dd)    
{ int n, r;
 
    r = 2;
    n = dd % 100;
    if (n>4 && n<20) return(r);
    n = n % 10;
    if      (n==1)       r = 0;
    else if (n>1 && n<5) r = 1;
    return(r);
}
int Propis3(unsigned long L, int n, char *s, int rg) // Число прописью
{ int R, ns, nd, r; char *p; unsigned long M;
 
   if (n==0 && L==0) {
     strcat(s, " ноль ");
     return n;
   }
   M = L / 1000;
   R = L % 1000;
   if (M != 0) Propis3(M, n+1, s, 0);  
   if (R==0) return R;
   ns = R / 100;
   if (ns)    sprintf(s+strlen(s), " %s", sot[ns-1]);
   if (ns>=5) strcat(s, "ьсот");
   R = R % 100;  
   nd = R / 10;  
   if (nd >= 2) {
      strcat(s, desiat[nd-2]);
      if (nd>=5 && nd<=8) strcat(s, "ьдесят");
      R = R % 10;
   }
  // r = sklon(R);
   if (n==1 && R>0 && R<3) p = edw[R-1];
   else                    p = edm[R];
   if (rg==1 && n==0) {
     if      (R==1) p = " одна";
     else if (R==2) p = " две";
   }
   if (rg==2 && n==0 && R==1) p = " одна";
   strcat(s, p);
   if (R > 10) strcat(s, "надцать");
   if (n > 0) {
     strcat(s, nmtr[n-1]);
     if     (n==1) strcat(s, nokt[r]);
     else if (r>0) strcat(s, nokm[r-1]);
   }
}
 
static char *drob[] = {
   " десят", " сот", " тысячн", " деятитысячн", " стотысячн",
   " миллионн", " десятимиллионн", " стомиллионн", " миллиардн",
   " десятимиллиардн", " стомиллиардн", " триллионн"  };
/* ------------------ */
void main()
{   
 
    setlocale(LC_ALL,"Russian");
    char b[200], s[1000], *d, *p; unsigned long L; int nn, k, rg;
 
a: printf(">");
   gets(b);
   if (strlen(b)==0) return;
   d = strchr(b, '.');
   if (d==NULL) rg = 0;
   else         rg = 2;
   s[0] = '\0';
   L = atol(b);
   Propis3(L, 0, s, rg);
   if (d!=NULL) {
     k = L % 10;
     if (k!=1) p = "целых";
     else      p = "целая";
     sprintf(s+strlen(s), " %s и ", p);
     L = atol(d+1);
     nn = 0;  // Кол-во дробных знаков
     for (nn=0, d=d+1; *d!='\0' && *d>='0' && *d<='9'; d++, nn++) ;
     if (nn==0) nn = 1;
     Propis3(L, 0, s+strlen(s), 1);
     strcat(s, drob[nn-1]);
     k = L % 10;
     if (k!=1) strcat(s, "ых");
     else      strcat(s, "ая");
   }
   printf("%s\n", s);
   goto a;
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
13.03.2013, 02:01
Ответы с готовыми решениями:

Функция потока в классе
Подскажите, как запихать в класс функцию потока (небольшой пример, если есть)? когда пишу так: class abc{ DWORD WINAPI...

Pthread функция потока внутри класса
Нужно чтобы функция pthread_create принимала на входе функцию-член класса, в котором я вызываю pthread_create собственно. Так сделать не...

Функция для записи в буфер из потока
существует в с++ такая функция для загрузки потока данных в строку fgets(buf,10000, f); но недостаток этой функции в том, что при...

4
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
13.03.2013, 10:24
Я бы вообще всё переписал, потому что это жесть!
Цитата Сообщение от Khorok Посмотреть сообщение
проблемы с декомпозицией в одну функцию
Декомпозиция - это разделение на несколько.
0
1 / 1 / 0
Регистрация: 13.03.2013
Сообщений: 20
13.03.2013, 15:37  [ТС]
Tulosba, почему жесть ?
Можете предоставить свой вариант ?
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
13.03.2013, 16:32
Цитата Сообщение от Khorok Посмотреть сообщение
почему жесть ?
1. Код у Вас по сути сишный. Если заменить <locale> на <locale.h>, то плюсов и вовсе не останется.
2. Слишком часто используются не говорящие имена переменных ( L, n, s, rg, R, ns, nd, r, p, M ).
3. Для цикла используется goto. Хотя есть же for/while.
4. Форматирование кода ужасное. Всё навалено в кучу.

Ну и напоследок, проверьте входное значение ".999999"
Цитата Сообщение от Khorok Посмотреть сообщение
Можете предоставить свой вариант ?
Могу дать ссылочку.
0
1 / 1 / 0
Регистрация: 13.03.2013
Сообщений: 20
13.03.2013, 19:12  [ТС]
Tulosba, проблема в том, что у меня число не целое.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
13.03.2013, 19:12
Помогаю со студенческими работами здесь

Функция потока не видит структуру класса
Здравствуйте! Подскажите, как это исправить: class ClassA { struct st { int a; }; ....... };

Вызывть метод одного потока из другого потока
Здравствуйте, подскажите пожалуйста, как можно реализовать такую штуку : есть один поток(1), который вызывает метод у обьекта, этот...

Создание потока из потока.
Надо создать поток 1, в нем создать поток 2, сам я жуткий дураг, немаловероятно что правильного в коде вообще ничего нет ) ругается...

Два потока, две очереди, два потока
Есть две очереди. Каждая из них заполняется своим потоком. Есть два потока, которые достают данные из своей очереди. Но когда одна из...

Функция потока
Создаю функцию потока.Хочу её прописать в .h файле как метод класса,но не получается..почему?Выдает такую ошибку билдер


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru