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

Программа, выводящая прописью чётные числа массива. - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.75
Virgilian
Сообщений: n/a
12.01.2011, 22:41     Программа, выводящая прописью чётные числа массива. #1
В синтаксисе ошибок нет. При вводе кол-ва элементов выдаёт: "Необработанное исключение в "0x5561d2f3 (msvcr100d.dll)" в "test5.exe": 0xC0000005: Нарушение прав доступа при чтении "0xcccccccc" и открывается окно кода ассемблера". Вероятно, где-то некорректный или слишком сложный цикл. Или требуется вынести часть кода в вспомогательный класс.
Кто может, подскажите пожалуйста.
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
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
#include <iostream>
#include <conio.h>
 
using namespace std;
 
int main()
 
{
char *towords(int numb);
 
    //массив, для определения разряда, в котором находимся(сотни,десятки,еденицы...)
    int osn[11]={0,1,10,100,1000,10000,100000,1000000,10000000,100000000,1000000000};
 
    //массив оснований
    char *basis[11][10]={
        {"","","","","","","","","",""},
        {"","odin","dva","tri","chetire","pyat'","shest'","sem'","vosem'","devat'"},
        {"","desat'","dvadcat'","tridcat'","sorok","pat'desat","shesdesat","semdesat","vosemdesat","devanosto"},
        {"","sto","dvesti","trista","chetiresta","pat'sot","shest'sot","sem'sot","vosem'sot","deviat'sot"},
        {"","odna","dve","tri","chetire","piat'","shest'","sem'","vosem'","devat'"},
        {"","desat'","dvadcat'","tridcat'","sorok","pat'desat","shesdesat","semdesat","vosemdesat","devanosto"},
        {"","sto","dvesti","trista","chetiresta","pat'sot","shest'sot","sem'sot","vosem'sot","deviat'sot"},
        {"","odin","dva","tri","chetire","pyat'","shest'","sem'","vosem'","devat'"},
        {"","desat'","dvadcat'","tridcat'","sorok","pat'desat","shesdesat","semdesat","vosemdesat","devanosto"},
        {"","sto","dvesti","trista","chetiresta","pat'sot","shest'sot","sem'sot","vosem'sot","deviat'sot"},
        {"","odin","dva","tri","chetire","pyat'","shest'","sem'","vosem'","devat'"}};
 
    //массив окончаний
    char *termination[10][10]={
        {"","","","tisach'","","","millionov","","","milliardov"},
        {"","","","tisacha","","","million","","","milliard"},
        {"","","","tisachi","","","milliona","","","milliarda"},
        {"","","","tisachi","","","milliona","","","milliarda"},
        {"","","","tisachi","","","milliona","","","milliarda"},
        {"","","","tisach'","","","millionov","","","milliardov"},
        {"","","","tisach'","","","millionov","","","milliardov"},
        {"","","","tisach'","","","millionov","","","milliardov"},
        {"","","","tisach'","","","millionov","","","milliardov"},
        {"","","","tisach'","","","millionov","","","milliardov"}};
 
    char *dec[10]={"decat'","odinadcat'","dvenadcat'","trinadcat'","chetirnadcat'","patnadcat'","shesnadcat'","semnadcat'","vocemnadcat'","devatnadcat'"};
 
 
 int n,count=0,el=2;
        cin>>n;
        int*ar=new int [n-1];
        
        //заполним массив от 2 до n
        for(int i=0;i<n-1;++i)
        {ar[i]=el++;}
        
        //Найдем все простые числа, не превышающие число n, используя решето Эратосфена.
        for (int i=0;i<n-1;++i)
           {
                   for (int j=i+1;j<n;++j)
                   {
                           if(ar[i]==0)
                           {
                                   count++;
                                   break;
                           }
                           else if(j<n-1&&ar[j]%ar[i]==0)
                           {
                                   ar[j]=0;
                           }
                        }
           }
        
        //перенесем все найденные числа в новый массив и распечатаем их
        int j=0; char result[100]={}; int n1;
        int numb;
        
    int cnt=0;
    int celoe=0;
        int*tmp=new int[n-1-count];
        {
        for (int i=0;i<n-1-count;++i)
           {
                   while(j<n-1)
                   {
                           if(ar[j]){tmp[i]=ar[j];++j;break;}
                           ++j;
                   }
                  n1=tmp[i];numb=tmp[i];//подсчет количесива цифр в числе
    while (numb){
        numb/=10;
        ++cnt;
    }
 
   
 
    while (n1){
          if (!((cnt+1) % 3)){
            if ((n1/osn[cnt])==1){
                    n1%=osn[cnt];
                    --cnt;
                    celoe=n1/osn[cnt];
                    n1%=osn[cnt];
                    strcat(result, dec[celoe]);
                --cnt;
                if (!(cnt % 3)){
                    strcat(result, " ");
                strcat(result, termination[0][cnt]);
                strcat(result, " ");
                }
            }
            if (!cnt) break;
        }
        celoe=n1/osn[cnt];
        n1%=osn[cnt];
        strcat(result, basis[cnt][celoe]);
        --cnt;
        strcat(result, " ");
        if (!(cnt % 3)){
            strcat(result, termination[celoe][cnt]);
            strcat(result, " ");
        }
    }
   cout <<result ;
  
}
           }
        
        delete[]tmp;
        delete[]ar;
        
        getch();
      
   
  
        }
Добавлено через 1 час 21 минуту
Извиняюсь. Не чётные, а простые.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.01.2011, 22:41     Программа, выводящая прописью чётные числа массива.
Посмотрите здесь:

C++ Дана строка, содержащая целые числа. Вывести на экран только чётные числа
Найти сумму двух денежных сумм заданных прописью, ответ вывести прописью C++
Программа выводящая слова и их количество. C++
C++ не запускается программа, выводящая содержимое файла
C++ Задача на вычисление суммы и программа выводящая на экран таблицу
Программа выводящая имена файлов в каталоге C++
Программа выводящая строку наоборот C++
C++ Рекурсивная функция, выводящая все четные числа от заданного n до 1

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Virgilian
Сообщений: n/a
23.01.2011, 19:35     Программа, выводящая прописью чётные числа массива. #2
Уже не надо. Разобрался.
Вот код (если вдруг кому надо).
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
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
#include <iostream>
#include <conio.h>
 
 
using namespace std;
 
 
       
   
  char *towords(int numb){
    //массив, для определения разряда, в котором находимся(сотни,десятки,еденицы...)
    int osn[11]={0,1,10,100,1000,10000,100000,1000000,10000000,100000000,1000000000};
 
    //массив оснований
    char *basis[11][10]={
        {"","","","","","","","","",""},
        {"","один","два","три","четыре","пять","шесть","семь","восемь","девять"},
        {"","десять","двадцать","тридцать","сорок","пятьдесят","шестьдесят","семьдесят","восемьдесят","девяносто"},
        {"","сто","двести","триста","четыреста","пятьсот","шестьсот","семьсот","восемьсот","девятьсот"},
        {"","одна","две","три","четыре","пять","шесть","семь","восемь","девять"},
        {"","десять","двадцать","тридцать","сорок","пятьдесят","шестьдесят","семьдесят","восемьдесят","девяносто"},
        {"","сто","двести","триста","четыреста","пятьсот","шестьсот","семьсот","восемьсот","девятьсот"},
        {"","один","два","три","четыре","пять","шесть","семь","восемь","девять"},
        {"","десять","двадцать","тридцать","сорок","пятьдесят","шестьдесят","семьдесят","восемьдесят","девяносто"},
        {"","сто","двести","триста","четыреста","пятьсот","шестьсот","семьсот","восемьсот","девятьсот"},
        {"","один","два","три ","четыре","пять","шесть","семь","восемь","девять"}};
 
    //массив окончаний
    char *termination[10][10]={
        {"","","","тысяч","","","миллионов","","","миллиардов"},
        {"","","","тысяча","","","миллион","","","миллиард"},
        {"","","","тысячи","","","миллиона","","","миллиарда"},
        {"","","","тысячи","","","миллиона","","","миллиарда"},
        {"","","","тысячи","","","миллиона","","","миллиарда"},
        {"","","","тысяч","","","миллионов","","","миллиардов"},
        {"","","","тысяч","","","миллионов","","","миллиардов"},
        {"","","","тысяч","","","миллионов","","","миллиардов"},
        {"","","","тысяч","","","миллионов","","","миллиардов"},
        {"","","","тысяч","","","миллионов","","","миллиардов"}};
 
    char *dec[10]={"десять","одиннадцать","двенадцать","тринадцать","четырнадцать","пятнадцать","шестнадцать","семнадцать","восемнадцать","девятнадцать"};
 
    
     int n1=numb;
    
    int cnt=0;
    
 
   
    while (numb){
        numb/=10;
        ++cnt;
    }
  char result[100]={};
    int celoe=0;
 
   
 
    while (n1){
          if (!((cnt+1) % 3)){
            if ((n1/osn[cnt])==1){
                    n1%=osn[cnt];
                    --cnt;
                    celoe=n1/osn[cnt];
                    n1%=osn[cnt];
                    strcat(result, dec[celoe]);
                --cnt;
                if (!(cnt % 3)){
                    strcat(result, " ");
                strcat(result, termination[0][cnt]);
                strcat(result, " ");
                }
            }
            if (!cnt) break;
        }
        celoe=n1/osn[cnt];
        n1%=osn[cnt];
        strcat(result, basis[cnt][celoe]);
        --cnt;
        strcat(result, " ");
        if (!(cnt % 3)){
            strcat(result, termination[celoe][cnt]);
            strcat(result, " ");
        }
    }
   cout<<result;
    return result;
}
 
    
  int main()
{setlocale(LC_ALL,"");
        int n,count=0,el=2;
        cout<<"Введите количество элементов массива ";
        cin>>n;
        int*ar=new int [n-1];
        
        //заполним массив от 2 до n
        for(int i=0;i<n-1;++i)
        {ar[i]=el++;}
        
        //Найдем все простые числа, не превышающие число n, используя решето Эратосфена.
        for (int i=0;i<n-1;++i)
           {
                   for (int j=i+1;j<n;++j)
                   {
                           if(ar[i]==0)
                           {
                                   count++;
                                   break;
                           }
                           else if(j<n-1&&ar[j]%ar[i]==0)
                           {
                                   ar[j]=0;
                           }
                        }
           }
        
        //перенесем все найденные числа в новый массив и распечатаем их
        int j=0;
        int*tmp=new int[n-1-count];
        for (int i=0;i<n-1-count;++i)
           {
                   while(j<n-1)
                   {
                           if(ar[j]){tmp[i]=ar[j];++j;break;}
                           ++j;
                   }
                   towords(tmp[i]);
           }
        
        delete[]tmp;
        delete[]ar;
        ar=0;tmp=0;
        getch();
        return 0;
}
Yandex
Объявления
23.01.2011, 19:35     Программа, выводящая прописью чётные числа массива.
Ответ Создать тему
Опции темы

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