Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.12.2013, 14:21   #1
shalgan
Пользователь
 
Регистрация: 12.11.2013
Сообщений: 68
По умолчанию как из функции переделать в процедуру?

написал программу,все работает,все как надо,но не знаю как передалать из функции в процедуру объясните пожалуйста.Делфи7.и Сам принцип перехода ,из процедуры в функцию и обратно


Код:
type mas=array[1..100]of integet
function sort(a:mas;i,imax,b:integer): integer;
begin
imax:=1;
for i:=1 to b do
if a[i]>a[imax]then imax:=i;
writeln('maksimalnui element massiva=',a[imax]);
writeln('on naxoditza pod nomerom',imax); Readln;
end;
var x,y:mas;
n:integer;
j,jmax:integer;

begin
writeln('vvedite kolicestvo elementov massiva x.Ot 0do 80');
readln(n);
writeln('vvedite cisla massiva x');
for j:=1 to n do
read(x[j]);
jmax:=sort(x,j,jmax,n);
writeln('vvedite kolicestvo elementov massiva y.Ot 0 do 70');
readln(n);
writeln('vvedite cisla massiva y');
for j:=1 to n do
read(y[j]);
jmax:=sort(y,j,jmax,n);
Readln;
end.


___________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE]
(кнопочка на панели форматирования с решёточкой #)
Не забывайте об этом!

Модератор.

Последний раз редактировалось Serge_Bliznykov; 24.12.2013 в 14:39.
shalgan вне форума Ответить с цитированием
Старый 24.12.2013, 14:43   #2
VIK_aka_TOR
Участник клуба
 
Аватар для VIK_aka_TOR
 
Регистрация: 30.01.2011
Сообщений: 1,578
По умолчанию

Код:
type
  mas = array[1..100]of integer;

function sort(a: mas; b: integer) : integer;
var 
  i , imax: integer;
begin
  imax := 1;
  for i := 1 to b do
    if a[i] > a[imax] then 
  imax := i;
  sort := imax;
end;

var
  x, y: mas;
  n: integer;
  j: integer;

begin
  writeln('vvedite kolicestvo elementov massiva x.Ot 0do 80');
  readln(n);
  writeln('vvedite cisla massiva x');
  for j := 1 to n do
    readln(x[j]);
 
 writeln('maksimalnui element massiva x =', x[sort(x,n)]);
 writeln('on naxoditza pod nomerom ', sort(x,n));
 
  writeln('vvedite kolicestvo elementov massiva y.Ot 0 do 70');
  readln(n);
  writeln('vvedite cisla massiva y');
  for j := 1 to n do
    readln(y[j]);

 writeln('maksimalnui element massiva y =', y[sort(y,n)]);
 writeln('on naxoditza pod nomerom ', sort(y,n)); 
 Readln;

end.
пишу код не только за печеньки
VIK_aka_TOR вне форума Ответить с цитированием
Старый 24.12.2013, 14:47   #3
shalgan
Пользователь
 
Регистрация: 12.11.2013
Сообщений: 68
По умолчанию

Цитата:
Сообщение от VIK_aka_TOR Посмотреть сообщение
Код:
type
  mas = array[1..100]of integer;

function sort(a: mas; b: integer) : integer;
var 
  i , imax: integer;
begin
  imax := 1;
  for i := 1 to b do
    if a[i] > a[imax] then 
  imax := i;
  sort := imax;
end;

var
  x, y: mas;
  n: integer;
  j: integer;

begin
  writeln('vvedite kolicestvo elementov massiva x.Ot 0do 80');
  readln(n);
  writeln('vvedite cisla massiva x');
  for j := 1 to n do
    readln(x[j]);
 
 writeln('maksimalnui element massiva x =', x[sort(x,n)]);
 writeln('on naxoditza pod nomerom ', sort(x,n));
 
  writeln('vvedite kolicestvo elementov massiva y.Ot 0 do 70');
  readln(n);
  writeln('vvedite cisla massiva y');
  for j := 1 to n do
    readln(y[j]);

 writeln('maksimalnui element massiva y =', y[sort(y,n)]);
 writeln('on naxoditza pod nomerom ', sort(y,n)); 
 Readln;

end.


Спасибо за редактирование)Программа стала выглядеть намного красивее, но суть проблемы остается(
shalgan вне форума Ответить с цитированием
Старый 24.12.2013, 14:47   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

да Вы не переживайте, Вы всё равно функцию sort написали НЕВЕРНО!
Она у Вас возвращает МУСОР.

Вот Вы пишете:
Цитата:
Код:
jmax:=sort(y,j,jmax,n);
и как Вы думаете, что у Вас будет в переменной jmax ?!!


UPDATE Внимание!
Это замечание не относится к коду функции, написанной VIK_aka_TOR!!
Там значение функции возвращается!




а из функции процедуру делаем так:
слово procedure меняем на слово function
возвращаемый тип (то, что после двоеточия указывается после списка параметров выкидываем напрочь.
ну и возвращаемое значение в теле функции либо возвращаем через параметер-переменную (со словом var в списке параметров), либо, если нам не нужно возвращаемое значение - то убираем совсем.

примерно так:
Код:
procedure sort(const a:mas; const b:integer; var imax:integer);
var i : integer;
begin
  imax:=1;
  for i:=1 to b do
      if a[i]>a[imax] then imax:=i;
end;
....

sort(y,n,jmax);
writeln('maksimalnui element massiva=',y[jmax]);
writeln('on naxoditza pod nomerom',jmax); 
Readln;
...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 24.12.2013, 14:52   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Код:
procedure sort(var a:mas;i,imax,b:integer);
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 24.12.2013, 15:08   #6
shalgan
Пользователь
 
Регистрация: 12.11.2013
Сообщений: 68
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
да Вы не переживайте, Вы всё равно функцию sort написали НЕВЕРНО!
Она у Вас возвращает МУСОР.

Вот Вы пишете:

и как Вы думаете, что у Вас будет в переменной jmax ?!!


UPDATE Внимание!
Это замечание не относится к коду функции, написанной VIK_aka_TOR!!
Там значение функции возвращается!




а из функции процедуру делаем так:
слово procedure меняем на слово function
возвращаемый тип (то, что после двоеточия указывается после списка параметров выкидываем напрочь.
ну и возвращаемое значение в теле функции либо возвращаем через параметер-переменную (со словом var в списке параметров), либо, если нам не нужно возвращаемое значение - то убираем совсем.

примерно так:
Код:
procedure sort(const a:mas; const b:integer; var imax:integer);
var i : integer;
begin
  imax:=1;
  for i:=1 to b do
      if a[i]>a[imax] then imax:=i;
end;
....

sort(y,n,jmax);
writeln('maksimalnui element massiva=',y[jmax]);
writeln('on naxoditza pod nomerom',jmax); 
Readln;
...


Спасибо большое,переделал,все получилось,очень помогли)
shalgan вне форума Ответить с цитированием
Старый 24.12.2013, 15:16   #7
VIK_aka_TOR
Участник клуба
 
Аватар для VIK_aka_TOR
 
Регистрация: 30.01.2011
Сообщений: 1,578
По умолчанию

Цитата:
Сообщение от shalgan Посмотреть сообщение
Спасибо за редактирование)Программа стала выглядеть намного красивее, но суть проблемы остается(
да ладно?... попросту нужно было менять не только функцию, но и в самом теле программы, момент с возвращением функции...
мельком тестил было норм... может где и пригрешил логикой...

UPD

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

Последний раз редактировалось VIK_aka_TOR; 24.12.2013 в 15:22.
VIK_aka_TOR вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужна помощь! Передача в процедуру функции как па.раметра Pasana Помощь студентам 2 06.11.2013 08:17
как процедуру идля текстового режима переделать для графического режима sanchoys Паскаль, Turbo Pascal, PascalABC.NET 4 29.05.2013 20:44
задача на с. указатели функции строки(хз как переделать) нонфактор Помощь студентам 1 12.01.2010 16:46
функцию переделать на процедуру morgan996 Помощь студентам 2 08.01.2010 13:08
Переделать процедуру AidarBik Общие вопросы Delphi 12 22.05.2008 14:59