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

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

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

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

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

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

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

Саставити на језику C главни програм којим се из правоугаоне целобројне матрице изостави врста и колона која садржи највећи елемент матрице. Подаци о почетној матрици се налазе у секвенцијалној текстуалној датотеци. Резултат треба уписати у другу секвенцијалну текстуалну датотеку.

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

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

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


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


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

#include <stdio.h>
#define N 150

void prosti (int p[], int n) {
  int i, j, k, pr;
  p[0] = 2; i = 1;
  for (k=3; i<n; k+=2) {
    for (pr=1,j=0; pr&&p[j]*p[j]<=k; j++)
      pr = k % p[j] != 0;
    if (pr) p[i++] = k;
  }
}

main () {
  int p[N], i, n;
  printf ("n? "); scanf ("%d", &n);
  prosti (p, n);
  for (i=0; i<n-1; i++)
    if (p[i+1]-p[i] == 2)
      printf ("%d %d\n", p[i], p[i+1]);
}

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

#include <stdio.h>
#define N 30


main () {
  int i, j, m, n, a[N][N], max, ii, jj;
  FILE *dat;
  dat = fopen ("ulaz.txt", "r");
  fscanf (dat, "%d%d", &m, &n);
  for (i=0; i<m; i++)
    for (j=0; j<n; fscanf(dat,"%d",&a[i][j++]));
  fclose (dat);
  max = a[0][0]; ii = jj = 0;
  for (i=0; i<m; i++)
    for (j=0; j<n; j++)
      if (a[i][j]>max)
        { max=a[i][j]; ii=i; jj=j; }
  for (i=0; i<m; i++) {
    for (j=jj; j<n-1; j++)
      a[i][j] = a[i][j+1];
  }
  n--;
  for (j=0; j<n; j++) {
    for (i=ii; i<m-1; i++)
      a[i][j] = a[i+1][j];
  }
  m--;
  dat = fopen ("izlaz.txt", "w");
  fprintf (dat, "%d %d\n", m, n);
  for (i=0; i<m; i++) {
    for (j=0; j<n; fprintf(dat,"%d ",a[i][j++]));
    fputc ('\n', dat);
  }
}

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

      SUBROUTINE Izostavi (A, n)
      REAL A(n), min, max
        min = A(1)
        max = A(2)
        DO i = 2, n
          IF (A(i).lt.min) min=A(i)
          IF (A(i).gt.max) max=A(i)
        END DO
        d = min + (max - min) / 3
        g = max - (max - min) / 3
        j = 0
        DO i = 1, n
          IF (A(i).ge.d .and. A(i).le.g) THEN
            j = j + 1
            A(j) = A(i)
          END IF
        END DO
        n = j
      END

      PROGRAM IzostT
      PARAMETER (nmax = 20)
      REAL A(nmax)
   10 CONTINUE
        PRINT *, 'n?'
        READ *, n
      IF(n.le.0.or.n.gt.nmax)GO TO 99
        PRINT *, 'A?'
        READ *, (A(i), i=1,n)
        CALL Izost (A, n)
        PRINT *, 'A='
        PRINT *, (A(i), i=1,n)
        GO TO 10
   99 CONTINUE
      END
( почетак)
         
Аутор: Ласло Краус
Е-пошта: kraus@etf.rs

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