![]() Ласло Краус |
Програмирање II Други колоквијум 11. 6. 2002 |
---|
Датуми се представљају у облику структура са три поља (дан месец и година). Саставити на језику C пакет који садржи функције за испитивање да ли је датум исправан, упоређивање два датума и уређивање низа датума по неопадајућем редоследу.
Саставити на језику C главни програм који прочита низ датума до неисправног датума, уреди их по неопадајућем редоследу и испише добијени резултат.
Саставити на језику C функцију за изостављање дупликата из сваког подниза узастопних једнаких вредности из једноструко повезане листе целих бројеве (на пример, листу која садржи бројева 1, 2, 2, 2, 3, 1, 1, 4, 4, 4, 2 треба претворити у листу која садржи 1, 2, 3, 1, 4, 2)
Саставити на језику C главни програм који читајући низ бројева преко главног улаза направи листу уз очување редоследа читања, позове горњи потпрограм, испише добијени резултат преко главног излаза, уништи листу и понавља претходне кораке све док за дужину низа не прочита недозвољену вредност.
Бинарна секвенцијална датотека са записима фиксне дужине о позајмљеним књигама из библиотеке за сваку позајмљену књигу садржи име читаоца (низ од највише 20 знакова), инвентарски број књиге (дугачак цео број), наслов књиге (низ од највише 30 знакова), име аутора (низ од највише 20 знакова), датум позајмљивања и датум рока за враћање књиге (велики цели бројеви по шеми ggggmmdd
). Саставити на језику C главни програм за стварање нове текстуалне датотеке о прекорачењима рока за враћање књига, која за сваку књигу која није враћена на време садржи по један ред са именом читаоца, шифром књиге и датумом рока за враћање. Тренутни датум, у облику три цела броја, програму доставити као параметар главног програма.
/* datum.h */ typedef struct { short d, m, g; } Datum; int ispravan (Datum dat); int uporedi(Datum dat1, Datum dat2); void uredi (Datum dat[], int n); /* datum.c */ #include "datum.h" #include <stdio.h> int ispravan (Datum dat) { const 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 dat.m>0 && dat.m<=12 && dat.d>0 && dat.d<=dani[dat.g%4==0][dat.m-1]; } int uporedi(Datum dat1, Datum dat2) { return (dat1.g<>dat2.g)?dat1.g-dat2.g : (dat1.m<>dat2.m)?dat1.m-dat2.m : dat1.d-dat2.d ; } void uredi (Datum dat[], int n) { int i, j, m; Datum d; for (i=0; i<n-1; i++) { for (m=i,j=i+1; j<n; j++) if (uporedi(dat[j],dat[m])<0) m=j; if (m <> i) { d=dat[i]; dat[i]=dat[m]; dat[m]=d; } } /* datumtt.c */ #include "datum.h" #include <stdio.h> #define N 100 void main () { Datum dat[N]; int i, n = 0; while (1) { printf ("dat[%d]? ", n); scanf ("%hd%hd%hd", &dat[n].d, &dat[n].m, &dat[n].g); if (! ispravan (dat[n])) break; n++; } uredi (dat, n); putchar ('\n'); for (i=0; i<n; i++) printf ("%2d.%2d %4d\n", dat[i].d, dat[i].m, dat[i].g); }
#include <stdlib.h>
#include <stdio.h>
typedef struct elem { int br; struct elem *sl; } Elem;
void sazim (Elem *lst) {
if (lst) {
Elem *preth=lst, *tek=lst->sl;
while (tek) {
if (tek->br == preth->br) {
preth->sl = tek->sl;
free (tek);
} else preth = tek;
tek = preth->sl;
}
}
}
void main () {
while (1) {
int n,i,b; Elem *lst=0,*tek,*novi;
printf ("n? "); scanf ("%d", &n);
if (n<=0) break;
printf ("Niz? ");
for (i=0; i<n; i++) {
novi = malloc (sizeof (elem));
scanf("%d",&novi->br);
novi->sl = 0;
if (! lst) lst = novi; else tek->sl = novi;
tek = novi;
}
sazim (lst);
printf ("Niz= ");
for (tek=lst; tek; tek=tek->sl) printf ("%d ", tek->br);
putchar ('\n');
while (lst) { Elem *stari = lst; lst = lst->sl; free (stari); }
}
}
#include <stdio.h>
typedef struct {
char citalac[21],naslov[31],autor[21];
long inv_br, uzeta, rok;
} Pozajm;
void main () {
FILE *ul = fopen("pozajm.dat", "rb"),
*izl = fopen("izvest.txt", "w");
long danas= atoi(argv[1]) + /*dan*/
atoi(argv[2])*100 + /*mes*/
atol(argv[3])*10000;/*god*/
while (!eof (ul)) {
Pozajm pozajm;
fread (&pozajm,sizeof(Pozajm),1,ul);
if (pozajm.rok < danas)
fprintf (
izl, "%s %ld %ld.%ld.%ld\n",
pozajm.citalac, pozajm.inv_br,
(pozajm.rok % 100),
(pozajm.;rok / 100 % 100),
(pozajm.;rok / 10000)
);
}
}
(садржај)
Copyright © 2003, Laslo Kraus
Последња ревизија: 25.4.2003.