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

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

Войти
Регистрация
Восстановить пароль
 
NickПавел
10 / 10 / 0
Регистрация: 07.12.2012
Сообщений: 39
#1

КАК ИСПРАВИТЬ ОШИБКУ - C++

04.06.2013, 23:57. Просмотров 280. Ответов 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
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
138
139
140
141
#include <iostream>
#include <math.h>
#include <cstdlib>
#include <ctime>
#include <iomanip>
using namespace std;
void print(int **arr,int n)
{  
for (int ix = 0; ix < n; ix++)
    {
        for (int jx = 0; jx < n; jx++)
            cout << setw(4) << arr[ix][jx] << " ";
        cout << endl;
    }
return;
}
void top(int **arr,int n,int &i,int &j)
{   
    int value = 0;
    for (int diag = 0; diag < n; diag++) // выполняем проход по диагоналям
    {
        if (diag % 2 == 0) // по четным диагоналям
        {
            i = 0; // х-координата первого лемента массива на диагонали - diag
            j = diag; // у-координата элемента массива на диагонали - diag
 
            while (j >= 0) 
            {
                arr[i][j] = value;
                value++;
                i++;     
                j--;  
            }
        }
        else // по нечетным диагоналям
        {
           i = diag; 
           j = 0; 
 
            while (i >= 0) // пока x-координата находится в левой части диагонали
            {
                arr[i][j] = value; // записать значение в массив
                value++;
                i -= 1;  // по горизонтали, смещаемся вправо
                j +=  1; // по вертикали, смещаемся вверх
            }
        }
    } 
for (int diag = 1; diag < n; diag++)
    {
        if (diag % 2 == 0) // по четным диагоналям
        {
            i = n-1; // х-координата первого элемента массива на диагонали - diag
            j = diag;  // у-координата элемента массива на диагонали - diag
 
            while (j <= n-1) // Пока не кончилась диагональ
            {
                arr[i][j] = value;
                value++;
                i--; // по горизонтали, смещаемся влево
                j++; // по вертикали, смещаемся вниз
            }
        }
        else // по не четным диагоналям
        {
            i = diag; // х-координата первого элемента к-ой диагонали
            j = n-1;  // у-координата первого элемента к-ой диагонали
 
            while (i <= n-1) // Пока не кончилась диагональ
            {
                arr[i][j] = value;
                value++;
                i++; // по горизонтали, смещаемся вправо
                j--; // по вертикали, смещаемся вверх
            }
        } // конец if-else
    } return;
 
}
 
void job ()
{
    cout<<"-----------------------------------------------------------------------"<<endl;
    cout<<"******||Лабораторная работа №5 по курсу Основы программирования||******"<<endl;
    cout<<"******||Выполнил студент гр.  :||******"<<endl;
    cout<<"******||Задание: Заполнение матрицы по спирали.                ||******"<<endl;
    cout<<"-----------------------------------------------------------------------\n"<<endl;
    return;
}
void matrix(int **&arr,int n)
{ 
 arr=new int *[n];
 for(int e=0 ;e<n;e++)
     arr[e]= new int [n];
}
void record(int **arr,int n)
{
    srand(time(NULL));
    for (int i=0;i<n;i++)
        for(int j=0;j<n;j++)
            arr[i][j]=rand()%100;
    return;
}
void shortint(int**&arr,int n)
{  for (int k = 0; k < n*n; k++)
    {
        int i,j,i2,j2;
        top(arr,n,i,j);
        int x = arr[i][j];
        int k2 =k;
        top(arr-1,n,i2,j2);
        while(k2 >0 && arr[i2][j2] > x)
        {   top(arr,n,i,j);
            top(arr-1,n,i2,j2);
            arr[i][j] = arr[i2][j2];
            k2--;
        }
top(arr,n,i,j);
        arr[i][j] = x;
 
    }
  return;
}
int main()
{  int n; 
   setlocale(LC_CTYPE, "Russian");
   job(); 
   cout<<"Введите размер матрицы"<<endl;
   cin>>n;
   int **arr;
   matrix(arr,n);
   record(arr,n);
   cout<<"Исходная матрица"<<endl;
   print(arr,n);
 
   cout<<"Отсортированная"<<endl;
   shortint(arr,n);
   print(arr,n);  // вывод масиива на экран
  // delete arr;
return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.06.2013, 23:57     КАК ИСПРАВИТЬ ОШИБКУ
Посмотрите здесь:

Как исправить ошибку? - C++
int f(int, int, int); void koorx(int, int, int, int); int nod(int, int); void koorx(int &amp;x, int &amp;y, int vx, int vy, int t = 1) { ...

Как исправить ошибку? - C++
#include &lt;conio.h&gt; #include &lt;math.h&gt; #include &lt;iostream&gt; using namespace std; int fact(int a) {if (a==0) return 1; else return...

Как исправить ошибку? - C++
Предупреждение 5 warning C4700: использована неинициализированная локальная переменная &quot;a&quot; 93строчка #include &lt;conio.h&gt; ...

Как исправить ошибку - C++
доброго времени суток. вот у меня есть тут такой дефолт констрактор. MString::MString():length(8){ this-&gt;data = new char; ...

Как исправить эту ошибку? - C++
Помогите пожайлуста, написал программу, но при компиляции выдает 3 ошибки, что-то немогу понять как их исправить, вроде бы все правильно,...

Как исправить ошибку: 'Void value not ignored as it ought to be' - C++
#include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;string&gt; using namespace std; /* Function: Bubble sort */ void...

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

Как исправить ошибку в программе - C++
#include &lt;iostream&gt; #include &lt;string&gt; #include &lt;sstream&gt; #include &lt;fstream&gt; std::string first_word(const char *filename) { ...

Как исправить ошибку со scanf - C++
Подскажите почему visual 2013 ругается на scanf и не компилирует программу, а dev c++ свободно компилирует, и что сделать чтобы visual...

Не знаю как исправить ошибку - C++
при выводе всего списка не выдает верную информацию. Не могу понять что не так, помогите. Заранее спасибо. #include &lt;stdio.h&gt; ...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

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