![]() Ласло Краус |
Програмирање - испити Допунски четврти парцијални 23.6.1998 |
---|
Саставити интерактивни главни програм на језику C који прихвата три команде:
char[6]
), број индекса студента (long
, пет
децималних цифара по шеми ggrrr
, где су gg
годинa уписа и rrr
регистарски број), датум полагања испита
(long
, шест децималних цифара по шеми ggmmdd
)
и добијену оцену (char
). Датотека је уређена по шифрама
предмета. Саставити главни програм на језику C за табеларни приказ
средњих оцена појединих студената. Табела треба да је уређена по
бројевима индекса студената.
int
) и податак (char[20]
). Саставити главни
програм на језику C који ће да препише записе те датотеке, у којима се
податак по абецедном редоследу налази иза речи LEPTIR
, у
другу уређену бинарну секвенцијалну датотеку према вредностима
шифара. Као међукорак, потребно је од одабраних записа почетне датотеке
направити уређену линеарну листу. Имена датотека за обраду задају се у
линији команде за извршавање програма.
/* red.h */
typedef struct elem {
float broj, struct elem *sled;
} Elem;
typedef struct {Elem *prvi, *posl;} Red;
void stavi (Red *red, float broj);
float uzmi (Red *red);
int prazan (Red red);
/* red.c */
#include "red.h"
#include <stdlib.h>
void stavi (Red *red, float broj) {
Elem *novi = malloc (sizeof (Elem));
novi->broj = broj; novi->sled = 0;
red->posl ? red->posl->sled = novi : red->prvi = novi;
red->posl = novi;
}
float uzmi (Red *red) {
if (red->prvi) {
float broj = red->prvi->broj;
Elem *stari=red->prvi;
red->prvi = red->prvi->sled;
free (stari);
if (! red->prvi) red->posl = 0;
return broj;
} return 0;
}
int prazan(Red red) {return red.prvi==0;}
/* redt.c */
#include "red.h"
#include <stdio.h>
void main () {
Red red={0,0}; int dalje=1;
while(dalje) { char izb[2]; float broj;
printf ("\nIzaberite (s=stavi, u=uzmi, k=kraj): ");
scanf ("%s", izb);
switch (izb[0]) {
case 's': case 'S':
printf("Broj? "); scanf ("%f", &broj);
stavi (&red, broj);
break;
case 'u': case 'U':
if (! prazan (red)) {
broj = uzmi (&red);
printf ("Broj= %.2f\n", broj);
} else
printf ("Red je prazan!\n");
break;
case 'k': case 'K':
dalje = 0;
break;
default:
printf ("Nedozvoljen izbor!\n");
}
}
}
#include <stdio.h>
typedef struct {
char sifra[6], ocena;
long br_ind, datum;
} Zap;
typedef struct {
long br_ind; int zb_oc, br_oc;
} Stavka;
void main () {
Zap zap; Stavka tab[250];
int i, j, dalje, n=0;
double vr, uk=0;
FILE *dat = fopen("magacin.dat","rb");
/* Obrada uzastopnih zapisa */
while (! feof (dat)) {
fread (&zap, sizeof (Zap), 1, dat);
/* Nadji broj indeksa u tabeli */
for (i=0, dalje=1; i<n && dalje; i++)
dalje = tab[i].br_ind < zap.br_ind;
if(i==n || tab[i].br_ind>zap.br_ind){
/* Jos nema u tabeli, ubaci */
for(j=n++;j>i;j--) tab[j]=tab[j-1];
tab[i].br_ind = zap.br_ind;
tab[i].zb_oc = tab[i].br_oc = 0;
}
/* Akumuliraj vrednost */
tab[i].zb_oc += zap[i].ocena;
tab[i].br_oc ++;
}
/* Prikaz tabele */
for (i=0; i<n; i++)
printf("%d/%d: %.2f\n", tab[i].br_ind%1000,
tab[i].br_ind/1000, (float)tab[i].zb_oc/tab[i].br_oc);
}
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct{int sif;char pod[20];}Zap;
typedef struct elem {
Zap zap; struct elem *sled;
} Elem;
void main (int barg, char *varg[]) {
Zap zap;
Elem *lst=0, *preth, *tek, *novi;
FILE *ul = fopen (varg[1], "rb"),
*izl = fopen (varg[2], "rw");
while (! feof (ul)) {
fread (&zap, sizeof(Zap), 1, ul);
if (strcmp (zap.pod, "LEPTIR") > 0) {
for (tek=lst, preth=0;
tek && tek->zap.sif < zap.sif;
preth=tek, tek=tek->sled);
novi = malloc (sizeof (Elem));
novi->zap = zap;
novi->sled = tek;
preth? preth->sled=novi : lst=novi;
}
}
for (tek=lst; tek; tek=tek->sled) {
zap = tek->zap;
fwrite (&zap, sizeof(Zap), 1, izl);
}
fclose (izl); fclose (ul);
}
(садржај)
Copyright © 1998, Laslo Kraus
Последња ревизија: 2.10.1998.