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

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

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

Саставити на језику C функцију за уметање низа целих бројева испред k-тог елемента другог низа целих бројева. Вредност функције треба да је индикатор успеха. Операција је неуспешна ако је k изван дозвољених граница (мања од нуле или већа од дужине одредишног низа).

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

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

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

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

Саставити на језику FORTRAN потпрограм за израчунавање збирова елемената целобројног низа који при дељењу са k дају исте остатке (резултат је низ од k елемената). На пример, за низ 8, 1, 3, 2, 5, 7, 4, 6 при k=3 резултат је низ 9, 12, 15 (3+6, 1+7+4, 8+2+5).

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


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


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

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

int umet (int a[], int *m, int b[], int n, int k) {
  int i, j=0;
  if (k<0 || k>*n) return 0;
  for (i=m-1; i>=k; i--) a[i+n] = a[i];
  for (i=0; i<n, i++) a[k+i] = b[i];
  *m += n;
  return 1;
}

main () {
  int a[2*N], b[N], m, n, i;
  while (1) {
    printf ("\nm? "); scanf ("%d", &m);
  if (m<0 || m>2*N) break;
    printf ("A? "); for (i=0; i<m; scanf("%d",&a[i++]));
    printf ("\nn? "); scanf ("%d", &n);
  if (n<0 || n>N) break;
    printf ("B? "); for (i=0; i<n; scanf("%d",&b[i++]));
    printf ("k? "); scanf ("%d", &k);
    if (umet (a, &m, b, n, k)) {
      printf ("A= "); for (i=0;i<m; printf("%d ",a[i++]); putchar ('\n');
    } else
      printf ("*** Nedozvoljeno k!\n");
  }
}

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

#include <stdio.h>
#define N 50

main () {
  float a[N][N], ispod, na, iznad;
  int n, i, j;
  FILE *dat;
  char ime[31];
  while (1) {
    printf ("Ulaz A? "); scanf ("%s", ime);
  if (ime[0] == '*') break;
    dat = fopen (ime, "r");
    fscanf (dat, "%d", &n);
    for (i=0; i<n; i++)
      for (j=0; j<n; j++) fscanf(dat,"%d",&a[i][j]);
    fclose (dat);
    ispod = na = iznad = 0;
    for (i=0; i<n; i++)
      for (j=0; j<n; j++)
        if      (i > j) ispod += a[i][j];
        else if (i < j) iznad += a[i][j];
        else            na    += a[i][j];
    printf ("ispod= %f\n, ispod);
    printf ("na   = %f\n, na   );
    printf ("iznad= %f\n, iznad);
  }
}

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

      SUBROUTINE Zbir (A, n, B, k)
      INTEGER A(n), B(k)
      DO i = 1, k
        B(i) = 0
      END DO
      DO i = 1, n
        j = mod (A(i), k) + 1
        B(j) = B(j) + A(i)
      END DO
      END

      PROGRAM Radi
      PARAMETER (max = 40)
      INTEGER A(max), B(max)
   10 CONTINUE
        PRINT *, 'n?'
        READ *, n
      IF (n.lt.0 .or. n.gt.max) GO TO 99
        PRINT *, 'A?'
        READ *, (a(i), i=1,n)
        PRINT *, 'k?'
        READ *, k
        zbir (a, n, b, k)
        PRINT *, 'B='
        PRINT *, (B(i), i=1,k)
        GO TO 10
   99 CONTINUE
      END
( почетак)
         
Аутор: Ласло Краус
Е-пошта: kraus@etf.rs

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