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

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

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

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

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

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

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

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

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

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


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


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

/* velceo.h */
void mnozi (char niz[], int n, int k);
void pisi  (const char niz[], int n);

/* velceo.c */
#include "velceo.h"
#include <stdio.h>
void mnozi (char niz[], int n, int k) {
  int i, prenos=0;
  for (i=0; i<n; i++) {
    prenos += niz[i] * k;
    niz[i] = prenos % 10;
    prenos /= 10;
  }
}
void pisi  (const char niz[], int n) {
  int i, prvi=1;
  for (i=n-1; i>=0; i--) {
    if (!prvi || niz[i]) {
      putchar (niz[i]+'0');
      prvi = 0;
    }
  }
}

/* nfakt.c */
#include "velceo.h"
#include <stdio.h>
#define N 100
void main () {
  char broj[N] = {0}; int i, n;
  printf ("n? "); scanf ("%d", &n);
  broj[0] = 1;
  for (i=2; i<n; i++) mnozi (broj, N, i);
  printf ("n!= "); pisi (broj, N); putchar ('\n');
}

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

#include <stdlib.h>
#include <stdio.h>
typedef struct elem
  { float br; struct elem *sl; } Elem;
Elem *skup (const float niz[], int n) {
  Elem *prvi=0; int i, j;
  for (i=0; i<n; i++) {
    for (j=i+1; j<n; j++) if (niz[j] == niz[i]) break;
    if (j == n) {
      Elem *novi = malloc(sizeof(Elem));
      novi->br = niz[i];
      novi->sl = prvi;
      prvi = novi;
    }
  }
  return prvi;
}

#denfine N 30
void main () {
  while (1) {
    int n,i; float niz[N]; Elem *s,*tek;
    printf ("n? "); scanf ("%d", &n);
  if (n<=0 || n>N) break;
    printf ("Niz? ");
    for (i=0;i<n;scanf("%f",&niz[i++]));
    s = skup (niz, n);
    printf ("Skup= ");
    for (tek=s; tek; tek=tek->sl) printf ("%.2f ", tek->br);
    putchar ('\n');
    while (s) {
      Elem *stari = s;
      s = s->sl;
      free (stari);
    }
  }
}

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

#include <stdio.h>
typedef struct {
  long ind;
  char ods[5], ime[21];
  short god, n, oce[30];
} Stud;
void main () {
  Stud st; int i;
  FILE *stu = fopen("stud.dat", "rb"),
       *jak = fopen("jaki.dat", "wb"),
       *sla = fopen("slabi.dat","wb");
  while (!eof (stu)) {
    fread (&st, sizeof(Stud), 1, stu);
    for (i=0; i<st.n; i++) if (st.oce[i]<6) break;
    fwrite (&st, sizeof(Stud), 1, (i<n ? sla : jak) );
  }
}
(садржај)
         
Аутор: Ласло Краус
Е-пошта: kraus@etf.rs

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