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

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

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

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

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

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

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

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

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

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


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


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

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

void zbir (float a[], int n, int k, float b[]) {
  int i;
  for (i=0; i<k; b[i++]=0);
  for (i=0; i<n; i++) b[i%k] += a[i];
}

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

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

#include <stdio.h>
#define N 50

main () {
  int a[N][N], n, i, j, k, b;
  FILE *dat;
  char ime[31];
  while (1) {
    printf ("Ulaz? "); scanf ("%s", ime);
  if (ime[0] == '*') break;
    dat = fopen (ime, "r");
    fscanf (dat, "%d%d", &m, &n);
    for (i=0; i<m; i++)
      for (j=0; j<n; j++) fscanf(dat,"%d",&a[i][j]);
    fclose (dat);
    for (j=0; j<n; j++)
      for (i=0; i<m-1; i++)
        for (k=i+1; k<m; k++)
          if (a[k][j] > a[i][j]) { b = a[i][j]; a[i][j] = a[k][j]; a[k][j] = b; }
    printf ("Izlaz? "); scanf ("%s", ime);
    dat = fopen (ime, "w");
    fprintf (dat, "%d %d\n", m, n);
    for (i=0; i<m; i++) {
      for (j=0; j<n; j++) fprintf (dat, "%5d", a[i][j]);
      fprintf (dat, "\n");
    }
    fclose (dat);
  }
}

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

      SUBROUTINE ParNepar (A, m, B, n)
      INTEGER A(m), B(m)
      j = 0
      n = 0
      DO i = 1, m
        IF (mod (A(i),2) .eq. 1) THEN
          n = n + 1
          B(n) = A(i)
        ELSE
          j = j + 1
          A(j) = A(i)
        END IF
        n = j
      END

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

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