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

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

Войти
Регистрация
Восстановить пароль
 
Kinroom
1 / 1 / 0
Регистрация: 13.12.2012
Сообщений: 99
#1

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

07.06.2013, 12:38. Просмотров 500. Ответов 6
Метки нет (Все метки)

Здраствуйте,мне поставили задачу написать программу проверки двумерного динамического массива на простое число.Так вот массив я составил функцию поиска простого числа написал корректно,но возникло две проблемы:
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++
как задать двумерный массив , границы которого m и n вводятся с клавиатуры? для одномерного массива есть команда int *a=new int; ...

Создание двумерного динамического массива - C++
У Хортона А. - Visual C++ 2005 написано как создавать динамические массивы таким способом: Можно ли создавать таким способом? ...

Поворот динамического двумерного массива - C++
Доброго времени суток. Столкнулся с такой проблемой что не могу развернуть динамический двумерный массив. Результат выводит плачевный: ...

Обработка двумерного динамического массива - C++
Напишите программа буду очень благодарна =) Написать программу, в которой создаются динамические массивы и выполнить их обработку в...

Использование двумерного динамического массива - C++
Здравствуйте, уважаемые форумчане. Такой вопрос: я объявил двумерный дин. массив, выделил, память, сделал с ним что-то int **arr =...

Использование динамического двумерного массива - C++
Вот есть такой заголовочный файл // Заголовочный файл Vector.h #ifndef VECTOR_H #define VECTOR_H template&lt;typename TT&gt; ...

Копия двумерного динамического массива - C++
Как создать копию двумерного динамического массива? Имеется двумерный динамический массив. Нужно создать его копию. Добавлено...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
AntonChik
1084 / 582 / 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
1084 / 582 / 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
1084 / 582 / 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++
Здравствуйте! Мне нужна помощь вот в чем - мое полное задание это написать игру пятнашки которая должна состоять из 5 функций!! 1 -...

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

Удаление двумерного динамического массива из памяти - C++
Допустим дан двумерный динамический массив (созданный с помощью new). Как правильно удалить его из памяти? У меня есть три варианта: ...

Класс для двумерного динамического массива - C++
Вот написал код для двумерного динамического массива с перегруженым оператором= и +. Собственно код работает в MS VS 2010, но меня...

Максимальный элемент динамического двумерного массива - 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     Программа проверки двумерного динамического массива на простое число
Ответ Создать тему
Опции темы

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