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

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

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

Саставити на језику C функцију за изостављање свих елемената реалног низа чије вредности одступају мање oд 20% oд аритметичке средине почетног низа.

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

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

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

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

Саставити на језику FORTRAN потпрограм за кружно померање елемената низа целих бројева за k места удесно (на пример, низ 1 2 3 4 5 кружно померено удесно за два места је низ 4 5 1 2 3).

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


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


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

#include <stdio.h>
#include <math.h>
#define N 50

void izost (float a[], int *n) {
  float sum=0; int i,k=0;
  for (i=0; i<*n; i++) sum+=a[i];
  sum /= *n;
  for (i=0; i<*n; i++)
    if (fabs(a[i]-s) > 0.2*fabs(sum))
      a[k++] = a[i];
  *n = k;
}

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++]));
    izost(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], min, 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);
  min = a[0][0]; ii = jj = 0;
  for (i=0; i<m; i++)
    for (j=0; j<n; j++)
      if (a[i][j] < min)
        { min=a[i][j]; ii=i; jj=j; }
  for (i=0; i<m; i++) { b = a[i][n-1]; a[i][n-1] = a[i][jj]; a[i][jj] = b; }
  for (j=0; j<n; j++) { b = a[m-1][j]; a[m-1][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 Pomeri (A, n, k)
      INTEGER A(n), b
        DO i = 1, k
          b = A(n)
          DO j = n-1, 1, -1
            A(j+1) = A(j)
          END DO
          A(1) = b
        END DO
      END

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

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