Strona 2 z 2

Re: Jak robić programy pod win7 64 w pascalu?

: 10 lut 2013, 16:50
autor: tristan
Ech...

http://wiki.freepascal.org/Cross_compiling#To_Windows

ethanak pisze: nie jeden historyczny dialekt z gotoxy i podobnymi funkcjami na czele.
A co chcesz od gotoxy? (pomijam, że wydaje mi się, że to nijak nie element dialektu, tylko funkcja z borlandowskiej biblioteki graph.tpu.
O ile się orientuję, to sam język nie ma funkcji graficznych.

Re: Jak robić programy pod win7 64 w pascalu?

: 10 lut 2013, 16:55
autor: norvoles
@Ethanak
chociaż nie neguję tego, że nauka lekko przejrzałych języków programowania ma jakiś sens. przykładowo programiści COBOLa zarabiają kilkanaście razy więcej niż programiści PHP;)
Płaca adekwatna do powstających w wyniku użycia tego języka uszczerbków na zdrowiu :craz:
Ktoś jednak soft w tym napisany utrzymywać musi.

Re: Jak robić programy pod win7 64 w pascalu?

: 10 lut 2013, 17:15
autor: ethanak
e tam - cobol jest fajny:)
moja ulubiona linijka:

Kod: Zaznacz cały

88 tatarak redefines mamaryba
a na poważnie:

Kod: Zaznacz cały

divide a into b giving c remainder d
to był pierwsy język pozwalający zrobić to jedną instrukcją.
ale fakt - cobolowe pojęcie zakresu pętli jest dobrym powodem do zażyczenua sobie lepszej kasy przez gościa, który to rozumie

Re: Jak robić programy pod win7 64 w pascalu?

: 10 lut 2013, 17:35
autor: SchabMan
Ok, zainstalowałem fpc używając wine.
Kompilator działa, a nie kompiluje, tylko wywala błąd, którego nie było na tym Ubuntowym.

Kod: Zaznacz cały

mnoza.pas(117,25) Error: Illegal use of ':'
(117,15), czyli miejsce, gdzie zapisywałem tak wynik:

Kod: Zaznacz cały

write('wynik=',c:0:0);
Jest takich miejsc kilka i zawsze wydawało mi się, że zapisuje poprawnie.
Normalnie zrezygnowałbym z tych dwukropków, ale program wykorzystuje algorytm Euklidesa i jakoś się tak dziwnie dzieje, że bez tego znaleziony NWD dzieli mi moje piękne, całkowite wyniki tak, że wychodzą ułamki.

Re: Jak robić programy pod win7 64 w pascalu?

: 10 lut 2013, 17:49
autor: ethanak
ot, widzisz, wydawało ci się ;)

Re: Jak robić programy pod win7 64 w pascalu?

: 10 lut 2013, 18:16
autor: SchabMan
Już mi się nie wydaje. Na pewno jest dobrze.
Tylko jak to skompilować?

Re: Jak robić programy pod win7 64 w pascalu?

: 10 lut 2013, 18:19
autor: ethanak
pisałem wyżej jak się kompiluje programy w paszczalu. nie doczytałeś?

Re: Jak robić programy pod win7 64 w pascalu?

: 10 lut 2013, 18:24
autor: SchabMan
No nie bardzo.
Powtarzam:
Kompilator działa i kompiluje do win64, ale wykrywa mój zapis

Kod: Zaznacz cały

write('wynik=',c:0:0);
jako błąd, dzięki czemu mój program nie może być skompilowany.

Re: Jak robić programy pod win7 64 w pascalu?

: 10 lut 2013, 18:34
autor: ethanak
czekaj, wróćmy do początku.

chcesz skompilować program w pascalu na w7 64.

zainstalowałeś w7 64 i kompilator.

kompilator zwraca błąd...

ja może starej daty programista jestem ale:

a) błąd staram się poprawić

b) jeśli nie potrafię, szukam rozwiązania na forach poświęconych konkretnemu językowi/systemowi

Co ma, wciórności, wspólnego forum poświęcone jednej konkretnej dystrybucji linuksa z twoja niewiedzą na temat programowania pod pewną konkretną wersję windowsa?

Re: Jak robić programy pod win7 64 w pascalu?

: 10 lut 2013, 18:38
autor: BPS
SchabMan pisze:No nie bardzo.
Powtarzam:
Kompilator działa i kompiluje do win64, ale wykrywa zapis

Kod: Zaznacz cały

write('wynik=',c:0:0);
jako błąd.
To wcześniej się kompilowało? Ten testowy program kompiluje mi się bez problemów (w linuxie i wine):

Kod: Zaznacz cały

program test;
var
	c:Real;
begin
	c := 1.5;
	write('dziala', c:0:0);
end.
Błąd który podałeś występuje u mnie przy próbie kompilacji w linuxie jak i w wine jeśli zienna c jest typu Integer, czyli:

Kod: Zaznacz cały

program test;
var
	c:Integer;
begin
	c := 1;
	write('dziala', c:0:0);
end.
Nigdy nie wgłębiałem się w pascala i nie zabardzo wiem co robią te dwukropki, wygląda na to że nie działają z typami Integer. Jakiego typu jest zmienna c? Wklej najlepiej cały kod programu.

Re: Jak robić programy pod win7 64 w pascalu?

: 10 lut 2013, 18:49
autor: SchabMan
ja może starej daty programista jestem
Teraz nie mogę przestać wyobrażać sobie Ciebie jako tego gościa z twojego awatara.

c nie jest integer.

Kod: Zaznacz cały

uses crt;
var
 a,b,c,e,d,f:comp;
 K:char;
 liczba:real;
 stopien:integer;
 licznik, mianownik, licznik2, mianownik2:int64;
 a1,b1,c3,x,y:int64;
 z,c1,c2:char;
 tablica:array[1..8]of string;
 
 
procedure noniebardzo;
Begin
  Writeln('Chciałbyś... Teraz się przez ciebie zapętle.');
  Delay(4000);
  Write('No, chyba że chcesz mnie wyłączyć. Jeśli tak, to wciśnij 0, a jak nie to jakąś inną cyfre.');
  z:=readkey;
  If z='0' then halt;
end;

Procedure silnia;
Begin
Repeat
clrscr;
Write('Wpisz liczbe: ');
Readln(a);
b:=1;
c:=1;
Repeat
b:=b+1;
c:=c*b;
Until b=a;
Write('Wynik: ',c:0:0,' Wpisz 0, żeby wyjść');
K:=readkey;
Until K='0';
end;

procedure mnozenie;
Begin
 repeat;
  clrscr;
  Write('Ile liczb będziesz mnożyć?');
  readln(a);
  If a<=1 then noniebardzo;
  b:=1;
  writeln('wpisz 1 liczbę');
  read(c);
  Repeat
    b:=b+1;
    writeln('wpisz ',b:0:0,' liczbę');
    read(d);
    e:=d;
    c:=c*e;
  until b=a;
  writeln('wynik=',c:0:0);
  write('A jak chcesz wyjść to wpisz 1.');
  K:=readkey;
  clrscr;
until K='1';
end;

procedure dodawanie;
Begin
repeat;
  clrscr;
  Write('Ile liczb będziesz dodawać?');
  readln(a);
  If a<=1 then noniebardzo;
  b:=1;
  writeln('wpisz 1 liczbę');
  read(c);
  Repeat
    b:=b+1;
    writeln('wpisz ',b:0:0,' liczbę');
    read(d);
    e:=d;
    c:=c+e;
  until b=a;
  writeln('wynik=',c:0:0);
  write('A jak chcesz wyjść to wpisz 1.');
  K:=readkey;
  clrscr;
until K='1';
end;

procedure odejmowanie;
Begin
repeat;
  clrscr;
  Write('Ile liczb będziesz odjąć?');
  readln(a);
  If a<=1 then noniebardzo;
  b:=1;
  writeln('wpisz 1 liczbę (od tej odejmujesz)');
  read(c);
  Repeat
    b:=b+1;
    writeln('wpisz ',b:0:0,' liczbę');
    read(d);
    e:=d;
    c:=c-e;
  until b=a;
  writeln('wynik=',c:0:0);
  write('A jak chcesz wyjść to wpisz 1.');
  K:=readkey;
  clrscr;
until K='1';
end;

procedure pot1;
Begin
    writeln('wynik=1');
    readkey;
    clrscr;
end;

procedure pot2;
Begin
  writeln('wynik=',c:0:0);
  readkey;
  clrscr;
end;

procedure pot3;
Begin
  Repeat
    f:=d;
    b:=b+1;
    e:=c*f;
    c:=e;
  until b=a;
   writeln('wynik=',c:0:0);
end;

procedure potegowanie;
Begin
repeat;
  clrscr;
  Write('Wpisz wykładnik!   ');
  readln(a);
  b:=1;
  write('A tu podstawe!     ');
  read(c);
  d:=c;
  If a=0 then pot1;

  If a=1 then pot2;
  
  If a>1 then pot3;

  write('A jak chcesz wyjść to wpisz 1.');
  k:=readkey;
  clrscr;
until K='1';
end;

function pierwiastek(liczba:real; stopien:integer):real;
begin
if(liczba>0)and(stopien>0) then
pierwiastek:= Exp((1/stopien)*LN(liczba))
else
pierwiastek:= 0;
end;


procedure pierwiastko;
begin
 repeat
 clrscr;
 write('Podaj stopien pierwiastka: ');
 readln(stopien);
 write('Podaj liczbe pod pierwiastkiem: ');
 readln(liczba);
 writeln('Pierwiastek ',stopien,' stopnia z ',liczba:0:2,' wynosi: ',pierwiastek(liczba,stopien):0:0,' a 0 to wyjście!');
 K:=readkey;
 until K='0';
end;

Procedure NWD;
Begin
while x<>y do
  if x>y then
    x:=x-y
  else
    y:=y-x;
end;

Procedure M;
Begin
repeat
clrscr;
 ReadLn(licznik);
 WriteLn('----');
 ReadLn(mianownik);
 WriteLn(' ');
 ReadLn(licznik2);
 WriteLn('----');
 ReadLn(mianownik2);
 
 x:=licznik*licznik2;
 y:=mianownik*mianownik2;
 a1:=x;
 b1:=y;
 
 If x<>y then NWD;

 Writeln('Wynik:');
 Writeln(a1/x:0:0);
 Writeln('----');
 Writeln(b1/x:0:0);
 readkey;
 Writeln('0, by wyjść');
 z:=readkey;
 until z='0';
 end;

Procedure Dz;
Begin
repeat
clrscr;
 ReadLn(licznik);
 WriteLn('----');
 ReadLn(mianownik);
 WriteLn(' ');
 ReadLn(licznik2);
 WriteLn('----');
 ReadLn(mianownik2);
 
 x:=licznik*mianownik2;
 y:=mianownik*licznik2;
 a1:=x;
 b1:=y;
 
 If x<>y then NWD;

 Writeln('Wynik:');
 Writeln(a1/x:0:0);
 Writeln('----');
 Writeln(b1/x:0:0);
 readkey;
 Writeln('0, by wyjść');
 z:=readkey;
 until z='0';
 end;

Procedure Dod;
Begin
repeat
clrscr;
 ReadLn(licznik);
 WriteLn('----');
 ReadLn(mianownik);
 WriteLn(' ');
 ReadLn(licznik2);
 WriteLn('----');
 ReadLn(mianownik2);
 
 x:=(licznik*mianownik2)+(licznik2*mianownik);
 y:=mianownik*mianownik2;
 a1:=x;
 b1:=y;
 
 If x<>y then NWD;

 Writeln('Wynik:');
 Writeln(a1/x:0:0);
 Writeln('----');
 Writeln(b1/x:0:0);
 readkey;
 Writeln('0, by wyjść');
 z:=readkey;
 until z='0';
 end;

Procedure Od;
Begin
repeat
clrscr;
 ReadLn(licznik);
 WriteLn('----');
 ReadLn(mianownik);
 WriteLn(' ');
 ReadLn(licznik2);
 WriteLn('----');
 ReadLn(mianownik2);
 
 x:=(licznik*mianownik2)-(licznik2*mianownik);
 y:=mianownik*mianownik2;
 a1:=x;
 b1:=y;
 If a1=0 then x:=1;
 If a1=0 then x:=1;
 If a1=0 then b1:=0;
 If a1<>b1 then NWD;
 
 Writeln('Wynik:');
 Writeln(a1/x:0:0);
 Writeln('----');
 Writeln(b1/x:0:0);
 readkey;
 Writeln('0, by wyjść');
 z:=readkey;
 until z='0';
 end;
 
procedure ulamki; 
Begin
repeat
  Tablica[1]:=' Dodawanie      ';
  Tablica[2]:=' Odejmowanie    ';
  Tablica[3]:=' Mnożenie       ';
  Tablica[4]:=' Dzielenie      ';
  Tablica[5]:=' Wyjście        ';
  ClrScr;
  TextColor(15);
  For c3:=1 to 5 do
    Begin
      TextColor(15);
      TextBackGround(0);
      GoToXY(32,11+c3);
      Write(tablica[c3]);
    End;
  c3:=1;
  Repeat
    TextColor(0);
    TextBackGround(15);
    GotoXY(32,11+c3);
    Write(tablica[c3]);
    c1:=ReadKey;
    c2:=' ';
    If c1=Chr(0) Then c2:=ReadKey;
    TextColor(15);
    TextBackGround(0);
    GotoXY(32,11+c3);
    Write(tablica[c3]);
    If c2='H' Then Dec(c3);
    If c2='P' Then Inc(c3);
    If c3=0 Then c3:=5;
    If c3=6 Then c3:=1;
    If c1=Chr(27) Then c3:=5;
  Until (c1=chr(27)) or (c1=chr(13));
  If c3=1 Then Dod;
  If c3=2 Then Od;
  If c3=3 Then M;
  If c3=4 Then Dz;
 Until c3=5;
 clrscr;
end;


Begin
repeat
  Tablica[1]:=' Mnożenie         ';
  Tablica[2]:=' Dodawanie        ';
  Tablica[3]:=' Odejmowanie      ';
  Tablica[4]:=' Potęgowanie      ';
  Tablica[5]:=' Pierwiastkowanie ';
  Tablica[6]:=' Silnia           ';
  Tablica[7]:=' Ułamki           ';
  Tablica[8]:=' Wyjście          ';
  ClrScr;
  TextColor(15);
  For c3:=1 to 8 do
    Begin
      TextColor(15);
      TextBackGround(0);
      GoToXY(32,11+c3);
      Write(tablica[c3]);
    End;
  c3:=1;
  Repeat
    TextColor(0);
    TextBackGround(15);
    GotoXY(32,11+c3);
    Write(tablica[c3]);
    c1:=ReadKey;
    c2:=' ';
    If c1=Chr(0) Then c2:=ReadKey;
    TextColor(15);
    TextBackGround(0);
    GotoXY(32,11+c3);
    Write(tablica[c3]);
    If c2='H' Then Dec(c3);
    If c2='P' Then Inc(c3);
    If c3=0 Then c3:=8;
    If c3=9 Then c3:=1;
    If c1=Chr(27) Then c3:=8;
  Until (c1=chr(27)) or (c1=chr(13));
  If c3=1 then mnozenie;
  If c3=2 then dodawanie;
  If c3=3 then odejmowanie;
  If c3=4 then potegowanie;
  If c3=5 then pierwiastko;
  If c3=6 then silnia;
  If c3=7 then ulamki;
until c3=8;
clrscr;
end.
-- 10 lut 2013, o 20:04 --

Zrobiłem tak, że działa.
Zaisntalowałem Geany pod Wine a ono (Geany) zrobiło taką magie:

Kod: Zaznacz cały

Kalk.pas(145,3) Warning: Automatic type conversion from floating type to COMP which is an integer type
I działa.

Re: Jak robić programy pod win7 64 w pascalu?

: 10 lut 2013, 20:47
autor: BPS
SchabMan pisze:
-- 10 lut 2013, o 20:04 --

Zrobiłem tak, że działa.
Zaisntalowałem Geany pod Wine a ono (Geany) zrobiło taką magie:

Kod: Zaznacz cały

Kalk.pas(145,3) Warning: Automatic type conversion from floating type to COMP which is an integer type
I działa.
:pt36:
Sprawa jest chyba jednak trochę bardziej pogmatwana.

na stronie http://www.freepascal.org/docs-html/user/userse62.html można przeczytać:

Kod: Zaznacz cały

Error: Illegal use of ’:’
You are using the format : (colon) 2 times on an expression that is not a real expression.
czyli operatora formatowania : nie można stosować przy zmiennych całkowitych.

Z komunikatu który podałeś, tzn:

Kod: Zaznacz cały

Kalk.pas(145,3) Warning: Automatic type conversion from floating type to COMP which is an integer type
wynika że typ comp to tak naprawdę typ całkowity więc zmienna c jednak jest integer :lol:

więc kompilator windowsowy słusznie zgłasza błędy, lecz kompilator linuxowy już je ignoruje :???:

Zmieniłem w twoim kodzie typ zmiennych a, b, c, e, f, d z comp na extended i program już kompiluje się również w wine. Jednak wine nie potrafi go uruchomić (ok, nie każdy program działa na wine :roll: ).

Co dziwniejsze program działam mi prawidłowo w debugerze wine, czyli kompiluję z opcją -g i robię:

Kod: Zaznacz cały

winegdb ./test.exe
i wszystko działa :roll:

Pisanie przenośnego kodu to trudne zadanie grubo wykraczające ponad moją wiedzę. Zdaje się że na różnych systemach operacyjnych typ comp jest tylko aliasem do innego typu, w windows najwyraźniej comp to inna nazwa typu Integer, a w linuxie typ comp to alias do typu...

echh wracam do pythona :(

:boat:

Re: Jak robić programy pod win7 64 w pascalu?

: 10 lut 2013, 22:11
autor: SchabMan
Tak więc temat do zamknięcia!
Nie dość, że wszystko działa, to jeszcze wiem dlaczego... no... w każdym razie mniej więcej wiem dlaczego.

Re: Jak robić programy pod win7 64 w pascalu?

: 15 lut 2013, 00:19
autor: velu
właściwie rzecz biorąc to wydaje mi się że to wina samego kompilatora a nie środowiska ani języka w którym piszesz. Miałem taką samą sytuację pod windowsem. chciałem skompilowac program ale za kazdym razem jak go odpalałem to wywalało mi błąd o kompatybilności (miałem win7 32bit). Cały problem polegał na tym że kompilator który był aktywny kompilował programy 64 bit przez co nie chciały mi działać żadne napisane przeze mnie programy nie ważne jak proste były.