Visa elektrotehnicka skola, Beograd
Ласло Краус
Програмирање - испити
Допунски трећи парцијални
22.5.1998

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

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

Саставити потпрограм на језику C за израчунавање величине углова α, β и γ троугла чије су странице дужине a, b и c помоћу формула:

       

Вредност функције треба да означава да ли троугао са задатим страницама уопште постоји.

Саставити главни програм на језику C за табелирање горњих података за све вредности aminaamax са кораком Δa, bminbbmax са кораком Δb и cminccmax са кораком Δc.

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

Саставити пакет на језику C који садржи потпрограме за распакивање 32-битног целог броја у низ од 11 окталних цифара (по три бита) и за паковање низа од 11 окталних цифара (32 корисна бита) у један целобројни податак.

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

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

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

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

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

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

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


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


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

#include <math.h>
#include <stdio.h>

int uglovi (double a, double b, double c,
            double *alfa, double *beta, double *gama) {
  if (a<b+c && b<c+a && c<a+b) {
    *alfa = acos ((b*b+c*c-a*a)/(2*b*c));
    *beta = acos ((c*c+a*a-b*b)/(2*c*a));
    *gama = acos ((a*a+b*b-c*c)/(2*a*b));
    return 1;
  } else return 0;
}

void main () {
  double a, amin, amax, da, b, bmin, bmax, db, c, cmin, cmax, dc,
         alfa, beta, gama;
  printf ("amin, amax, da? ");
  scanf ("%lf%lf%lf", &amin, &amax, &da);
  printf ("bmin, bmax, db? ");
  scanf ("%lf%lf%lf", &bmin, &bmax, &db);
  printf ("cmin, cmax, dc? ");
  scanf ("%lf%lf%lf", &cmin, &cmax, &dc);
  putchar ('\n');
  printf ("     a       b       c      alfa    beta    gama\n"
          "================================================\n");
  for (a=amin; a<=amax; a+=da)
    for (b=bmin; b<=bmax; b+=db)
      for (c=cmin; c<=cmax; c+=dc) {
        printf ("%8.2f%8.2f%8.2", a, b, c);
        if (uglovi (a, b, c, &alfa, &beta, &gama))
          printf ("%8.2f%8.2f%8.2\n", alfa, beta, gama);
        else
          printf ("\tNije trougao!\n");
      }
}

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

/* oktalni.h */

typedef unsigned long Ulong;

void raspak (Ulong k, char okt[]);
Ulong pak (const char okt []);

/* oktalni.c */

#include "oktalni.h"

void raspak (Ulong k, char okt[]) {
  int i;
  for (i=10; i>=0; i--)
    { okt[i] = k & 7; k >>= 3; }
}

Ulong pak (const char okt []) {
  int i; Ulong k=0;
  for (i=0; i<11; k = k<<3 | bin[i++]);
  return k;
}

/* oktalnit.c */

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

void main () {
  Ulong k; int i; char okt[11];
  for (;;) {
    printf ("Oktalni broj? ");
  if (scanf ("%lo", &k) == EOF) break;
    printf ("Raspakovano: ");
    raspak (k, okt);
    for (i=0; i<11; i++) {
      putchar ('0' + okt[i]);
    } putchar ('\n');
    printf
      ("Pakovano: %11.11lx\n\n", pak (okt));
  }
}

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

#include <stdio.h>

void presek (const float a[], int  na,
             const float b[], int  nb,
                   float c[], int *nc) {
  int ia, ib, ic=0;
  for (ia=0; ia<na; i++) {
    for (ib=0; ib<nb && a[ia]!=b[ib];
         ib++);
    if (ib < nb) c[ic++] = a[ia];
  } *nc = ic;
}

void main () {
  int i, a[40], na, b[40], nb, c[40], nc;
  while (1) {
    printf ("na, nb? ");
    scanf ("%d%d", &na, &nb);
  if (na<0 || nb < 0) break;
    printf ("A? ");
    for(i=0; i<na; scanf("%f", &a[i++]));
    printf ("B? ");
    for(i=0; i<nb; scanf("%f", &b[i++]));
    presek (a, na, b, nb, c, &nc);
    printf ("C:");
    for(i=0; i<nc; printf(" %f",c[i++]));
    printf ("\n\n");
  }
}

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

#include <stdio.h>

void proizvod(char a[], int k, int b){
  int i, p=0;
  for (i=k-1; i>=0; i--) {
    p = a[i] * b + p;
    a[i] = p % 10;
    p /= 10;
  }
}

void main () {
  enum { K = 40 };
  int n, i, prva; char fakt[K];
  while (1) {
    printf ("n ? "); scanf ("%d", &n);
  if (n < 0) break;
    for (i=0; i<K-1; fakt[i++]=0);
    fakt[K-1]=1;
    for( i=0; i<n; proizvod(fakt,K,i++));
    printf ("n!= "); prva = 1;
    for (i=0; i<K; j++) {
      if (fakt[i] || !prva || i==K-1)
        printf("%d", fakt[i]);
      if (fakt[i]) prva = 0;
    }
    putchar ('\n');
  }
}
(садржај)
         
Аутор: Ласло Краус
Е-пошта: kraus@etf.rs

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