[PASCAL] Jak skopiować kod? / Pomoc przy zamianie jednostek


(Rog1201) #1

Witam, chciałbym skopiować kod programu z turbo pascala 7.0 aby móc go umieścić na tym forum i spytać się o poradę dotyczącą tego kodu? Czy ktoś wie jak to zrobić?

Dziękuję :slight_smile:

A jeśli nie wiecie jak skopiować kod, to może kto mi powie co sądzi o programie zamieniającym jednostki długości polskich na angielskie. Bo ja napisałem na razie tylko kilometry na metry, cm, mile, jardy, stopy, cale : i już mam 80 linii kodu, a co dopiero jak to wszystkie kombinacje przerobie :slight_smile: Nie ma na to jakiejś pętli for? Bo ja nic nie potrafię wymyślić?


(=VND=) #2

Kod wklejasz pomiędzy znaczniki

. Plik z kodem zdaje się ma rozszerzenie .pas i można go otworzyć chociażby notatnikiem.

Zamień po prostu jednostkę czytaną w programie (tą którą przeliczasz) na jakąś inną zawsze stałą np. kilometry. Czyli gdy masz przeliczyć np. centymetry na wszystkie inne to przed obliczeniami jednostek zamieniasz centymetry na kilometry i masz ciągle te same wzory na jednostki.

Z Pascalem nie miałem do czynienia od bardzo dawna, więc przykład w pseudo kodzie:

(“jednostka” to typ jednostki który podał użytkownik ‘km,m,cm’ itd. a “wartosc” jak sama nazwa wskazuje ;))

if( jednostka==kilometry)

wartosc=wartosc;

if(jednostka==metry)

wartosc=wartosc*0.001;

if(jednostka==centymetry)

wartosc=wartosc*0.00001;

itd…

“wartosc” jest zawsze w kilometrach

a teraz przeliczenie jednostek:

km= wartosc*1;

m = wartosc*1000;

cm= wartosc*100000;

cal=wartosc*39370.078740;

yard=wartosc*1093.613298;

stopa= wartosc*3280.839895;

itd…


(Rog1201) #3

Dziękuję bardzo, że się mną zainteresowałeś :smiley:

Wiesz co takie zamienianie wszystkiego na jedną stałą jednostkę to nie wiem czy mi to coś więcej da niż już mam.

Oto co mam

program cos;

uses crt;

var

ab,ba:string;

a,b,c,d,e,f,g:string;

a1:real;

z,x,wynik:real;

petla:integer;



procedure dlugosc;

begin

petla:=1;

repeat

clrscr;

writeln ('a-kilometry, b-metry, c-centymetry, d-mile, e-jard, f-stopa, g-cale');

writeln ('podaj jednostke poczatkowo');

readln (ab);

writeln ('podaj jednostke koncowa');

readln(ba);

writeln('podaj dlugosc');

readln(a1);

if (ab='a') and (ba='a') then

begin

z:=1;

wynik:=z*a1;

writeln (a1:2:3,' kilometrow to ',wynik:2:3,' kilometrow');

end;

if (ab='a') and (ba='b') then

begin

z:=1000;

wynik:=z*a1;

writeln (a1:2:3,' kilometrow to ',wynik:2:3,' metrow');

end;

if (ab='a') and (ba='c') then

begin

z:=10000;

wynik:=z*a1;

writeln (a1:2:3,' kilometrow to ',wynik:2:3,' centymetrow');

end;

if (ab='a') and (ba='d') then

begin

z:=0.621371192;

wynik:=z*a1;

writeln (a1:2:3,' kilometrow to ',wynik:2:3,' mil');

end;

if (ab='a') and (ba='e') then

begin

z:=1093.61;

wynik:=z*a1;

writeln (a1:2:3,' kilometrow to ',wynik:2:3,' jardow');

end;

if (ab='a') and (ba='f') then

begin

z:=3280.83;

wynik:=z*a1;

writeln (a1:2:3,' kilometrow to ',wynik:2:3,' stop');

end;

if (ab='a') and (ba='g') then

begin

z:=39370.07;

wynik:=z*a1;

writeln (a1:2:3,' kilometrow to ',wynik:2:3,' cali');

end;

{if (ab='b') and (ba='a') then

begin

z:=3280.83;

wynik:=z*a1;

writeln (a1:2:3,' kilometrow to ',wynik:2:3,' stop');

end;}

readln;

writeln ('czy chcesz zakonczyc? 1-TAK 2-NIE');

readln(petla);

until petla=1;

end;

BEGIN

clrscr;

dlugosc;

END.

Co ty na to?

PS to który plik to jest w końcu właściwy plik programu ten z .bak czy pas. skoro mój pas się w notatniku otwiera?

Dodane 23.05.2009 (So) 17:31

Bo ja bym chciał żeby to użytkownik mógł sobie wybrać z jakich na jakie jednostki :slight_smile:

Muszę na chwilę wyjść wracam za godzinę


(=VND=) #4

Pliki z rozszerzeniem bak to zwykle kopia zapasowa.

Co Ci da zamiana na zawsze taką samą jednostkę? Ano nie musisz podawać różnych wartości zmiennej z.

Program blokowo wygląda tak:

Zczytanie danych od użytkownika.

Sekwencja if(ab=…) - tyle ile różnych jednostek przeliczasz.

przeliczenie jednostek. (wszystkich)

Wypisanie wyniku.

program cos;

uses crt;

var

ab,ba:string;

a,b,c,d,e,f,g:string;

napis1,napis2:string;

a1,a2,wynik:real;

km,m,cm,stopa,cal,mila,jard:real;

petla:integer;



procedure dlugosc;

begin

petla:=1;

repeat

clrscr;

writeln ('a-kilometry, b-metry, c-centymetry, d-mile, e-jard, f-stopa, g-cale');

writeln ('podaj jednostke poczatkowo');

readln (ab);

writeln ('podaj jednostke koncowa');

readln(ba);

writeln('podaj dlugosc');

readln(a1);

a2:=a1;


if (ab='a') then

a2:=a2;

if (ab='b') then

a2:=a2*0.001;

if (ab='c') then

a2:=a2*0.00001;

if (ab='d') then

a2:=a2*1.609344;

if (ab='e') then

a2:=a2*0.000914;

if (ab='f') then

a2:=a2*0.000305;

if (ab='g') then

a2:=a2*0.000025;


km:=a2;

m:=a2*1000;

cm=a2*100000;

cal=a2*39370.078740;

jard=a2*1093.613298;

stopa=a2*3280.839895;

mila=a2*0.621371;


if (ab='a') then napis1:="kilometrow to";

if (ab='b') then napis1:="metrow to";

if (ab='c') then napis1:="centymetrow to";

if (ab='d') then napis1:="mil to";

if (ab='e') then napis1:="jardow to";

if (ab='f') then napis1:="stop to";

if (ab='g') then napis1:="cali to";

if (ba='a') then napis2:=" kilometrow";

if (ba='b') then napis2:=" metrow";

if (ba='c') then napis2:=" centymetrow";

if (ba='d') then napis2:=" mil";

if (ba='e') then napis2:=" jardow";

if (ba='f') then napis2:=" stop";

if (ba='g') then napis2:=" cali";

if (ba='a') then wynik:=km;

if (ba='b') then wynik:=m;

if (ba='c') then wynik:=cm;

if (ba='d') then wynik:=mila;

if (ba='e') then wynik:=jard;

if (ba='f') then wynik:=stopa;

if (ba='g') then wynik:=cal;



writeln (a1:2:3,napis1,wynik:2:3,napis2);


readln;

writeln ('czy chcesz zakonczyc? 1-TAK 2-NIE');

readln(petla);

until petla=1;

end;

BEGIN

clrscr;

dlugosc;

END.

(Rog1201) #5

Normalnie jesteś genialny :smiley: Dzięki wielkie

To może jeszcze jedno pytanie jak mam zapisac program aby był on typu .exe taki wykonywalny bez zainstalowanego na komputerze pascala? Da się tak?

PS taka maluteńka uwaga, w pascalu napis to writeln (’ pojedynczy cudzysłów czy jaką to ma nazwę ');

Jeszcze raz dzięki :slight_smile:


([alex]) #6

Często warto stablicować niektóre dane aby kod był krótszy i szybszy:

program Jednostki;uses crt;