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

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

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

Саставити програмски модул на Pascal-у који садржи потпрограме за читање дужине страница троугла (a, b, c), израчунавање обима троугла (O=a+b+c), израчунавање површине троугла (, s=O/2) и исписивање страница троугла (три броја унутар пара заграда који су раздвојени зарезима).

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

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

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

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

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

Бинарна датотека о студентима за сваког студента садржи број индекса (низ од највише 8 знакова), презиме и име (низ од највише 32 знака), број полаганих испита (цео број у опсегу од 0 до 30) и низ података о полаганим испитима (највише 30 испита). Подаци за сваки испит су шифра предмета (низ од највише 5 знакова) и добијена оцена (цео број у опсегу од 5 до 10). Саставити програм на Pascal-у за израчунавање средње оцене за дати предмет за све студенте који су испит из тог предмета полoжили. Програм треба да чита шифру предмета, проналази средњу оцену и испише резултат све док не прочита звездицу за шифру премета.

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


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

unit MTroug;

interface

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

  procedure Citaj (var T: Troug);
  function  O     (T: Troug): Real;
  function  P     (T: Troug): Real;
  procedure Pisi  (T: Troug);

implementation

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

  function  O     (T: Troug): Real;
  begin
    with T do O := A + B + C;
  end {function O};

  function  P     (T: Troug): Real;
    var S;
  begin
    S := O (T) / 2;
    with T do
      P := Sqrt (S*(S-A)*(S-B)*(S-C));
  end {procdeure P};

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

program Trouglovi;

  uses MTroug;
  const MaxN = 100;
  var   A: array [1..MaxN] of Troug;
        Min, Max: Troug;
        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('Stranice trougla ',I,'? ');
      Citaj (A[I]);
    end {for};
    Min := A[1]; Max := Min;
    for I := 2 to N do begin
      if O(A[I]) < O(Min) then
        Min := A[I]
      else if P(A[I]) > P(Max) then
        Max := A[I]
    end {for};
    Write ('Najmanji obim ima:    '); Pisi (Min);
    Write ('Najvecu povrsinu 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: Pok;

  function Citaj: Pok;
    var Prvi, Posl, Novi: Pok;
        N, I: Integer;
  begin
    Read (N); Prvi := nil;
    for I := 1 to N do begin
      Novi := New (Pok);
      Read (Novi^.Broj);
      Novi^.Sled := 0;
      if Prvi = nil then Prvi       := Novi
                    else Posl^.Sled := Novi;
      Posl := Novi;
    end {for};
    Citaj := Prvi;
  end {function Citaj};

  function Obrni (L: Pok): Pok;
    var Tek, Preth, Sled: Pok;
  begin
    Tek := L; Preth := nil;
    while Tek <> nil do begin
      Sled:=Tek^.Sled; Tek^.Sled:=Preth;
      Preth:=Tek; Tek:=Sled;
    end {while};
    Obrni := Preth;
  end {function Obrni};

  procedure Pisi (L: Pok);
  begin
    while L <> nil do begin
      Write (L^.Broj, ' ');
      L := L^.Sled;
    end {while};
    WriteLn;
  end {procedure Pisi};

begin {program}
  Write ('Duzina i elementi niza? ');
  L := Obrni (Citaj);
  Write ('Obrnuti niz: '); Pisi (L);
end {program}.

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

program Studenti;

  type  Zapis = record
          Ind: string[8];
          Ime: string[32];
          BrOc: 0..30;
          Ocene: array[1..30] of record
                   Predm: string[5];
                   Ocena: 5..10
                 end {record};
        end {record};

  var   Dat: file of Zapis;
        Stud: Zapis;
        Predm: string[5];
        Uk, Br, I: Integer;

begin {program}
  Assign (Dat, 'Studenti.dat');
  repeat
    Write ('Sifra predmeta? '); ReadLn (Predm);
  if Predm <> '*' then begin
    Reset (Dat); Br := 0; Uk := 0;
    while not Eof (Dat) do begin
      Read (Dat, Student); I := 1;
      with Student do begin
        while (I <= BrOc) and (Ocene[I].Predm<>Predm) do
          I := I + 1;
        if I (<= BrOc) and (Ocene[I].Ocena>5) then begin
          Uk := Uk + Ocene[I].Ocena;
          Br := Br + 1;
        end {if};
      end {with};
    end {while}
    if Br > 0 then
      WriteLn ('Srednja ocena: ', (Uk / Br):4:2);
    else
      WriteLn('Niko nije polozio ispit');
  end until Predmet = '*';
end {program}.
(садржај)
         
Аутор: Ласло Краус
Е-пошта: kraus@etf.rs

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