Thread View: pl.comp.lang.pascal
13 messages
13 total messages
Started by przymek
Thu, 26 Apr 2007 13:16
Turbo Pascal do C++ -- jak przekonwertować??
Author: przymek
Date: Thu, 26 Apr 2007 13:16
Date: Thu, 26 Apr 2007 13:16
374 lines
11085 bytes
11085 bytes
Czy ktoś potrafi poprawnie przetłumaczyć program w języku Turbo Pascal
na język C++ ? Ja użyłem do tego programu PTOC ale wywala b. dużo
błędów. Oto program:
program mes8;
uses Crt,Printer,Graph;
label poczatek,wybierz;
var alarm,mod1,driver,mode,kx,ky:integer;
ii,n,ik,jk,iz,jj,lh,nw1,el,gq,es,nt,qe,nc:integer;
i,j,i1,mg,tr,n9,nf:integer;
skala,kn,hl,it,r1,r,qg,r2,kr,q,cn:real;
a:array[1..13,1..2] of real;
qt,c:array[1..13] of real;
qw,rt:array[1..11] of real;
ns:array[1..2] of integer;
nw:array[1..3] of integer;
nq:array[1..2] of real;
k:array[1..2,1..2] of real;
sq:array[1..2] of real;
ch,xc:char;
druk,pyt,wyniki:boolean;
procedure ok;
begin
writeln;
writeln('Czy jestes zadawolony z danych, ktore ostatnio podales?');
write(' Nacisnij T/N : '); readln(xc);
writeln
end;
procedure ekran;
begin
while keypressed do xc:=readkey;
textcolor(4);
writeln(' Nacisnij dowolony klawisz !');
normvideo;
for alarm:=1 to 3 do
begin
sound(1000); delay(300); sound(500); delay(300);
end;
nosound;
repeat until keypressed;
clrscr;
end;
procedure Draw(x1,y1,x2,y2,color:word);
begin
setcolor(color);
graph.line(x1,y1,x2,y2);
end;
procedure fillshape(x,y,tlo,brzeg:word);
begin
setfillstyle(solidfill,tlo); floodfill(x,y,brzeg)
end;
procedure drukarka;
begin
druk:=false;
setviewport(8,88,224,152,clipon);
draw(0,0,216,0,15); draw(0,0,0,64,15);
draw(216,64,0,64,15); draw(216,64,216,0,15);
fillshape(100,50,1,15); draw(5,5,211,5,15);
draw(5,5,5,59,15); draw(211,59,5,59,15);
draw(211,59,211,5,15); outtextxy(25,20, 'Czy uzywasz
drukarki????????');
outtextxy(90,40,' T/N : ');
repeat
xc:=readkey;
until (xc='t') or (xc='n') or (xc='T') or (xc='N');
if (xc='t') or (xc='T') then druk:=true; clearviewport
end;
procedure pytanie;
begin
pyt:=false; setviewport(220,170,390,250,clipon);
draw(0,0,170,0,14); draw(0,0,0,80,40);
draw(170,80,0,80,14); draw(170,80,170,0,14);
fillshape(100,50,4,14); draw(5,5,165,5,14);
draw(5,5,5,75,14); draw(165,75,5,75,14);
draw(165,75,165,5,14);
outtextxy(15,20,'Czy jestes pewny ?????'); outtextxy(65,40,'T/
N : ');
repeat
xc:=readkey;
until (xc='t') or (xc='n') or (xc='T') or (xc='N');
if (xc='t') or (xc='T') then pyt:=true; clearviewport
end;
procedure klawisz(kx,ky:integer);
var
kxk,kyk:integer;
begin
draw(kx,ky,kx,ky-42,1); draw(kx,ky,kx+8,ky-8,1);
draw(kx,ky,kx+106,ky,1); draw(kx+8,ky-34,kx,ky-42,1);
draw(kx,ky-42,kx+106,ky-42,1); draw(kx+8,ky-8,kx+98,ky-8,1);
draw(kx+8,ky-8,kx+8,ky-34,1); draw(kx+8,ky-34,kx+98,ky-34,1);
kxk:=kx+106; kyk:=ky-42;
draw(kxk,kyk,kxk-8,kyk+8,1); draw(kxk,ky,kxk,kyk,1);
draw(kxk,ky,kxk-8,ky-8,1); draw(kxk-8,ky-8,kxk-8,kyk+8,1);
fillshape(kx+4,ky-21,15,1); fillshape(kx+53,kyk+4,15,1);
fillshape(kx+53,ky-25,15,1); fillshape(kx+53,ky-4,8,1);
end;
procedure model;
begin
cleardevice; skala:=100/rt[n]; draw(220,280,420,280,2);
for mod1:=1 to n-1 do
begin
circle(320,120,trunc(rt[mod1]*skala));
circle(320,120,trunc(rt[mod1+1]*skala));
fillshape(320+trunc(((rt[mod1]+rt[mod1+1])/2)*skala),120,14,2)
end;
for mod1:=1 to n do
begin
circle(320-trunc(rt[mod1]*skala),280,3);
circle(320+trunc(rt[mod1]*skala),280,3)
end;
setcolor(12); circle(10,220,3);
settextstyle(triplexfont,horizdir,1);
outtextxy(20,210, 'Pozycja zrodla lub upustu');
for mod1:=1 to nc do
begin
circle(320-trunc(rt[nw[mod1]]*skala),280,3);
circle(320+trunc(rt[nw[mod1]]*skala),280,3)
end
end;
procedure sub1;
begin
for ii:=1 to n do
begin
ik:=ii;
ik:=ik+1;
kn:=a[ii,2]/a[ii,1];
jk:=0;
jk:=jk+1;
a[ik,jk]:=a[ik,jk]-kn*a[ii,2];
a[ii,2]:=kn;
c[ik]:=c[ik]-kn*c[ii];
c[ii]:=c[ii]/a[ii,1]
end;
for iz:=2 to n do
begin
ii:=n-iz+1;
jj:=ii+1;
c[ii]:=c[ii]-a[ii,2]*c[jj]
end;
end;
procedure sub2;
begin
clrscr;
repeat
writeln('Jezeli HL posiada wartosc LH=1, jezeli nie LH=0 , LH = ');
readln(lh);
until (lh=0) or (lh=1);
case lh=1 of
true: begin
write('HL = ');
readln(hl);
write(chr(232),'[',chr(236),'] = ');
readln(it);
if el=1 then
begin
k[1,1]:=k[1,1]+2*pi*r1*hl;
r:=r1;
sq[1]:=sq[1]+2*pi*hl*r*it
end;
if el=es then
begin
k[2,2]:=k[2,2]+2*pi*r2*hl;
r:=r2;
sq[2]:=sq[2]+2*pi*hl*r*it
end;
end;
false: begin
repeat
write('Jezeli QG ma wartosc-GQ=1,jezeli nie-GQ=0, GQ = ');
readln(gq);
until (gq=0) or (gq=1);
if gq<>0 then
begin
write('qG = ');
readln(qg);
if el=1 then
begin
r:=r1;
sq[1]:=sq[1]-2*pi*r*qg
end;
if el=es then
begin
r:=r2;
sq[2]:=sq[2]-2*pi*r*qg
end;
end;
end;
end
end;
begin
poczatek:
for i:=1 to 13 do
begin
qt[i]:=0;
c[i]:=0;
for j:=1 to 2 do a[i,j]:=0
end;
for i:=1 to 2 do
begin
nq[i]:=0;
ns[i]:=0;
sq[i]:=0;
for j:=1 to 2 do k[i,j]:=0
end;
for i:=1 to 11 do
begin
qw[i]:=0;
rt[i]:=0
end;
for i:=1 to 3 do nw[i]:=0;
ii:=0;n:=0;ik:=0;jk:=0;nw1:=0;iz:=0;jj:=0;lh:=0;el:=0;gq:=0;nt:=0;
qe:=0;nc:=0;el:=0;i:=0;j:=0;i1:=0;mg:=0;tr:=0;n9:=0;
kn:=0;hl:=0;it:=0;r1:=0;r:=0;qg:=0;r2:=0;kr:=0;q:=0;cn:=0;es:=0;
while keypressed do xc:=readkey;
write('Liczba elementow, ES = ');
readln(es);
repeat
writeln('Liczba elementow dla ktorych znana jest wartosc '+chr(232)+',
NF = ');
readln(nf);
until (nf=0) or (nf=1) or (nf=2);
nw1:=2;n:=es+1;nt:=n+nw1;
write('stala K=');
readln(kr);
repeat
write('Jezeli Q jest stala lub zerem QE=0, jezeli nie QE=1, QE = ');
readln(qe);
until (qe=0) or (qe=1);
if qe=0 then write('Q = ');
readln(q); ok;
CLRSCR; writeln('Wartosc promieni granicznych :');
writeln('___________________________');
repeat
for ii:=1 to n do
begin
write('Promien w miejscu wezla [m], R = ');
readln(rt[ii]);
end; ok;
until (xc='t') or (xc='T');
if nf<>0 then
begin
for ii:=1 to nf do
begin
repeat
write('Pozycja wezlowa przemieszczenia ustalonego, NS
= ');
readln(ns[ii]);
until (ns[ii]=1) or (ns[ii]=n);
write('Wartosc funkcji '+chr(232)+' , '+chr(232)+' =
');
readln(nq[ii]);
end;
end;
write('Liczba zrodel lub upustow ');
readln(nc);
if nc<>0 then
for ii:=1 to nc do
begin
write('Wezlowa pozycja zrodla, NW = ');
readln(nw[ii]);
write('Wartosc zrodla, QW = ');
readln(qw[nw[ii]]);
end;
for el:=1 to es do
begin
i:=el;
j:=i+1;
if qe<>0 then
begin
write('Wartosc Q dla elementu ,Q = ');
write('Wartosc Q =');
readln(q);
end;
r1:=rt[i];
r2:=rt[j];
cn:=2*pi*kr*(r2*r2*r2-r1*r1*r1)/(3*(r2-r1)*(r2-r1));
k[1,1]:=cn;
k[2,2]:=cn;
k[1,2]:=-cn;
k[2,1]:=-cn;
if q<>0 then
begin
sq[1]:=pi*q*(r2*r2*r2*r2-4*r1*r1*r1*r2+3*r1*r1*r1*r1);
sq[1]:=sq[1]/(6*(r2-r1));
sq[2]:=pi*q*(3*r2*r2*r2*r2-4*r2*r2*r2*r1+r1*r1*r1*r1);
sq[2]:=sq[2]/(6*(r2-r1))
end;
if (ns[1]<>1) and (el=1) then sub2;
if (ns[1]<>n) and (ns[2]<>n) and (el=es) then sub2;
i1:=i-1;
for ii:=1 to 2 do
begin
for jj:=ii to 2 do
begin
mg:=i1+ii;
tr:=i1+jj-mg+1;
a[mg,tr]:=a[mg,tr]+k[ii,jj]
end;
qt[mg]:=qt[mg]+sq[ii]
end;
end;
if nc<>0 then for ii:=1 to n do qt[ii]:=qt[ii]+qw[ii];
if nf<>0 then
for ii:=1 to nf do
begin
n9:=ns[ii];
qt[n9]:=1e12*nq[ii]*a[n9,1];
a[n9,1]:=a[n9,1]*1e12
end;
for ii:=1 to n do c[ii]:=qt[ii];
sub1;
wybierz:
clrscr;
writeln('Wartosci funkcji ',chr(232),' :');
writeln('_____________________');
writeln;
for ii:=1 to n do
begin
writeln(chr(232),'[',ii,']=',c[ii]:3:4)
end;
writeln;
ekran;
if druk=true then
begin
writeln(lst,'Wartosci funkcji Fi :');
writeln(lst,'_____________________');
writeln(lst);
for ii:=1 to n do
begin
writeln(lst,'Fi[',ii,']=',c[ii]:3:4)
end;
end;
end.
Jeśli ktoś potrafi to proszę o kontakt- przymek@o2.pl.
Oczywiście NIE ZA DARMO!
Re: Turbo Pascal do C++ -- jak przekonwertować??
Author: Łukasz 'Maly' Ostrowski
Date: Thu, 26 Apr 2007 13:54
Date: Thu, 26 Apr 2007 13:54
38 lines
2169 bytes
2169 bytes
przymek wrote: > Czy ktoś potrafi poprawnie przetłumaczyć program w języku Turbo Pascal > na język C++ ? Ja użyłem do tego programu PTOC ale wywala b. dużo > błędów. Oto program: > program mes8; > uses Crt,Printer,Graph; > label poczatek,wybierz; > var alarm,mod1,driver,mode,kx,ky:integer; > ii,n,ik,jk,iz,jj,lh,nw1,el,gq,es,nt,qe,nc:integer; > i,j,i1,mg,tr,n9,nf:integer; > skala,kn,hl,it,r1,r,qg,r2,kr,q,cn:real; > a:array[1..13,1..2] of real; > qt,c:array[1..13] of real; > qw,rt:array[1..11] of real; > ns:array[1..2] of integer; > nw:array[1..3] of integer; > nq:array[1..2] of real; > k:array[1..2,1..2] of real; > sq:array[1..2] of real; > ch,xc:char; > druk,pyt,wyniki:boolean; > <ciach> 1. Ło kurwa mać - że się tak kolokwialnie wyrażę, tak heavily obfuscated Pascala i tak fatalnego stylu pisania nie widziałem od czasów drugiej wojny światowej. 2. Masakra. Zostawie to sobie w archiwum złotych-myśli-Pascala. ;). 3. NTG: news:pl.praca.oferowana -- Pozdrawiam, Łukasz 'Maly' Ostrowski. http://maly.nemo.pl/
Re: Turbo Pascal do C++ -- jak przekonwertować??
Author: przymek
Date: Fri, 27 Apr 2007 07:55
Date: Fri, 27 Apr 2007 07:55
3 lines
1404 bytes
1404 bytes
Hehe no spoko rozumiem - ale to nie ja pisałem, widze że to "sieczka" - ale działa :) Kumple potrzebują mieć to w C++ i tyle.
Re: Turbo Pascal do C++ -- jak przekonwertować??
Author: Wiktor S.
Date: Fri, 27 Apr 2007 09:13
Date: Fri, 27 Apr 2007 09:13
11 lines
1277 bytes
1277 bytes
> Hehe no spoko rozumiem - ale to nie ja pisałem, widze że to "sieczka" > - ale działa :) Program nie działa. Albo może powiedz - co on w ogóle robi? Czym są te magiczne wartości? Po podaniu jakichś program się wywala. -- Azarien
Re: Turbo Pascal do C++ -- jak przekonwertować??
Author: przymek
Date: Fri, 27 Apr 2007 14:54
Date: Fri, 27 Apr 2007 14:54
14 lines
1839 bytes
1839 bytes
> Program nie działa. Albo może powiedz - co on w ogóle robi? Czym są te > magiczne wartości? > > Po podaniu jakichś program się wywala. Mi działa- znaczy kompiluje i uruchamia się na pewno w Turbo Pascal 7.0. Nie wiem co ten program robi, pewnie jakieś obliczenia i prosty rysunek? Wiem tylko że znajomi są na budownictwie :) Jesli ktoś jest zainteresowany przetłumaczeniem tego, to może podam nr GG jednego ze znajomych ? 8903444- Kryspin.
Re: Turbo Pascal do C++ -- jak przekonwertować??
Author: lukasz.tomczyk
Date: Mon, 28 May 2007 20:27
Date: Mon, 28 May 2007 20:27
45 lines
2669 bytes
2669 bytes
case lh=1 of
true: begin
write('HL = ');
readln(hl);
write(chr(232),'[',chr(236),'] = ');
readln(it);
if el=1 then
begin
k[1,1]:=k[1,1]+2*pi*r1*hl;
r:=r1;
sq[1]:=sq[1]+2*pi*hl*r*it
end;
if el=es then
begin
k[2,2]:=k[2,2]+2*pi*r2*hl;
r:=r2;
sq[2]:=sq[2]+2*pi*hl*r*it
end;
end;
false: begin
repeat
write('Jezeli QG ma wartosc-GQ=1,jezeli nie-GQ=0, GQ = ');
readln(gq);
until (gq=0) or (gq=1);
if gq<>0 then
begin
write('qG = ');
readln(qg);
if el=1 then
begin
r:=r1;
sq[1]:=sq[1]-2*pi*r*qg
end;
if el=es then
begin
r:=r2;
sq[2]:=sq[2]-2*pi*r*qg
end;
end;
end;
end
end;
ciekawe zastosowanie instrukcji case... nie lepiej if .. else ?? :D
Re: Turbo Pascal do C++ -- jak przekonwertować??
Author: Wiktor S.
Date: Mon, 28 May 2007 20:45
Date: Mon, 28 May 2007 20:45
59 lines
2502 bytes
2502 bytes
> ciekawe zastosowanie instrukcji case... nie lepiej if .. else ?? :D
czasami jest przejrzyściej :-)
ostatnio musiałem przerobić wszystkie kombinacje czterech zmiennych boolean.
Zamiast tak
if a then
begin
if b then
begin
if c then
begin
if d
then foo
else bar;
end else begin
if d
then foo
else bar;
end;
end else begin
.
.
.
.
przejrzyściej wyglądało
case a of
true : case b of
true : case c of
true : case d of
true : foo;
false : bar;
false : case d of
true : foo;
false : bar;
end;
false : case c of
true : case d of
true : foo;
false : bar;
false : case d of
true : foo;
false : bar;
end;
end;
false :
itd.
end;
Później wszystkie "false" zastąpiłem przez "else", by kod wykonywał się
odrobinę szybciej (powinien - nie mierzyłem).
--
Azarien
Re: Turbo Pascal do C++ -- jak przekonwertować??
Author: Wiktor S.
Date: Mon, 28 May 2007 20:51
Date: Mon, 28 May 2007 20:51
25 lines
1793 bytes
1793 bytes
> przejrzyściej wyglądało
>
> case a of
oczywiście trochę endów zabrakło :-) prawidłowo jest
case a of
true : case b of
true : case c of
true : case d of
true : foo;
false : bar;
end;
false : case d of
true : foo;
false : bar;
end;
end;
false :
itd.
--
Azarien
[OT] Przy okazji zagadka: Re: Turbo Pascal do C++ -- jak przekonwertować??
Author: Magda S
Date: Fri, 31 Aug 2007 17:20
Date: Fri, 31 Aug 2007 17:20
21 lines
1514 bytes
1514 bytes
Czy ten case jest naprawdę równoważny odpowiedniemu ifowi (if lh=1
....)? Czy może nie?
case lh=1 of
true:
begin
end;
false:
begin
end;
ELSE
begin
// w jakich warunkach wykona się ten fragment?
end;
end;
Re: [OT] Przy okazji zagadka: Re: Turbo Pascal do C++ -- jak przekonwertować??
Author: Terrmit
Date: Sat, 01 Sep 2007 21:40
Date: Sat, 01 Sep 2007 21:40
1 lines
1262 bytes
1262 bytes
Podaj jak wygląda to dokłanie w C++
Re: [OT] Przy okazji zagadka: Re: Turbo Pascal do C++ -- jak przekonwertować??
Author: Magda S
Date: Sat, 01 Sep 2007 21:52
Date: Sat, 01 Sep 2007 21:52
3 lines
1338 bytes
1338 bytes
Terrmit pisze: > Podaj jak wygląda to dokłanie w C++ Mowa o Turbo Pascalu.
Re: [OT] Przy okazji zagadka: Re: Turbo Pascal do C++ -- jak przekonwertować??
Author: Terrmit
Date: Mon, 03 Sep 2007 18:22
Date: Mon, 03 Sep 2007 18:22
8 lines
1606 bytes
1606 bytes
Magda S napisał(a): > Terrmit pisze: >> Podaj jak wygląda to dokłanie w C++ > Mowa o Turbo Pascalu. A racja, zamotałem się. Ale tego kodu nie kumam. Według mnie to kod po ELSE nigdy się nie wykona, bo z równości lh=l może wyniknąć tylko true lub false. W każdym razie nie widzę innej możliwości.
Re: [OT] Przy okazji zagadka: Re: Turbo Pascal do C++ -- jak przekonwertować??
Author: Wiktor S.
Date: Mon, 03 Sep 2007 21:53
Date: Mon, 03 Sep 2007 21:53
11 lines
1470 bytes
1470 bytes
Magda S wrote: > Czy ten case jest naprawdę równoważny odpowiedniemu ifowi (if lh=1 > ....)? Czy może nie? > poniższy case jest "niegramatyczny" - nie kompiluje się, wjęc równoważny nie jest. -- Azarien
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads