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

Программа проверки двумерного динамического массива на простое число - C++

Восстановить пароль Регистрация
 
Kinroom
1 / 1 / 0
Регистрация: 13.12.2012
Сообщений: 99
07.06.2013, 12:38     Программа проверки двумерного динамического массива на простое число #1
Здраствуйте,мне поставили задачу написать программу проверки двумерного динамического массива на простое число.Так вот массив я составил функцию поиска простого числа написал корректно,но возникло две проблемы:
1)Когда выводит простое число выводится его не правильный индекс.
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
#include <iostream>
#include <math.h>
#include <Windows.h>
using namespace std;
 
int prime(int n);
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);   
    int n,i,m,k,j;
    k=0;
    cout<<"Введите количество строк ";
    cin>>n;
    cout<<"Введите количество столбцов ";
    cin>>m;
 
    int** a =new int* [n];
    for(int i=0;i<n;i++){
    a[i]=new int[m];}
    for(int i=0;i<n;i++){
    for(int j=0;j<m;j++){
        a[i][j]=rand()%100+1;
        cout<<a[i][j]<<" ";}
        cout<<endl;
    }
       cout<<"Позиции простых элементов и они сами:\n";  
       for (i=1;i<n;i++)
       for(j=1;j<n;j++)
           if( prime(a[i][j] ))
           {
         k++;
        cout<<"a["<<i<<"]["<<j<<"]="<<a[i][j]<<" ";
        cout<<endl;
           }
           cout<<"Количество простых чисел равно="<<k<<"\n";
           int** a1=new int*[k];
           for(i=1;i<n;i++) {
             a1[i]=new int[k]; }
          for(int i=0;i<n;i++){
    for(int j=0;j<m;j++){
         if(prime(a[i][j])) { 
             a1[i][j]=a[i][j]; }
             cout<<a1[i][j];
        
    }
           }
    }
        
    
    int prime(int n){
        int i;
        for(i=2;i<=sqrt((double)n);i++){
            if (n%i==0)
                return false;}
                return true;
    }
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.06.2013, 12:38     Программа проверки двумерного динамического массива на простое число
Посмотрите здесь:

Использование двумерного динамического массива C++
C++ заполнение динамического двумерного массива
C++ Инициализация двумерного Динамического массива
C++ Создание двумерного динамического массива
C++ Создание динамического двумерного массива
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
AntonChik
1083 / 581 / 21
Регистрация: 11.11.2008
Сообщений: 1,544
07.06.2013, 12:58     Программа проверки двумерного динамического массива на простое число #2
в 30 строке скорей всего опечатка, должна быть m вместо n.
почему размерность второй матрицы k*n ?
запись идет как в n*m, потому и вылетает.

p.s.
компилятор будет материться на частые переобъявления i и j
и логичнее prime объявить как bool вместо int
Kinroom
1 / 1 / 0
Регистрация: 13.12.2012
Сообщений: 99
07.06.2013, 13:12  [ТС]     Программа проверки двумерного динамического массива на простое число #3
Цитата Сообщение от AntonChik Посмотреть сообщение
в 30 строке скорей всего опечатка, должна быть m вместо n.
почему размерность второй матрицы k*n ?
запись идет как в n*m, потому и вылетает.

p.s.
компилятор будет материться на частые переобъявления i и j
и логичнее prime объявить как bool вместо int
Все исправил,но проблема не исчезла.
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
#include <iostream>
#include <math.h>
#include <Windows.h>
using namespace std;
 
bool prime(int n);
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);   
    int n,m,k;
    k=0;
    cout<<"Введите количество строк ";
    cin>>n;
    cout<<"Введите количество столбцов ";
    cin>>m;
 
    int** a =new int* [n];
    for(int i=0;i<n;i++){
    a[i]=new int[m];}
    for(int i=0;i<n;i++){
    for(int j=0;j<m;j++){
        a[i][j]=rand()%100+1;
        cout<<a[i][j]<<" ";}
        cout<<endl;
    }
       cout<<"Позиции простых элементов и они сами:\n";  
       for (int i=1;i<n;i++)
       for(int j=1;j<m;j++)
           if( prime(a[i][j] ))
           {
         k++;
        cout<<"a["<<i<<"]["<<j<<"]="<<a[i][j]<<" ";
        cout<<endl;
           }
           cout<<"Количество простых чисел равно="<<k<<"\n";
           int** a1=new int*[n];
           for(int i=1;i<n;i++) {
             a1[i]=new int[m]; }
          for(int i=0;i<n;i++){
    for(int j=0;j<m;j++){
         if(prime(a[i][j])) { 
             a1[i][j]=a[i][j]; }
             cout<<a1[i][j];
        
    }
           }
    }
        
    
    bool prime(int n){
        int i;
        for(i=2;i<=sqrt((double)n);i++){
            if (n%i==0)
                return false;}
                return true;
    }
AntonChik
1083 / 581 / 21
Регистрация: 11.11.2008
Сообщений: 1,544
07.06.2013, 13:19     Программа проверки двумерного динамического массива на простое число #4
компилятор будет материться на частые переобъявления i и j
нет?!
строки, в которых повторяются int i или int j по идее несовместимы (в пределах одного блока).
каким компилятором пользуетесь?
Kinroom
1 / 1 / 0
Регистрация: 13.12.2012
Сообщений: 99
07.06.2013, 13:21  [ТС]     Программа проверки двумерного динамического массива на простое число #5
Цитата Сообщение от AntonChik Посмотреть сообщение
нет?!
строки, в которых повторяются int i или int j по идее несовместимы (в пределах одного блока).
каким компилятором пользуетесь?
Visual Studio 2012
AntonChik
1083 / 581 / 21
Регистрация: 11.11.2008
Сообщений: 1,544
07.06.2013, 13:40     Программа проверки двумерного динамического массива на простое число #6
ок. разобрался. с этим все нормально, но лучше все равно так не делать имхо...

нашел еще одну опечатку в 39 строке, должно быть i=0
из-за этого падало
аналогично в строках 29,30
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.06.2013, 14:21     Программа проверки двумерного динамического массива на простое число
Еще ссылки по теме:

C++ Использование динамического двумерного массива
Cоздание двумерного динамического массива C++
Сортировка двумерного динамического массива C++

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

Или воспользуйтесь поиском по форуму:
Kinroom
1 / 1 / 0
Регистрация: 13.12.2012
Сообщений: 99
07.06.2013, 14:21  [ТС]     Программа проверки двумерного динамического массива на простое число #7
Цитата Сообщение от AntonChik Посмотреть сообщение
ок. разобрался. с этим все нормально, но лучше все равно так не делать имхо...

нашел еще одну опечатку в 39 строке, должно быть i=0
из-за этого падало
аналогично в строках 29,30
Спасибо,исправил.В 29 и 30 должна оставаться индексация от 1,но в 34 строчке я добавил к i и j +1.Выводит корректно. В матрицу все переписал,но не понял как сделать так чтобы она заполнилась без пустых мест,поэтому заполнил их нулями.Думаю это не правильно,но по другому никак, в общем спасибо. P.S если знаете как сделать так чтобы выводило матрицу только из простых чисел подскажите пожалуйста(например 5 простых чисел, матрица где будет в столбика по 3 и в одном 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
#include <iostream>
#include <math.h>
#include <Windows.h>
using namespace std;
 
bool prime(int n);
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);   
    int n,m,k;
    k=0;
    cout<<"Введите количество строк ";
    cin>>n;
    cout<<"Введите количество столбцов ";
    cin>>m;
 
    int** a =new int* [n];
    for(int i=0;i<n;i++){
    a[i]=new int[m];}
    for(int i=0;i<n;i++){
    for(int j=0;j<m;j++){
        a[i][j]=rand()%100+1;
        cout.width(3);
        cout<<a[i][j]<<" ";}
        cout<<endl;
    }
       cout<<"Позиции простых элементов и они сами:\n";  
       for (int i=1;i<n;i++)
       for(int j=1;j<m;j++)
           if( prime(a[i][j] ))
           {
         k++;
        cout<<"a["<<i+1<<"]["<<j+1<<"]="<<a[i][j]<<" ";
        cout<<endl;
           }
           cout<<"Количество простых чисел равно="<<k<<"\n";
           int** a1=new int*[n];
           for(int i=0;i<n;i++) {
           a1[i]=new int[m]; }
           for(int i=0;i<n;i++){
           for(int j=0;j<m;j++){
           if(prime(a[i][j])) { 
             a1[i][j]=a[i][j];}
             else a1[i][j]=0;
             cout.width(3);
             cout<<a1[i][j]<<" ";}
             cout<<endl;}
           }
    
        
    
    bool prime(int n){
        int i;
        for(i=2;i<=sqrt((double)n);i++){
            if (n%i==0)
                return false;}
                return true;
    }
Yandex
Объявления
07.06.2013, 14:21     Программа проверки двумерного динамического массива на простое число
Ответ Создать тему
Опции темы

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