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

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

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

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

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

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

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

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

Саставити на језику FORTRAN потпрограм којим се од низа реалних бројева A = (a1, a2, …, a2n) и образују низови B = (а1, а3, …, а2n−1) и C = (а2, а4, …, а2n).

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


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


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

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

double srvr (float a[], int m, float b[], int n) {
  float s=0; int i, j, k=0;
  for (i=0; i<m; i++) {
    for (j=0; j<n && a[i]!=b[j]; j++);
    if (j == n) { s += a[i]; k++; }
  }
  if (k) s /= k;
  return s;
}

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

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

#include <stdio.h>
#define N 30


main () {
  int i, j, m, n, a[N][N],
            s, v, b[N][N], p, q;
  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++]));
  fscanf (dat, "%d%d", &s, &v);
  for (i=0; i<s; i++)
    for (j=0; j<v; fscanf(dat,"%d",b[i][j++]));
  fclose (dat);
  printf ("Gornji levi ugao? ");
  scanf ("%d%d", &p, &q);

  for (i=0; i<v; i++)
    for (j=0; j<s; j++)
      a[p+i][q+j] = b[i][j];
  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 Rastavi (A, n, B, C, m)
      REAL A(2*n), B(n), C(n)
        m = n;
        DO i = 1, m
          B(i) = A(2*i-1)
          C(i) = A(2*i  )
        END DO
      END

      PROGRAM Rastavljanje
      PARAMETER (nmax = 20)
      REAL A(2*nmax), B(nmax), C(nmax)
   10 CONTINUE
        PRINT *, 'n?'
        READ *, n
      IF(m.LE.0 .OR. m.GT.nmax)GO TO 99
        PRINT *, 'A?'
        READ *, (A(i), i=1,2*n)
        CALL Rastavi (A, n, B, C, m)
        PRINT *, 'B='
        PRINT *, (B(i), i=1,m)
        PRINT *, 'C='
        PRINT *, (C(i), i=1,m)
        GO TO 10
   99 CONTINUE
      END
( почетак)
         
Аутор: Ласло Краус
Е-пошта: kraus@etf.rs

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