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

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

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

Кроз n тачака (xi,yi) (i=0, 1, 2, …, n-1) могуће је провући јединствени полином реда n-1 који се назива Lagrange-ов полином и који је дат формулом:

Саставити програм на језику C који прочита низ од n парова координата тачака и врши табелирање одговарајућег Lagrange-овог полинома за xminxxmax са кораком Δx.

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

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

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

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

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


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

#include <stdio.h>
main () {
  double X[100], Y[100], x, p, q, xmin, xmax, dx;
  int n, i;
  printf ("n? "); scanf ("%d", &n);
  for (i=0; i<n; i++) {
    printf ("x[%d], y[%d]? ", i, i);
    scanf ("%lf%lf", &X[i], &Y[i]);
  }
  printf ("xmin, xmax, dx? ");
  scanf ("%lf%lf%lf", &xmin, &xmax, &dx);
  printf ("\n     x            p(x)\n"
          "========================\n");
  for (x=xmin; x<=xmax; x+=dx) {
    for (p=i=0; i<n; i++) {
      for (q=Y[i], j=0; j<n; j++)
        if (j != i)
          q *= (x-X[j]) / (X[i]-X[j]);
      P += q;
    }
    printf ("%12.2f%12.2f\n", x, p);
  }
}

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

#include <stdio.h>
#include <ctype.h>
main () {
  int zn, br[10], i;
  for (i=0; i<10; br[i++]=0);
  while ((zn = getchar()) != EOF)
    if (isdigit (zn)) br[zn-'0']++;
  for (i=0; i<10; i++)
    printf ("%d%5d\n", i, br[i]);
}

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

#include <stdio.h>
#include <stdlib.h>
main () {
  while (1) {
    int *a, *b, *c, na, nb, nc, ia, ib, ic;
    printf ("na, nb? ");
    scanf ("%d%d", &na, &nb);
  if (na < 0 || nb < 0) break;
    nc = na + nb;
    a  = malloc (na * sizeof (int));
    b  = malloc (nb * sizeof (int));
    c  = malloc (nc * sizeof (int));
    printf ("A? ");
    for (ia=0; ia<na; scanf("%d", &a[ia++]);
    printf ("B? ");
    for (ib=0; ib<nb; scanf("%d", &b[ib++]);
    for (ia=ib=ic=0; 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++];
    printf ("C=");
    for (ic=0; ic<nc; printf(" %d", c[ic++]); putchar ('\n');
    free (a); free (b); free (c);
  }
}
(садржај)
         
Аутор: Ласло Краус
Е-пошта: kraus@etf.rs

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