Другие языки программирования и технологии
Помогите исправить код так, чтобы работал! :) (C#)
Вот есть такой нубский код, написанный на C# для сортировки двух мерного массива... проблема возникла именно с самой сортировкой, так как он постоянно заходит за границы массива, и я не знаю как этому помешать! Подскажите, что и куда надо добавить чтобы он не заходил за границы? using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication21 { class Program { public static void Main() { int [,] ttt; ttt = tableIni(10,10); tableSort(ttt); Console.WriteLine(tableSort(ttt)); Console.ReadLine(); } public static int[,] tableIni (int n, int m) { int t; int i; int[,] table = new int[n, m]; Random random = new Random(); for (t = 0; t < n; t++) { for (i = 0; i < m; i++) { table[t, i] = random.Next(1, 10000); } Console.WriteLine(); } return table; } public static int[,] tableSort (int [,]table) { int f=0; int a=0; int e; bool o = true; while (o) { o = false; for (int b = 0; b < table.Length; b++) { a++; if (a>table.GetLength(1)-2) { a=0; f++; } if (table[f,a] > table[f,a+1] ) { e = table[f,a]; table[f,a] = table[f,a+1]; table[f, a + 1] = e; o = true; } } } return table; } } }
У тебя есть несколько ошибок.
1)Выход за пределы массива происходит по-тому что ты не проверяешь переменную f.Нужно при достижении ею значения большее количества строк выходить из цикла.
2)Не правильно организована сама сортировка. Зачем тебе внешний цикл while(o) ?У тебя есть конкретные значения m и n.Используй их вместо танцев с бубном вокруг переменной о.
3)Ну и почитай про алгоритм сортировки массивов. Он у тебя реализован не правильно. Вод код, разбери и переделай свой.
4)Массив так не выводится на консоль WriteLine(tableSort(ttt)).
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication21
{
class Program
{
public static void Main()
{
int[,] ttt;
ttt = tableIni(5, 15);
tableSort(ttt);
for (int i = 0; i < 5;i++ ) //вывод мас сива в консоль
{
for(int j=0;j < 15;j++)
Console.Write(" {0,4}",ttt[i,j]);
Console.WriteLine();
}
Console.ReadLine();
}
public static int[,] tableIni(int n, int m)
{
int t;
int i;
int[,] table = new int[n, m];
Random random = new Random();
for (t = 0; t < n; t++)
{
for (i = 0; i < m; i++)
{
table[t, i] = random.Next(1, 10000);
}
}
return table;
}
public static int[,] tableSort(int[,] table)
{
int f = 0;
int a = 0;
int e;
int lm = table.GetLength(0);
int ln = table.GetLength(1);
bool o = true;
for (int b = 0; b < table.Length; b++)
{
//a++;
if (a > ln - 2)
{
a = 0;
f++;
if (f > lm - 1)
break;
}
for (int j = a + 1; j < ln; j++)
{
if (table[f, a] > table[f, j])
{
e = table[f, a];
table[f, a] = table[f, j];
table[f, j] = e;
//o = true;
}
}
a++; //нужно здесь инкрементировать
}
return table;
}
}
}
1)Выход за пределы массива происходит по-тому что ты не проверяешь переменную f.Нужно при достижении ею значения большее количества строк выходить из цикла.
2)Не правильно организована сама сортировка. Зачем тебе внешний цикл while(o) ?У тебя есть конкретные значения m и n.Используй их вместо танцев с бубном вокруг переменной о.
3)Ну и почитай про алгоритм сортировки массивов. Он у тебя реализован не правильно. Вод код, разбери и переделай свой.
4)Массив так не выводится на консоль WriteLine(tableSort(ttt)).
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication21
{
class Program
{
public static void Main()
{
int[,] ttt;
ttt = tableIni(5, 15);
tableSort(ttt);
for (int i = 0; i < 5;i++ ) //вывод мас сива в консоль
{
for(int j=0;j < 15;j++)
Console.Write(" {0,4}",ttt[i,j]);
Console.WriteLine();
}
Console.ReadLine();
}
public static int[,] tableIni(int n, int m)
{
int t;
int i;
int[,] table = new int[n, m];
Random random = new Random();
for (t = 0; t < n; t++)
{
for (i = 0; i < m; i++)
{
table[t, i] = random.Next(1, 10000);
}
}
return table;
}
public static int[,] tableSort(int[,] table)
{
int f = 0;
int a = 0;
int e;
int lm = table.GetLength(0);
int ln = table.GetLength(1);
bool o = true;
for (int b = 0; b < table.Length; b++)
{
//a++;
if (a > ln - 2)
{
a = 0;
f++;
if (f > lm - 1)
break;
}
for (int j = a + 1; j < ln; j++)
{
if (table[f, a] > table[f, j])
{
e = table[f, a];
table[f, a] = table[f, j];
table[f, j] = e;
//o = true;
}
}
a++; //нужно здесь инкрементировать
}
return table;
}
}
}
Похожие вопросы
- Помогите исправить код чтобы он считал балы теста Pascal
- Помогите пожалуйста исправить код программы на visual c++!!
- помогите переписать код с паскаля на c++
- Pascal помогите исправить код
- помогите исправить код BV
- Программирование С++ помогите исправить код
- Помогите исправить ошибку в программе (c++).
- Помогите, лёгкий код C++
- Помогите исправить ошибку в коде программы на паскале.
- Помогите откорректировать код в C++