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

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

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

Восстановить пароль

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 05.04.2015, 12:00   #1
iceman_1988
 
Аватар для iceman_1988
 
Регистрация: 15.02.2014
Сообщений: 3
По умолчанию Не работает оператор сравнения в Delphi

Надо найти минимальные элементы строк 2-мерного массива, но у меня не работает оператор сравнения ">", точнее он врет - выполняет "else" хотя должен выполнять "then".
Не работает условие сравнения 2-х чисел, пробовал менять тип от real на integer, попробовал местами поменять числа (менять знак сравнения с > на <). Что интересно если условие будет со знаками ">=" и "<=" или "<>", тогда работает.

Часть проблемной области кода:

Код:
 min:=strtoint(mas[1,1]);
    for i:=1 to k do
     begin
      for j:=1 to kk do
     begin
      showmessage('Ñðàâíèâàåì min='+inttostr(min)+' è ýëåìåíò ['+inttostr(i)+';'+inttostr(j)+']='+mas[i,j]);
       l:=strtoint(mas[i,j]);
      if l<>min then
        begin
        min:=l;
        showmessage('min ïðèñâîåíî çíà÷åíèå: '+mas[i,j]);
        end;
      end;
      showmessage('ìèíèìàëüíûé ýë-ò '+inttostr(i)+' ñòðîêè:'+inttostr(min));
      end;
Вот код программы полностью:
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, DB, DBTables, StdCtrls, Grids;

type
  TForm1 = class(TForm)
    StringGrid1: TStringGrid;
    Label1: TLabel;
    Edit1: TEdit;
    Label2: TLabel;
    Edit2: TEdit;
    Button1: TButton;
    Label4: TLabel;
    Button2: TButton;
    Button3: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
   y: real;
   a,b: integer;


implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
i, j: integer;
begin
b:=strtoint(Edit1.Text); //ñòîëáöû
a:=strtoint(Edit2.Text); //ñòðîêè
StringGrid1.ColCount:=b+1; // ìåíÿåì ðàçìåð òàáë.
StringGrid1.RowCount:=a+1;
StringGrid1.Visible:=true;
 
  with StringGRid1 do
    for i:=1 to RowCount-1 do
    for j:=1 to ColCount-1 do
    begin
      Cells[0, i]:='A'+inttostr(i);
      Cells[j, 0]:='B'+inttostr(j)
    end;
    y:=0.5;
    label4.Visible:= true;
    label4.Caption:= 'Ñòåïåíü äîâåðèÿ, y='+floattostr(y);
    ShowMessage('Çïîëíÿéòå òàáëèöó!');
    Button1.Visible:=false;
    Button2.Visible:=true;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
i,j,z,k,kk,l: integer;
min: integer;
var mas: array of array of string;  //
var minelements: array of string;  //îäíîìåðíûé ìàññèâ äëÿ ìèíèìàëüíûõ ýëåìåíòîâ
begin
with StringGRid1 do
    for i:=1 to RowCount-1 do
    for j:=1 to ColCount-1 do
      if not TryStrToInt(Cells[j, i],z) then
      Showmessage('Ýëåìåíò: [A'+inttostr(i)+'; B'+inttostr(j)+'] íå ÿâëÿåòñÿ ÷èñëîì!!!');
      SetLength(mas,10,10); //âûäåëÿåì ïàìÿòü äëÿ äèíàìè÷åñêîãî äâóìåðíîãî ìàññèâà
      SetLength(minelements, 10); //âûäåëÿåì ïàìÿòü äëÿ äèíàìè÷åñêîãî îäíîìåðíîãî ìàññèâà
      with StringGRid1 do
    for i:=1 to RowCount-1 do
    for j:=1 to ColCount-1 do
    begin
    mas[i,j]:= Cells[j, i]; //ñîçäàåì ìàññèâ èç ýë-òîâ òàáëèöû
   // showmessage('ýë-ò ['+inttostr(i)+';'+inttostr(j)+']: '+floattostr(mas[i,j]));
    end;
   k:=a;
    kk:=b;
    l:=1;
    y:=0.5;
   
    min:=strtoint(mas[1,1]);
    for i:=1 to k do
     begin
      for j:=1 to kk do
     begin
      showmessage('Ñðàâíèâàåì min='+inttostr(min)+' è ýëåìåíò ['+inttostr(i)+';'+inttostr(j)+']='+mas[i,j]);
       l:=strtoint(mas[i,j]);
      if l<>min then
        begin
        min:=l;
        showmessage('min ïðèñâîåíî çíà÷åíèå: '+mas[i,j]);
        end;
      end;
      showmessage('ìèíèìàëüíûé ýë-ò '+inttostr(i)+' ñòðîêè:'+inttostr(min));
      end;

end;

procedure TForm1.Button3Click(Sender: TObject);   //÷èñòèì òàáëèöó
var
i, j: integer;
begin
with StringGRid1 do
    for i:=1 to RowCount-1 do   //Çàãîëîâêè ñòðîê íå òðîãàåì
    for j:=1 to ColCount-1 do   //Çàãîëîâêè ñòîëáöîâ íå òðîãàåì
      Cells[j, i]:='';        //Óäàëÿåì ñîäåðæèìîå ÿ÷ååê
end;

end.
iceman_1988 вне форума
Старый 05.04.2015, 12:10   #2
newerow1989
Я самый любопытный
Участник клуба
 
Аватар для newerow1989
 
Регистрация: 24.07.2012
Сообщений: 1,987
По умолчанию

Для поиска минимального элемента используется
Код:
if l<min then
Если не получается, то надо пройтись поэтапно (клавиша F7 или F8)
С запрограммированным приветом, Неверов Евгений!
Сайт: http://newerow1989.ru
[Паскаль] [Delphi]

Последний раз редактировалось newerow1989; 05.04.2015 в 12:16.
newerow1989 вне форума
Старый 05.04.2015, 12:42   #3
iceman_1988
 
Аватар для iceman_1988
 
Регистрация: 15.02.2014
Сообщений: 3
По умолчанию

Цитата:
Сообщение от newerow1989 Посмотреть сообщение
Для поиска минимального элемента используется
Код:
if l<min then
Если не получается, то надо пройтись поэтапно (клавиша F7 или F8)
Я с помощью сообщений протестировал, он именно игнорирует сравнение (говорит что он не истина). Попробовал поставить "else", он его выполняет вместо того, чтобы выполнить then.
А знак я поменял для эксперимента и оставил так, обратно забыл.

Последний раз редактировалось iceman_1988; 05.04.2015 в 12:51.
iceman_1988 вне форума
Старый 05.04.2015, 12:45   #4
newerow1989
Я самый любопытный
Участник клуба
 
Аватар для newerow1989
 
Регистрация: 24.07.2012
Сообщений: 1,987
По умолчанию

Возможно
Код:
k:=a;
kk:=b;
эти переменные равны нулю
С запрограммированным приветом, Неверов Евгений!
Сайт: http://newerow1989.ru
[Паскаль] [Delphi]
newerow1989 вне форума
Старый 05.04.2015, 12:49   #5
Sibedir
Тот ещё
Старожил
 
Аватар для Sibedir
 
Регистрация: 14.11.2007
Сообщений: 2,242
По умолчанию

Цитата:
Сообщение от iceman_1988 Посмотреть сообщение
Я... он именно игнорирует сравнение ... Попробовал поставить "else", он его выполняет вместо того, чтобы выполнить then,
Ну раз он else выполняет, значит не игнорирует, значит l<>min действительно - ложь, значит l = min. Думаю я.
Sibedir вне форума
Старый 05.04.2015, 12:53   #6
iceman_1988
 
Аватар для iceman_1988
 
Регистрация: 15.02.2014
Сообщений: 3
По умолчанию

Все разобрался, всем спасибо.
Корень зла в неправильном расположении оператора присвоения :-)

Вот конечный итог:

Код:
begin
     min:=strtoint(mas[i,1]);
      for j:=1 to kk do
     begin
      showmessage('Ñðàâíèâàåì min='+inttostr(min)+' è ýëåìåíò ['+inttostr(i)+';'+inttostr(j)+']='+mas[i,j]);
       l:=strtoint(mas[i,j]);

      if l<min then
        begin
        min:=l;
        showmessage('min ïðèñâîåíî çíà÷åíèå: '+mas[i,j]);
        end;
      end;
      showmessage('ìèíèìàëüíûé ýë-ò '+inttostr(i)+' ñòðîêè:'+inttostr(min));
      end;
Всем спасибо!!!
iceman_1988 вне форума
Старый 05.04.2015, 12:54   #7
newerow1989
Я самый любопытный
Участник клуба
 
Аватар для newerow1989
 
Регистрация: 24.07.2012
Сообщений: 1,987
По умолчанию

Пожалуйста!
С запрограммированным приветом, Неверов Евгений!
Сайт: http://newerow1989.ru
[Паскаль] [Delphi]
newerow1989 вне форума
Закрытая тема


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не работает оператор if. PHP Luca Brasi Помощь студентам 16 29.10.2014 21:32
Оператор if работает некорректно Night_Devil Общие вопросы по Java, Java SE, Kotlin 1 04.12.2012 11:49
Не работает оператор delete [] zmejchik Общие вопросы C/C++ 2 08.11.2011 15:54
не работает оператор No Error porsh59 Microsoft Office Excel 2 16.07.2011 16:46
не работает - программа пишет ожидался оператор Jaide Паскаль, Turbo Pascal, PascalABC.NET 1 18.05.2011 17:18