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

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

Войти
Регистрация
Восстановить пароль
 
Genn55
374 / 221 / 41
Регистрация: 26.12.2012
Сообщений: 725
#1

Матрица (Не получается ввести с клавиатуры произвольные число строк и столбцов массива) - C++

17.04.2013, 23:09. Просмотров 995. Ответов 7
Метки нет (Все метки)

Доброго всем времени суток.Помогите разобраться.Я самостоятельно изучаю С++.Разбираясь с двумерными массивами с толкнулся с проблемой.Не получается ввести с клавиатуры произвольные число строк и столбцов массива.Вот мой код
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
//сортировка двухмерного массива
//по возрастанию
 
#include<iostream>
#include<stdlib.h>
#include<time.h>
#include <windows.h>
 
using namespace std;
int main()
{
   SetConsoleCP(1251);
   SetConsoleOutputCP(1251);
    srand(time(NULL));
   int str =1;
   int stolb=1;
   int mass[str][stolb];
    int temp;
    //заполняем двухмерный массив и выводим на экран
     cout <<"Введите количество строк"<<"\n";
     cin >> str;
     cout<<"Введите количество столбцов"<< "\n";
     cin >> stolb;
     cout<<"\n";
 
       cout<<"До сортировки""\n";
    for(int i=0;i<str;i++)
    {
        for(int j=0;j<stolb;j++)
         {
            mass[i][j]=1+rand()%100;
            cout<<mass[i][j]<<"\t";
         }
        cout<<"\n";
    }
    //Сортируем массив
 
    for(int i=0;i<=(str*stolb);i++)//колличество проходов
    {
        //в строках упорядочиваем
 
       for(int i=0;i<str;i++)
         {
           for(int j=0;j<stolb-1;j++)
            {
              if(mass[i][j]>mass[i][j+1])
               {
                 temp=mass[i][j];
                 mass[i][j]=mass[i][j+1];
                 mass[i][j+1]=temp;
               }
            }
         }
       //в столбах упорядочиваем
 
       for(int k=0;k<stolb;k++)
         {
           for(int l=0;l<str-1;l++)
            {
              if(mass[l][k]>mass[l][k+1])
               {
                 temp=mass[l][k];
                 mass[l][k]=mass[l][k+1];
                 mass[l][k+1]=temp;
               }
           }
        }
     }
 
    //вывод на экран после сортировки
       cout<<"После сортировки ""\n";
    for(int i=0;i<str;i++)
    {
        for(int j=0;j<stolb;j++)
        {
            cout<<mass[i][j]<<"\t";
        }
        cout<<"\n";
    }
 
return 0;
}
В нем все правильно работает когда я инициализирую str и stolb любыми целыми числами,а при вводе с клавиатуры пропадает одно значение,а почему не пойму.Я так понимаю,что не верно делаю ввод str и stolb.
Пожалуйста подскажите кто сможет.За ранее спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.04.2013, 23:09
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Матрица (Не получается ввести с клавиатуры произвольные число строк и столбцов массива) (C++):

Напишите программу, которая позволяет пользователю ввести число, а затем генерирует таблицу размером 20 строк на 10 столбцов - C++
вот задача Решения к упражнениям, помеченным знаком *, можно найти в приложении Ж. *1. Предположим, вы хотите создать таблицу...

Не получается заполнение двумерного массива случайными числами с указанием количества строк и столбцов. - C++
Помогите исправить что не так: #include&lt;iostream.h&gt; #include&lt;math.h&gt; #include&lt;conio.h&gt; void main() { int n, m, F=0, a; ...

Привет. В программе вводится количество строк и столбцов. Мы можем ввести больше столбцов чем задали. - C++
как сделать так чтоб мы не могли ввести большое количество столбцов что задаем? #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include...

Дана матрица целых чисел, из n строк и n столбцов (n < = 100).Определить является ли матрица нулевой (состоит из одних нулей) - C++
#include &lt;iostream.h&gt; #include &lt;iomanip.h&gt; #include&lt;conio.h&gt; void main() { int mas; int N; int max_element; int...

Дана матрица целых чисел, из n строк и n столбцов (n < = 100).Определить является ли матрица нулевой (состоит из одних нулей) - C++
#include &lt;iostream.h&gt; #include &lt;iomanip.h&gt; #include &lt;stdlib.h&gt; int main(int argc, char* argv) { srand(time(NULL)); int mas; ...

Ввести с клавиатуры массив, распределить память для его размещения и ввести int значения этого массива - C++
Подскажите пожалуйста. Задача такая : ввести с клавиатуры n элементов массива, распределить память для его размещения и ввести int значения...

7
metaluga145
243 / 244 / 20
Регистрация: 08.04.2013
Сообщений: 927
18.04.2013, 00:58 #2
И Вам доброго времени суток. Вы в строке
C++
1
int mass[str][stolb];
инициализируете массив размером 1 на 1, а потом вводите новые значения str и stolb, возникает вопрос,когда у вас i и j становятся больше 0(хотя бы одно из них), то куда Вы пишите значение рендома?
0
Genn55
374 / 221 / 41
Регистрация: 26.12.2012
Сообщений: 725
18.04.2013, 01:11  [ТС] #3
Именно здесь я и не могу понять,потому что ,если я пишу просто
C++
1
2
int str =5;
int stolb=5;
и убираю
C++
1
2
3
4
 cout <<"Введите количество строк"<<"\n";
     cin >> str;
     cout<<"Введите количество столбцов"<< "\n";
     cin >> stolb;
все работает правильно.
0
Gepar
1178 / 534 / 20
Регистрация: 01.07.2009
Сообщений: 3,517
18.04.2013, 01:11 #4
То что вы читаете ввод пользователя и потом пытаетесь читать NxM массив это конечно хорошо, но вы не думали что места то наверное тоже надо выделять под NxM элементов?
Чтобы сделать это динамически вам нужно познакомиться с указателями и объявить что-то типа
C++
1
2
3
int** array2D = new int[M];
for(int i=0;i<M;i++)
 array2D[i] = new int[N];
это для массива MxN.

Статически задавать размер массива числом, которое будет введено при выполнении нельзя, те
C++
1
2
3
4
int x;
int y;
cin>>x>>y;
int array2D[x][y];
приведёт к ошибке.
0
metaluga145
243 / 244 / 20
Регистрация: 08.04.2013
Сообщений: 927
18.04.2013, 01:15 #5
Gepar, а еще лучше не создавать двумерный массив, а создать одномерный,но размером M*N.

Добавлено через 1 минуту
и не
Цитата Сообщение от Gepar Посмотреть сообщение
int** array2D = new int[M];
а
C++
1
int** array2D = new int*[M];
0
Genn55
374 / 221 / 41
Регистрация: 26.12.2012
Сообщений: 725
18.04.2013, 01:21  [ТС] #6
Так в задании двухмерный,с одномерным я с горем пополам справляюсь,а так я совсем запутаюсь.
0
metaluga145
243 / 244 / 20
Регистрация: 08.04.2013
Сообщений: 927
18.04.2013, 01:23 #7
Genn55, тогда пробуйте двумерные динамические массивы, как правильно указал Вам Gepar.
0
Genn55
374 / 221 / 41
Регистрация: 26.12.2012
Сообщений: 725
18.04.2013, 22:16  [ТС] #8
Если я правильно понял,мне нужно создать 2 динамических двумерных массива?

Добавлено через 20 часов 47 минут
Спасибо,что подсказали в какую сторону копать.Переписал код,но все равно дает ошибку не понимаю почему столбцы не сортируются.В статическом все нормально,а в динамическом нет, в чем дело не пойму.Заполняется правильно,а работает с ошибками.
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
//сортировка двухмерного массива
//по возрастанию
 
#include<iostream>
#include<stdlib.h>
#include<time.h>
#include <windows.h>
 
using namespace std;
int main()
{
   SetConsoleCP(1251);
   SetConsoleOutputCP(1251);
   srand(time(NULL));
    int str,stolb,temp;
 
    cout <<"Введите количество строк"<<"\n";
    cin >> str;
    cout<<"Введите количество столбцов"<< "\n";
    cin >> stolb;
    cout<<"\n";
    cout<<"До сортировки""\n";
 
    // динамическое создание двумерного массива
    int **mass = new int* [1]; // строк в массиве
    for (int i = 0; i < str; i++)
        mass[i] = new int [1]; // столбцов
    // заполнение массива и вывод на экран
     for(int i=0;i<str;i++)
    {
        for(int j=0;j<stolb;j++)
         {
            mass[i][j]=1+rand()%100;
            cout<<mass[i][j]<<"\t";
         }
        cout<<"\n";
    }
        //Сортируем массив
    for(int i=0;i<=(str*stolb);i++)//колличество проходов
    {
        //в строках упорядочиваем
       for(int i=0;i<str;i++)
         {
           for(int j=0;j<stolb-1;j++)
            {
              if(mass[i][j]>mass[i][j+1])
               {
                 temp=mass[i][j];
                 mass[i][j]=mass[i][j+1];
                 mass[i][j+1]=temp;
               }
            }
         }
       //в столбах упорядочиваем
          for(int x=0;x<stolb;x++)
         {
           for(int z=0;z<str-1;z++)
            {
              if(mass[z][x]>mass[z][x+1])
               {
                 temp=mass[z][x];
                 mass[z][x]=mass[z][x+1];
                 mass[z][x+1]=temp;
               }
           }
        }
 
     }
    //вывод на экран после сортировки
    cout<<"После сортировки ""\n";
    for(int i=0;i<str;i++)
    {
        for(int j=0;j<stolb;j++)
        {
            cout<<mass[i][j]<<"\t";
        }
        cout<<"\n";
    }
    // удаление двумерного динамического массива
    for (int i = 0; i < str; i++)
        delete []mass[i];
return 0;
}
В этом коде дает ошибку.
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
//сортировка двухмерного массива
//по возрастанию
 
#include<iostream>
#include<stdlib.h>
#include<time.h>
#include <windows.h>
 
using namespace std;
int main()
{
   SetConsoleCP(1251);
   SetConsoleOutputCP(1251);
    srand(time(NULL));
    const int str=3;
    const int stolb=3;
    int mass[str][stolb];
    int temp;
    //заполняем двухмерный массив и выводим на экран
    cout<<"До сортировки""\n\n";
    for(int i=0;i<str;i++)
    {
        for(int j=0;j<stolb;j++)
         {
            mass[i][j]=1+rand()%100;
            cout<<mass[i][j]<<"\t";
         }
        cout<<"\n\n";
    }
    //Сортируем массив
    for(int i=0;i<=(str*stolb);i++)//колличество проходов
    {
        //в строках упорядочиваем
       for(int i=0;i<str;i++)
         {
           for(int j=0;j<stolb-1;j++)
            {
              if(mass[i][j]>mass[i][j+1])
               {
                 temp=mass[i][j];
                 mass[i][j]=mass[i][j+1];
                 mass[i][j+1]=temp;
               }
            }
         }
       //в столбах упорядочиваем
       for(int x=0;x<stolb;x++)
         {
           for(int z=0;z<str-1;z++)
            {
              if(mass[z][x]>mass[z][x+1])
               {
                 temp=mass[z][x];
                 mass[z][x]=mass[z][x+1];
                 mass[z][x+1]=temp;
               }
           }
        }
     }
    //вывод на экран после сортировки
    cout<<"После сортировки по возрастанию""\n\n";
    for(int i=0;i<str;i++)
    {
        for(int j=0;j<stolb;j++)
        {
            cout<<mass[i][j]<<"\t";
        }
        cout<<"\n\n";
    }
return 0;
}
А в этом все работает.
0
18.04.2013, 22:16
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.04.2013, 22:16
Привет! Вот еще темы с ответами:

Ввести число с клавиатуры, потом записать это число в текстовой файл - C++
Написать программу в которой надо ввести число с клавиатуры, потом записать это число в текстовой файл, потом считать из этого файла это...

Как ввести массив строк с клавиатуры? - C++
как сделать чтоб вводить массив строк с клавиатуры? // Lab13M.cpp: определяет точку входа для консольного приложения. // ...

Дана матрица, состоящая из М строк и N столбцов - C++
Дана матрица А, состоящая из М строк и N столбцов. Элементами матрицы являются натуральные числа. Вывести на экран количество элементов...

Обратная матрица (перестановка строк и столбцов) - C++
Как сделать сортировку столбцов матрицы?Т.е если у меня по главной диагонали есть нуль,надо вместо этого столбца(где есть нуль) поставить...


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

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

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