Visa elektrotehnicka skola, Beograd
Ласло Краус
Програмирање - испити
Допунски други парцијални
28.3.1998

Задаци: 1 2 3 | Напомене | Решења: 1 2 3

Поставка задаткa 1 (35 поена) (решење | садржај)

Саставити потпрограм на Pascal-у за израчунавање вредности Lagrange-овог (Лагранж) полинома:

где су (xi, yi) (i=1, 2, ..., n) координате тачака кроз које пролази посматрани полином реда n-1.

Саставити главни програм на Pascal-у који прочита низ од n парова координата тачака и врши табелирање одговарајућег Lagrange-овог полинома за xminxxmax са кораком Δx.

Поставка задаткa 2 (35 поена) (решење | садржај)

Саставити програмски модул на Pascal-у који садржи потпрограме за налажење растојања између две тачке у простору и уређивање (методом уметања) низа тачака у простору на основу њиховог одстојања од координатног почетка.

Саставити главни програм на Pascal-у који чита низове тачака, уређује их на основу њихових одстојања од координатног почетка и исписује их по том редоследу све док за дужину низа не прочита недозвољену вредност.

Поставка задаткa 3 (35 поена) (решење | садржај)

Датотека о студентима за сваког студента садржи број индекса (низ од највише 8 знакова), презиме и име (низ од највише 32 знака), број полаганих испита (цео број), и добијене оцене (низ целих бројева од највише 25 елемената). Саставити главни програм на Pascal-у за израчунавање средње вредности свих оцена за све студенте који нису пали ни на једном испиту.

Напоменe (садржај)


Решење задатка 1 (поставка | садржај)

program Lagrange;

  type Niz = array [1..100] of Real;

  var  XX, YY: Niz;
       I, N: Integer;
       X, Xmin, Xmax, Dx: Real;

  function P (XX, YY: Niz; N: Integer; X: Real): Real;
    var I, J: Integer; A, B: Real;
  begin
    A := 0;
    for I := 1 to N do begin
      B := YY[I];
      for J := 1 to N do
        if j <> i then
          B := B * ( X - XX[J]) / (XX[I] - XX[J]) ;
      A := A + B;
    end;
    P := A;
  end;

begin {glavni program}
  Write ('Broj tacaka? '); ReadLn (N);
  Write ('Parovi koordinata? ');
  for I := 1 to N do Read (XX[I], YY[I]);
  ReadLn;
  Write ('Xmin, Xmax, Dx? '); ReadLn (Xmin, Xmax, Dx);
  WriteLn;
  X := Xmin;
  while X <= Xmax do begin
    WriteLn (X:8:2, P(XX,YY,N,X):8:2);
    X := X + Dx
  end
end.

Решење задатка 2 (поставка | садржај)

unit MTacke;

interface

  const KAP = 100

  type Tacka = record X, Y, Z: Real; end;
       Niz = array[1..KAP] of Tacka;

  function Rast (P, Q: Tacka): Real;
  procedure Sort (A:Niz; N:Integer);

implementation

  function Rast (P, Q: Tacka): Real;
  begin
    Rast = Sqrt (Sqr(P.X-Q.X) +
       Sqr(P.Y-Q.Y) + Sqr(P.Z-Q.Z));
  end;

  procedure Sort (A:Niz; N:Integer);
    var T, Org: Tacka; R: Real; I, J: Integer;
  begin
    Org.X:=0; Org.Y:=0; Org.Z:=0;
    for I := 2 to N do begin
      T := A[I]; R := Rast (T, Org);
      J := I-1;
      while ((J>0) and (Rast(A[J],Org)<R) do begin
        A[J+1] := A[J]; J := J - 1
      end;
      A[J+1] := T;
    end;
  end;
end.

program Tacke;

  uses MTacke;

  var A: Niz;
      I, N: Integer;
      Kraj: Boolean;

begin
  repeat
    Write ('Duzina niza? '); ReadLn (N);
    Kraj := (N <= 0) or (N > KAP);
    if not Kraj then begin
      for I:=1 to N do begin
        Write('Tacka broj ',I,'? '); with A[I] do ReadLn (X,Y,Z)
      end;
      Sort (A, N); WriteLn;
      for I := 1 to N do
        with A[I] do WriteLn (X:6:2, Y:6:2, Z:6:2)
    end;
  until Kraj;
end;

Решење задатка 3 (поставка | садржај)

program Studenti;

  type Zapis = record
         Ind: string[8];
         Ime: string[32];
         BrOc: 0..25;
         Ocene: array [1..25]
                  of 5..10;
       end;

  var Dat: file of Zapis;
      Stud: Zapis;
      Ukupno, Broj, Uk, Br: Integer;
      Srednje: Real;
      Pao: Boolean;
      Ime: string[12];

begin
  Write ('Ime datoteke? '); ReadLn (Ime); Assign (Dat, Ime);
  Reset (Dat); Ukupno:=0; Broj:=0;
  while not Eof (Dat) do begin
    Read (Dat, Stud);
    Pao := False; Uk := 0; Br := 0;
    with Stud do
      for I := 1 to BrOc do
        if Ocene[I] > 5 then begin
          Uk := Uk + Ocene[I]; Br := Br + 1
        end else Pao := True;
    if not Pao then begin
      Ukupno := Ukupno + Uk; Broj := Broj + Br;
    end;
  end;
  if Broj > 0 then Srednja := Ukupno / Broj
              else Srednja := 0;
  WriteLn ('Ukupna srednja ocena: ', Srednja:4:2);
end.
(садржај)
         
Аутор: Ласло Краус
Е-пошта: kraus@etf.rs

Copyright © 1998, Laslo Kraus
Последња ревизија: 2.10.1998.