Visa elektrotehnicka skola, Beograd
Ласло Краус
Програмирање - испити
Четврти парцијални
1.6.1998

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

Поставка задатка 1 (50 поена) (решење | садржај)

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

Саставити интерактивни главни програм на језику C који прихвата три команде:

Поставка задатка 2 (50 поена) (решење | садржај)

Бинарна датотека о залихама робе у складишту за сваки артикал садржи шифру артикла (char[6]), назив артикла (char[20]), шифру врсте артикла (char[6]), јединичну цену (double) и количину (double). Датотека је уређена по шифрама артикала. Саставити главни програм на језику C за табеларни приказ укупне вредности робе за поједине врсте артикала као и исписивање укупне вредности робе у складишту. Табела треба да је уређена по врстама артикала.

Поставка задатка 3 (50 поена) (решење | садржај)

Дата је неуређена бинарна секвенцијална датотека чији записи садрже шифру (int) и податак (char[20]). Саставити главни програм на језику C који ће да препише садржај те датотеке у другу уређену бинарну секвенцијалну датотеку према вредностима шифара. Као међукорак, потребно је од записа почетне датотеке направити уређену линеарну листу. Имена датотека за обраду задају се у линији команде за извршавање програма.

Напоменe (садржај)


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

/* stek.h */

typedef struct elem {
  float broj, struct elem *sled;
} Elem;

Elem *stavi  (Elem *stek, float  broj);
Elem *uzmi   (Elem *stek, float *broj);
int   prazan (Elem *stek);

/* stek.c */
#include "stek.h"
#include <stdlib.h>

Elem *stavi  (Elem *stek, float  broj) {
  Elem *novi = malloc (sizeof (Elem));
  novi->broj = broj; novi->sled = stek;
  return novi;
}

Elem *uzmi (Elem *stek, float *broj) {
  if (stek) {
    Elem *stari=stek; *broj=stek->broj;
    stek=stek->sled;  free (stari);
  } return stek;
}

int prazan(Elem *stek) {return stek==0;}

/* stekt.c */

#include "stek.h"
#include <stdio.h>

void main () {
  Elem *stek=0; int dalje=1;
  while (dalje) {
    char izb[2]; float broj;
    printf ("\nIzaberite (s=stavi, u=uzmi, k=kraj): ");
    scanf ("%s", izb);
    switch (izb[0]) {
    case 's': case 'S':
      printf("Broj? "); scanf ("%f", &broj);
      stek = stavi (stek, broj);
      break;
    case 'u': case 'U':
      if (! prazan (stek)) {
        stek = uzmi (stek, &broj);
        printf ("Broj= %.2f\n", broj);
      } else
        printf ("Stek je prazan!\n");
      break;
    case 'k': case 'K':
      dalje = 0;
      break;
    default:
      printf ("Nedozvoljen izbor!\n");
    }
  }
}

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

#include <stdio.h>
#include <string.h>

typedef struct {
  char sifra[6], naziv[20], vrsta[6];
  double cena, kol;
} Zap;

typedef struct {
  char vrsta[6]; double vredn;
} Stavka;

void main () {
  Zap zap;  Stavka tab[50];
  int i, j, k, dalje, n=0;
  double vr, uk=0;
  FILE *dat = fopen ("magacin.dat", "rb");

  /* Obrada uzastopnih zapisa */
  while (! feof (dat)) {
    fread (&zap, sizeof (Zap), 1, dat);

    /* Nadji vrstu artikla u tabeli */
    for (i=0, dalje=1; i<n && dalje; i++)
      dalje = (k = strcmp(tab[i].vrsta,zap.vrsta )) <0;
    if (i==n || k>0) {

      /* Jos nema u tabeli, ubaci */
      for (j=n++; j>i; j--) tab[j] = tab[j-1];
      strcpy (tab[i].vrsta, zap.vrsta);
      tab[i].vredn = 0;
    }

    /* Akumuliraj vrednost */
    vr = zap.cena * zap.kol;
    tab[i].vredn += vr; uk += vr;
  }

  /* Prikaz tabele */
  for (i=0; i<n; i++)
    printf("%s: %.2f\n", tab[i].vrsta, tab[i].vredn);
  printf ("\nUKUPNO: %.2f\n", uk);
}

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

#include <stdio.h>
#include <stdlib.h>

typedef struct {
  int sif; char pod[20];
} Zap;

typedef struct elem {
  Zap zap; struct elem *sled;
} Elem;

void main (int barg, char *varg[]) {
  Zap zap;
  Elem *lst=0, *preth, *tek, *novi;
  FILE *ul  = fopen (varg[1], "rb"),
       *izl = fopen (varg[2], "rw");
  while (! feof (ul)) {
    fread (&zap, sizeof(Zap), 1, ul);
    for (tek=lst, preth=0;
         tek && tek->zap.sif < zap.sif;
         preth=tek, tek=tek->sled);
    novi = malloc (sizeof (Elem));
    novi->zap  = zap;
    novi->sled = tek;
    preth ? preth->sled=novi : lst=novi;
  }
  for (tek=lst; tek; tek=tek->sled) {
    zap = tek->zap;
    fwrite (&zap, sizeof(Zap), 1, izl);
  }
  fclose (izl); fclose (ul);
}
(садржај)
         
Аутор: Ласло Краус
Е-пошта: kraus@etf.rs

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