Операция сравнения

Любые обсуждения, не нарушающие правил форума.

Модератор: Модераторы

Операция сравнения

Сообщение Сквозняк » 10.02.2012 02:46:56

Код: Выделить всё
var
A: Longint;

begin
A:=1000;
if A=1 or 1000 then writeln('1');
if A=1 or 1000 or 99999 then writeln('2');
if A=1..2000 then writeln('3');
if A<>1..999 or 500 then writeln('4');
if A<>1,3,800,-999990 then writeln('5');
end.

Почему в fpc не реализованы такие сравнения для целых чисел? Вроде бы полезная штука.
Сквозняк
энтузиаст
 
Сообщения: 1123
Зарегистрирован: 29.06.2006 22:08:32

Re: Операция сравнения

Сообщение rayanAyar » 10.02.2012 04:35:41

Реализованы. Оператор Case Of.
Аватара пользователя
rayanAyar
новенький
 
Сообщения: 42
Зарегистрирован: 06.01.2011 08:22:52
Откуда: Новоуральск

Re: Операция сравнения

Сообщение Сквозняк » 10.02.2012 05:13:57

Case в строчку не напишешь, неудобно и костыльно. И там в можно писать только константы с непересекающимися значениями, переменные не подойдут.
Последний раз редактировалось Сквозняк 10.02.2012 05:22:12, всего редактировалось 1 раз.
Сквозняк
энтузиаст
 
Сообщения: 1123
Зарегистрирован: 29.06.2006 22:08:32

Re: Операция сравнения

Сообщение SSerge » 10.02.2012 05:17:35

Создай функцию сравнения и сделай так, чтобы аргументы входили в одну строчку, красиво.
SSerge
энтузиаст
 
Сообщения: 971
Зарегистрирован: 12.01.2012 05:34:14
Откуда: Барнаул

Re: Операция сравнения

Сообщение Сквозняк » 10.02.2012 05:24:42

Так и делается, но получается слишком много лишних мелкопупырчатых функций. Надо сделать сравнение не с одним а с двумя числами? Создавай для этого функцию!
Сквозняк
энтузиаст
 
Сообщения: 1123
Зарегистрирован: 29.06.2006 22:08:32

Re: Операция сравнения

Сообщение SSerge » 10.02.2012 05:31:53

сделай универсальную, а ля FORMAT('%s %s',[arg1,arg2]);
SSerge
энтузиаст
 
Сообщения: 971
Зарегистрирован: 12.01.2012 05:34:14
Откуда: Барнаул

Re: Операция сравнения

Сообщение sign » 10.02.2012 06:10:37

Сквозняк писал(а):
Код: Выделить всё
var
A: Longint;

begin
A:=1000;
if A=1 or 1000 then writeln('1');
if A=1 or 1000 or 99999 then writeln('2');
if A=1..2000 then writeln('3');
if A<>1..999 or 500 then writeln('4');
if A<>1,3,800,-999990 then writeln('5');
end.

Почему в fpc не реализованы такие сравнения для целых чисел? Вроде бы полезная штука.


Лазарус 0.9.31
FPC 2.6.0
Пользуйтесь на здоровье:
Код: Выделить всё
unit Unit1;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls;

type

  { TForm1 }

  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    StaticText1: TStaticText;
    procedure Button1Click(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.lfm}

{ TForm1 }

procedure TForm1.Button1Click(Sender: TObject);
var A: Integer;
begin
  A := StrToInt(Edit1.Text);
  if A in [1, 1000] then StaticText1.Caption := '1' else
  if A in [1, 1000, 99999] then StaticText1.Caption := '2' else
  if A in [1..2000] then StaticText1.Caption := '3' else
  if not (A in [1..999, 500]) then StaticText1.Caption := '4' else
  if not (A in [1, 3, 800, -999990]) then StaticText1.Caption := '5'
  else StaticText1.Caption := '';
end;
end.
sign
энтузиаст
 
Сообщения: 1131
Зарегистрирован: 30.08.2009 09:20:53

Re: Операция сравнения

Сообщение Сквозняк » 10.02.2012 06:15:45

СИобразный кошмар нам не нужен, потому не одну а много: для двух чисел, для трёх, четырёх, для диапазона. Сложить все недостающие в паскале стандартные функции в модуль и пристёгивать его к каждой программе.

Добавлено спустя 4 минуты 30 секунд:
sign писал(а):Лазарус 0.9.31FPC 2.6.0Пользуйтесь на здоровье:

при
Код: Выделить всё
{$MODE FPC}

такие сравнения тоже работают или нет?
Сквозняк
энтузиаст
 
Сообщения: 1123
Зарегистрирован: 29.06.2006 22:08:32

Re: Операция сравнения

Сообщение sign » 10.02.2012 08:05:55

Пользуйтесь:
Код: Выделить всё
program Project1;

{$MODE FPC}{$H+}

uses
  {$IFDEF UNIX}{$IFDEF UseCThreads}
  cthreads,
  {$ENDIF}{$ENDIF}
  Classes
  { you can add units after this };

{$R *.res}

var A: Integer;
begin
  A:=1000;
  if A in [1,1000] then writeln('1');
  if A in [1,1000,99999] then writeln('2');
  if A in [1..2000] then writeln('3');
  if not(A in [1..999,500]) then writeln('4');
  if not(A in [1,3,800,-999990]) then writeln('5');
end.
             


У меня всё работает.
sign
энтузиаст
 
Сообщения: 1131
Зарегистрирован: 30.08.2009 09:20:53

Re: Операция сравнения

Сообщение Сквозняк » 10.02.2012 17:09:26

На FPC 2.4.4 тоже работает. Вот о чём нужно было писать в самом начале новых книжек по паскалю.
Сквозняк
энтузиаст
 
Сообщения: 1123
Зарегистрирован: 29.06.2006 22:08:32

Re: Операция сравнения

Сообщение leo_bsv » 10.02.2012 18:15:55

книжка книжке рознь... где то об этом в начале пишут... а где-то в конце... ;)
Аватара пользователя
leo_bsv
постоялец
 
Сообщения: 276
Зарегистрирован: 04.08.2010 16:26:10
Откуда: Йошкар-Ола

Re: Операция сравнения

Сообщение Сквозняк » 10.02.2012 18:39:23

В начале обычно пишут про базовые операции и гуи в объёме достаточном для вывода результатов формул но недостаточном для построения нормальной морды. А в конце тучи формул практически бесполезных для логики. В формулах отсутствуют конструкции if then else, case, goto, следовательно практические задачи часто имеют логические решения не описываемые математиками. Кроме того операции с матрицами-шматрицами обычно уже встроены куда надо, нужно лишь ими воспользоваться. Ну и деления, математики над ними не парятся - подумаешь миллион делений, он ничем не хуже миллиона умножений. Дочитать до конца груды неудобных pdf ради крупиц полезных знаний слишком напряжно и долго. А потом люди изучившие паскаль по таким книгам говорят что он учебный язык непригодный для реальных задач.
Сквозняк
энтузиаст
 
Сообщения: 1123
Зарегистрирован: 29.06.2006 22:08:32

Re: Операция сравнения

Сообщение Widowmaker » 10.02.2012 19:55:44

Вот именно. Давно заметил, что над книгами по паскалю/дельфи, а теперь и по лазарю как бы злой рок довлеет - почти все они начинаются с экзерсисов типа "как бросить кнопочку на формочку", продолжающихся чуть ли не всю книгу вперемешку с надуманными задачками. В отличие от книг по с/срр, кстати. Толковых справочников по паскалю/дельфи тоже раз-два, и обчёлся, по лазарю так и вовсе нет. И опять в отличие от с/срр. Грустно.
Аватара пользователя
Widowmaker
новенький
 
Сообщения: 37
Зарегистрирован: 27.04.2011 18:32:04


Вернуться в Потрепаться

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

Рейтинг@Mail.ru