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

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

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

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

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

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

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

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

Саставити на језику FORTRAN потпрограм којим се од два низа реалних бројева једнаких дужина A = (a1, a2, …, an) и B = (b1, b2, …, bn) образује низ C = (a1, b1, a2, b2, …, an, bn).

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


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


Решење задатка 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], b[N][N], p, q, s, v;
  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);
  printf ("Gornji levi ugao? ");
  scanf ("%d%d", &p, &q);
  printf ("Visina i sirina? ");
  scanf ("%d%d", &v, &s);
  for (i=0; i<v; i++)
    for (j=0; j<s; j++) b[i][j] = a[p+i][q+j];
  dat = fopen ("izlaz.txt", "w");
  fprintf (dat, "%d %d\n", v, s);
  for (i=0; i<v; i++) {
    for (j=0; j<s; fprintf(dat,"%d ",b[i][j++]));
    fputc ('\n', dat);
  }
}

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

      SUBROUTINE Slozi (A, B, m, C, n)
      REAL A(m), B(m), C(2*m)
        DO i = 1, m
          C(2*i-1) = A(i)
          C(2*i  ) = B(i)
        END DO
        n = m + m
      END

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

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