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

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

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

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

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

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

Секвенцијална текстуална датотека о студентима за сваког студента у једном реду садржи име (низ од највише 30 знакова), број индекса (низ од највише 7 знакова), број оцена са испита (не већи од 50) и низ оцена. Саставити на језику C главни програм којим се у нову текстуалну датотеку уписују сви прочитани подаци о оним студентима којима је просек положених испита бар осам.

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

Саставити на језику FORTRAN потпрограм за премештање елемента низа реалних бројева са места са редним бројем p на место са редним бројем q. Aко је p<q, елементи од места p+1 до q се померају за по једно место ка почетку низа, a ако је p>q, елементи од места q до p-1 се померају за по једно место ка крају низа.

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


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


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

#include <stdio.h>
#define N 100

void izost (int a[], int *n) {
  int i, min=a[0], max=a[0], j;
  for (i=1; i<*n; i++)
    if      (a[i] < min) min = a[i];
    else if (a[i] > max) max = a[i];
  for (j=i=0; i<*n; i++)
    if (a[i]!=min && a[i]!=max)
      a[j++] = a[i];
  *n = j;
}

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

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

#include <stdio.h>
#define N 50

main () {
  int a[N], k, n, i, z;
  FILE *ul, *izl;
  char ime[31], ind[8];

  ul  = fopen ("studenti.txt", "r");
  izl = fopen ("prosek8.txt", "w");
  while (!feof(ul)) {
    fscanf (ul, "%s%s%d", ime, ind, &n);
    for (i=k=z=0; i<n; i++) {
      fscanf (ul, "%d", &a[i]);
      if (a[i] > 5) { z += a[i]; k++; }
    }
    if (k>0 && (float)z/k>=8) {
      fprintf (izl, "%s %s %d", ime, ind, n);
      for (i=0; i<n; fprintf(izl," %d",a[i++]));
      fprintf (izl, "\n");
    }
  }
  fclose (ul); fclose (izl);
}

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

      SUBROUTINE Premesti(A, n, p, q)
      REAL A(n)
      INTEGER p, q
      b = A(p)
      IF (p .lt. q) THEN
        DO i = p, q-1
          A(i) = A(i+1)
        END DO
      ELSE IF (p .gt. q) THEN
        DO i = p, q+1, -1
          A(i) = A(i-1)
        END DO
      END IF
      A(q) = b
      END

      PROGRAM Premestanje
      PARAMETER (nmax = 20)
      REAL A(nmax)
      INTEGER p, q
   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)
        PRINT *, 'p, q?'
        READ *, p, q
      IF (p.le.0 .or. p.gt.n .or.
          q.le.0 .or. q.gt.n) GO TO 99
        CALL Premesti (A, n, p, q)
        PRINT *, 'A='
        PRINT *, (A(i), i=1,n)
        GO TO 10
   99 CONTINUE
      END
( почетак)
         
Аутор: Ласло Краус
Е-пошта: kraus@etf.rs

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