Visa elektrotehnicka skola, Beograd
Ласло Краус
Програмирање I
Други колоквијум
25. 1. 2000

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

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

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

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

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

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

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

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

Секвенцијална бинарна датотека о међуградским аутобуским линијама са поласком из неког места за сваки полазак садржи датум поласка (велики цео број по шеми ggggmmdd), време поласка (цео број по шеми hhmm), одредиште (низ од највише 20 знакова), шифру превозника (низ од највише 6 знакова), број места у аутобусу (цео број) и број продатих карата (цео број). Саставити на Pascal-у програм за одређивање укупног броја путника колико је дати превозник превезао у току задатог дана као и просечан степен искоришћења њихових возила.

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


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

unit MKvadar;

interface

  type Kvadar = record A,B,C: Real end;

  procedure Citaj (var K: Kvadar);
  function  P     (K: Kvadar): Real;
  function  V     (K: Kvadar): Real;
  procedure Pisi  (K: Kvadar);

implementation

  procedure Citaj (var K: Kvadar);
  begin
    with K do ReadLn (A, B, C);
  end {procedure Citaj};

  function  P     (K: Kvadar): Real;
  begin
    with K do P := 2 * (A*B + B*C + C*A);
  end {function P};

  function  V     (K: Kvadar): Real;
  begin
    with K do V := A * B * C;
  end {procdeure V};

  procedure Pisi  (K: Kvadar);
  begin
    with K do WriteLn ('(', A:4:2, ',', B:4:2', ',', C:4:2, ')');
  end {procedure Pisi};
end {unit}.


program Kvadri;

  uses MKvadar;

  const MaxN = 100;

  var   A: array [1..MaxN] of Kvadar;
        Min, Max: Kvadar;
        N, I: 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('Ivice kvadra ',I,'? '); Citaj (A[I]);
    end {for};
    Min := A[1]; Max := Min;
    for I := 2 to N do begin
      if P(A[I]) < P(Min) then      Min := A[I]
      else if V(A[I]) > V(Max) then Max := A[I]
    end {for};
    Write ('Najmanju povrsinu ima: '); Pisi (Min);
    Write ('Najvecu zapreminu ima: '); Pisi (Max);
  end until (N <= 0) or (N > MaxN);
end {program}.

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

program Liste;

  type Pok = ^Elem;
       Elem = record
         broj: Integer;
         sled: Pok;
       end {record};

  var  L, P, N: Pok;
       I, K: Integer;

  procedure PozNeg(L: Pok; var P,N: Pok);
    var Pp, Nn, T: Pok;
  begin
    P := nil; N := nil; Pp := nil; Nn := nil;
    while L <> nil do begin
      T := L; L := L^.sled; T^.sled := nil;
      if T^.broj > 0 then begin
        if P = nil then P := T else Pp^.sled := T;
        Pp := T;
      end else if T^.broj < 0 then begin
        if N = nil then N := T else Nn^.sled := T;
        Nn := T;
      end else
        Dispose (T)
    end {while};
  end {procedure PozNeg};

begin {program}
  Write ('Duzina niza? ');   ReadLn (K);
  Write ('Elementi niza? '); L := nil; P := nil;
  for I := 1 to K do begin
    New (N); Read (N^.broj); N^.sled := nil;
    if L = nil then L := N else P^.sled := N;
    P := N;
  end;
  PozNeg (L, P, N);
  Write ('Veci od nule: '); L := P;
  while L <> nil do begin
    Write (' ', L^.broj); L := L^.sled;
  end; WriteLn;
  Write ('Manji od nule:'); L := N;
  while L <> nil do begin
    Write (' ', L^.broj); L := L^.sled;
  end; WriteLn;
end {program}.

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

program Autobusi;

  type  Zapis = record
          Datum: LongInt;
          Vreme: Integer;
          Odrediste: string[20];
          Prevoznik: string[6];
          Kapacitet, Prodato: Integer;
        end {record};

  var   Dat: file of Zapis;
        Polazak: Zapis;
        Datum: LongInt;
        Prevozn: string[6];
        UkKapacitet, UkProdato: Integer;
        Iskoriscenost: Real;

begin {program}
  Assign(Dat,'Polasci.dat'); Reset(Dat);
  Write ('Datum? ');     ReadLn (Datum);
  Write ('Prevoznik? '); ReadLn(Prevozn);
  UkKapacitet := 0; UkProdato := 0;
  while not Eof (Dat) do begin
    Read (Dat, Polazak);
    if (Polazak.Datum = Datum) and
       (Polazak.Prevoznik = Prevozn) then begin
      UkKapacitet := UkKapacitet + Polazak.Kapacitet;
      UkProdato   := UkProdato   + Polazak.Prodato;
    end {if}
  end {while}
  Close (Dat);
  if UkKapacitet > 0 then
    Iskoriscenost := UkProdato / UkKapacitet * 100
  else
    Iskoriscenost := 0;
  WriteLn ('Ukupno prevezeno: ', UkProdato);
  WriteLn ('Prosecna iskoriscenost: ', Iskoriscenost:4.2, '%');
end {program}.
(садржај)
         
Аутор: Ласло Краус
Е-пошта: kraus@etf.rs

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