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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.12.2016, 00:28   #1
emalf
 
Регистрация: 15.12.2016
Сообщений: 6
Вопрос Подпрограммы-процедуры в Delphi. Найти наименьшие положительные элементы и их порядковые номера в массиве

Условие программы:Найти наименьшие положительные элементы и их порядковые номера массивов X(N), Y(M)

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

Код:
Program Proc1;
{$APPTYPE CONSOLE}
uses windows, sysutils;
type vector=array[1..20] of real;
var a,b,c:vector;
i,k:integer;
min:real;
nmin:integer;
procedure vvod(l:integer;var x:vector);
var j:integer;
begin
for j:=1 to l do
begin
x[j]:=(random(10)-5)/2;
write(x[j]:5:1);
end;
writeln;
end;
procedure min1(x:vector;l:integer; var rmin:real; var n:integer);
var j:integer;
begin
rmin:=x[1]; n:=1;
 for j:=1 to l do
if x[j]>0 then rmin:=x[j];
for j:=2 to l do
if (x[j]>0) then
begin
rmin:=x[j]; n:=j;
end;
end;
begin
SetConsoleCP(1251);
SetConsoleOutPutCP(1251);
randomize;
write ('Vvedite razmer pervogo massiva x: ');
read (k);
vvod(k,a);
min1(a,k,min,nmin);
writeln('min=',min:1:1, ' indeks=',nmin);
writeln;
write ('Vvedite razmer vtorogo massiva y: ');
read (k);
vvod(k,b);
min1(b,k,min,nmin);
writeln('min=',min:1:1, ' indeks=',nmin);
readln;
readln;
end.

Последний раз редактировалось emalf; 15.12.2016 в 02:09.
emalf вне форума Ответить с цитированием
Старый 15.12.2016, 01:17   #2
type_Oleg
Старожил
 
Аватар для type_Oleg
 
Регистрация: 02.03.2008
Сообщений: 2,499
По умолчанию

Код:
if (x[j]>=0) and (x[j]=min) then // а чему равна переменная min ?
Кстати, положительные - это строго > 0.
А если в массиве вообще не окажется положительных, то что надо возвращать ?
type_Oleg вне форума Ответить с цитированием
Старый 15.12.2016, 01:39   #3
emalf
 
Регистрация: 15.12.2016
Сообщений: 6
По умолчанию

Я исправила, но больше я не знаю что делать с этой подпрограммой. Куда вписывать
Код:
else writeln ('polojitelnih chisel net');
я тоже уже не соображаю
emalf вне форума Ответить с цитированием
Старый 15.12.2016, 01:49   #4
type_Oleg
Старожил
 
Аватар для type_Oleg
 
Регистрация: 02.03.2008
Сообщений: 2,499
По умолчанию

Если у вас type vector начинается с индекса 1, то можно при отсутствии положительных сделать, чтоб возвращало n=0.
И проверять например так
Код:
 min1(a,k,min,nmin);
 if nmin=0 then writeln ('polojitelnih chisel net');
Кстати, у вас путаница с параметрами.
Написано procedure min1(x:vector;l:integer; var rmin:real; var n:integer); - а где далее определяется n ?
Запутались с формальным и фактическими параметрами.

Последний раз редактировалось type_Oleg; 15.12.2016 в 01:54.
type_Oleg вне форума Ответить с цитированием
Старый 15.12.2016, 02:11   #5
emalf
 
Регистрация: 15.12.2016
Сообщений: 6
По умолчанию

Код:
begin
rmin:=x[1]; n:=1;
 for j:=1 to l do
if x[j]>0 then rmin:=x[j];
for j:=2 to l do
if (x[j]>0) then
begin
rmin:=x[j]; n:=j;
end;
все равно фигня получается. А после добавления:
Код:
 min1(a,k,min,nmin);
 if nmin=0 then writeln ('polojitelnih chisel net'); else...
нет изменений никаких
emalf вне форума Ответить с цитированием
Старый 15.12.2016, 02:40   #6
type_Oleg
Старожил
 
Аватар для type_Oleg
 
Регистрация: 02.03.2008
Сообщений: 2,499
По умолчанию

Вот, добавьте второй массив, и все:
Код:
program emalf;

{$APPTYPE CONSOLE}

const NMAX=20;

type vector=array[1..NMAX] of Real;

procedure CreateArray(kol:Integer;var x:vector);
var i:Integer;
begin
 for i:=1 to kol do
  begin
   x[i]:=Random*10-5;
   Write(x[i]:5:2);
  end;
 WriteLn; 
end;
procedure MinPlus(x:vector;kol:Integer;var xMinPl:Real;var numMin:Integer);
var i:Integer;
begin
 numMin:=0;
 for i:=1 to kol do
  if x[i]>0 then
   begin
    numMin:=i;
    xMinPl:=x[i];
    break;
   end;
 if numMin=0 then Exit;
 for i:=numMin to kol do
  if (x[i]<xMinPl)and(x[i]>0) then
    begin
    numMin:=i;
    xMinPl:=x[i];
   end;
end;

var xx:vector;
   k,kMin:Integer;
   xMin:Real;
begin
 Randomize;
 Write('k = ');
 ReadLn(k);
 CreateArray(k,xx);
 MinPlus(xx,k,xMin,kMin);
 if kMin>0
  then Writeln('min=',xMin:5:2, ' indeks=',kMin)
  else Writeln ('polojitelnih chisel net');
 ReadLn; 
end.
Все работает
type_Oleg вне форума Ответить с цитированием
Старый 15.12.2016, 03:03   #7
emalf
 
Регистрация: 15.12.2016
Сообщений: 6
По умолчанию

Спасибо большое!!
emalf вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Найти наименьшие элементы в каждой строке матрицы и номер максимального из них fort-_-minor Общие вопросы C/C++ 3 22.05.2013 15:44
Найти количество членов последовательности b1,b2..bn, которые имеют четные порядковые номера и являются нечетными числами (Паскаль Vetal_1715 Помощь студентам 3 23.05.2012 13:20
Для матрицы и массива (заданы номера столбцов) найти минимальные элементы, поместить в массив, найти сред. ариф.(Delphi) nucweapon Помощь студентам 5 26.10.2011 09:37
Для каждой строки напечатать номера столбцов, содержащих положительные элементы wlll Помощь студентам 3 24.11.2010 18:39