Помощь - Поиск - Пользователи - Календарь
Полная версия: [Java] Окружения элемента в массиве
Форум «Всё о Паскале» > Delphi, Assembler и другие языки. > Другие языки
Merhaba
Утро Доброе!
Помогите Пожалуйста переписать программу с Pascal на Java:
function Min(a,b: integer): integer;
begin
if a<b then Min:= a else Min:= b
end;

function Max(a,b: integer): integer;
begin
if a>b then Max:= a else Max:= b
end;


const
n= 30;
m= 20;

var
a: array [1..n,1..m] of integer;
i,j,k,l,p,q: integer;
Ok: boolean;

begin
Randomize;
for i:=1 to n do for j:=1 to m do a[i,j]:= Random(100);
for i:=1 to n do begin
for j:=1 to m do Write(a[i,j]:3);
WriteLn
end;

l:=0;
for i:=3 to n-2 do for j:=3 to m-2 do begin
Ok:= true;
k:= 1;
for p:= Max(i-k,1) to Min(i+k,n) do
for q:= Max(j-k,1) to Min(j+k,m) do
if (Abs(i-p)=k) or (Abs(j-q)=k) then Ok:= Ok and (a[i,j]>a[p,q]);
k:= 2;
for p:= Max(i-k,1) to Min(i+k,n) do
for q:= Max(j-k,1) to Min(j+k,m) do
if (Abs(i-p)=k) or (Abs(j-q)=k) then Ok:= Ok and (a[i,j]<a[p,q]);
if Ok then Inc(l)
end;

WriteLn('found ',l,' of wanted elements');
ReadLn
end.
IUnknown
Код:
import java.util.Random;

public class Matrix02 {
public static void main(String[] args) {
int n = 30;
int m = 20;
int [][] a = new int[n][m];

Random rnd = new Random ();

for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
a[i][j] = rnd.nextInt(100);
System.out.print(" " + a[i][j]);
} // for j
System.out.println();
} // for i


System.out.println("found 0 of wanted elements");
}
}

по функционалу аналогичен твоему. Точно так же выводит случайную матрицу, и точно так же на всех прогонах (а я гонял паскалевскую программу раз 50 наверное, если не больше... Результат всегда одинаковый) - возвращает 0.
Lapp
Цитата(IUnknown @ 20.05.2011 13:41) *
Код:
 ... 
System.out.println("found 0 of wanted elements");
...
по функционалу аналогичен твоему. Точно так же выводит случайную матрицу, и точно так же на всех прогонах (а я гонял паскалевскую программу раз 50 наверное, если не больше... Результат всегда одинаковый) - возвращает 0.


smile.gif))
Merhaba
Цитата(Lapp @ 21.05.2011 10:32) *

smile.gif))

Помогите Пожалуйста адаптировать программу к Java. У меня что-то не получается, выдаётся куча ошибок:
int FindMax(){
int Max = Integer.MIN_VALUE;
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
if(array[i][j] > Max)
{Max = array[i][j];}
} // for (int j... )
} // for (int i... )
return Max;
}

int FindMin(){
int Min = Integer.MAX_VALUE;
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
if(array[i][j] < Min)
{Min = array[i][j];}
} // for (int j... )
} // for (int i... )
return Min;
}

int TheNumberOfNecessaryElements(){
boolean flag = true;
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
int k = 1;
for (int p = Max[i-k][0]; p < Min[i+k][n]; p++){
for (int q = Max[j-k][0]; q< Min[j+k][m]; q++){
if ((Math.abs(i-p)=k) || (Math.abs(j-q)=k)){
flag = true;
array[i][j] > array[p][q];
}
}
}
} // for (int j... )
} // for (int i... )
return count;
}
IUnknown
Ну вот, ошибок не выдается, работает:


import java.io.IOException;
import java.util.Random;

public class Matrix01 {
public static void main(String[] args) throws Exception {
Matrix mx = new Matrix();
mx.printMatrix();
System.out.println("found " + mx.Action() + " of wanted elements");
}
}

class Matrix {
int [][] a;
int n;
int m;

public Matrix() throws IOException {

n = 30;
m = 20;
a = new int[n][m];

Random rnd = new Random ();

for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
a[i][j] = rnd.nextInt(100);
} // for j
} // for i
} // constructor

int Action() {
int l = 0;
for(int i = 3; i <= n-2; i++)
for(int j = 3; j <= m - 2; j++) {
Boolean Ok = true;
int k = 1;
for(int p = Math.max(i-k, 1); p <= Math.min(i+k, n); p++)
for(int q = Math.max(j-k,1); q <= Math.min(j+k, m); q++)
if( (Math.abs(i-p)==k) || (Math.abs(j-q)==k) ) {
Ok = (Ok ? (a[i-1][j-1] > a[p-1][q-1]) : Ok);
}
k = 2;
for(int p = Math.max(i-k, 1); p <= Math.min(i+k, n); p++)
for(int q = Math.max(j-k, 1); q <= Math.min(j+k, m); q++)
if( (Math.abs(i-p)==k) || (Math.abs(j-q)==k) ) {
Ok = (Ok ? (a[i-1][j-1] > a[p-1][q-1]) : Ok);
}
if(Ok) l += 1;
}
return l;
}


void printMatrix() throws IOException {

for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
System.out.print(" " + a[i][j]);
} //for j
System.out.println();
} //for i
System.out.println();
} // printMatrix
}

Помогло тебе это? Результат-то всегда НОЛЬ.
Krjuger
Молодой человек,вы уже должны были понять,что над вами немного стебуться.Вы взгляните на то,что вы выкладываете.

int TheNumberOfNecessaryElements(){
boolean flag = true;
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
int k = 1;
for (int p = Max[i-k][0]; p < Min[i+k][n]; p++){
for (int q = Max[j-k][0]; q< Min[j+k][m]; q++){
if ((Math.abs(i-p)=k) || (Math.abs(j-q)=k)){
flag = true;
array[i][j] > array[p][q];
}
}
}
} // for (int j... )
} // for (int i... )
return count;
}


Вы возвращаете в качестве результата значение переменной count,ГДЕ в вашей функции воообще присутствует значение этой переменной?Где инициализация,где изменения ее?вы нигде ее не используете,никак ее не описывааете,но как то возвращаете.
p = Max[i-k][0]; p < Min[i+k][n] что это вообще такое?Вы взяли функции из кода паскаля и использовали их в другом коде,как вы это вообще сообразили сделать,вы написали процедуры поиска минимального и максимального элемента в матрице.(FindMax()FindMin()) где вы их используете?Заметьте эти процедуры вызываются без параметров.А то что вы написали в квадратных скобках, это так передаются номера строк и столбцов матрици а не 2 числа в функцию))
То что вы написали это полнейшая бурда,попробуйте с азов начать,потому что вы явно не понимаете принципов и просто берете чьи то куски и пытаетесь как то собрать из них то,что вам надо.

Volvo, еще оооочень долго может над вами потешаться,он такой вредный.
IUnknown
Цитата
Volvo, еще оооочень долго может над вами потешаться,он такой вредный.
Я бы попросил не употреблять по отношению ко мне этого ника. Договорились? volvo больше нет. По крайней мере на этом форуме. Есть IUnknown.

И потом. Я ни над кем не потешался (программа, приведенная в 5-ом посте, очень даже компилируемая и рабочая - настолько, насколько рабочим можно считать решение на Паскале). Я просто констатировал факт, что решать задачу тем способом, который упомянут топикстартером, не имеет особого смысла. Кстати, как выяснилось, автор решения (в разделе "Задачи") говорил ровно о том же.
Krjuger
Просто не понятно,что топикстартер делает...Сначала выложил программу на паскале которую ему написали и попросил переписать,потом выложил код уже на С++,схожый с первоначальным,но вообще непонятно для чего там нужны две первые функции,если они нигде не используются и при этом используются 2 функици из первого поста,которые возможно правильно переписаны.А может Min ,Max это действительно массивы,но непонятно откуда они, зачем они и что в них храниться.
TarasBer
> А может Min ,Max это действительно массивы,но непонятно откуда они, зачем они и что в них храниться.

http://www.tsya.ru/
Merhaba
Цитата(IUnknown @ 22.05.2011 10:16) *

Ну вот, ошибок не выдается, работает:


import java.io.IOException;
import java.util.Random;

public class Matrix01 {
public static void main(String[] args) throws Exception {
Matrix mx = new Matrix();
mx.printMatrix();
System.out.println("found " + mx.Action() + " of wanted elements");
}
}

class Matrix {
int [][] a;
int n;
int m;

public Matrix() throws IOException {

n = 30;
m = 20;
a = new int[n][m];

Random rnd = new Random ();

for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
a[i][j] = rnd.nextInt(100);
} // for j
} // for i
} // constructor

int Action() {
int l = 0;
for(int i = 3; i <= n-2; i++)
for(int j = 3; j <= m - 2; j++) {
Boolean Ok = true;
int k = 1;
for(int p = Math.max(i-k, 1); p <= Math.min(i+k, n); p++)
for(int q = Math.max(j-k,1); q <= Math.min(j+k, m); q++)
if( (Math.abs(i-p)==k) || (Math.abs(j-q)==k) ) {
Ok = (Ok ? (a[i-1][j-1] > a[p-1][q-1]) : Ok);
}
k = 2;
for(int p = Math.max(i-k, 1); p <= Math.min(i+k, n); p++)
for(int q = Math.max(j-k, 1); q <= Math.min(j+k, m); q++)
if( (Math.abs(i-p)==k) || (Math.abs(j-q)==k) ) {
Ok = (Ok ? (a[i-1][j-1] > a[p-1][q-1]) : Ok);
}
if(Ok) l += 1;
}
return l;
}


void printMatrix() throws IOException {

for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
System.out.print(" " + a[i][j]);
} //for j
System.out.println();
} //for i
System.out.println();
} // printMatrix
}

Помогло тебе это? Результат-то всегда НОЛЬ.


Кочечно помогло! smile.gif Спасибо Вам Большое! give_rose.gif
Скажите Пожалуйста, а этот код считает окружения для крапйних элементов?
Lapp
Цитата(Merhaba @ 22.05.2011 20:34) *
Скажите Пожалуйста, а этот код считает окружения для крапйних элементов?
Кошмар.. сам даже проверить (хотя бы по результатам, что ли, если уж код никак не прочесть) не может..
Merhaba ты серьезно думаешь, что выедешь на нас, не пошевельнув пальцем?
Merhaba
Цитата(IUnknown @ 22.05.2011 10:16) *

Ну вот, ошибок не выдается, работает:


import java.io.IOException;
import java.util.Random;

public class Matrix01 {
public static void main(String[] args) throws Exception {
Matrix mx = new Matrix();
mx.printMatrix();
System.out.println("found " + mx.Action() + " of wanted elements");
}
}

class Matrix {
int [][] a;
int n;
int m;

public Matrix() throws IOException {

n = 30;
m = 20;
a = new int[n][m];

Random rnd = new Random ();

for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
a[i][j] = rnd.nextInt(100);
} // for j
} // for i
} // constructor

int Action() {
int l = 0;
for(int i = 3; i <= n-2; i++)
for(int j = 3; j <= m - 2; j++) {
Boolean Ok = true;
int k = 1;
for(int p = Math.max(i-k, 1); p <= Math.min(i+k, n); p++)
for(int q = Math.max(j-k,1); q <= Math.min(j+k, m); q++)
if( (Math.abs(i-p)==k) || (Math.abs(j-q)==k) ) {
Ok = (Ok ? (a[i-1][j-1] > a[p-1][q-1]) : Ok);
}
k = 2;
for(int p = Math.max(i-k, 1); p <= Math.min(i+k, n); p++)
for(int q = Math.max(j-k, 1); q <= Math.min(j+k, m); q++)
if( (Math.abs(i-p)==k) || (Math.abs(j-q)==k) ) {
Ok = (Ok ? (a[i-1][j-1] > a[p-1][q-1]) : Ok);
}
if(Ok) l += 1;
}
return l;
}


void printMatrix() throws IOException {

for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
System.out.print(" " + a[i][j]);
} //for j
System.out.println();
} //for i
System.out.println();
} // printMatrix
}

Помогло тебе это? Результат-то всегда НОЛЬ.


Я переделал код, чтобы матрицу считывало из файла, и результаты выводило в файл...
Забил во входной файл вот такую информацию:
Код
7 7
1  2  3  4  5  6  7
0 11 15 12 13 14  0
1 17  2  3  5 12  1
2 15  8 10  1 11  2
3 30  7  9  2 20  3
4 29 27 25 23 22  4
1  2  3  4  5  6  7
В результате, всё равно выводит 0. Хотя тут есть один элемент, удовлетворяющий условию задачи - 10.
Код
11 15 12 13 14  
17  2  3  5   12  
15  8 10  1  11  
30  7  9  2   20  
29 27 25 23 22
Видно, что 10 больше любого элемента из первого окружения, и меньше любого элемента из второго окружения.
Помогите Пожалуйста разобраться!

Lapp
Цитата(Merhaba @ 23.05.2011 22:40) *
Я переделал код,

Если ты переделал код - то показывай его. Неважно, что ты там поменял, даже если только один символ в комментарии. Без точного кода нет смысла даже тратить время на чтение дальше.

Добавлено через 19 мин.
Цитата(IUnknown @ 22.05.2011 10:16) *
Помогло тебе это? Результат-то всегда НОЛЬ.

Не совсем.. Результат работы этой программы далеко не всегда равен нулю )).
IUnknown
Цитата
В результате, всё равно выводит 0. Хотя тут есть один элемент, удовлетворяющий условию задачи - 10.
unsure.gif
Там это... Похоже, Copy+Paste принес свои плоды:
k = 2;
for(int p = Math.max(i-k, 1); p <= Math.min(i+k, n); p++)
for(int q = Math.max(j-k, 1); q <= Math.min(j+k, m); q++)
if( (Math.abs(i-p)==k) || (Math.abs(j-q)==k) ) {
Ok = (Ok ? (a[i-1][j-1] > a[p-1][q-1]) : Ok); // <--- Вот тут значок поменяй на "Меньше"...
}
... и все заработает.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.