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

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

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

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

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

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

У секвенцијалној текстуалној датотеци у сваком реду се налази један цели број n и n+1 реалних бројева. Први реални број представља укупно задужење за претходну годину за неког потрошача електричне енергије, a осталих n реалних бројева представљају рате које је он уплатио у току године (0≤n≤12).

Саставити на језику C главни програм, који у нову секвенцијалну текстуалну датотеку упише, у посебном реду за сваког потрошачa, вредност обрачуна, која је негативна и без камате ако се новац враћа потрошачу, a позитивна и са каматoм oд 5% на разлику, ако je потрошач уплатио мање од задужења. Име улазне датотека je ulaz.txt, а излазне izlaz.txt.

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

Саставити на језику FORTRAN потпрограм за налажење коефицијената полинома који представља први извод задатог полинома са реалним коефицијентима.

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


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


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

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

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

main () {
  int a[N], b[K], n, k, i;
  while (1) {
    printf ("\nn? "); scanf ("%d", &n);
  if (n<0 || n>N) break;
    printf ("A? "); for (i=0; i<n; 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 12

main () {
  float zaduz, uplata, placeno;
  int i, n; FILE *datu, *dati;
  datu = fopen ("ulaz.txt", "r");
  dati = fopen ("izlaz.txt", "w");
  while (fscanf(datu,"%d%f",&n,&zaduz) != EOF) {
    placeno=0;
    for (i=0; i<n; i++) {
      fscanf (datu, "%f", &uplata);
      placeno += uplata;
    }
    zaduz -= placeno;
    if (zaduz > 0) zaduz *= 1.05;
    fprintf (dati, "%f\n", zaduz);
  }
  fclose (datu); fclose (dati);
}

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

      SUBROUTINE Izvod (A, n, B, m)
      REAL A(0:n), B(0:n-1)
        m = n - 1
        DO i = 1, n
          B(i-1) = i * A(i)
        END DO
      END

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

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