Elektrotehnicki fakultet, Beograd  Ласло Краус Програмски језици (ЕГ)
Испит
7. 4. 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 skup (float a[], int *n) {
  int i, j, k;
  for (i=j=0; i<*n; i++) {
    for (k=i-1; k>=0; k--)
      if (a[k]==a[i]) break;
    if (k < 0) a[j++] = a[i]
  }
  *n = j;
}

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

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

#include <stdio.h>
#define N 30


main () {
  int i, j, m, n, a[N][N], max, ii, jj, 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);
  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++) {
    b        = a[i][0];
    a[i][0]  = a[i][jj];
    a[i][jj] = b;
  }
  for (j=0; j<n; j++) {
    b        = a[0][j];
    a[0][j]  = a[ii][j];
    a[ii][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 Redosled (A, n)
      REAL A(n)
      DO I = 1, N/2
        b = A(i)
        A(i) = A(n-i+1)
        A(n-i+1) = b
      END DO
      END

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

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