zadania na zaliczenie, GEODEZJA I KARTOGRAFIA AGH, ROK I, programowanie


Zadanie 1 (3 pkt)

Napisz program, który po uruchomieniu pozyska od użytkownika 3 liczby, a następnie wypisze na ekranie wynik analizy polegającej na sprawdzeniu czy podane liczby mogłyby być długościami boków trójkąta, a jeśli tak to dodatkowo wypisze czy ten trójkąt jest trójkątem prostokątnym.

Rozwiązanie:

Program trojkat;

Uses Crt;

Var

a,b,c:Byte;

BEGIN

ClrScr;

Write(`Podaj pierwsza liczbe - `); Readln(a);

Write(`Podaj druga liczbe - `); Readln(b);

Write(`Podaj trzecia liczbe - `); Readln(c);

If (a+b>c) And (a+c>b) And (b+c>a) Then

Write(`Podane liczby moga byc interpertowane jako dlugosci bokow trojkata')

Else

Write(`Podane liczby nie spelniaja warunku bokow trojkata');

If (c*c-a*a-b*b=0) Or (b*b-a*a-c*c=0) Or (a*a-b*b-c*c=0 Then

Write(` prostokatnego');

END.

Zadanie 2 (3 x 1 pkt)

Wypisz jak efekt można byłoby zobaczyć na ekranie po zakończeniu działania programów:

Uses CRT;

Var i,a,b:Byte;

BEGIN

ClrScr;

i:=1; a:=2; b:=3+i+2;

For a:=i To b-i Do

WriteLn(i,' ',a,' ',b);

Write(i+a+b);

Readln;

END.

Uses CRT;

Var a,b:-10..10;

BEGIN

ClrScr;

a:=1; b:=10;

Repeat

b:=b-a; a:=a+1;

WriteLn('a=',a,' b=',b);

Until a>b;

Readln;

END.

Uses CRT;

Var a,b:-10..10;

BEGIN

ClrScr;

a:=1; b:=10;

While a<b Do

Begin

b:=b-1; a:=2*a;

WriteLn('a=',a,' b=',b);

End;

Readln;

END.

Zadanie 3 (2 x 3pkt)

W zmiennej tablicowej dwuwymiarowej (30x2) zapisano liczby rzeczywiste interpretowane jako współrzędne 12 punktów (w kolumnie 1 przechowywane są wsp. X, a w kolumnie 2 - wsp. Y). Napisz fragment programu dzięki któremu:

a) punkty zostaną posortowane po wsp. Y w porządku malejącym

b) obliczone zostaną odległości pomiędzy ww. punktami (każdy z każdym), a wynik zapisany zostanie również w zmiennej tablicowej w ten sposób, że na przecięciu 5 wiersza i 7 kolumny odczytać będzie można odległość obliczoną pomiędzy punktami 5 i 7.

Rozwiązanie Ad. a)

For i:=1 To 11 Do

For j:=i+1 To 12 Do

If P[i,2]<P[j,2] Then

Begin

tmp:=P[i,1]; P[i,1]:=P[j,1]; P[j,1]:=tmp;

tmp:=P[i,2]; P[i,2]:=P[j,2]; P[j,2]:=tmp;

End;

Rozwiązanie Ad. b)

For i:=1 to 11 Do

Begin

M[i,i]:=0;

For j:=i+1 To 12 Do

Begin

M[i,j]:=sqrt(sqr(P[j,1]-P[i,1])+sqr(P[j,2]-P[i,2]));

M[j,i]:=M[i,j];

End;

End;

M[12,12]:=0;

Zadanie 4 (2 x 3pkt)

a) Napisz deklarację funkcji odpowiedzialnej za wyliczenie iloczynu 2 macierzy. Program do funkcji przekazuje 2 macierze (zmienne tablicowe) i 4 liczby (wymiary tych macierzy). Funkcja jako wartość zwraca wartość logiczną (true - udało się policzyć, false - nie udało się policzyć). Funkcja poprzez parametry zwraca również do programu informację o macierzy wynikowej i jej wymiarach.

b) Napisz deklarację procedury odpowiedzialnej za zliczenie liczby zer występujących na głównej przekątnej w zmiennej tablicowej. Zmienna tablicowa jest jednym z parametrów procedury.

Rozwiązanie:

Function il_mac(M1:macierz; w1,k1:Byte; M2:macierz; w2,k2:Byte; Var M3:macierz; Var w3,k3:Byte):Boolean;

Var

i,j,k:Byte;

Begin

il_mac:=False; {zakładamy, że nie uda się policzyć iloczynu}

If k1=w2 Then {jeśli ten warunek będzie spełniony to iloczyn uda się wyliczyć}

Begin

il_mac:=True; {funkcja będzie miała taką wartość bo iloczyn zostanie policzony}

w3:=w1; k3:=k2; {ustalamy wymiary macierzy wynikowej}

{obliczamy poszczegolne elementy macierzy wynikowej jako suma iloczynow wiersza z macierzy pierwszej i kolumny z macierzy drugiej}

For i:=1 To w3 Do

For j:=1 To k3 Do

Begin

M3[i,j]:=0;

For k:=1 To k1 Do

M3[i,j]:=M3[i,j]+M1[i,k]*M2[k,j];

End;

End;

End;

Procedure liczba_0_na_przekatnej(M:macierz; w,k:Byte; Var n:Byte);

Var

i,min:Byte;

Begin

min:=w; If k<min Then min:=k; {glowna przekatna będzie miala tyle elementow ile wynosi mniejsza z liczby wierszy lub kolumn}

n:=0; {skoro nie zaczęliśmy nawet szukać to zer na przekątnej mamy zero}

For i:=1 To min Do {przejdziemy przez wszystkie elementy przekątnej}

If M[i,i]=0 Then {sprawdzamy czy element przekatnej jest zerem}

n:=n+1; {jesli tak to zerowych elementow przekatnej mamy o jeden wiecej}

End;

To co powyżej dla mnie by wystarczyło by dać maksymalną liczbe punktów za to zadanie. Jeśli nie wierzycie, że ta funkcja i ta procedura da oczekiwany efekt to można zawsze dopisać resztę programu. Proponuję dopisać zatem procedure do losowego pozyskiwania macierzy oraz procedure do wypisywania macierzy na ekranie komputera. A nastepnie uruchomienie tych wszystkich funkcji i procedur w programie głównym.

Procedure losuj_mac(ozn:String; Var M:macierz; Var w,k:Byte);

Var

i,j:Byte;333

Begin

WriteLn;

WriteLn(`Podaj wymiary dla macierzy `,ozn);

Write(`Ile wierszy - `); Readln(w);

Write(`Ile kolumn - `); Readln(k);

For i:=1 To w Do

For j:=1 To k Do

M[i,j]:=-1+Random(3);

End;

Procedure mac_na_ekran(ozn:String; M:macierz; w,k:Byte);

Var

i,j:Byte;

Begin

Writeln;

Writeln(`***** macierz `,ozn, ` *****');

For i:=1 To w Do

Begin

For j:=1 To k Do

Write(M[i,j]:5);

Writeln;

End;

End;

Program zadanie4;

Uses CRT;

Type macierz=Array[1..10,1..10] of Integer;

Var

Function il_mac………

Procedure liczba_0_na_przekatnej………

Procedure losuj_mac………

Procedure mac_na_ekran………

BEGIN

ClrScr;

Randomize;

losuj_mac(`A',A,wA,kA);

mac_na_ekran(`A',A,wA,kA);

liczba_0_na_przekatnej(A,wA,kA,n);

WriteLn(`W macierzy A jest `,n,' zer na przekątnej');

losuj_mac(`B',B,wB,kB);

mac_na_ekran(`B',B,wB,kB);

liczba_0_na_przekatnej(B,wB,kB,n);

WriteLn(`W macierzy B jest `,n,' zer na przekątnej');

If il_mac(A,wA,kA,B,wB,kB,C,wC,kC) Then

Begin

mac_na_ekran(`C=A*B',C,wC,kC);

liczba_0_na_przekatnej(C,wC,kC,n);

WriteLn(`W macierzy C jest `,n,' zer na przekątnej');

End

Else

WriteLn(`wymiary wewnetrzne nie sa zgodne - nie moge mnozyc');

END.

Zadanie 5 (6 pkt)

Napisz program, który wybierze z dwóch plików na dysku punkty o tym samym oznaczeniu
i zapisze je do pliku trzeciego (tekstowego) posortowaniu wg oznaczenia w porządku rosnącym.

Pierwszy plik z danymi jest plikiem tekstowym i zawiera 3 kolumny. W pierwszej kolumnie na 5 pozycjach zapisany jest ciąg znaków będący oznaczeniem punktu, w drugiej i trzeciej kolumnie zapisane są liczby rzeczywiste interpretowane jako wsp. X i wsp. Y.

Drugi plik to plik rekordów, a każdy rekord składa się z trzech pól:

o:String[5]; x,y:Real;

Rozwiązanie:

w pliku

0 - 8 pkt - niedostateczny

9 - 14 pkt - dostateczny

15 - 19 pkt - dobry

20 - 24 pkt - bardzo dobry



Wyszukiwarka