🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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ć??
#91702
Author: przymek
Date: Thu, 26 Apr 2007 13:16
374 lines
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ć??
#91703
Author: Łukasz 'Maly' Ostrowski
Date: Thu, 26 Apr 2007 13:54
38 lines
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ć??
#91704
Author: przymek
Date: Fri, 27 Apr 2007 07:55
3 lines
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ć??
#91705
Author: Wiktor S.
Date: Fri, 27 Apr 2007 09:13
11 lines
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ć??
#91706
Author: przymek
Date: Fri, 27 Apr 2007 14:54
14 lines
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ć??
#91707
Author: lukasz.tomczyk
Date: Mon, 28 May 2007 20:27
45 lines
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ć??
#91708
Author: Wiktor S.
Date: Mon, 28 May 2007 20:45
59 lines
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ć??
#91709
Author: Wiktor S.
Date: Mon, 28 May 2007 20:51
25 lines
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ć??
#91710
Author: Magda S
Date: Fri, 31 Aug 2007 17:20
21 lines
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ć??
#91711
Author: Terrmit
Date: Sat, 01 Sep 2007 21:40
1 lines
1262 bytes
Podaj jak wygląda to dokłanie w C++
Re: [OT] Przy okazji zagadka: Re: Turbo Pascal do C++ -- jak przekonwertować??
#91712
Author: Magda S
Date: Sat, 01 Sep 2007 21:52
3 lines
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ć??
#91713
Author: Terrmit
Date: Mon, 03 Sep 2007 18:22
8 lines
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ć??
#91714
Author: Wiktor S.
Date: Mon, 03 Sep 2007 21:53
11 lines
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