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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.03.2014, 16:14   #1
Lost7070
Пользователь
 
Регистрация: 02.03.2012
Сообщений: 25
По умолчанию Поиск минимума/максимума в массиве / Turbo Pascal

Доброго времени суток. Проблема просто смешная, но я не могу понять, почему программа не работает.
Нужно найти минимум и максимум координат.
Есть 2 функции для поиска максимума и минимума(сначала объединил в одну, но в надежде решить проблему разделил на две). Максимум считается верно, а функция минимума всегда выдаёт нули. Подскажите пожалуйста, что я делаю не так.
Заранее благодарен.
Код ниже:
Код:
uses crt,graph;
{Функция поиска макимума из массива}
function max(mas: array of integer; n:integer):integer;
var
m,i:integer;
begin
    m:= mas[1];
    for i:=1 to n do
    begin
        if m < mas[i] then
            m:= mas[i];
    end;
    max:=m;
end;
 
function min(mas: array of integer; n:integer):integer;
var
m,i:integer;
begin
    m:= mas[1];
    for i:=1 to n do
        if m > mas[i] then
            m:= mas[i];
    min:=m;
end;
 
var
x,y: array[1..50] of integer;
i,numberPoints,Xmin,Ymin,Xmax,Ymax: integer;
begin
    clrscr;
    write('ВВедите количество точек: ');
    readln(numberPoints);
    writeln('Введите координаты точек:');
    for i:=1 to numberPoints do
    begin
        write('X',i,'= '); readln(x[i]);
        write('Y',i,'= '); readln(y[i]);
    end;
 
    {Поиск минимальных и максимальных координат}
    Xmin:= min(x,numberPoints);
    Ymin:= min(y,numberPoints);
    Xmax:= max(x,numberPoints);
    Ymax:= max(y,numberPoints);
 
    write('Xmin=',Xmin,' Xmax= ',Xmax,' Ymin=',Ymin,' Ymax= ',Ymax);
 
    readkey;
end.
Lost7070 вне форума Ответить с цитированием
Старый 18.03.2014, 16:59   #2
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Всему виной не соответствие типов..
array of integer - здесь элементы идут с 0-ля.. а у Вас в тушке array [1..50].. (элементы идут с 1-ки..)
Poma][a вне форума Ответить с цитированием
Старый 18.03.2014, 22:13   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Poma][a Посмотреть сообщение
Всему виной не соответствие типов..
array of integer - здесь элементы идут с 0-ля.. а у Вас в тушке array [1..50].. (элементы идут с 1-ки..)
полностью согласен!

Методы борьбы.

1-й. Изменить нумерацию в массивах X,Y от нуля.
так:
Код:
var
  x,y: array[0..49] of integer;
...
    for i:=0 to numberPoints-1 do
...
либо. вариант 2.
завести дополнительный тип для массива:
Код:
Type TMyArray = array[1..50] of integer;


{Функция поиска макимума из массива}
function max(mas: TMyArray; n:integer):integer;
var
m,i:integer;
begin
    m:= mas[1];
    for i:=1 to n do
    begin
        if m < mas[i] then
            m:= mas[i];
    end;
    max:=m;
end;

function min(mas: TMyArray; n:integer):integer;
var
  m,i:integer;
begin
    m:= mas[1];
    for i:=1 to n do
      if m > mas[i] then
            m:= mas[i];
    min:=m;
end;

var
  x,y: TMyArray;
  i,numberPoints,Xmin,Ymin,Xmax,Ymax: integer;
begin
    clrscr;
    write('ВВедите количество точек: ');
    readln(numberPoints);
    writeln('Введите координаты точек:');
    for i:=1 to numberPoints do
.....
либо, вариант 3.
в функциях Max/Min написать цикл примерно такого вида:
Код:
function min(mas: array of integer; n:integer):integer;
var
  m,i:integer;
begin
    m:= mas[1];
    for i:=low(mas) to low(mas)+n-1 do
      if m > mas[i] then
            m:= mas[i];
    min:=m;
end;

в данном случае я бы рекомендовал взять вариант 2, с дополнительным типом массива, хотя и другие варианты имеют свои плюсы и минусы
Serge_Bliznykov вне форума Ответить с цитированием
Старый 18.03.2014, 22:20   #4
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Можно примерно так :
Берем FPC (хотя я так думаю, что и у ТС был не турбушка, а именно фри..)
Читаем кол-во элементов, SetLength'им массивы, вызываем MaxIntValue и MinIntValue из uses Math.. и радуемся.. и писать ничего не надо.. кра-со-та..
Poma][a вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
поиск интервала, содержащего точку минимума(максимума) Alex-Kunfuman Общие вопросы C/C++ 1 01.03.2012 19:25
поиск максимума и минимума на sql volfmen15 БД в Delphi 4 07.02.2012 17:48
[Pascal] Поиск минимума в одномерном массиве merch Паскаль, Turbo Pascal, PascalABC.NET 7 19.05.2011 02:35
Поиск минимума/максимума в массиве gwarthy Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 6 28.01.2010 22:27
Нахождение минимума и максимума в трехмерном массиве 1234 Помощь студентам 11 26.05.2008 16:23