IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

 
 Ответить  Открыть новую тему 
> [Java] Окружения элемента в массиве
сообщение
Сообщение #1


Пионер
**

Группа: Пользователи
Сообщений: 57
Пол: Мужской

Репутация: -  0  +


Утро Доброе!
Помогите Пожалуйста переписать программу с 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.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гуру
*****

Группа: Пользователи
Сообщений: 1 013
Пол: Мужской
Ада: Разработчик
Embarcadero Delphi: Сторонник
Free Pascal: Разработчик

Репутация: -  627  +


Код:
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.

Сообщение отредактировано: IUnknown -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


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


smile.gif))


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Пионер
**

Группа: Пользователи
Сообщений: 57
Пол: Мужской

Репутация: -  0  +


Цитата(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;
}
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Гуру
*****

Группа: Пользователи
Сообщений: 1 013
Пол: Мужской
Ада: Разработчик
Embarcadero Delphi: Сторонник
Free Pascal: Разработчик

Репутация: -  627  +


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


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
}

Помогло тебе это? Результат-то всегда НОЛЬ.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Профи
****

Группа: Пользователи
Сообщений: 652
Пол: Мужской
Реальное имя: Алексей

Репутация: -  20  +


Молодой человек,вы уже должны были понять,что над вами немного стебуться.Вы взгляните на то,что вы выкладываете.

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, еще оооочень долго может над вами потешаться,он такой вредный.

Сообщение отредактировано: Krjuger -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Гуру
*****

Группа: Пользователи
Сообщений: 1 013
Пол: Мужской
Ада: Разработчик
Embarcadero Delphi: Сторонник
Free Pascal: Разработчик

Репутация: -  627  +


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

И потом. Я ни над кем не потешался (программа, приведенная в 5-ом посте, очень даже компилируемая и рабочая - настолько, насколько рабочим можно считать решение на Паскале). Я просто констатировал факт, что решать задачу тем способом, который упомянут топикстартером, не имеет особого смысла. Кстати, как выяснилось, автор решения (в разделе "Задачи") говорил ровно о том же.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Профи
****

Группа: Пользователи
Сообщений: 652
Пол: Мужской
Реальное имя: Алексей

Репутация: -  20  +


Просто не понятно,что топикстартер делает...Сначала выложил программу на паскале которую ему написали и попросил переписать,потом выложил код уже на С++,схожый с первоначальным,но вообще непонятно для чего там нужны две первые функции,если они нигде не используются и при этом используются 2 функици из первого поста,которые возможно правильно переписаны.А может Min ,Max это действительно массивы,но непонятно откуда они, зачем они и что в них храниться.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Злостный любитель
*****

Группа: Пользователи
Сообщений: 1 755
Пол: Мужской

Репутация: -  62  +


> А может Min ,Max это действительно массивы,но непонятно откуда они, зачем они и что в них храниться.

http://www.tsya.ru/


--------------------
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Пионер
**

Группа: Пользователи
Сообщений: 57
Пол: Мужской

Репутация: -  0  +


Цитата(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
Скажите Пожалуйста, а этот код считает окружения для крапйних элементов?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(Merhaba @ 22.05.2011 20:34) *
Скажите Пожалуйста, а этот код считает окружения для крапйних элементов?
Кошмар.. сам даже проверить (хотя бы по результатам, что ли, если уж код никак не прочесть) не может..
Merhaba ты серьезно думаешь, что выедешь на нас, не пошевельнув пальцем?


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


Пионер
**

Группа: Пользователи
Сообщений: 57
Пол: Мужской

Репутация: -  0  +


Цитата(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 больше любого элемента из первого окружения, и меньше любого элемента из второго окружения.
Помогите Пожалуйста разобраться!

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #13


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


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

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

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

Не совсем.. Результат работы этой программы далеко не всегда равен нулю )).


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #14


Гуру
*****

Группа: Пользователи
Сообщений: 1 013
Пол: Мужской
Ада: Разработчик
Embarcadero Delphi: Сторонник
Free Pascal: Разработчик

Репутация: -  627  +


Цитата
В результате, всё равно выводит 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); // <--- Вот тут значок поменяй на "Меньше"...
}
... и все заработает.

Сообщение отредактировано: IUnknown -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 16.04.2024 10:55
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name