Утро Доброе!
Помогите Пожалуйста переписать программу с 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.
Код:
import java.util.Random;по функционалу аналогичен твоему. Точно так же выводит случайную матрицу, и точно так же на всех прогонах (а я гонял паскалевскую программу раз 50 наверное, если не больше... Результат всегда одинаковый) - возвращает 0.
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.
System.out.println("found 0 of wanted elements");
...
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;
}
Ну вот, ошибок не выдается, работает:
Помогло тебе это? Результат-то всегда НОЛЬ.
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
}
Молодой человек,вы уже должны были понять,что над вами немного стебуться.Вы взгляните на то,что вы выкладываете.
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;
}
Просто не понятно,что топикстартер делает...Сначала выложил программу на паскале которую ему написали и попросил переписать,потом выложил код уже на С++,схожый с первоначальным,но вообще непонятно для чего там нужны две первые функции,если они нигде не используются и при этом используются 2 функици из первого поста,которые возможно правильно переписаны.А может Min ,Max это действительно массивы,но непонятно откуда они, зачем они и что в них храниться.
> А может Min ,Max это действительно массивы,но непонятно откуда они, зачем они и что в них храниться.
http://www.tsya.ru/
Помогло тебе это? Результат-то всегда НОЛЬ.
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
}
Помогло тебе это? Результат-то всегда НОЛЬ.
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
}
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); // <--- Вот тут значок поменяй на "Меньше"...
}