Помощь новичкам

uses
  graphabc;

begin
  polygon(1, 1, 1, 2, 1, 3, 1, 4);
end.

выводит "неверное число параметров процедуры" можно ли это лечить как нибудь кроме

uses
  graphabc;

 var
b: array of point;

begin
 setlength(b, 5);
 b[1].X := 1;
 b[1].Y := 2;
 b[2].X := 3;
 b[2].Y := 4;
 b[3].X := 5;
 b[3].Y := 6;
 b[4].X := 7;
 b[4].Y := 8;
 polygon(b);
end.

А нету возможности без костылей создать перечислимый тип с параметрами, а не просто набор строковых констант? что то вроде http://stackoverflow.com/questions/469287/c-sharp-vs-java-enum-for-those-new-to-c я попробовал перевести на паскаль то что там приведено, но оно не хочет работать.

Так подойдет?

uses graphabc;

begin
  var b := Arr(Pnt(10,10),Pnt(10,100),Pnt(100,10));
  polygon(b);
end.

А что такое перечислимый тип с параметрами - нельзя ли написать здесь что Вы хотите?

Если такой функциональности нет в C#, то ее нет и здесь. Я б использовал Dictionary<Planet, Tuple<double, double>>. Не помню, есть ли в паскале тут Tuple, если нет - написать свой. Не знаю, зачем они там в статье такие костылей нагородили, ибо таким образом выйдет короче в разы. А если еще и производительность важна - то вместе Dictionary - List, по индексу планеты, а его можно получать из преобразования enum’a в int. Напишу на C#, ибо паскаля уже 5й год как не видел…

//можно использовать KeyValuePair, но разделения на ключи и значения тут нет, и она малость по религии не подходит
//Тьюпл может оказаться уже, кстати - в зависимости от того, на какой версии паскаль написан. Возможно, и писать не придется
class Tuple<T>
{
	public T First { get; set; }
	public T Second { get; set; }
	public Tuple(T t1, T t2)
	{
		First = t1;
		Second = t2;
	}
}

//можно просто у себя хранить где-того
//тогда GetPlanetParams не нужен - просто храним данные и пользуем, из Dictionary.
public static class Planets
{
	public enum Planet { MERCURY, VENUS, EARTH, MARS, JUPITER, SATURN, URANUS, NEPTUNE, PLUTO }
	private static Dictionary<Planet, Tuple<double, double>> planetsList = new Dictionary<Planet, Tuple<double, double>>();
	
	static Planets()
	{
		planetsList.Add(MERCURY, new Tuple(3.303e+23, 2.4397e6)),
		planetsList.Add(VENUS, new Tuple(4.869e+24, 6.0518e6));
		planetsList.Add(EARTH, new Tuple(5.976e+24, 6.37814e6));
		planetsList.Add(MARS, new Tuple(6.421e+23, 3.3972e6));
		planetsList.Add(JUPITER, new Tuple(1.9e+27,   7.1492e7));
		planetsList.Add(SATURN, new Tuple(5.688e+26, 6.0268e7));
		planetsList.Add(URANUS, new Tuple(8.686e+25, 2.5559e7));
		planetsList.Add(NEPTUNE, new Tuple(1.024e+26, 2.4746e7));
		planetsList.Add(PLUTO, new Tuple(1.27e+22,  1.137e6);
	}
	
	public static GetPlanetParams(Planet planet)
	{
		return planetsList[planet];
	}
}

Вторая реализация, c List.

public static class Planets
{
	public enum Planet { MERCURY, VENUS, EARTH, MARS, JUPITER, SATURN, URANUS, NEPTUNE, PLUTO }
	private static List<Tuple<double, double>> planetsList = new List<Tuple<double, double>>();
	
	static Planets()
	{
		planetsList.Add(new Tuple(3.303e+23, 2.4397e6)),
		planetsList.Add(new Tuple(4.869e+24, 6.0518e6));
		planetsList.Add(new Tuple(5.976e+24, 6.37814e6));
		planetsList.Add(new Tuple(6.421e+23, 3.3972e6));
		planetsList.Add(new Tuple(1.9e+27,   7.1492e7));
		planetsList.Add(new Tuple(5.688e+26, 6.0268e7));
		planetsList.Add(new Tuple(8.686e+25, 2.5559e7));
		planetsList.Add(new Tuple(1.024e+26, 2.4746e7));
		planetsList.Add(new Tuple(1.27e+22,  1.137e6);
	}
	
	public static GetPlanetParams(Planet planet)
	{
		return planetsList[(int)planet];
	}
}

Код написан без компиляции, так что могут быть мелкие ошибки.

А то, что там написано - редкостный оверинжиниринг, и попросту не нужен.

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

с одной стороны, такой вариант вроде бы подошел бы:

type
  AccountTypes=(Cash,DebitCard,CreditCard,Deposit);

но тут объявляются просто именованые константы, у которых никаких параметров нет. хотелось бы что-то типа

AccountTypes.Deposit.InterestRate := decimal.one;
AccountTypes.CreditCard.Limit := decimal.parse('2000000.00');

причем в идеале часть полей константы (некие логические флаги, например для вклада HasInterestRate - true, для остальных типов - false), а часть задается уже при создании экземпляра счета (конкретная ставка, конкретный лимит, и так далее).

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

Пишем свой Tuple<T1, T2, T3, T4>, и делаем, как я написал выше. Будет работать.

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

PABC - полностью CLS-совместимый?

Насколько я знаю - во всех случаях, кроме тех, когда это явно противоречит паскалевским стандартам.

огромное спасибо !

Я далеко не новичок и все же у меня такая проблема. Раньше если в assign не указывать полное имя файла(с расположением) то он брал файл из папки в которой находится программа. Я переустановил паскаль, и теперь он требует файл именно в output. Как это исправить.

Я переустановил паскаль, и теперь он требует файл именно в output.

А exe-шники куда компилируются? В output?

Что я делаю не так? ни один из вариантов не добавляет в файл пустую строку в конце, хотя по идее должно работать любое, в итоге все лепится в одну строку без переносов. Stackoverflow ответов не дал, у всех все работает. вроде методы системные, не должно быть разницы C#, VB.Net или паскаль, но тем не менее…

begin
  var lst:= new List<String>;
  lst.Add(Cn.ToString);
  lst.Add('');
  //System.IO.File.AppendAllText('word_v6_correct.txt', Cn.ToString+'\r\n');
  System.IO.File.AppendAllLines('word_v6_correct.txt', lst);
  //System.IO.File.AppendAllText('word_v6_correct.txt', Cn.ToString+Environment.NewLine);
end;

http://puu.sh/lXXDj/0da2645041.jpg

доброе время суток, я совсем не шарю в паскале, но мне нужно сделать вот эту одну только задачу, помогите пожалуйста :pensive:

у меня добавляется

k^2=kk, 2^k = 22^(k-1)=… то есть аккумулировать в цикле предыдущую *2^(k-1) :wink:

готов скинуть вам денег на телефон за код :joy:

1 лайк

Завтра попробую на каком нибудь более простом примере, голову сломал уже, так и не заработало ничего…

UPD: Разгадка оказалась как всегда проста: правки я вносил в один метод, а вызывался другой (Они очень похоже называются), в котором не было +Environment.NewLine. Надо было просто свежим взглядом посмотреть, спасибо).

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

Как компилировать dos-программы? Например:

 PROGRAM Pas;
{$M 20000,0,0}
USES DOS, CRT, MyCRT;
TYPE
  T10x10Matrix=array[1..30,1..30] of real;
  TArrStr=Array[1..30] of string;
VAR
  f:text;
  ch:char;
  A,B,H,AV,AN:T10x10Matrix;
  M,N,i1,i2,Lk,k,l:shortint;
  AS,xV,xN,yV,yN,VSV,VSN,SN,SV,SABS,DV,DD,PO,DP,VP,SP,SS,US,USN:real;
  Out,WhereEdit,si,sj:string;
CONST
  ENTER=#13;ESC=#27;F1=#59;F4=#62;F9=#67;
{-------------------------------------------------------------------}
FUNCTiON Space(c:char;n:byte):string;
Var
  i:byte;
  s:string;
Begin
  s:='';
  For i:=1 to n do s:=s+c;
  Space:=s
End;{Space}
PROCEDURE Editor(ss:string);
Begin
  SwapVectors;
  Exec(WhereEdit,ss);
  SwapVectors
End;{Editor}
PROCEDURE ReadData;
Var
  i,j,p:byte;
  fn,f:text;
  s:string;
  code:integer;
Begin
  Assign(f,'pr2003\wp.dat');
  Reset(f);
  ReadLn(f,s);
  s:=s+' ';
  For i:=1 to 5 do
    begin
      p:=Pos(' ',s);
      Case i of
      1:Val(Copy(s,1,p-1),M,code);
      2:Val(Copy(s,1,p-1),N,code);
      3:Val(Copy(s,1,p-1),i1,code);
      4:Val(Copy(s,1,p-1),i2,code);
      5:Val(Copy(s,1,p-1),LK,code)
      end;
      Delete(s,1,p);
    end;
  For i:=1 to M do
    begin
      ReadLn(f,s);
      s:=s+' ';
      For j:=1 to N do
        begin
          p:=Pos(' ',s);
          Val(Copy(s,1,p-1),A[i,j],code);
          Delete (s,1,p)
        end
    end;
  Close(f)
End;{ReadData}
PROCEDURE Count;
Var
  i,j:byte;
Begin
  AS:=0.0;
  For i:=1 to (M-1) do For j:=1 to (N-1) do
    AS:=AS+(A[i,j]+A[i+1,j]+A[i,j+1]+A[i+1,j+1])/(4.0*(M-1)*(N-1));
  For i:=1 to M do For j:=1 to N do
    begin
      B[i,j]:=AS-(2*j-N-1)*i1*Lk/2000+(2*i-M-1)*i2*Lk/2000;
      H[i,j]:=B[i,j]-A[i,j];
    end;
  xV:= 0; xN:= 0; yV:= 0; yN:= 0; VSV:= 0; VSN:= 0;
  For i:=1 to (M-1) do For j:=1 to (N-1) do
    begin
      SN:= 0; SV:= 0; SABS:= 0;
      For k:=1 to 2 do For l:=1 to 2 do
        begin
          SABS:=SABS+Abs(H[i+k-1,j+l-1]);
          if (H[i+k-1,j+l-1])<0 then SV:=SV+H[i+k-1,j+l-1]
            else SN:=SN+H[i+k-1,j+l-1];
        end;
      AV[i,j]:=-sqr(Lk*SV)/(4.0*SABS);
      AN[i,j]:=sqr(Lk*SN)/(4.0*SABS);
      xV:=xV-AV[i,j]*(i);
      xN:=xN+AN[i,j]*(i);
      yV:=yV-AV[i,j]*(j);
      yN:=yN+AN[i,j]*(j);
      VSV:=VSV+sqr(Lk)*sqr(SV)/(4.0*SABS);
      VSN:=VSN+sqr(Lk)*sqr(SN)/(4.0*SABS);
    end;
  DV:=VSV-VSN;
  DD:=sqrt(sqr((xV/VSV-xN/VSN)*Lk)+sqr((yV/VSV-yN/VSN)*Lk));
  PO:=(M-1)*(N-1)*Lk*Lk;
  DP:=DD/2.0;
  VP:=PO*0.2;
  SV:=VSV*(262.9+((DD-10.0)/10.0)*213.4);
  SP:=VP*(262.9+((DD-10.0)/10.0)*213.4);
  SS:=SP+SV;
End;
PROCEDURE OutPut1;
Var
  i,j:byte;
  s,sA,sB,sH:string;
Begin
  If Out='PRN' then
    begin
      Assign(f,'pr2003\wp.res');rewrite(f);
      WriteLn(f,'     Џ‹ЂЌ ЋђѓЂЌ€‡Ђ–€€ ђ…‹њ…”Ђ');
      WriteLn(f,'')
    end;
  If Out='CON' then
    begin
      WriteLn('     Џ‹ЂЌ ЋђѓЂЌ€‡Ђ–€€ ђ…‹њ…”Ђ');
      WriteLn('')
    end;
  For i:=1 to M do
    begin
      s:=Space(' ',5);
      For j:=1 to N do
        begin
          Str(H[i,j]:7:2,sH);
          s:=s+sH+' ';
          Str(B[i,j]:1:2,sB);
          Repeat sB:=sB+' ' until Length(sB)=7;
          s:=s+sB
        end;
      If Out='PRN' then WriteLn(f,s);
      If Out='CON' then WriteLn(s);
      s:=Space(' ',12);
      For j:=1 to N do s:=s+'*'+Space(' ',14);
      If Out='PRN' then WriteLn(f,s);
      If Out='CON' then WriteLn(s);
      s:=Space(' ',13);
      For j:=1 to N do
        begin
          Str(A[i,j]:1:2,sA);
          Repeat sA:=sA+' ' until Length(sA)=15;
          s:=s+sA
        end;
      If Out='PRN' then
        begin
          WriteLn(f,s);
          WriteLn(f,'');
          WriteLn(f,'');
        end;
      If Out='CON' then
        begin
          WriteLn(s);
          WriteLn('');
          WriteLn('')
        end; end;
        If Out='PRN' then WriteLn('Њ®¦ҐвҐ Ї®б¬®ваҐвм १г«мв вл ў б®еа ­Ґ­­®¬ д ©«Ґ - ­ ¦¬ЁвҐ ENTER');
  If Out='CON' then WriteLn('„«п Їа®¤®«¦Ґ­Ёп ­ ¦¬ЁвҐ ENTER');
  Repeat ch:=Key until ch=ENTER;
  End;{OutPut1}
PROCEDURE OutPut2;
Var
  i,j:byte;
  c1,c2,c3:char;
  sAN:TArrStr;
  s,sr:string;
Procedure MakeString(c1,c2,c3:char;sd:TArrStr);
var
  j:byte;
begin
  s:=c1;
  For j:=1 to N-1 do
    If j<N-1 then s:=s+sd[j]+c2 else s:=s+sd[j];
  s:=s+c3;
  If Out='PRN' then WriteLn(f,s);
  If Out='CON' then WriteLn(s);
end;
Begin
  ClrScr;
  If Out='PRN' then
    begin
      WriteLn(f,'     Џ‹ЂЌ ‡…Њ‹џЌ›• ЊЂ‘‘');
      WriteLn(f,'')
    end;
  If Out='CON' then
    begin
      WriteLn('     Џ‹ЂЌ ‡…Њ‹џЌ›• ЊЂ‘‘');
      WriteLn('')
    end;
  For i:=1 to M-1 do
    begin
      If i=1 then
        begin
          c1:='Ъ';
          c2:='В';
          c3:='ї'
        end
      else
        begin
          c1:='Г';
          c2:='Е';
          c3:='ґ'
        end;
      For j:=1 to N-1 do sAN[j]:=Space('Д',10);
      MakeString(c1,c2,c3,sAN);
      For j:=1 to N-1 do sAN[j]:=Space(' ',10);
      MakeString('і','і','і',sAN);
      For j:=1 to N-1 do
         begin
          Str(AN[i,j]:7:0,sAN[j]);
          sAN[j]:=sAN[j]+Space(' ',3)
        end;
      MakeString('і','і','і',sAN);
      For j:=1 to N-1 do
        begin
          Str(AV[i,j]:7:0,sAN[j]);
          sAN[j]:=sAN[j]+Space(' ',3)
        end;
      MakeString('і','і','і',sAN);
      For j:=1 to N-1 do sAN[j]:=Space(' ',10);
      MakeString('і','і','і',sAN);
    end;
  For j:=1 to N-1 do sAN[j]:=Space('Д',10);
  MakeString('А','Б','Щ',sAN);
  If Out='CON' then BEGIN
  writeln('Ћ ‘ Ќ Ћ ‚ Ќ › …  Џ Ћ Љ Ђ ‡ Ђ ’ … ‹ €  Џ ђ Ћ … Љ ’ Ђ');
  writeln('ЋЃ™Ђџ Џ‹Ћ™Ђ„њ “—Ђ‘’ЉЂ Џ‹ЂЌ€ђЋ‚Љ€',PO:7:0,' ¬2');
  writeln('ЏђЋ…Љ’Ќ›… “Љ‹ЋЌ›:ЏђЋ„Ћ‹њЌ›‰    - ',I1:7,'(ў Їа®¬Ё««пе)');
  writeln('                 ЏЋЏ…ђ…—Ќ›‰    - ',I2:7,'(ў Їа®¬Ё««пе)');
  writeln('„‹€ЌЂ ‘’ЋђЋЌ› Љ‚Ђ„ђЂ’Ђ         - ',Lk:7,' ¬');
  writeln('Ћ Ѓ љ р Њ  ‚ › … Њ Љ €         - ',VSV:7:0,' ¬2');
  writeln('Ћ Ѓ љ р Њ  Ќ Ђ ‘ › Џ €         - ',VSN:7:0,' ¬2');
  writeln('‘ђ…„Ќ…‚‡‚…˜…ЌЌЋ… ђЂ‘‘’ЋџЌ€… Џ…ђ…Њ…™…Ќ€џ ѓђ“Ќ’Ђ -',DD:7:0,' ¬');
  writeln('„Ђ‹њЌЋ‘’њ Џ…ђ…Њ…™…Ќ€џ Џ‹Ћ„ЋђЋ„ЌЋѓЋ ѓђ“Ќ’Ђ      -',DP:7:0,' ¬');
  writeln('‘’Ћ€ЊЋ‘’њ Џ…ђ…Њ…™…Ќ€џ Џ‹Ћ„ЋђЋ„ЌЋѓЋ ѓђ“Ќ’Ђ      -',SP:7:0,' агЎ');
  writeln('‘’Ћ€ЊЋ‘’њ Џ…ђ…Њ…™…Ќ€џ ѓђ“Ќ’Ђ ‚›…ЊЋЉ ‚ ЌЂ‘›Џ€   -',SV:7:0,' агЎ');
  writeln('ЋЃ™Ђџ ‘Њ…’ЌЂџ ‘’Ћ€ЊЋ‘’њ ‚›ЏЋ‹Ќ…Ќ€џ ‡…Њ‹џЌ›• ђЂЃЋ’');
  writeln('Ѓ“‹њ„Ћ‡…ђЋЊ „‡-17 ЊЋ™ЌЋ‘’њћ 96 Є‚в             -',SS:7:0,' агЎ');
  END;
    begin
      WriteLn('„«п § ўҐа襭Ёп Їа®Ја ¬¬л ­ ¦¬ЁвҐ ENTER');
      Repeat ch:=Key until ch=ENTER
    end;
    if Out='PRN' then
    begin
  writeln(f,'Ћ ‘ Ќ Ћ ‚ Ќ › …  Џ Ћ Љ Ђ ‡ Ђ ’ … ‹ €  Џ ђ Ћ … Љ ’ Ђ');
  writeln(f,'ЋЃ™Ђџ Џ‹Ћ™Ђ„њ “—Ђ‘’ЉЂ Џ‹ЂЌ€ђЋ‚Љ€',PO:7:0,' ¬2');
  writeln(f,'ЏђЋ…Љ’Ќ›… “Љ‹ЋЌ›:ЏђЋ„Ћ‹њЌ›‰  - ',I1:7,'(‚ Їа®¬Ё««пе)');
  writeln(f,'                 ЏЋЏ…ђ…—Ќ›‰  - ',I2:7,'(‚ Їа®¬Ё««пе)');
  writeln(f,'„‹€ЌЂ ‘’ЋђЋЌ› Љ‚Ђ„ђЂ’Ђ       - ',Lk:7,' ¬');
  writeln(f,'Ћ Ѓ љ р Њ  ‚ › … Њ Љ €       - ',VSV:7:0,' ¬2');
  writeln(f,'Ћ Ѓ љ р Њ  Ќ Ђ ‘ › Џ €       - ',VSN:7:0,' ¬2');
  writeln(f,'‘ђ…„Ќ…‚‡‚…˜…ЌЌЋ… ђЂ‘‘’ЋџЌ€… Џ…ђ…Њ…™…Ќ€џ ѓђ“Ќ’Ђ    -',DD:7:0,' ¬');
  writeln(f,'„Ђ‹њЌЋ‘’њ Џ…ђ…Њ…™…Ќ€џ Џ‹Ћ„ЋђЋ„ЌЋѓЋ ѓђ“Ќ’Ђ         -',DP:7:0,' ¬');
  writeln(f,'‘’Ћ€ЊЋ‘’њ Џ…ђ…Њ…™…Ќ€џ Џ‹Ћ„ЋђЋ„ЌЋѓЋ ѓђ“Ќ’Ђ         -',SP:7:0,' агЎ');
  writeln(f,'‘’Ћ€ЊЋ‘’њ Џ…ђ…Њ…™…Ќ€џ ѓђ“Ќ’Ђ ‚›…ЊЋЉ ‚ ЌЂ‘›Џ€      -',SV:7:0,' агЎ');
  writeln(f,'ЋЃ™Ђџ ‘Њ…’ЌЂџ ‘’Ћ€ЊЋ‘’њ ‚›ЏЋ‹Ќ…Ќ€џ ‡…Њ‹џЌ›• ђЂЃЋ’');
  writeln(f,'Ѓ“‹њ„Ћ‡…ђЋЊ „‡-17 ЊЋ™ЌЋ‘’њћ 96 Є‚в                -',SS:7:0,' агЎ');
close(f);
End;
End;
PROCEDURE OutPut;
Begin
  ClrScr;
  WriteLn('„«п ўлў®¤  १г«мв в®ў ­  нЄа ­ ­ ¦¬ЁвҐ F1');
  WriteLn('„«п б®еа ­Ґ­Ёп १г«мв в®ў ў д ©«Ґ ­ ¦¬ЁвҐ F9');
  Repeat ch:=Key until ch in [F1,F9];
  ClrScr;
  Case ch of
    F1:Out:='CON';
    F9:Out:='PRN'
  end;
  OutPut1;
  OutPut2
End;
BEGiN
  ClrScr;
  ReadData;
  Count;
  OutPut
   END.