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

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

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

Саставити на језику C потпрограм за одређивање броја појављивања појединих бројева у неуређеном низу целих бројева. Разултат су два низа: први садржи бројеве који се налазе у почетном низу, а други колико пута се ти бројеви појављују. На пример, за низ 3, 1, 6, 3, 4, 6, 2, 6 резултат су низови 3, 1, 6, 4, 2 и 2, 1, 3, 1, 1.

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

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

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

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

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

Саставити на језику FORTRAN главни програм који прочита цео број n, помоћу горњег потпрограма израчунава n! у облику великог целог броја и исписује добијени резултат све док за n не прочита негативну вредност.


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


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

#include <stdio.h>
#define N 100

void pojava (int a[], int m, int b[], int c[], int *n) {
  int i, j=0, k;
  for (i=0; i<m; i++) {
    for (k=0; k<j && a[i]!=b[k]; k++);
    if (k == j) {
      b[j] = a[i]; c[j++] = 1;
    } else c[k]++;
  }
  *n = j;
}

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

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

#include <stdio.h>
#define N 50

main () {
  float a[N][N], b[N][N], c[N][N];
  int ma, na, mb, nb, mc, nc, i, j, k;
  FILE *dat;
  char ime[31];
  printf ("Ulaz A? "); scanf ("%s", ime);
  dat = fopen (ime, "r");
  fscanf (dat, "%d%d", &ma, &na);
  for (i=0; i<ma; i++)
    for (j=0; j<na; fscanf(dat,"%d",&a[i][j++]));
  fclose (dat);
  printf ("Ulaz B? "); scanf ("%s", ime);
  dat = fopen (ime, "r");
  fscanf (dat, "%d%d", &mb, &nb);
  for (i=0; i<mb; i++)
    for (j=0; j<nb; fscanf(dat,"%d",&b[i][j++]));
  fclose (dat);
  if (na == mb) {
    mc = ma; nc = nb;
    for (i=0; i<ma; i++)
      for (k=0; k<nb; k++) {
        c[i][k] = 0;
        for (j=0; j<na; j++) c[i][k] += a[i][j] * b[j][k];
      }
    printf ("Izlaz? "); scanf ("%s",ime);
    dat = fopen (ime, "w");
    fprintf (dat, "%d %d\n", mc, nc);
    for (i=0; i<mc; i++) {
      for (j=0; j<nc; fprintf(dat,"%d ",c[i][j++]));
      fprintf (dat, "\n");
    }
    fclose (dat);
  } else
    printf ("Neusaglasene dimenzije!\n");
}

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

      SUBROUTINE mnozi (A, n, b)
      INTEGER A(n), b, p
      p = 0;
      DO i = n, 1, -1
        p = A(i) * b + p
        A(i) = mod (p, 10)
        p = p / 10
      END DO
      END

      PROGRAM Faktorijel
      PARAMETER (max = 40)
      INTEGER A(max)
   10 CONTINUE
        PRINT *, 'n?'
        READ *, n
      IF (n.lt.0) GO TO 99
        DO i = 1, max-1
          A(i) = 0
        END DO
        A(max) = 1
        DO i = 2, n
          mnozi (A, n, i)
        END DO
        PRINT '1X,40I1', (A(i),i=1,n)
        GO TO 10
   99 CONTINUE
      END
( почетак)
         
Аутор: Ласло Краус
Е-пошта: kraus@etf.rs

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