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

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

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

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

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

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

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

Саставити на језику C главни програм којим се врши међусобна замена колоне правоугаоне матрице целих бројева у којој је збир елемената највећи и колоне у којој је збир елемената најмањи. Ако више колона имају исти највећи збир елемената, одабрати међу њима колону са најмањим редним бројем. Ако више колона имају исти најмањи збир елемената, одабрати међу њима колону са највећим редним бројем. Подаци о почетној матрици се налазе у секвенцијалној текстуалној датотеци (димензије матрице у првом реду, иза тога свака врста у засебном реду). Резултат треба уписати у другу секвенцијалну текстуалну датотеку. Имена датотека читати преко главног улаза рачунара.

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

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

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


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


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

#include <stdio.h>
#define N 50

void unija (float s1[], int n1, float s2[], int n2, float s3[], int *n3) {
  int i, j, k=n1;
  for (i=0; i<n1; i++) s3[i] = s1[i];
  for (j=0; j<n2; j++) {
    for(i=0; i<n1&&s1[i]!=s2[j]; i++);
    if (i == n1) s3[k++] = s1[i];
  }
  *n3 = k;
}

void main () {
  float s1[N], s2[N], s3[N];
  int n1, n2, n3, i;
  while (1) {
    printf ("n1, n2? "); scanf ("%d%d", &n1, &n2);
  if (n1<0 || n1>N || n2<0 || n2>N) break;
    printf ("s1? ");
    for (i=0; i<n1; scanf("%f",&s1[i++]));
    printf ("s2? ");
    for (i=0; i<n2; scanf("%f",&s2[i++]));
    unija (s1,n1,s2,n2,s3,&n3);
    printf ("s3= ");
    for (i=0; i<n3; printf("%.2f ",s3[i++]));
    putchar ('\n');
  }
}

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

#include <stdio.h>
#define N 30

main () {
  int i, j, m, n, a[N][N], min, max, jmin, jmax, b;
  FILE *dat;  char ime[30];
  printf ("Ulaz? "); scanf ("%s", ime);
  dat = fopen (ime, "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);
  for (b=i=0; i<m; b+=a[i++]);
  min = max = b;
  jmin = jmax = 0;
  for (j=1; j<n; j++) {
    for (b=i=0; i<m; b+=a[i++][j]);
    if (b <= min) {
      min = b; jmin = j;
    } else if (b > max) {
      max = b; jmax = j;
    }
  }
  for (i=0; i<m; i++) {
    b = a[i][jmin]; a[i][jmin] = a[i][jmax]; a[i][jmax] = b;
  }
  printf ("Izlaz? "); scanf ("%s", ime);
  dat = fopen (ime, "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 USkup (A, n)
      REAL A(n)
        j = 0;
        DO i = 1, n
          k = 1;
          DO WHILE (k.le.j .and. A(i).ne.A(k))
            k = k + 1
          END DO
          IF (k .gt. j) THEN
            j = j + 1
            A(j) = A(i)
          END IF
        END DO
        n = j
      END

      PROGRAM USkupT
      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)
        USkup (A, n)
        PRINT *, 'A='
        PRINT *, (A(i), i=1,n)
        GO TO 10
   99 CONTINUE
      END
( почетак)
         
Аутор: Ласло Краус
Е-пошта: kraus@etf.rs

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