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

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

Восстановить пароль Регистрация
 
NickПавел
10 / 10 / 0
Регистрация: 07.12.2012
Сообщений: 39
04.06.2013, 23:57     КАК ИСПРАВИТЬ ОШИБКУ #1
В общем задача такая создать матрицу, рандомно заполнить ее и отсортировать по возрастанию и заполнять матрицу змейкой по диагонали. Все работает но что-то с сортировкой(сортировка вставками). Может кто хорошо в этом понимает и найдет ошибку
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++
Как исправить ошибку C++
C++ Как исправить ошибку?
C++ Как исправить ошибку?
C++ Как исправить ошибку?
Как исправить ошибку? C++
Как исправить ошибку? C++
Как исправить ошибку? C++

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

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

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