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

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

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

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

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

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

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

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

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

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

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


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


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

#include <stdio.h>

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

main () {
  int n, i;
  float x, xmin, xmax, dx, a[20];
  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 */

#define N 50
int  citaj (float a[], int *n);
void pisi  (float a[], int n);
void uredi (float a[], int n);


/* paket.c */

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

int citaj (float a[], int *m) {
  int i, n;
  printf ("n? "); scanf ("%d", &n);
  if (n<=0 || n>N) return 0;
  printf ("A? "); *m = n;
  for (i=0; i<n; scanf("%f",&a[i++]));
  return 1;
}

void pisi (float a[], int n) {
  int i;
  for (i=0; i<n; printf("%.2f ",a[i++]));
  putchar ('\n');
}


void uredi (float a[], int n) {
  int i, j; float b;
  for (i=0; i<n-1; i++)
    for (j=i+1; j<n; j++)
      if (a[j] < a[i]) {
        b = a[i]; a[i] = a[j]; a[j] = b;
      }
}


/* glavni.c */

#include "paket.h"

void main () {
  float a[N]; int n;
  while (citaj(a,&n)) {
    uredi (a,n);
    printf ("A= "); pisi (a,n); putchar ('\n');
  }
}

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

typedef struct {
  short step, min, sek;
} Ugao;

Ugao zbir (Ugao u1, Ugao u2) {
  u1.sek += u2.sek;
  if (u1.sek > 59) { u1.sek -= 60; u1.min++; }
  u1.min += u2.min;
  if (u1.min > 59) { u1.min -= 60; u1.step++; }
  u1.step += u2.step;
  return u1;
}

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

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

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