Elektrotehnicki fakultet, Beograd  Ласло Краус Програмски језици (ЕГ)
Испит
15. 2. 2002.

Почев од јануарског испитног рока школске године 2001/02 сви студенти, без обзира када су слушали предавања, испит треба да полажу према новим правилима.

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

Поставка задатка 1 (25 поена) ( решење | почетак)

Саставити на језику C потпрограм за одређивање бројева елемената целобројног низа који дају остатак 0, 1, ..., k-1 приликом дељења задатим целим бројем k (резултат је низ од k елемената).

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

Поставка задатка 2 (25 поена) ( решење | почетак)

У секвенцијалној текстуалној датотеци у сваком реду се налази један цели број n и n реалних бројева. Саставити на језику C главни програм који у нову секвенцијалну датотеку упише оне редове из почетне датотеке у којима је средња вредност реалних бројева већа од нуле и на крају испише преко главног излаза збир средњих вредности реалних бројева у свим редовима почетне датотеке.

Поставка задатка 3 (30 поена) ( решење | почетак)

Саставити на језику FORTRAN потпрограм за испитивање да ли је задати позитивни цели број прост.

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


Напомене ( почетак)


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

#include <stdio.h>
#define N 50
#define K 20

void broj (int a[], int n, int b[], int k) {
  int i;
  for (i=0; i<k; b[i++]=0);
  for (i=0; i<n; b[a[i++]%k]++);
}

main () {
  int a[N], b[K], i, n, k;
  while (1) {
    printf ("n? "); scanf ("%d", &n);
  if (n<=0 || n>N) break;
    printf ("A? ");
    for (i=0; i<n; scanf("%d", &a[i++]));
    printf ("k? "); scanf ("%d", &k);
    broj (a, n, b, k);
    printf ("B=");
    for (i=0; i<k; printf (" %d", b[i++]));
    printf ("\n\n");
  }
}

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

#include <stdio.h>
#define N 100

main () {
  int i, n;
  double a[N], s, z=0;
  FILE *ul, *izl;
  ul  = fopen ("ulaz.txt",  "r");
  izl = fopen ("izlaz.txt", "w");
  while (fscanf(ul,"%d",&n)>0) {
    s = 0;
    for (i=0; i<n; i++) {
      fscanf (ul, "%lf", &a[i]);
      s += a[i];
    }
    if (n) s /= n;
    z += s;
    if (s > 0) {
      fprintf (izl, "%d", n);
      for (i=0; i<n; fprintf(izl," %f",a[i++]));
      fprintf (izl, "\n");
    }
  }
  printf ("Zbir sr. vr.= %f\n", z);
}

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

      LOGICAL FUNCTION Prost (k)
      Prost = .true.
      i = 2
      DO WHILE (i*i.le.k .and. prost)
        prost = mod (k, i) .ne. 0
        i = i + 1
      END DO
      END

      PROGRAM Prosti
      PARAMETER (max = 20)
      INTEGER A(max), zprost, zsloz
      LOGICAL Prost
   10 CONTINUE
        PRINT *, 'n?'
        READ *, n
      IF (n.le.0 .or. n.gt.max) GO TO 99
        zprost = 0
        zsloz  = 0
        PRINT *, 'A?'
        READ *, A(i), i=1,n)
        DO I = 1, n
          IF Prost (A(i)) THEN
            zprost = zprost + A(i)
          ELSE
            zsloz  = zsloz  + A(i)
          END IF
        END DO
        PRINT *, 'rez = ', zprost-zsloz
        GO TO 10
   99 CONTINUE
      END
( почетак)
         
Аутор: Ласло Краус
Е-пошта: kraus@etf.rs

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