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

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

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

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

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

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

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

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

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

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

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


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


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

#include <stdio.h>

void skup (int a[], int *n) {
  int i, j, k;
  for (i=j=0; i<*n; i++) {
    for (k=i-1; k>=0 && a[k]!=a[i]; k--);
    if (k < 0) a[j++] = a[i];
  }
  *n = j;
}

void main () {
  while (1) {
    int a[100], n, i;
    printf ("n? "); scanf ("%d", &n);
  if (n<0 || n>100) break;
    printf ("A? "); for (i=0; i<n; scanf ("%d", a[i++]));
    skup (a, &n);
    printf ("A= "); for (i=0; i<n; printf("%d ",a[i++])); putchar ('\n');
  }
}

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

/* polinom.h */

typedef struct { int n; float *a; } Poli;

Poli citaj (void);
float poli (Poli p, float x);
void brisi (Poli *p);

/* polinom.c */

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

Poli citaj (void) {
  Poli p; int i;
  scanf ("%d" &p.n);
  if (p.n >= 0) {
    p.a = malloc ((p.n+1)*sizeof(float));
    for (i=p.n; i>=0; scanf("%f",&p.a[i--]));
  } else p.a = 0;
  return p;
}

float poli (Poli p, float x) {
  float q=p.a[p.n]; int i;
  for (i=p.n-1; i>=0; q=q*x+p.a[i--]);
  return q;
}

void brisi (Poli *p) {
  free (p->a); p->a = 0; p->n = -1;
}

/* polinomt.c */

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

void main () {
  while (1) {
    Poli p; float xmax, xmin, dx, x;
    printf ("Red i koeficijenti? ");
    p = citaj ();
  if (p.n < 0) break;
    printf ("xmin, xmax, dx? " );
    scanf ("%f%f%f", &xmin, &xmax, &dx);
    putchar ('\n');
    for (x=xmin; x<=xmax; x+=dx)
      printf ("%5.2f %7.2f\n", x, poli(p,x));
    brisi (&p);
  }
}

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

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

typedef struct elem {
  int broj;
  struct elem *sled;
} Elem;

Elem *obrni (Elem *lista) {
  Elem *tek=lista, *preth=0;
  while (tek) {
    Elem *sled = tek->sled;
    tek->sled = preth;
    preth = tek;
    tek = sled;
  }
  return preth;
}

void main () {
  while (1) {
    int n, i;
    Elem *lst=0, *tek=0, *novi;
    printf ("n? "); scanf ("%d", &n);
  if (n < 0) break;
    printf ("A? ");
    for (i=0; i<n; i++) {
      novi = malloc (sizeof (Elem));
      scanf ("%d", &novi->broj);
      novi->sled = 0;
      if (tek == 0) lst = novi; else tek->sled = novi;
      tek = novi;
    }
    lst = obrni (lst);
    printf ("A= ");
    for (tek=lst; lst; lst=lst->sled) printf ("%d ", lst->broj);
    putchar ('\n');
    while (lst) { Elem *stari = lst; lst = lst->sled; free (stari); }
  }
}
(садржај)
         
Аутор: Ласло Краус
Е-пошта: kraus@etf.rs

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