Elektrotehnicki fakultet, Beograd  Ласло Краус Програмски језици (ЕГ)
Испит
1. 7. 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 150

void fuzija (float a[], int *na, float b[], int nb  ) {
  int ia=*na-1, ib=nb-1, ic=((*na)+=nb)-1;
  while (ia>=0 && ib>=0)
    a[ic--] = (a[ia]>b[ib]) ? a[ia--] : b[ib--];
  while (ib >= 0) a[ic--] = a[ib--];
}

main () {
  float a[N], b[N]; int i, na, nb;
  while (1) {
    printf ("na, nb? "); scanf ("%d%d", &na, &nb);
  if (na<0 || na>N || nb<0 || nb>N) break;
    printf ("A? ");
    for(i=0; i<na; scanf("%f",&a[i++]));
    printf ("B? ");
    for(i=0; i<nb; scanf("%f",&b[i++]));
    fuzija (a, &na, b, nb);
    printf ("A=");
    for (i=0; i<na; printf("%.2f",&a[i++]));
    putchar ('\n');
  }
}

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

#include <stdio.h>
#define N 30

main () {
  int i, j, m, n, a[N][N], min, max, imin, jmin, imax, jmax, b;
  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);
  min = max = a[0][0];
  imin = jmin = imax = jmax = 0;
  for (i=0; i<m; i++)
    for (j=0; j<n; j++)
      if (a[i][j] < min) {
        min  = a[i][j]; imin = i, jmin = j;
      } else if (a[i][j] > max) {
        max  = a[i][j]; imax = i; jmax = j;
      }
  for (i=0; i<m; i++) {
    b = a[i][jmin]; a[i][jmin] = a[i][jmax]; a[i][jmax] = b;
  }
  for (j=0; j<n; j++) {
    b = a[imin][j]; a[imin][j] = a[imax][j]; a[imax][j] = b;
  }
  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(1)
        DO i = 2, n
          IF (A(i).lt.min) min=A(i)
          IF (A(i).gt.max) max=A(i)
        END DO
        j = 0
        DO i = 1, n
          IF (A(i).ne.min .and.
     *        A(i).ne.max      ) 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
Последња ревизија: 30.9.2002.