Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 3 182

/ вопрос открыт /

Приветствую, уважаемые эксперты!
Дана матрица А(n,m), найти ее наибольший элемент(первый по порядку если их несколько)
написал код..но как то странно выводит наиб элемент, рандомом как то( помогите пожалуйста.

Приложение:
  1. uses
  2. SysUtils;
  3.  
  4. CONST n=5;m=5;
  5. TYPE TMas=ARRAY[1..n,1..m] of integer;
  6. var i,j,max:integer; a:TMas;
  7.  
  8.  
  9. PROCEDURE INPUT(var a:TMas);
  10. var i,j:integer;
  11. BegiN
  12. Randomize;
  13. for i:=1 to n do
  14. for j:=1 to m do
  15. a[i,j]:=Random(25)-10;
  16. WRITELN('pervonachalnyi massiv:')
  17. EnD;
  18.  
  19.  
  20. PROCEDURE OUTPUT{output(1,n,1,m)}(i1,i2,j3,j4:integer);
  21. var i,j:integer;
  22.  
  23. for i:=i1 to i2 do
  24. bEGIN
  25. writeln;
  26. for j:=j3 to j4 do
  27. write(a[i,j]:4,' ');
  28. eND;
  29. EnD;
  30.  
  31. PROCEDURE MAXIMUM( var a:TMas);
  32. var i,max:integer;
  33. BEGIN
  34. for i:=1 to n do
  35. if a[i,j]>0 then max:=a[i,j];
  36. for i:=1 to n do
  37. if a[i,j]>max then
  38. max:=a[i,j];
  39. writeln;
  40. WRITELN('max(a[i])=',max);
  41. END;
  42.  
  43.  
  44. begin
  45. input(a);
  46. output(1,n,1,m);
  47. maximum(a);
  48.  
  49. readln;
  50. end.


I{ () T Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: I{ () T (статус: Посетитель)
Вопрос отправлен: 13 сентября 2009, 08:45
Состояние вопроса: открыт, ответов: 1.

Ответ #1. Отвечает эксперт: min@y™

function Maximum(const a: TMas): Integer;
var
  i, j: Integer;
begin
  Result:= -2147483648;
  for i:= 1 to n do
    for j:= 1 to m do
      if a[i, j] > Result
        then Result:= a[i, j];
 
   WRITELN('max(a[i])=', Result);
end;

Ответ отправил: min@y™ (статус: Доктор наук)
Время отправки: 13 сентября 2009, 09:23
Оценка за ответ: 5

Комментарий к оценке: спасибо!!!=) работает) но, а что это за цифры? как их объяснить училке Result:= -2147483648;???

Мини-форум вопроса

Всего сообщений: 100; последнее сообщение — 13 сентября 2009, 14:37; участников в обсуждении: 7.

Страницы: [« Предыдущая] [1] [2] [3] [4] [5] [Следующая »]

Егор

Егор (статус: 10-ый класс), 13 сентября 2009, 12:18 [#61]:

"Если ученик шарит" - да, история была бы со счастливым концом :)

но это не в нашем случае - ты же видел исходный код, читал вопросы ("-2147483648", "result", "const", "неактуальные параметры"...).
ну и плюс фраза "тут процентов 75 операций, которые в школе еще не прошли"
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.
Егор

Егор (статус: 10-ый класс), 13 сентября 2009, 12:25 [#62]:

и объясни ещё такие строки:

TMatrix = array of array of Integer;
Cardinal
if m + n = 0 - это почему так? а если m или n будут меньше нуля?
Exit
SetLength(X, n, m)
High(X)
High(X[0]) - чем отличается от предыдущего?
Result:= -MaxInt - 1; // Чтоб Вадим К не придирался.
{$B-} // Чтоб Вадим К не придирался.
Length(X) = 0
Length(X[0])


по-моему, тот вариант, что предложил "I{ () T", как конечный, идеален. идеален ДЛЯ ЕГО УРОВНЯ
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.
I{ () T

I{ () T (статус: Посетитель), 13 сентября 2009, 12:25 [#63]:

to Егор
в делфи только 2 года. раньше даже не знал что такое существует......
у меня нет мании величия...Великие люди этим не страдают)))
.......лень порождает ненависть к жизни......
Егор

Егор (статус: 10-ый класс), 13 сентября 2009, 12:30 [#64]:

to I{()T: (ну что за ник? почему не КОТ?)
в коде лучше бы написать так:

FUNCTION MAXIMUM(const a:TMas; var MaxI,MaxJ:integer):integer;

большими буковками, чтобы не отличалось от объявления предыдущих процедур :)))
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.
Вадим К

Вадим К (статус: Академик), 13 сентября 2009, 12:34 [#65]:

min@y™:
Result:= -MaxInt - 1; плохой код. И не надо прикрываться моим именем. Лабораторные работы это не место для различных "хаков". Другое дело, когда пишется код, в котором хак сокращает время работы в десятки раз.
и с {$B-} был перегиб. В целом, не нужно использовать мое имя, что бы прикрывать свои желания.

Еще раз напишу, не удивлюсь, если преподаватель докопается до этого кода. Я более чем уверен, что он(а) скажет "я так не давал(а). Пиши так, как надо либо объясни, что это такое". с вторым вопрошающий не справиться.
Галочка "подтверждения прочтения" - вселенское зло.
min@y™

min@y™ (статус: Доктор наук), 13 сентября 2009, 12:37 [#66]:

TMatrix = array of array of Integer; - динамический двумерный массив.
Cardinal - целое без знака. Для 32 битных систем: 0...4294967295
if m + n = 0 - это почему так? а если m или n будут меньше нуля? - m и n не могут быть меньше нуля.
Exit - выход из функции/процедуры.
SetLength(X, n, m) - установка размеров массива равными m на n (m строк, n столбцов).
High(X) - высота столбцов массива.
High(X[0]) - чем отличается от предыдущего? - длина строк массива.
Result:= -MaxInt - 1; - Result:= -2147483648;
{$B-} - отключение полной обработки компилятором логических операций
if Length(X) = 0 - если массив пустой...
if Length(X[0]) - если первая строка массива пустая...

Что ещё непонятно?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
min@y™

min@y™ (статус: Доктор наук), 13 сентября 2009, 12:40 [#67]:

Цитата (I{ () T):


в делфи только 2 года.


НЕ ВЕРЮ!!! © Станиславский.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Егор

Егор (статус: 10-ый класс), 13 сентября 2009, 12:41 [#68]:

min@y™:
твой код безупречен. но для тебя, для уровня ПРОГРАММИСТА. с этим согласны все - и Вадим К.
мы тебе пишем о том, что твой код неприемлем для вопрошающего.
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.
Егор

Егор (статус: 10-ый класс), 13 сентября 2009, 12:42 [#69]:

to min@y™:
"2 года в дельфи - не верю" - это же ШКОЛЬНИК!!!
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.
I{ () T

I{ () T (статус: Посетитель), 13 сентября 2009, 12:42 [#70]:

кстати, а в чем преимущество функции над процедурой? и где ее удобнее рпименять например?
у меня нет мании величия...Великие люди этим не страдают)))
.......лень порождает ненависть к жизни......
I{ () T

I{ () T (статус: Посетитель), 13 сентября 2009, 12:44 [#71]:

Oh, my God! я учусь в 11 классе. делфи тольк ов прошлом году начал изучать. раньше не знал что это такое. в чем проблема то? я знаю что я школьник.
у меня нет мании величия...Великие люди этим не страдают)))
.......лень порождает ненависть к жизни......
Егор

Егор (статус: 10-ый класс), 13 сентября 2009, 12:45 [#72]:

функцию удобнее применять в выражении. например, нужно тебе подсчитать сумму двух синусов (sin):

процедуры:
sin(x,a); // заносим в а sin числа х
sin(y,b); // заносим в b sin числа y
c:=a+b;

функции:
с:=sin(x)+sin(y);

удобнее во многих случаях.
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.
I{ () T

I{ () T (статус: Посетитель), 13 сентября 2009, 12:47 [#73]:

to Егор
спасибо=) то есть функция действует так скажем по единственной формуле для единственного значения7 в то время как для процедуры так скажем разжевывать надо все?
у меня нет мании величия...Великие люди этим не страдают)))
.......лень порождает ненависть к жизни......
min@y™

min@y™ (статус: Доктор наук), 13 сентября 2009, 12:48 [#74]:

Цитата (Егор):


"2 года в дельфи - не верю" - это же ШКОЛЬНИК!!!

Блин, 2 года в Delphi и не знать, что такое Exit или Cardinal - это ж пипец!

Цитата (I{ () T):


а в чем преимущество функции над процедурой? и где ее удобнее рпименять например?

У функции преимущество - это возврящаемое значение. Поэтому функции можно вставлять в выражения.
var 
  S, S1: string;
  L: Integer;
begin
  S:= '12345';
  S1:= '67890';
  L:= Length(S);
  if Length(S) = 0
    then ...
  L:= Length(S) + Length(S1) * 25; // Понял, да?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
I{ () T

I{ () T (статус: Посетитель), 13 сентября 2009, 12:51 [#75]:

to min@y а это ты кому?:DDD))) ну примерно понял, спасибо. а вот например можно использовать функцию чтобы найти количество элементов в матрице, которые больше среднего арифметич. всех элементов?
у меня нет мании величия...Великие люди этим не страдают)))
.......лень порождает ненависть к жизни......
Егор

Егор (статус: 10-ый класс), 13 сентября 2009, 12:54 [#76]:

to min@y™:
если изучать дельфи "в школе", то это нормально.

а если изучать самому, по интернету, книгам, у знакомых и т.д. - то, естественно, это слишком мало.
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.
Егор

Егор (статус: 10-ый класс), 13 сентября 2009, 12:57 [#77]:

конечно можно - называешь её, например, CountElem, передаёшь ей массив и - вуаля:
...
writeln('kol-vo: ', CountElem(a));
...
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.
Вадим К

Вадим К (статус: Академик), 13 сентября 2009, 12:59 [#78]:

вообще то Length() не совсем функция. это magic function... но работает как функция:)

Цитата:

а вот например можно использовать функцию чтобы найти количество элементов в матрице, которые больше среднего арифметич. всех элементов?

ну что же тут думать? пишем одну функцию, которая считает среднее арифметическое, а потом вторую, которая считает, сколько элементов в массиве больше переданного значения. А теперь просто соединяем вместе:)
Галочка "подтверждения прочтения" - вселенское зло.
min@y™

min@y™ (статус: Доктор наук), 13 сентября 2009, 13:04 [#79]:

Я в программе комментариев понаписал, почитай.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
I{ () T

I{ () T (статус: Посетитель), 13 сентября 2009, 13:15 [#80]:

program Project1;

{$APPTYPE CONSOLE}

uses
SysUtils;
CONST n=5;m=5;
TYPE TMas=ARRAY[1..n,1..m] of integer;
var i,j:integer; a:TMas;

//------ВВОД массива-----
PROCEDURE INPUT(var a:TMas);
var i,j:integer;
BegiN
Randomize;
for i:=1 to n do
for j:=1 to m do
a[i,j]:=Random(25)-10;
WRITELN('pervonachalnyi massiv:')
EnD;

//------ВЫВОД массива-----------
PROCEDURE OUTPUT{output(1,n,1,m)}(i1,i2,j3,j4:integer);
var i,j:integer;
BegiN {вывод TMas с возможностью менять длину}
for i:=i1 to i2 do
bEGIN
writeln;
for j:=j3 to j4 do
write(a[i,j]:4,' ');
eND;
EnD;
function arifm(const a:tmas; sr:integer):integer;
var i,j:integer;
begin
sr:=0;
for i:=1 to n do
for j:=1 to m do
sr:=a[i,j]+sr;
writeln('sr=',sr);
end;
function kolvo(const a:tmas; k,sr:integer ):integer;
var i,j:integer;
begin
for i:=1 to n do
for j:=1 to m do
if a[i,j]>sr then inc(k);
writeln('kol-vo=',k);
end;
begin
input(a);
output(1,n,1,m);
kolvo(a);
readln;
end.
скажите пожалуйста, что не правильно? а вот например можно использовать функцию чтобы найти количество элементов в матрице, которые больше среднего арифметич. всех элементов?
у меня нет мании величия...Великие люди этим не страдают)))
.......лень порождает ненависть к жизни......

Страницы: [« Предыдущая] [1] [2] [3] [4] [5] [Следующая »]

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 26 апреля 2026, 02:06
Выполнено за 0.03 сек.