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

Функция потока - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Оптимизация алгоритма http://www.cyberforum.ru/cpp-beginners/thread807125.html
#include<iostream> #include<stdlib.h> #include<time.h> #include<iomanip> using namespace std; #define jaba for(i=0; i<k; i++) cout<<sum(a,i)<<"\n" const int k = 4;
C++ приведение типов указателей Задача у меня простая. Нужно побитно оперировать с числом unsigned int и на каких-то этапах заносить его в массив. для начала я решил, что пусть хотя бы это число выводится в memo элементик на форме. написал код: static bool *Manth = new bool ; void *pntr=0; pntr= (unsigned int*)&Manth; Memo1->Lines->Add(Now().TimeString()+": "+*pntr); http://www.cyberforum.ru/cpp-beginners/thread807107.html
signal.h C++
Доброго времени суток! Начал разбираться с сигналами и понял что как работать с ними под windows мало литературы... так вот, у меня есть код: // showarg.cpp: определяет точку входа для консольного приложения. // #include "stdafx.h" #include <iostream> #include <signal.h> #include <locale> using namespace std;
Debug assertion failed C++
Во время отладки вылазит такая ошибка,не могу понять в чём дело
C++ Динамический массив с большим количеством элементов http://www.cyberforum.ru/cpp-beginners/thread807084.html
Нужно создать динамический массив (каждый элемент целое положительное число до 10^9), который по введенным данным создавал N элементов массива, где N может быть до 10^5. unsigned long int *arr = new unsigned long int; Я сделал так, но если количество элементов больше 45920, то выводит ошибку "terminate called after throwing an instance of 'std::bad_alloc' what(): std::bad_alloc...
C++ вызов конструктора Здарова! Есть допустим класс: class Str { Str(); Str(Str&); Str(char*); }; подробнее

Показать сообщение отдельно
Khorok
1 / 1 / 0
Регистрация: 13.03.2013
Сообщений: 20
13.03.2013, 02:01     Функция потока
Подскажите пожалуйста, как сделать Перевод числа оформить как функцию потока. Ввод числа происходит до запуска потока, а вывод строки – по его завершению. Собственно функции реализованы, но проблемы с декомпозицией в одну функцию.

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;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 22:48. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru