Visa elektrotehnicka skola, Beograd
Ласло Краус
Програмирање I
Допунски други колоквијум
10. 2. 1999

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

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

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

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

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

Редови за чекање су динамичке структуре података код којих се подаци из реда узимају по редоследу по коме су били уметани у ред. Представљају се помоћу записа од два показивача који показују на почетак и на крај једноструко ланчане листе. Саставити потрограме на Pascal-у за додавање једног реалног броја у ред и за узимање једног реалног броја из реда.

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

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

Бинарна секвенцијална датотека о књигама за сваку књигу садржи име аутора (низ од највише 20 знакова), наслов (низ од највише 40 знакова), број страница (цео број не већи од 1000), назив издавача (низ од највише 30 знакова), место издавања (низ од највише 16 знакова) и годину издавања (цео број у опсегу од 1901 до 2000). Саставити главни програм на Pascal-у за одређивање броја издаваних књига по годинама.

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


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

unit MKompl;

interface

  type Kompl = record X, Y: Real end;

  procedure Citaj (var Z: Kompl);
  function  Aps   (Z: Kompl): Real;
  function  Arg   (Z: Kompl): Real;
  procedure Pisi  (Z: Kompl);

implementation

  procedure Citaj (var Z: Kompl);
  begin
    with Z do ReadLn (X, Y);
  end {procedure Citaj};

  function  Aps   (Z: Kompl): Real;
  begin
    with Z do Aps := Sqrt (X*X + Y*Y);
  end {function Aps};

  function  Arg   (Z: Kompl): Real;
    var A: Real;
  begin
    with Z do begin
      if X <> 0 then begin
        A := ArcTan (Y / X);
        if X < 0 then
          if Y >= 0 then A := A + Pi
                    else A := A - Pi
      end else
        if Y > 0      then A :=   Pi / 2
        else if Y < 0 then A := - Pi / 2
        else               A := 0
    end {with};
    Arg := A
  end {function Arg};

  procedure Pisi  (Z: Kompl);
  begin
    with Z do begin
      Write (X:4:2);
      if Y < 0 then Write ('-')
               else Write ('+');
      WriteLn (Abs(Y):4:2);
    end {with};
  end {procedure Pisi};

end {unit}.


program KopleksniBrojevi;

  uses MKompl;

  const MaxN = 100;

  var   A: array [1..MaxN] of Kompl;
        Z: Kompl;
        N, I, J: Integer;

begin {program}
  repeat
    Write ('Duzina niza? '); ReadLn (N);
  if (N > 0) and (N <= MaxN) then begin
    for I := 1 to N do begin
      Write('A[',I,']? '); Citaj(A[I]);
    end {for};
    for I := 2 to N do begin
      Z := A[I]; J := I - 1;
      while (J > 0)                                         and
            ((Aps(Z) < Aps(A[J])                        or
             (Aps(Z) = Aps(A[J]) and (Arg(Z) < Arg(A[J])   )    do begin
        A[J+1] := A[J]; J := J - 1;
      end {while};
      A[J+1] := Z;
    end {for};
    for I := 1 to N do begin
      Write('A[', I, ']= '); Pisi(A[I]);
    end {for};
  end until (N <= 0) or (N > MaxN);
end {program}.

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

program Redovi;

  type  Pok = ^Elem;

        Elem = record
          Broj: Integer;
          Sled: Pok;
        end {record};

        Red = record Prvi, Posl: Pok end;

  const L: Red = (Prvi:0; Posl:0);

  var   B: Real;
        N, I: Integer;

  procedure Stavi (var R: Red; B: Real);
    var Novi: Pok;
  begin
    New (Novi);
    Novi^.Broj := B; Novi^.Sled := nil;
    with R do begin
      if Prvi = nil then Prvi       := Novi
                    else Posl^.Sled := Novi;
      Posl := Novi;
    end {with};
  end {procedure Stavi};

  function Uzmi (var R: Red): Real;
    var Stari: Pok;
  begin
    with R do begin
      if Prvi = nil then Halt;
      Uzmi  := Prvi^.Broj;
      Stari := Prvi;
      Prvi  := Prvi^.Sled;
      Dispose (Stari);
      if Prvi = nil then Posl := nil;
    end {with};
  end {function Uzmi};

begin {program}
  Write ('Duzina niza? '); ReadLn (N);
  Write ('Elementi niza? ');
  for I := 1 to N do begin Read (B); Stavi (R, B); end {for};
  Write ('Procitano: ');
  While (R^.Prvi <> nil) do Write (Uzmi(R), ' ');
  WriteLn;
end {program}.

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

program Knjige;
  const Min = 1901; Max = 2000;

  type  Period = Min .. Max;

        Zapis = record
          Autor: string[20];
          Naslov: string[40];
          Strane: 0..1000;
          Izdavac: string[30];
          Mesto: string[16];
          Godina: Period;
          Ime: string[32];
        end {record};

  var   Dat: file of Zapis;
        Knjiga: Zapis;
        Broj: array [Period] of Integer;
        I: Period;

begin {program}
  Assign(Dat,'Knjige.dat'); Reset(Dat);
  for I := Min to Max do Broj[I] := 0;
  while not Eof (Dat) do begin
    Read (Dat, Knjiga);
    Inc (Broj[Knjiga.Godina]);
  end {while};
  for I := Min to Max do if Broj[I] > 0 then WriteLn (I:4, Broj[I]:4);
end {program}.
(садржај)
         
Аутор: Ласло Краус
Е-пошта: kraus@etf.rs

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