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

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

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

Саставити на језику C функцију за израчунавање вредности следеће функције:

Саставити на језику C главни програм за табелирање наведене функције на главном излазу рачунара за све вредности xminxxmax са кораком Δx. Потребне податке читати преко главног улаза рачунара.

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

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

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

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

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

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


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


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

#include <stdio.h>

float f (float x, float a[], int n) {
  int i; float p = 1, r = a[0];
  for (i=1; i<=n; i++) {
    p *= - x / i;
    r += a[i] * p;
  }
  return r;
}

main () {
  int n, i;
  float x, xmin, xmax, dx, a[21];
  printf ("n? "); scanf ("%d", &n);
  printf ("A? "); for (i=0; i<=n; scanf("%f",&a[i++]));
  printf ("xmin, xmax, dx? "); scanf ("%f%f%f", &xmin, &xmax, &dx);
  printf ("\n     x      f(x)\n"
            "================\n");
  for (x=xmin; x<=xmax; x+=dx) printf ("%6.2f10.6f\n", x, f(x,a,n));
}

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

/* paket.h */

int  max   (float a[], int n);
int  broj  (float a[], int n);
void izost (float a[], int *n);


/* paket.c */

#include "paket.h"
int  max (float a[], int n) {
  int m=0, i;
  for (i=1; i<n; i++)
    if (a[i] > a[m]) m = i;
  return m;
}

int  broj (float a[], int n) {
  int k=0; float m=a[max(a,n)];
  for (i=0; i<n; i++)
    if (a[i] == m) k++;
  return k;
}

void izost (float a[], int *n) {
  int i, j; float m=a[max(a,n)];
  for (i=j=0; i<*n; i++)
    if (a[i] != m) a[j++] = a[i];
  *n = j;
}


/* test.c */

#include "paket.h"
#include <stdio.h>
#define N 50

void main () {
  float a[N]; int n, i;
  while (1) {
    printf ("n? "); scanf ("%d", &n);
  if (n<=0 || n>N) break;
    printf ("A? ");  for (i=0; i<n; scanf("%f",&a[i++]));
    printf ("m= %f\n", a[max(a,n)]);
    printf ("k= %d\n", broj(a,n));
    izost (a, &n);
    printf ("A= "); for (i=0; i<n; printf("%f ",a[i++]));
    printf ("\n\n");
  }
}

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

typedef struct {
  short dan, sat, min, sek;
} Vreme;

int uporedi (Vreme v1, Vreme v2) {
  return (v1.dan!=v2.dan) ? v1.dan - v2.dan :
         (v1.sat!=v2.sat) ? v1.sat - v2.sat :
         (v1.min!=v2.min) ? v1.min - v2.min :
                            v1.sek - v2.sek;
}

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

void main () {
  while (1) {
    Vreme *a; int i, n;
    printf ("\nn? "); scanf ("%d", &n);
  if (n < 0) break;
    a = malloc (n * sizeof (Vreme));
    for (i=0; i<n; i++) {
      printf ("vreme[%d]? ", i)
      scanf("%hd%hd%hd%hd", &a[i].dan, &a[i].sat, &a[i].min, &a[i].sek);
    }
    for (i=0; i<n-1; i++)
      for (j=i+1; j<n; j++)
        if (uporedi(a[j],a[i])<0) {
          Vreme v    = a[i];
                a[i] = a[j];
                a[j] = v;
        }
    printf ("\nUredjeno:\n\n")
    for (i=0; i<n; i++)
      printf ("(%d %d:%d:%d)\n", a[i].dan, a[i].sat, a[i].min, a[i].sek);
    free (a);
  }
}
(садржај)
         
Аутор: Ласло Краус
Е-пошта: kraus@etf.rs

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