Visa elektrotehnicka skola, Beograd
Ласло Краус
Програмирање II
Дурги колоквијум
6. 6. 2000

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

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

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

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

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

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

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

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

Бинарна секвенцијална датотека са записима фиксне дужине о набавкама робе за сваки артикал садржи шифру артикла (низ од највише 8 знакова), датум набавке (велики цео број који датум садржи по шеми ggggmmdd), јединичну цену (реалан број) и количину (реалан број). Саставити на језику C главни програм за одређивање вредности набављене робе по месецима за задату годину. Тражену годину треба прочитати преко главног улаза. Резултате треба уписати у секвенцијалну текстуалну датотеку.

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


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

/* dinniz.h */

typedef struct {int n; float *niz} DNiz;
DNiz citaj (void);
void pisi (DNiz dn);
DNiz fuzija (DNiz dn1, DNiz dn2);
void brisi (DNiz *dn);


/* dinniz.c */

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

DNiz citaj (void) {
  int i;
  DNiz dn; scanf ("%d", &dn.n);
  dn.niz = malloc (n*sizeof(float));
  for (i=0; i<dn.n; scanf("%f",&dn.niz[i++]));
}

void pisi (DNiz dn) {
  int i;
  for (i=0; i<dn.n; printf("%.2f ", dn.niz[i++]));
}

DNiz fuzija (DNiz dn1, DNiz dn2) {
  int i = 0, j = 0,  k = 0;
  DNiz dn; dn.n = dn1.n + dn2.n;
  dn.niz = malloc (dn.n*sizeof(float));
  while (i < dn1.n && j < dn2.n)
    dn.niz[k++] = dn1.niz[i]<dn2.niz[j] ? dn1.niz[i++] : dn2.niz[j++];
  while(i < dn1.n) dn.niz[k++] = dn1.niz[i++];
  while(j < dn2.n) dn.niz[k++] = dn2.niz[j++];
  return dn;
}

void brisi (DNiz *dn)
  { free(dn->niz); dn->niz = 0; dn->n = 0; }


/* dinnizt.c */

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

void main () {
  while (1) {
    DNiz dn1, dn2, dn3;
    printf ("niz1? ") dn1 = citaj ();
  if (dn1.n < 0) break;
    printf ("niz2? ") dn2 = citaj ();
  if (dn2.n < 0) break;
    dn3 = fuzija (dn1, dn2);
    printf ("niz3= ") pisi (dn3); printf ("\n\n");
    brisi (&dn1); brisi (&dn2); brisi (&dn3);
  }
}

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

typedef struct elem
  { int br; struct elem *sl; } Elem;

Elem *umetni (Elem *lst; int br) {
  Elem *tek=lst, *preth=0, *novi;
  while (tek && br > tek->br)
    { preth = tek; tek = tek->sl; }
  novi = malloc (sizeof (Elem));
  novi->br = br; novi->sl = tek;
  if (!preth) lst       = novi;
    else      preth->sl = novi;
  return lst;
}

void main () {
  while (1) {
    int n, i, br;
    Elem *lst=0, *tek;
    printf ("n? "); scanf ("%d", &n);
  if (n < 0) break;
    printf ("A? ");
    for (i=0; i<n; i++) {
      scanf ("%d", &br);
      lst = umetni (lst, br);
    }
    printf ("A= ");
    for (tek=lst; tek; tek=tek->sl)
      printf ("%d ", tek->br);
    putchar ('\n');
    while (lst) {
      Elem *stari = lst;
      lst = lst->sl;
      free (stari);
    }
  }
}

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

#include <stdio.h>

typedef struct {
  char sif[9]; long dat; float cen, kol;
} Zap;

void main () {
  Zap zap;
  float vredn[12];
  int i, g;
  FILE *dat = fopen("nabavke.dat", "rb");
  printf ("God? "); scanf ("%d", &g);
  for (i=0; i<12; vredn[i++]=0);
  while (! feof (dat)) {
    fread (&zap, sizeof(Zap), 1, dat);
    if (zap.dat/10000 == g)
      uk[(zap.dat/100)%100-1] += zap.cen * zap.kol;
  }
  fclose (dat);
  dat = fopen ("rezult.txt", "w");
  for (i=0; i<12; i++)
    fprintf (dat, "%2d %10.2f\n", i+1, uk[i]);
}
(садржај)
         
Аутор: Ласло Краус
Е-пошта: kraus@etf.rs

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