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

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

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

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

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

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

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

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

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

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


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


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

#include <stdio.h>
#define N 100

void unija (float a[], int na, float b[], int nb, float c[], int *nc) {
  int ia=0, ib=0, ic=0;
  while (ia<na && ib<nb)
    c[ic++] = (a[ia]<b[ib]) ? a[ia++] :
              (a[ia]>b[ib]) ? b[ib++] :
                                 a[ib++,ia++];
  while (ia < na) c[ic++] = a[ia++];
  while (ib < nb) c[ic++] = b[ib++];
  *nc = ic;
}

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

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

#include <stdio.h>
#define N 50

main () {
  int a[N][N], m, n, i, j, b;
  FILE *dat;
  char ime[31];
  printf ("Ulaz? "); 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,"%d",&a[i][j++]));
  for (i=0; i<m; i++) {
    b = a[i][n-1];
    for (j=n-1; j>0; j--) a[i][j] = a[i][j-1];
    a[i][0] = b;
  }
  fclose (dat);
  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; fprintf(dat,"%d ",a[i][j++]));
    fprintf (dat, "\n");
  }
  fclose (dat);
}

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

      SUBROUTINE Nadji(A, n, p, q)
      REAL A(n), min
      INTEGER p, q
      min = A(1)
      p = 1
      q = 1
      DO i = 2, n
        IF (A(i) .lt. min) THEN
          min = A(i)
          p = i
        END IF
        IF (A(i) .eq. min) q = i
      END DO
      END

      PROGRAM Nalazenje
      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)
        CALL Nadji (A, n, p, q)
        PRINT *, 'p=', p, 'q=', q
        GO TO 10
   99 CONTINUE
      END
( почетак)
         
Аутор: Ласло Краус
Е-пошта: kraus@etf.rs

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