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

Аутор: Јелица Протић

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

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

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

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

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

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

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

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

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

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


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


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

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

void izost (float a[], int *n) {
  float sum=0; int i,k=0;
  for (i=0; i<*n; i++) sum+=a[i];
  sum=abs(sum/(*n));
  for (i=0; i<*n; i++)
    if (fabs(a[i])<=0.8*sum || fabs(a[i])>=1.2*sum ) a[k++]=a[i];
  *n = k;
}

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

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

#include <stdio.h>
#define N 12

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

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

      SUBROUTINE Razv(A, n, B, m, C, k)
      REAL A(n), B(m), C(k)
        m = 0
        k = 0
        DO i = 1, n
          IF (mod(A(i),2).EQ.0
     *     OR mod(A(i),3).EQ.0
     *     OR mod(A(i),5).EQ.0
     *     OR mod(A(i),7).EQ.0) THEN
                k=k+1
                C(k)=A(i)
          ELSE
                m=m+1
                B(m)=A(i)
          END IF
        END DO
      END

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

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