Jak robić programy pod win7 64 w pascalu?

Bash, C, C++, Java, PHP, Ruby, GTK, Qt i wiele innych - wszystko tutaj.
Awatar użytkownika
tristan
Wytworny Kaczor
Wytworny Kaczor
Posty: 333
Rejestracja: 04 maja 2005, 21:46
Wersja Ubuntu: 22.10
Środowisko graficzne: GNOME
Architektura: x86_64

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

Post 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.
norvoles
Przebojowy Jelonek
Przebojowy Jelonek
Posty: 1113
Rejestracja: 04 sty 2008, 20:58
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: Inne
Architektura: x86_64

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

Post 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.
Awatar użytkownika
ethanak
Wygnańcy
Posty: 3054
Rejestracja: 04 gru 2007, 13:19
Płeć: Mężczyzna
Wersja Ubuntu: 12.04
Środowisko graficzne: GNOME
Architektura: x86
Lokalizacja: Bielsko-Biała
Kontakt:

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

Post 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
SchabMan
Sędziwy Jeż
Sędziwy Jeż
Posty: 39
Rejestracja: 16 lut 2012, 14:15
Płeć: Mężczyzna
Wersja Ubuntu: 17.04
Środowisko graficzne: Unity
Architektura: x86_64
Kontakt:

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

Post 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.
Ostatnio zmieniony 10 lut 2013, 17:51 przez SchabMan, łącznie zmieniany 1 raz.
Awatar użytkownika
ethanak
Wygnańcy
Posty: 3054
Rejestracja: 04 gru 2007, 13:19
Płeć: Mężczyzna
Wersja Ubuntu: 12.04
Środowisko graficzne: GNOME
Architektura: x86
Lokalizacja: Bielsko-Biała
Kontakt:

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

Post autor: ethanak »

ot, widzisz, wydawało ci się ;)
SchabMan
Sędziwy Jeż
Sędziwy Jeż
Posty: 39
Rejestracja: 16 lut 2012, 14:15
Płeć: Mężczyzna
Wersja Ubuntu: 17.04
Środowisko graficzne: Unity
Architektura: x86_64
Kontakt:

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

Post autor: SchabMan »

Już mi się nie wydaje. Na pewno jest dobrze.
Tylko jak to skompilować?
Awatar użytkownika
ethanak
Wygnańcy
Posty: 3054
Rejestracja: 04 gru 2007, 13:19
Płeć: Mężczyzna
Wersja Ubuntu: 12.04
Środowisko graficzne: GNOME
Architektura: x86
Lokalizacja: Bielsko-Biała
Kontakt:

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

Post autor: ethanak »

pisałem wyżej jak się kompiluje programy w paszczalu. nie doczytałeś?
SchabMan
Sędziwy Jeż
Sędziwy Jeż
Posty: 39
Rejestracja: 16 lut 2012, 14:15
Płeć: Mężczyzna
Wersja Ubuntu: 17.04
Środowisko graficzne: Unity
Architektura: x86_64
Kontakt:

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

Post 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.
Awatar użytkownika
ethanak
Wygnańcy
Posty: 3054
Rejestracja: 04 gru 2007, 13:19
Płeć: Mężczyzna
Wersja Ubuntu: 12.04
Środowisko graficzne: GNOME
Architektura: x86
Lokalizacja: Bielsko-Biała
Kontakt:

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

Post 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?
Awatar użytkownika
BPS
Piegowaty Guziec
Piegowaty Guziec
Posty: 21
Rejestracja: 20 sty 2013, 19:45
Płeć: Mężczyzna
Wersja Ubuntu: 12.10
Środowisko graficzne: GNOME
Architektura: x86_64

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

Post 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.
SchabMan
Sędziwy Jeż
Sędziwy Jeż
Posty: 39
Rejestracja: 16 lut 2012, 14:15
Płeć: Mężczyzna
Wersja Ubuntu: 17.04
Środowisko graficzne: Unity
Architektura: x86_64
Kontakt:

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

Post 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.
Awatar użytkownika
BPS
Piegowaty Guziec
Piegowaty Guziec
Posty: 21
Rejestracja: 20 sty 2013, 19:45
Płeć: Mężczyzna
Wersja Ubuntu: 12.10
Środowisko graficzne: GNOME
Architektura: x86_64

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

Post 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:
SchabMan
Sędziwy Jeż
Sędziwy Jeż
Posty: 39
Rejestracja: 16 lut 2012, 14:15
Płeć: Mężczyzna
Wersja Ubuntu: 17.04
Środowisko graficzne: Unity
Architektura: x86_64
Kontakt:

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

Post 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.
velu
Piegowaty Guziec
Piegowaty Guziec
Posty: 8
Rejestracja: 02 paź 2007, 22:16
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: Unity
Architektura: x86_64

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

Post 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.
ODPOWIEDZ

Wróć do „Programowanie”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 0 gości