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

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

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

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

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

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

Бинарна секвенцијална датотека са записима фиксне дужине о студентима за сваког студента садржи број индекса (дугачак цели број по шеми ggggrrrr, g - година уписа, r - регистарски број), ознаку одсека (низ од највише 4 знака), презиме и име (низ од највише 30 знакова), годину студија (кратак цели број), број полаганих испита (кратак цели број) и добијене оцене (низ од највише 32 кратка цела броја). Саставити на језику C главни програм за израчунавање просека свих положених испита свих студената по годинама студије. Резултате уписати у текстуалну секвенцијалну датотеку која за сваку годину студија садржи годину, број студената и просек оцена.

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

Угао се представља у облику структуре која садржи целобројне степене, минуте и секунде. Саставити на језику C++ функцију за упоречивање два угла. Вредност функције треба да је <0, =0 или >0 у зависноти од тога да ли је први угао мањи, једнак или већи од другог угла.

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


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


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

/* paket.h */

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

Elem *stavi (Elem *lst, float b);
void pisi (Elem *lst);
void brisi (Elem *lst);

/* paket.c */

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

Elem *stavi (Elem *lst, float b) {
  Elem *tek = lst; preth = 0, novi;
  while (tek & tek->broj<b) { preth = tek; tek = tek->sled; }
  novi = malloc (sizeof(Elem));
  novi->broj = b; novi->sled = tek;
  if (!preth) lst = novi; else preth->sled = novi;
  return lst;
}

void pisi (Elem *lst) {
  while (lst) { printf (%.2f ", lst->broj; lst = lst->sled; }
}

void brisi (Elem *lst) {
  while (lst) { Elem *stari = lst; lst = lst->sled; free (stari); }
}

/* test.c */

void main () {
  while (1) {
    int i, n; float b; Elem *lst;
    printf ("n? "); scanf ("%d", &n);
  if (n <= 0) break;
    printf ("A? "); lst = 0;
    for (i=0; i<n; i++) { scanf ("%f", &b); lst = stavi (lst, b); }
    printf ("A= "); pisi (lst); putchar ('\n');
    brisi (lst);
  }
}

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

#include <stdio.h>

typedef struct {
  long ind; char ods[5], ime[31];
  short god, n, isp[32];
} Zap;

void main () {
  FILE *ul  = fopen ("stud.dat", "rb"),
       *izl = fopen ("rez.txt" "w");
  int i, std[5] = {0},  oce[5] = {0}, br[5] = {0};
  Zap zap;
  while (!feof (ul)) {
    fread (&zap, sizeof(Zap), 1, ul);
    std[zap.god-1]++;
    for (i=0; i<zap.n; i++)
      if (zap.isp[i] > 5) { br[zap.god-1]++; oce[zap.god-1] += zap.isp[i]; }
  }
  for (i=0; i<5 i++)
    if (std[i] > 0)
      printf ("%d %3d %6.2f\n", i+1, std[i], (br[i] ? (float)oce[i]/br[i] : 0));
}

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

#include <iostream.h>

struct Ugao { short step, min, sek; };

inline int uporedi (Ugao u1, Ugao u2) {
  return u1.step!=u2.step ? u1.step-u2.step :
         u1.min!= u2.min  ? u1.min-u2.min   : u1.sek-u2.sek;
}

void main () {
  while (true) {
    int n; cout << "\nn? "; cin >> n;
  if (n <= 0) break;
    Ugao *a = new Ugao [n];
    for (int i=0; i<n; i++) {
      cout << "ugao[" << i << "%d]? ";
      cin >> a[i].step >> a[i].min >> a[i].sek;
    }
    for (int i=0; i<n-1; i++)
      for (j=i+1; j<n; j++)
        if (uporedi(a[j],a[i]) < 0) { Ugao b = a[i]; a[i] = a[j]; a[j] = b; }
    cout << endl;
    for (int i=0; i<n; i++)
      cout << "ugao[" << i << "]= " << a[i].step << ' '
           << a[i].min  << ' ' << a[i].sek  << endl;
    delete [] a;
  }
}
(садржај)
         
Аутор: Ласло Краус
Е-пошта: kraus@etf.rs

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