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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.12.2010, 22:58   #1
Dimani4
Пользователь
 
Регистрация: 30.11.2010
Сообщений: 11
По умолчанию Процедуры, Паскаль, не могу заставить вернуть значение в программу.

Добрый вечер всем.
Есть задача: Составить программу, с использованием подпрограмм процедуры для вычисления максимального и минимального элементов 5ого столбца матрицы(20;15) и определения номера строк в которых состоят эти элементы.
для удобства я сделал размерность матрицы n*l и задавал значения 3*3. вот что получилось:
Код:
program t;
type
    Massiv = array[1..50, 1..50] of real;
var
i,j,n,l,Nmax,Nmin:integer;   {Nmax и Nmin номера строк макс и мин значения соотвественно}
min,max:real;                 {сами мин и макс значения}
x: Massiv;
procedure Poisk(Var m,Mmin,Mmax:integer; Var maxim,minim:real; Var y:massiv);  {впоследствиии N - будет заместо m, Nmin заместо Mmin и тд }
begin
J:=5; minim:=y[1,5]; Mmin:=1;
for i:=2 to M do
begin
    if y[i,5]<minim then
begin
    minim:=y[i,5];Mmin:=i;
end;
end;
     J:=5; maxim:=y[1,5]; Mmax:=1;
       for i:=2 to m do
begin
    if y[i,5]>maxim then
begin
     maxim:=y[i,5];Mmax:=i;
end;
end;
end;
Begin
    Writeln('vvedite n,l');Readln(n,l);
     For i:=1 to n do
       For j:=1 to l do
begin
    Write('x=');Read(x[i,j]); end;
     poisk(n,Nmin,Nmax,max,min,x);
      for i:=1 to n do
begin
     for j:=1 to l do
       Write(x[i,j]:12:2); writeln; end;
       writeln('Min=',min,' xmin=',Nmin,' max=',max,'xmax=',Nmax);end.
Результат был таким:
Код:
vvedite n,l
3
3
x=-3
x=-5
x=1
x=3
x=0
x=2
x=1
x=6
x=4
       -3.00       -5.00        1.00
        3.00        0.00        2.00
        1.00        6.00        4.00
Min=0 xmin=1 max=0xmax=1
завтра сдавать. прошу помощи.

Последний раз редактировалось Dimani4; 21.12.2010 в 00:43.
Dimani4 вне форума Ответить с цитированием
Старый 20.12.2010, 23:04   #2
iBuTTHead
Пользователь
 
Регистрация: 05.11.2010
Сообщений: 35
По умолчанию

Что надо то.
iBuTTHead вне форума Ответить с цитированием
Старый 20.12.2010, 23:09   #3
Dimani4
Пользователь
 
Регистрация: 30.11.2010
Сообщений: 11
По умолчанию

прошу найти ошибку. в результате выводится матрица которую я задаю, а программа не считает мин и макс значения и строки соответственно тоже не выводит, точнее как мне кажется, в процедуре то задано верно, чтобы искалось, только эти значения в программу не возвращаются
Dimani4 вне форума Ответить с цитированием
Старый 20.12.2010, 23:14   #4
iBuTTHead
Пользователь
 
Регистрация: 05.11.2010
Сообщений: 35
По умолчанию

Перед параметрами в процедуре поставьте var
procedure Poisk(Var m,Mmin,Mmax:integer; var maxim,minim:real; y:massiv);
iBuTTHead вне форума Ответить с цитированием
Старый 20.12.2010, 23:20   #5
Dimani4
Пользователь
 
Регистрация: 30.11.2010
Сообщений: 11
По умолчанию

я может вас не так понял. но у меня же стоит Var в процедуре

Цитата:
procedure Poisk(Var m,Mmin,Mmax:integer; maxim,minim:real; y:massiv);
Dimani4 вне форума Ответить с цитированием
Старый 21.12.2010, 00:30   #6
ACE Valery
Сама себе режиссер
Старожил
 
Аватар для ACE Valery
 
Регистрация: 27.04.2007
Сообщений: 3,365
По умолчанию

у вас var стоит только перед первой группой переменной. Поставьте перед каждой, то есть
procedure Poisk(Var m,Mmin,Mmax:integer; Var maxim,minim:real; Var y:massiv);
Если я вас напрягаю или раздражаю, вы всегда можете забиться в угол и поплакать
ACE Valery вне форума Ответить с цитированием
Старый 21.12.2010, 00:36   #7
Dimani4
Пользователь
 
Регистрация: 30.11.2010
Сообщений: 11
По умолчанию

ACE Valery к сожалению на результат не повлияло. я конечно понимаю что пол первого ночи, и врятли у кого то мозги до сих пор хорошо работают. но прошу, может быть еще посмотрите.

может быть мне пояснения, коментарии написать? чтобы вам понятно было чего я хочу какой строчкой достичь. все таки в чужом коде копаться не легко.

ответы всегда один и тот же 0 1 0 1

Последний раз редактировалось Dimani4; 21.12.2010 в 00:39.
Dimani4 вне форума Ответить с цитированием
Старый 21.12.2010, 00:51   #8
andrewpalkin
Форумчанин
 
Аватар для andrewpalkin
 
Регистрация: 23.11.2010
Сообщений: 458
По умолчанию

Цитата:
Сообщение от Dimani4 Посмотреть сообщение
... и задавал значения 3*3. вот что получилось:
Как ты можешь искать что-то в 5 столбце , если ты размер задал 3х3
--- Если я вам помог , то помогите и вы мне . Не просто просите решить задачу , а пробуйте ее сами решить ! Я не пишу программы с нуля , я помогаю поправить код ! ---
andrewpalkin вне форума Ответить с цитированием
Старый 21.12.2010, 00:57   #9
Dimani4
Пользователь
 
Регистрация: 30.11.2010
Сообщений: 11
По умолчанию

andrewpalkin спасибо большое, так лажанулся.

просто изначально планировалось так: что задаю матрицу нужного размера(хоть 20*20) а потом ищу макс и мин в любом заданном столбце - пробывал это все обставить переменными получилось громоздко, и решил не делать сверх нормы, а только как по задаче, начал стирать, убирать лишние переменные и что-то и забыл что теперь столбец фиксированный а не привязан к переменным.

в любом случае спасибо еще раз, второй раз меня с задачами выручаете.
Dimani4 вне форума Ответить с цитированием
Старый 21.12.2010, 00:58   #10
andrewpalkin
Форумчанин
 
Аватар для andrewpalkin
 
Регистрация: 23.11.2010
Сообщений: 458
По умолчанию

У тебя нормальный код был , но я его немного поправил и он все нормально считает , вот код :

Код:
program t;
type
    Massiv = array[1..50, 1..50] of real;
var
  i,j,n,l,Nmax,Nmin:integer;  {Nmax и Nmin номера строк макс и мин значения соотвественно}
  min,max:real;                 {сами мин и макс значения}
  x: Massiv;
procedure Poisk(Var m,Mmin,Mmax:integer; Var maxim,minim:real; Var y:massiv);  {впоследствиии N - будет заместо m, Nmin заместо Mmin и тд }
var i,j,n,l,Nmax,Nmin:integer;

begin
  
  J:=5; minim:=y[1,5]; Mmin:=1;
  for i:=2 to M do
    begin
      if y[i,5]<minim then
        begin
          minim:=y[i,5];Mmin:=i;
        end;
    end;
    J:=5; maxim:=y[1,5]; Mmax:=1;
    for i:=2 to m do
      begin
        if y[i,5]>maxim then
          begin
            maxim:=y[i,5];Mmax:=i;
          end;
      end;
end;

Begin
  Writeln('vvedite n,l');Readln(n,l);
  For i:=1 to n do
    For j:=1 to l do
      begin
        {Write('x=');Read(x[i,j]); }
        x[i,j] := Random(300);
      end;
  poisk(n,Nmin,Nmax,max,min,x);
  for i:=1 to n do
    begin
      for j:=1 to l do
        Write(x[i,j]:12:2); writeln; 
    end;
    writeln('Min = ',min,' : xmin= ',Nmin,' ; max=',max,' : xmax= ',Nmax);
end.
Вот результат вывода , тебе просто надо вводить количество столбцов не меньше 5 . Сейчас числа заполняются случайно .

Код:
vvedite n,l
10 10
       91.00       74.00      277.00      256.00      214.00       48.00      170.00      267.00      253.00      267.00
       24.00      112.00       56.00       24.00       44.00       14.00      115.00      233.00      159.00       74.00
      101.00      156.00       84.00      255.00      285.00      227.00       43.00       31.00      128.00      174.00
       56.00      220.00      289.00       39.00       90.00       65.00       28.00      197.00       57.00      196.00
      194.00       48.00      206.00      117.00       96.00      164.00       80.00       33.00      210.00      185.00
       23.00      258.00      117.00       89.00      294.00      234.00      290.00       22.00      271.00      287.00
        5.00      138.00      138.00       79.00      210.00      104.00      122.00       16.00      234.00      279.00
      285.00      217.00      175.00      262.00      179.00       53.00      250.00      266.00      158.00      121.00
      146.00       10.00      120.00      243.00      150.00       98.00      103.00      199.00       45.00      155.00
       74.00        6.00      226.00       70.00      191.00       55.00      209.00      126.00      206.00      292.00
Min = 44 : xmin= 2 ; max=294 : xmax= 6
--- Если я вам помог , то помогите и вы мне . Не просто просите решить задачу , а пробуйте ее сами решить ! Я не пишу программы с нуля , я помогаю поправить код ! ---
andrewpalkin вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как вернуть значение РНР-переменной в программу? lastalert Работа с сетью в Delphi 4 14.11.2010 17:06
вернуть значение динамической ячейки Galbert Microsoft Office Excel 10 10.11.2010 09:30
Не могу вернуть float из процедуры на ассемблере в си yukas Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 9 14.05.2010 04:08
Как вернуть значение, используя функцию поиска позиции и смещения? PARTOS Microsoft Office Excel 7 28.12.2009 12:18
как в базе данных вернуть текстовое значение в DBGrid вместо числового anija05 Общие вопросы Delphi 0 30.05.2009 14:44