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

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

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

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

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

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

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

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

Поставка задатка 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, q = 1;
  for (i=1; i<=n; i++) {
    р *= - x / i;
    q *= (a[n-i] + p);
  }
  return q;
}

void 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 *citaj (int n);
void pisi  (const int *a, int n);
void obrni (int *a, int n);


/* paket.c */

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

int *citaj (int n) {
  int i, *a = malloc (n * sizeof(int));
  for (i=0; i<n; scanf("%d",&a[i++]));
  return a;
}

void pisi  (const int *a, int n) {
  int i;
  for (i=0; i<n; printf("%d ",a[i++]);
}

void obrni (int *a, int n) {
  int i = 0, j = n-1;
  while (i < j) { int b = a[i]; a[i++] = a[j]; a[j--] = b; }
}


/* test.c */

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


void main () {
 int *a, n, i;
  while (1) {
    printf ("n? "); scanf ("%d", &n);
  if (n<=0) break;
    printf ("A? "); a = citaj (n);
    obrni (a, n);
    printf ("A= "); pisi (a, n);
    printf ("\n\n");
    free (a);
  }
}

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

typedef struct {
  short dan, mes, god;
} Datum;

int ispravan (Datum d) {
  short dani[2][12] = {{31,28,31,30,31,30,31,31,30,31,30,31},
                       {31,29,31,30,31,30,31,31,30,31,30,31}
                      };
  return d.god>0 && d.mes>0 && d.mes<=12 &&
         d.dan>0 && d.dan<=dani[d.god%4==0][d.mes-1];
}

int uporedi (Datum d1, Datum d2) {
  return (d1.god!=d2.god) ? d1.god - d2.god :
         (d1.mes!=d2.mes) ? d1.mes - d2.mes :
                            d1.dan - d2.dan;
}

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

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

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