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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.75
Virgilian
0 / 0 / 0
Регистрация: 09.01.2011
Сообщений: 2
#1

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

12.01.2011, 22:41. Просмотров 1470. Ответов 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 минуту
Извиняюсь. Не чётные, а простые.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.01.2011, 22:41
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Программа, выводящая прописью чётные числа массива. (C++):

Программа выводящая на экран все четыре значные числа последовательности 1000 1003 1006 1009 1012 1015 - C++
здравствуйте программисты можете помочь сделать программу

Напечатать отдельно чётные и нечётные числа массива в отсортированном виде - C++
задачка такая, надо отсортировать цифры, и напечатать отдельно четные и нечетные цыфри я отсортировал, а дальше как надо ??? прощу...

Не выводящая программа - C++
Данная программа ничего не выводит на экран, возможно ничего и не считаетю В чём проблема? #include &lt;iostream&gt; #include &lt;stdlib.h&gt; ...

Расположить чётные числа массива в порядке возрастания, а нечётные в порядке убывания - C++
Требуется расположить чётные числа в порядке возрастания, а не чётные в порядке убывания. Относительного расположения чисел не менять. С...

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

Программа выводящая строку наоборот - C++
Необходимо сделать программу, с функцией, сперва меняющей местами первую и последнюю букву строки, после вторую и т.д. Функция main()...

1
Virgilian
0 / 0 / 0
Регистрация: 09.01.2011
Сообщений: 2
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;
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.01.2011, 19:35
Привет! Вот еще темы с ответами:

Программа выводящая слова и их количество. - C++
Ввести строку. Вывести различные слова вместе с количеством их появления в строке. Буду очень признателен если ктото напишет это дело...

не запускается программа, выводящая содержимое файла - C++
Эта программа по идее должна выводить на экран содержимое произвольно заданного файла, но не запускается дальше того, как вводится название...

Программа, выводящая на экран синусы углов - C++
Добрый вечер! Кому не сложно, создайте, пожалуйста, программу, выводящую на экран синусы углов 0, 5, 10, 15, …, 180 градусов.

Программа выводящая имена файлов в каталоге - C++
Пытаюсь разобраться в программе: Программа выводит имена файлов и их i-node в указанном каталоге. #include &lt;stdio.h&gt; #include...


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

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

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