|
Вопрос # 3 182/ вопрос открыт / |
|
Приветствую, уважаемые эксперты!
Дана матрица А(n,m), найти ее наибольший элемент(первый по порядку если их несколько)
написал код..но как то странно выводит наиб элемент, рандомом как то( помогите пожалуйста.
Приложение: Переключить в обычный режим- uses
- SysUtils;
-
- CONST n=5;m=5;
- TYPE TMas=ARRAY[1..n,1..m] of integer;
- var i,j,max: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;
-
- for i:=i1 to i2 do
- bEGIN
- writeln;
- for j:=j3 to j4 do
- write(a[i,j]:4,' ');
- eND;
- EnD;
-
- PROCEDURE MAXIMUM( var a:TMas);
- var i,max:integer;
- BEGIN
- for i:=1 to n do
- if a[i,j]>0 then max:=a[i,j];
- for i:=1 to n do
- if a[i,j]>max then
- max:=a[i,j];
- writeln;
- WRITELN('max(a[i])=',max);
- END;
-
-
- begin
- input(a);
- output(1,n,1,m);
- maximum(a);
-
- readln;
- end.
 |
Вопрос задал: 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 (статус: Посетитель), 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™ (статус: Доктор наук), 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™ (статус: Доктор наук), 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 (статус: Посетитель), 13 сентября 2009, 12:42 [#70]:
кстати, а в чем преимущество функции над процедурой? и где ее удобнее рпименять например?
у меня нет мании величия...Великие люди этим не страдают)))
.......лень порождает ненависть к жизни......
|
|
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 (статус: Посетитель), 13 сентября 2009, 12:47 [#73]:
to Егор
спасибо=) то есть функция действует так скажем по единственной формуле для единственного значения7 в то время как для процедуры так скажем разжевывать надо все?
у меня нет мании величия...Великие люди этим не страдают)))
.......лень порождает ненависть к жизни......
|
|
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 (статус: Посетитель), 13 сентября 2009, 12:51 [#75]:
to min@y а это ты кому? DD))) ну примерно понял, спасибо. а вот например можно использовать функцию чтобы найти количество элементов в матрице, которые больше среднего арифметич. всех элементов?
у меня нет мании величия...Великие люди этим не страдают)))
.......лень порождает ненависть к жизни......
|
|
Егор (статус: 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™ (статус: Доктор наук), 13 сентября 2009, 13:04 [#79]:
Я в программе комментариев понаписал, почитай.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
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] [Следующая »]
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|