Помощь - Поиск - Пользователи - Календарь
Полная версия: Описание в подпрограмме
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
irena
Вот код:

Код

const
arr: array[ 1 .. 100 ] of integer =

& #40;1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,2
9,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,
56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82
,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100);


function minIndex: integer;
var
  i: integer;
  min: integer;
begin
  min := maxInt;
  for i := 1 to 100 do
    if min > arr[i] then
      begin
        min := arr[i]; minIndex := i
      end;
end;

function maxIndex: integer;
var
  i: integer;
  max: integer;
begin
  max := - maxInt;
  for i := 1 to 100 do
if max < arr[i] then
begin
max := arr[i]; maxIndex := i
end;
end;


как описать массив arr[i] в самой подпрограмме?
volvo
В приведенном коде 2 подпрограммы... В какой именно описать? И почему именно в подпрограмме, а не там, где это описано сейчас?
GoodWind
а зачем ?? blink.gif
irena
Цитата(volvo @ 2.11.04 20:53)
В приведенном коде 2 подпрограммы... В какой именно описать? И почему именно в подпрограмме, а не там, где это описано сейчас?

В обоих. Почему не знаю, у нас такие правила, в таком виде не принимают.
volvo
Глупость совершеннейшая ... blink.gif

Код

function minIndex: integer;
const
arr: array[ 1 .. 100 ] of integer =
(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,
21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,
41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,
61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,
81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100);
var
 i: integer;
 min: integer;
begin
 min := maxInt;
 for i := 1 to 100 do
   if min > arr[i] then
     begin
       min := arr[i]; minIndex := i
     end;
end;

function maxIndex: integer;
const
arr: array[ 1 .. 100 ] of integer =
(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,
21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,
41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,
61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,
81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100);
var
 i: integer;
 max: integer;
begin
 max := - maxInt;
 for i := 1 to 100 do
if max < arr[i] then
begin
max := arr[i]; maxIndex := i
end;
end;
Amro
Цитата
Глупость совершеннейшая ...
Зато красиво то как ! :D :p2:
Цитата
В обоих. Почему не знаю, у нас такие правила, в таком виде не принимают.

irena Интересно где вас такому обучают?
irena
А можно сделать что бы массив с числовой последовательностью использовался в коде только один раз или же нет? числа в последовательности могут идти не попорядку, так что циклом его задать не получиться. Можно ли уйти от констант?
volvo
irena
Все дело в том, что это не совсем константы (а вернее - совсем не константы)... Это переменные с начальным значением. Ну, а от переменных уйти вряд ли удастся...

Так что вариант, который был в самом начале - наиболее оптимальный :yes:
Amro
Может ты имеешь ввиду сделать так?! blink.gif
В самой программе массив можно задать так
Код
const
n=100;
type
 atype = array[1..n] of integer;
const
 arr: atype =
 (1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,
 21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,
 41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,
 61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,
 81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100);
Функции можно переписать таким образом ........
Код
function minIndex(arr :atype): integer;

Код
function maxIndex(arr : atype): integer;

Когда будешь их вызывать, просто посылай в ф-цию свой массив arr
"minIndex(arr)"
irena
Amro похоже что так
volvo
irena
Небольшое уточнение... Это называется "Передать в подпрограмму как параметр"
:D
Amro
Цитата
Передать в подпрограмму как параметр

По научному это звучит именно так :D
Digitalator
Цитата
Все дело в том, что это не совсем константы (а вернее - совсем не константы)... Это переменные с начальным значением


После слова const??
эээ... ну если это переменные, попробуйте изменить их значения. удачи! rolleyes.gif

ЗЫ: если измените, не забудьте показать код (тока без асма плиз)
volvo
Я не имею в виду Дельфи...

Код

const
arr: array[ 1 .. 100 ] of integer = ( {данные} );


В Турбо-Паскале 7.0 значение меняется на ура ... Можете проверить. Удачи.

Пример: ( только для ТР )
Код

const
 a: integer = 9;

begin
 writeln( 'a = ', a ); { a = 9 }
 a := 4;
 writeln( 'a = ', a ); { OOPS! }
end.
Digitalator
хммunsure.gif .. действительно, правда только для типизированных -
Цитата
Typed constant declarations are used to declare initialized variables.
Unlike an untyped constant, the declaration of a typed constant specifies
both the type and the value of the constant. Typed constants can be modified
just like variables.


для нетипизированных ничего не выйдет....

PS: имхо не стоит засорять стэк - надо передавать указатель
Altair
Цитата
если измените, не забудьте показать код (тока без асма плиз)

можно без асма, если указать какую-нибудь переменную по адресу константы:

Код

const
n:byte=10;
var
b:byte absolute n;
begin
b:=2;
writeln(n); {2}
end.
Таким образом можно любый константы менять в процессе исполнения программы!
Цитата
удачи!

И тебе! :D
APAL
Я скучаю по Бейсику, в котором пользователь сам мог вводить размерность массива в процессе выполнения программы...

Вот бы на пасе работал такой код без ошибок:
Код
const
n:byte=10;
var
b:byte absolute n;
 m : array [1..n] of Byte;
begin
b:=20;
writeln(n); {2}
 m[19]:=0;
end.
Altair
Абалдеть! rolleyes.gif
Это надо получше изучить ....
супер... я не знал что так можно и массив обмануть ...
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.