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

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

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

Саставити потпрограм на језику C за израчунавање времена лета t, удаљености места пада на земљу d и највеће достигнуте висине h тела које се са почетном брзином v избацује под углом φ у односу на површину земље (g=9,8062 m/s2):

       

Саставити главни програм на језику C за табелирање горњих података за све вредности vminvvmax са кораком Δv и φminφφmax са кораком Δφ.

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

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

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

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

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

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

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

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

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


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


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

/* koshitac.c */
#include <math.h>
#include <stdio.h>

void koshitac (double v, double fi, double *t, double *d, double *h) {
  *t = 2 * v * sin (fi) / 9.8062;
  *d = *t * v * cos (fi);
  *h = *t * v * sin (fi) / 4;
}

void main () {
  double v, vmin, vmax, dv, fi, fimin, fimax, dfi, t, d, h;
  printf ("vmin, vmax, dv? ");
  scanf ("%lf%lf%lf", &vmin, &vmax, &dv);
  printf ("fimin, fimax, dfi? ");
  scanf ("%lf%lf%lf",&fimin,&fimax,&dfi);
  putchar ('\n');
  printf ("     v      fi       t       d       h\n"
          "========================================\n");
  for (v=vmin; v<=vamx; v+=dv)
    for (fi=fmin; f<=fimax; fi+=dfi) {
      koshitac (v, fi, &t, &d, &h);
      printf ("%8.2f%8.2f%8.2f%8.2f%8.2f\n", v, fi, t, d, h);
    }
}

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

/* bitovi.h */

typedef unsigned long Ulong;

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

/* bitovi.c */

#include "bitovi.h"

void raspak (Ulong k, char bin[]) {
  int i;
  for (i=31; i>=0; i--)
    { bin[i] = k & 1; k >>= 1; }
}

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

/* bitovit.c */

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

void main () {
  Ulong k; int i; char bin[32];
  for (;;) {
    printf ("Heksadecimalni broj? ");
  if (scanf ("%lx", &k) == EOF) break;
    printf ("Binarni broj: ");
    raspak (k, bin);
    for (i=0; i<32; i++) {
      putchar ('0' + bin[i]);
      if (i%4 == 3) putchar (' ');
    } putchar ('\n');
    printf ("Heksadecimalni broj: %8.8lx\n\n", pak (bin));
  }
}

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

#include <stdio.h>

void fuzija (const int a[], int  na,
             const int b[], int  nb,
                   int c[], int *nc) {
  int ia=0, ib=0, ic=0;
  while (ia < na && ib < nb)
    c[ic++] = (a[ia]<b[ib]) ? a[ia++] : b[ib++]  ;
  while (ia < na) c[ic++] = a[ia++];
  while (ib < nb) c[ic++] = b[ib++];
  *nc = ic;
}
void main () {
  int i, a[40], na, b[40], nb, c[80], 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("%d", &a[i++]));
    printf ("B? "); for(i=0; i<nb; scanf("%d", &b[i++]));
    fuzija (a, na, b, nb, c, &nc);
    printf ("C:"); for(i=0; i<nc; printf(" %d",c[i++]));
    printf ("\n\n");
  }
}

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

#include <stdio.h>

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

void main () {
  int n, k, i, j; char uk[40]={0}, br[40];
  printf ("Duzina brojeva? "); scanf ("%d", &k);
  printf ("Broj sabiraka? ");  scanf ("%f", &n);
  for (i=0; i<n; i++) {
    printf ("Sledeci sabirak? ");
    for (j=0; j<k; scanf("%d",&br[j]));
    zbir (uk, br, k);
  }
  printf ("Zbir: "); for (j=0; j<k; printf("%d",uk[j++]));
  putchar ('\n');
}
(садржај)
         
Аутор: Ласло Краус
Е-пошта: kraus@etf.rs

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