FUNKCJE
AZYMUT
Wyznaczenie azymutu linii (majac wspolrzedne poczatku i konca)
Program azymut;
Uses crt;
Var xp, yp, xk, yk,: real;
Dx,dy,az,cz:real;
Label druk, 10;
Begin
Clrscr;
10:
Writeln(`podaj x i y punktu początkowego p');
Readln(xp,yp);
Writeln (`podaj x i y punktu koncowego k');
Readln (xk,yk);
Dx:=xk-xp;
Dy:=yk-yp;
If dx>=0 and dy>0 then
Begin
Writeln (`prosta nie istnieje');
Readln;
Gog\to 10;
End;
If dx=0
And dy>0 then
Begin
Az:=0.5*PI;
Goto druk;
End;
If dx=0 and dy<0 then
Begin
Az:=1.5*PI;
Goto druk;
End;
Cz:=arctan(dx/Dy);
If dx>0 and Dy>0 then
Begin
Az:=cz:
End;
If dx<0 and dy>=0 then
Begin
Az:=Pi-abs(cz);
Goto druk;
End;
If dx<0 and dy<0 yhen
Begin
Az:=PI+ABS(cz);
Goto druk;
End;
If dx>0 And dy<0 then
Begin
Az:=2*PI- abs(cz);
Goto druk;
End;
Druk:
Writeln (`azymut=', Az*200/PI:10:4);
Readln;
End.
WCIECIA
Uses crt;
Var xa, ya,xb,yb,xp,yp,a,b:Real;
Dx,dy,c,ca,cb,cc,p4:real;
BEGIN
CLRSCR;
WRITELN ('Podaj X, Y punktu prawego');
READLN (XA, YA);
WRITELN(`Podaj X, Y punktu lewego');
READLN( XB, YB);
DX:=XB-XA;
DY:=YB-YA;
IF (DX = 0) AND (DY = 0) THEN
BEGIN
WRITELN(`ZťE DANE');
READLN;
EXIT;
END;
WRITELN(`PODAJ PDLEGLOSCI OD PUNKTU PRAWEGO');
READLN(A);
WRITELN(`PODAJ ODLEGLOSC OD PUNKTU LEWEGO');
READLN(B);
C:= SQRT(SQR(DX)+SQR(DY));
IF (A+B)<=C)OR(A+C)<=A THEN
BEGIN
WRITELN (`ZLE ODLEGLOSCI');
READLN;
EXIT
END;
CA:=B*B+C*C-A*A;
CA:=(-B*B)+C*C+A*A;
CA:=B*B-C*C+A*A;
P4:=SQRT(CA*CB+CB*CC+CA*CC);
XP:=(XA*CB+XB*CA+P4*(YA-YB)/(CA+CB);
YP:=(YA*CB+YB*CA+P4*(XA-XB)/(CA+CB);
WRITELN(`XP=',XP:10:2);
WRITELN(`YYP=',YP:10:2);
READLN
END.
WYZNACZYC FUNKCEJ POROWNAC WARTOSCI TYCH FUNKCJI WYPROWADZIC FUNKCJE O WIEKSZEJ WARTOSCI
PROGRAM FUNKCJA;
USES CRT;
VAR F1,F2,SN.X:REAL;
N,K:INTEGER;
BEGIN
CLRSCR;
WRITELN(PODAJ N');
READLN(N);
WRITELN(`PODAJ X');
READLN(X);
SN:=1;
FOR K:=2 TO N DO
BEGIN
SN:=SN*K;
END;
F1:=SN*SQR(SIN(X));
F2:=SN*SQR(COS(X));
IF F1>F2 THEN
BEGIN
WRITELN(`F2', F2:0:5);
READLN(F2);
END;
END.
WYZNACZANIE WIELU PTK NA PROSTEJ
WYZNACZANIE WSP;
USES CRT;
VAR X1,X2,Y1,Y2,D,DX12,DY12,DX1P,DY1P,L,CA,SA,SP,YP,XP:REAL;
VAR N,K:INTEGER;
BEGIN
CLRSCR;
WRITELN(`LICZBA WYZNACZANYCH PUNKTOW W');
READLN(N);
WRITELN(`PODAJ X I Y PTK POCZATKOWEGO I KONCOWEGO');
READLN(X1,Y1,X2,Y2);
DX12:=X2-X1;
DY12:=Y2-Y1;
IF DX12=0 AND DY12=0 THEN
BEGIN
WRITELN(`ZLE X Y');
READLN;
EXIT
END;
L:=SQRT(DX12*DX12+DY12*DY12);
CA:=DX12/L;
SA:=DY12/L;
FOR K:=1 TO N DO
BEGIN
WRITELN(`ODLEGLOSC OD PUNKTU WYZNACZONEGO');
READLN(D);
DX1P:=D*CA;
DY1P:D*SA;
XP:=X1+DX1P;
YP:=Y1+DY1P;
WRITELN(`X=',XP:0:2);
WRITELN(`Y=',YP:0:2);
END;
READLN
END.
TABLICE
SORTOWANIE liczb w sposób rosnacy
Uses crt;
Var
L:ARRAY[1..20] OF REAL;
N,K,M:INTEGER;
R:REAL;
BEGIN
CLRSCR;
WRITELN (`ILOŚĆ LICZB');
READLN(N);
FOR K:=1 TO N DO
BEGIN
WRITE (`LICZBA',K:2,'');
READLN(l[K]);
END;
{SORTOWANIE}
FOR K:=1 TO N-1 DO
FOR M:=K+1 TO N DO
IF L[K]>L[M] THEN
BEGIN
R:=1[K];
L[K]:=L[M];
L[M]:=R;
END;
WRITELN (ZBIOR POSORTOWANY');
FOR K:=1 TO N DO
WRITELN (L[K]:0:2);
READLN;
END.
TRANSPOZA MACIERZY
PROGRAMTRANSPOZA;
USES CRT;
TYPE
MACIERZ=ARRAY[1..10,1..10] OF REAL;
VAR A,AT:MACIERZ;
VAR K,W,LW,LK:INTEGER;
LABEL CZYTAJ;
BEGIN
CLRSCR;
WRITELN(`PODAJ WYMIARY MACIERZY LW,LK');
READLN(LW,LK);
AT[K,W]:=A[W,K];
END;
WRITELN(`TRANSPOZA');
FOR W:=1 TO LW DO
FORK K:=1 TO LK DO
BEGIN
WRITELN(A[W,K]);
END;
FOR K:=1 TO LK DO
BEGIN
FOR W:=1 TO LW DO
WRITE(AT[K,W]:5:1);
WRITELN;
READLN;
END;
END.
MACIERZ suma
program macierz;
uses crt;
TYPE MACIERZ =:array[1..10,1..10] of real;
VAR A,B,C:MACIERZ;
LW1,LK1,LW2,LK2,W,K:INTEGER;
LABEL 10;
BEGIN
CLRSCR;
10:WRITELN(`WYMIARY MACIERZY PIERWSZEJ (WIERSZ,KOLUMNA)');
READLN (LW1,LK1);
Writeln (`wymiary macierzy drugiej (wiersz,kolumna)');
Readln(lw2, lk2);
IF (LW1<>LW2) OR (LK1<>LK2) THEN
BEGIN
WRITELN (`ZLE WYMIARY');
GOTO 10
END;
{CZYTANIE MACIERZY PIERWSZEJ WIESZAMI'}
FOR W :=1 TO LW1 DO
FOR K:=1 TO LK1 DO
BEGIN
WRITELN (`A[`,W:2, ` ,', K:2, `]=');
READLN (A[W,K]);
END;
{czytanie macierzy drugiej}
FOR W:=1 TO LW2 DO
FOR K:=1 TO LK2 DO
BEGIN
WRIETE (`B[`,W:2,',',K:2,']=');
READLN (B[W,K]);
END;
{SUMOWANIE MACIERZY}
FOR W :=1 TO LW1 DO
BEGIN
FOR K:=1 TO LK1 DO
BEGIN
C[W,K]:=A[W,K]+B[W,K];
WRITE (C[W,K]);
END;
WRITELN;
END;
END.
MNOZENIE MACIERZY
PROGRAM MNOZENIE;
USES CRT;
TYPE MACIERZ=ARRAY[1…10,1…10] OF REAL;
VAR A,B,C:MACIERZ;
LW1,LW2,WK1,LK2,W,K,L:INTEGER;
LABEL CZYTAJ;
BEGIN
CLRSCR;
CZYTAJ:
WRITELN(`WYMIARY MACIERZY PIERWSZEJ');
READLN(LW1,LK1);
WRITELN(`WYMIARY MACIERZY DRUGIEJ');
READLN(LW2,LK2);
IF(LK1<>LW2) THEN
BEGIN
WRITELN (`ZLE WYMIARY MACIERZY');
GOTO CZYTAJ;
END;
{MNOZENIE}
FOR W:=1 TO LW1 DO
FOR K:=1 TO LK2 DO
C[W,K]:=0;
FOR W:=1 TO LW1 DO
FOR K :=1 TO LK2 DO
FOR L:=1 TO LW2 DO
C[W,K]:=C[W,K]+A[W,L]*B{L,K];
FOR W:=1 TO LW1 DO
BEGIN
FOR K:=1 TO LK2 DO
WRITE (C[W,K]:0:1);
WRITELN;
END;
END.
Tablica dwuwymiarowa SUMA ELEMENTOW W OSTATNIM WIERSZU I W OSTATNIEJ KOLUMNIE WSKAZE POLOZENIE ELEMENTU MAKSYMALNEGO
PROGRAM TABELA;
USES CRT;
VAR
A:ARRAY[1..10,1..10] OF REAL;
1K,1W,W,K:INTEGER;
SK,SW,MAX,WMAX,KMAX,:REAL;
BEGIN CLR SCR;
WRITELN (`PODAJ WYMIARY:WIERSZ, KOLUMNA');
READLN(LW,LK);
FOR W:=1 TO LW DO
FOR K:=1 TO LK DO
BEGIN
WRITE (`A[`,W:2,',',K:2,']=');
READLN(A[W,K]);
END;
FOR K:=1 TO LK DO
SW:SW+A[LW,K]);
FOR W:1 TO LW DO
SK:SK+A[W,LK];
MAX:=A[1,1];
WMAX:=1;
KMAX:=1;
FOR W:=1 TO LW DO
FOR K:=1 TO LK DO
IF A[W,K]>MAX THEN
BEGIN
MAX:=A[W,K];
WMAX:=W;
KMAX:=K;
END;
WRITELN(`SUMA ELEMENTOW W OSTATNIM WIERSZU=',SW:0:2);
WRITELN(`SUMA ELEMENTOW W OSTATNIEJ KOLUMNIE=',SK:0:2);
WRITELN(`MAX ELEMENT=',MAX:0:2,',LEZY W' WMAX:0:2,'WIERSZU');
WRITLN(`I W',KMAX:0:2,'KOLUMNIE');
READLN;
END.
PLIKI
WYNIKI POMIARU DZIALEK W KSZTALCIE TRAPEZU
PROGRAM DZILKA;
USESCRT;
VAR A,B,H:REAL;
N,K,NRD:INTEGER;
DANE:TEXT;
NAZWA:STRING[30];
BEGIN
CLRSCR;
WRITELN(`NAZWA TWORZONEGO PLIKU');
READLN(NAZWA);
ASSIGN(DANE,NAZWA);
WRITELN(`LICZBA POMIAROW');
READLN(N);
REWRITE(DANE);
FOR K:=1 TO N DO
BEGIN
WRITELN(`PODAJ NUMER I WYMIARY A,B,H',K:2,'DZIALKI');
READLN(NRD,A,B,H);
READLN;
WRITELN(DANE,NRD:3,A:10:2,B:10:2,H:10:2);
END;
CLOSE(DANE);
END.
PROGRAM KTÓRY POBIERZE Z PLIKU TWORZONEGO POPRZEDNIM PROGRAMEM POLE DZILKI WSKAZANEJ PRZEZ NUMER
PROGRAM DZIALKA;
USESCRT;
TYPE
WEKTOR1=ARRAY[1…50] OF INTEGER;
WEKTOR2=ARRAY[1..50] OF REAL;
VAR
NRD:WEKTOR1;
A,B:WEKTOR2;
N,K,ND:INTEGER;
B1,B2,P:REAL;
POMIARY:TEXT;
NAZWA:STRING[30];
BEGIN
CLRSCR;
WRITELN(`NAZWA PLIKU Z DANYMI');
READLN(NAZWA);
ASSIGN(POMIARY,NAZWA);
RESET(POMIARY);
WRITELN(`LICZBA DZIALEK');
READLN(N);
FOR K:=1 TO N DO
BEGIN
READLN(POMIARY,NRD[K],A[K],B[K]);
WRITELN(NRD[K]:3,A[K]:10:2,B[K]:10:2);
END;
CLOSE(POMIARY);
WRITELN(`PODAJ NUMER DZILKI');
READLN(ND);
FOR K:=1 TO N DO
IF ND=NRD[K] THEN
BEGIN
B1:=A[K];
B2:=B[K];
P:B1*B2/10000;
WRITELN(`POLE DZILKI O NUMERZE',ND:2,'=',P:0:4,'HA');
READLN;
END
ELSE
BEGIN
WRITELN(`BRAK DANYCH O DZIALCE NR=',ND);
READLN;
END;
END.
WCZYTANIE DANYCH Z PLIKU UTWORZENIE NOWEGO PLIKU ZAWIERAJACEGO POSORTOWANY ZBIOR
PROGRAM SORTOWANIE;
USES CRT;
VAR
N,M,K:INTEGER;
L:ARRAY[1..50] OF REAL;
DANE,WYNIK:TEXT;
PLIK1,PLIK2:STRING[40];
R:REAL;
BEGIN
CLRSCR;
WRITELN(`PODAJ NAZWE PLIKU Z DANYMI');
READLN(PLIK1);
WRITELN(`PODAJ NAZWE PLIKU Z WYNIKAMI');
READLN(PLIK2);
ASSIGN(DANE,PLIK1);
ASSIGN(DANE,PLIK2);
RESET(DANE);
REWRITE(WYNIKI);
WRITELN(`ILOSC LICZB');
READLN(N);
FOR K:=1 TO N DO
BEGIN
READLN(DANE,L[K]);
END;
{SORTOWANIE}
FOR K:=1 TO (N-1) DO
FOR M:=K+1 TO N DO
IF L[K]>L[M] THEN
BEGIN
R:=L[K];
L[K]:=L[M];
L[M]:=R;
END;
WRITELN(`ZBIOR POSORTOWANY');
FOR K:=1 TO N DO
WRITELN(WYNIK,L[K]:0:4);
CLOSE(DANE);
CLOSE(WYNIK);
END.