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

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

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

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

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

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

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

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

Саставити на језику FORTRAN потпрограм за кружно померање елемената низа целих бројева за k места улево (на пример, низ 1 2 3 4 5 кружно померено улево за два места је низ 3 4 5 1 2).

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


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


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

#include <stdio.h>
#define N 50

void izvod (float a[], int n, float b[], int *m) {
  int i;
  for (i=1; i<=n; i++) b[i-1] = i * a[i];
  *m = n-1;
}

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

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

#include <stdio.h>
#define N 12

main () {
  float a[N][N], b, min, max;
  int i, j, m, n, jmin, jmax;
  FILE *dat;
  char ime[30];

  printf ("Ime ulazne datoteke? "); scanf (%s, ime);
  dat = fopen (ime, "r");
  fscanf (dat, "%d%d", &m, &n);
  for (i=0; i<m; i++)
    for (j=0; j<n; fscanf(dat,"%f",&a[i][j++]));
  fclose (dat);

  min = max = a[0][0];
  jmin = jmax = 0;
  for (i=0; i<m; i++)
    for (j=0; j<n; j++)
      if (a[i][j] < min) {
        min = a[i][j]; jmin = j;
      } else if (a[i][j] > max) {
        max = a[i][j]; jmax = j;
      }

  for (i=0; i<m; i++) { b = a[i][jmin]; a[i][jmon] = a[i][jmax]; a[i][jmax] = b; }

  printf ("Ime izlazne datoteke? "); 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; fscanf(dat,"%f ",a[i][j++]));
    fputchar ('\n', dat);
  }
  fclose (dat);
}

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

      SUBROUTINE Pomeri(A, n, k)
      INTEGER A(n), b
      DO i = 1, k
        b = A(1)
        DO j = 1, n-1
          A(j) = A(j+1)
        END DO
        A(n) = b
      END DO
      END

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

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