Экспертная система 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] [Следующая »]

I{ () T

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

скажите пожалуйста, можно ли вообще матрицу разложить на одномерные масс, то бишь разбита таблицу в линию элементов, и как это можно сделать
у меня нет мании величия...Великие люди этим не страдают)))
.......лень порождает ненависть к жизни......
min@y™

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

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


скажите пожалуйста, можно ли вообще матрицу разложить на одномерные масс, то бишь разбита таблицу в линию элементов, и как это можно сделать


TYPE TMas=ARRAY[1..n,1..m] of integer;
     TVector = array[1..n * m] of Integer;
 
// Разложение матрицы в одномерный массив
function MatrixToVector(const M: TMas): TVector;
var
  i, j, k: Integer;
begin
  k:= 1;
  for i:= 1 to n do
    for j:= 1 to m do
      begin
        Result[k]:= M[i, j];
        Inc(k);
      end;
end;
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
I{ () T

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

а что это за цифры? как их объяснить училке Result:= -2147483648;???
у меня нет мании величия...Великие люди этим не страдают)))
.......лень порождает ненависть к жизни......
Егор

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

-2147483648 - это наименьшее число, которое может принимать тип integer;
на самом деле можно было бы в вашем случае написать Result:=25-10; - это минимальный элемент, который есть у вас в массиве.
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.
I{ () T

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

спасибо за ответ=)
у меня нет мании величия...Великие люди этим не страдают)))
.......лень порождает ненависть к жизни......
I{ () T

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

а Result это стандарстная переменная? она почему то работает без объявления в типах данных
у меня нет мании величия...Великие люди этим не страдают)))
.......лень порождает ненависть к жизни......
min@y™

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

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


спасибо за ответ=)


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

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

Result - это стандартная переменная, которая автоматически появляется в любой функции. тип она имеет тот же, что и функция и содержит то, что должна вернуть функция.
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.
min@y™

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

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


а Result это стандарстная переменная? она почему то работает без объявления в типах данных


Учи матчасть.

Локальная переменная Result в функции имеет специальное назначение. В каждой функции языка Object Pascal существует локальная переменная с этим именем, предназначенная для размещения возвращаемого значения. Обратите внимание на то, что, в отличие от языков С и C++, выполнение функции не прекращается при присвоении значения переменной Result. Кроме того, вернуть значение из функции можно также путем присвоения значения переменной, имеющей то же имя, что и данная функция. Это стандартный синтаксис языка Pascal, сохранившийся от его предыдущих версий. При использовании в теле функции переменной с ее именем не забывайте, что существуют большие отличия в обработке этого имени — все зависит от того, где оно расположено — в левой части оператора присвоения или же в любом другом месте текста функции. Если имя функции указано в левой части оператора присвоения, то предполагается, что назна чается возвращаемое функцией значение. Во всех других случаях предполагается, что осуществляется рекурсивный вызов этой функции!

Учтите, что использование переменной Result недопустимо при сброшенном флажке опции Extended Syntax, расположенном во вкладке Compiler диалогового окна Project Options, или при указании директивы компилятора {$х-}.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
I{ () T

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

про пиво, пока к сожалению не в состоянии. ученик только. эту матчасть я знаю=) просто в нашей психшколе еще ее не проходят, и училке над чтоб типа мы нормально "на школьном языке делфЫ" писали. чем можно заметь эту переменную?
у меня нет мании величия...Великие люди этим не страдают)))
.......лень порождает ненависть к жизни......
min@y™

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

Не надо ничего менять. Скажи учителке, что ты дома читал интернет и в нём это нашёл. Пусть поставит тебе 5+ и напишет в дневнике "Харошый малчег! Тагдиржать!". :)))
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
I{ () T

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

=))))) у меня нет дневника=) имхо нафиг не нужен он=))))) а можно функцию эту перевести в процедуру?
у меня нет мании величия...Великие люди этим не страдают)))
.......лень порождает ненависть к жизни......
Косолапов Дмитрий Юрьевич

Косолапов Дмитрий Юрьевич (статус: 8-ой класс), 13 сентября 2009, 09:59 [#13]:

Вместо подобной инициализацией Result'а его можно инициализировать первым элементом матрицы.
min@y™

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

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


а можно функцию эту перевести в процедуру?

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

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

по хорошему, вообще бы код весь переписать - хотя бы в начале убрать объявление переменных i и j - оно не нужно.
переделать в процедуру можно, но зачем?

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

WRITELN('max(a[i])=', max);
end;
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.
I{ () T

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

вообще как то не получается дружить с функциями. процедуры больше по душе. а может я функции просто до конца не понял:))))
у меня нет мании величия...Великие люди этим не страдают)))
.......лень порождает ненависть к жизни......
min@y™

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

Поздравляю с праздником всех, граждане коллеги!
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Егор

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

в си и с++ вообще нет процедур - одни функции :)
что в них трудного? те же процедуры, только значение возвращают. sin-ом пользовался? (хотя, если школьник, то, скорее всего, нет). корень из числа - sqr. или модуль - abs. это же функции: x:=sin(y), r:=sqr(x*x+y*y), a:=abs(b) и т.д.
у min@y™ было бы так:
maxX:=Maximum(a);
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.
min@y™

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

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


а может я функции просто до конца не понял:))))


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

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

понятно что функция может только одно значение вывести, в то время как процедура- сколько душа пожелает. но,Result:= -2147483648; вот заменяю в коде это на max:=random(25)-10 это. и постоянно вылазит ответ 15. почему это так? то есть переменной Result можно пользоваться когда угодно? например эксперты при сдаче егэ не смогут придраться к ней? а заменить хочу Result:= -2147483648; так как не очень выглядит, ДЛЯ ШКОЛЬНОГО написания.
Заранее спасибо за ответы:)
у меня нет мании величия...Великие люди этим не страдают)))
.......лень порождает ненависть к жизни......

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

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

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:50
Выполнено за 0.04 сек.