1. Laboratorinio darbo L2 ataskaita.
C++ programavimo aplinka.
Pristatymo data: 1999.03.24
Laboratorinis darbas Nr.1
*********************************************************
Uzduotis L1-51 Programa sudare Nerijus Skruodys, grupe IF 8/4.
destytojas doc. V.Jusas.
Data : 1999.03.24
*********************************************************
Duomenys
*****************************************************************
* terminas * prad. * pab. * pasikartoja * vidurkis *
*****************************************************************
* internetas * 1 * 100 * 20 * 0.00 *
* scriptas * 68 * 1340 * 120 * 0.00 *
* multimedija * 70 * 85 * 100 * 6.00 *
* linuxas * 30 * 200 * 300 * 1.00 *
*****************************************************************
daugiausiai pasikartoja :
linuxas – – – 300
*****************************************************************
Rezultatai
*****************************************************************
* terminas * prad. * pab. * pasikartoja * vidurkis *
*****************************************************************
* multimedija * 70 * 85 * 100 * 6.00 *
* linuxas * 30 * 200 * 300 * 1.00 *
*****************************************************************
daugiausiai pasikartoja :
linuxas – – – 300
*****************************************************************
Šie rezultatai pateikiami tekstiniame faile “rezultatat.rez”.
1.5 Duomenų tipai ir kintamieji.
const max=5, //maksimalus meniu daliu skaicius
xp=0, //pradine lango x koordinate
xg=150, //galine lango x koordinate
h=20, //lango atstumas nuo ekrano virsaus
pl=25, //lango plotis
tarp=5; //tarpai tarp langu
typedef char *eil; //eilute
typedef eil mas[max]; //eiluciu masyvas
typedef struct rod {
char pav[20]; //termino pavadinimas
int prad,pab; //pradinis ir galinis puslapiai
int kartai; //bendras pasikartojimu skaicius
float vid; //pasikartojimu skaicius puslapyje
rod *next; //kitas saraso elementas
} duom;
const mas menu={„apie programa”,”formuoti duomenis”,”tvarkyti duomenis”,
„isvesti lenteles”,”pabaiga” }; //meniu daliu
Pagrindinės programos kintamieji
int GD=9,GM=2,errorcode, //grafiniam rezimui ijungti vatojami kintamieji
kas=1, d=0; //pasirinkta meniu dalis ir padeties vektorius
char sb; //is klaviaturos skaitomas simbolis
duom *term; //terminu dinaminis masyvas
FILE *F; //rezultatu failas
1.6 Programos aprašymas.
Programa skirta atlikti veiksmams su duomenų masyvu. Ji naudoja aštuonias paprogrames: pradzia, pasirinkti, pranesimas, formduom, tvarkyti, rezpr, spausdinti, isvalyti.
Programos modulinė schema :
Paprogramių aprašai :
• void pradzia (void);
funkcija piešia pradinį meniu.
• int pasirinkti(int);
funkcija organizuoja meniu dalies pasirinkimą. Funkcija gražina pasirinktos menu dalies numerį ir į ją paduodame menu dalies ant kurios stovi žymeklis numerį.
• void pranesimas (int);
funkcija išveda į ekraną nurdyto numerio pranesimą
• void formduom (duom *);
funkcija suformuoja dinaminį pradinių duomenų sąrašą.
• void tvarkyti (duom *);
funkcija tvarko dinaminį duomenų sąrašą.
• void rezpr (void);
funkcija spausdina rezultatų faile pradzią.
• void spausdinti (duom *);
funkcija spausdina dinaminį masyvą į failą .
• void isvalyti (duom *);
funkcija pašalina iš atminties dinaminį masyvą.
• void pastumti (duom *);
funkcija dinaminį masyvą pastumia per vieną elementą į kairę.
1.7 Atmintinė vartotojui.
Programa pradinius duomenis ima iš failų “pirmas.dat” bei “antras.dat”, o rezultatus įrašo į failą “rezult.rez”.
1.8 Programos C++ kalba tekstas.
#include
#include
#include
#include
const max=5, //maksimalus meniu daliu skaicius
xp=0, //pradine lango x koordinate
xg=150, //galine lango x koordinate
h=20, //lango atstumas nuo ekrano virsaus
pl=25, //lango plotis
tarp=5; //tarpai tarp langu
typedef char *eil; //eilute
typedef eil mas[max]; //eiluciu masyvas
typedef struct rod {
char pav[20]; //termino pavadinimas
int prad,pab; //pradinis ir galinis puslapiai
int kartai; //bendras pasikartojimu skaicius
float vid; //pasikartojimu skaicius puslapyje
rod *next; //kitas saraso elementas
} duom;
const mas menu={„apie programa”,”formuoti duomenis”,”tvarkyti duomenis”,
„isvesti lenteles”,”pabaiga” }; //meniu daliu pavadinimai
void pranesimas (int); //isveda i ekrana tam tikra pranesima
void pradzia (void); //piesia pradini meniu
int pasirinkti(int); //organizuoja meniu dalies pasirinkima
void formduom (duom *); //suformuoja pradinius duomenis
void tvarkyti (duom *); //tvarko duomenis
void rezpr (void); //rezultatu failo pradzia
void spausdinti (duom *); //spausdina dinamini masyva i faila
void isvalyti (duom *); //isvalo atminti
void pastumti (duom *); //dinamini masyva pastumia vienu elementu i kaire
int main (void) {
int GD=9,GM=2,errorcode, //grafiniam rezimui ijungti vatojami kintamieji
kas=1, d=0; //pasirinkta meniu dalis ir padeties vektorius
char sb; //is klaviaturos skaitomas simbolis
duom *term; //terminu dinaminis masyvas
FILE *F; //rezultatu failas
initgraph(&GD, &GM,”D:\PROG\BC\BGI”);
errorcode = graphresult();
if (errorcode != grOk) /* an error occurred */
{
printf(„Graphics error: %sn”, grapherrormsg(errorcode));
printf(„Press any key to halt:”);
getch();
return(1); /* terminate with an error code */
}
pradzia ();
term=new (duom);
term->next=NULL;
do {
kas=pasirinkti(kas-1)+1;
switch (kas) {
case 1 : pranesimas (1); break;
case 2 : formduom (term); pranesimas (5); d=1; break;
case 3 : if (d) {
tvarkyti(term);
d++;
pranesimas(3);
}
else pranesimas(2); break;
case 4 : if (d) {
if (d==1) {
rezpr();
}
else {
F=fopen(„rezult.rez”,”a”);
fprintf(F,”n Rezultatainn”);
fclose(F);
}
spausdinti(term);
pranesimas(4);
}
else pranesimas(2); break;
}
} while (kas!=max);
isvalyti (term);
closegraph();
return (0);
}
void pradzia (void) {
int i;
char sb;
struct palettetype pal;
setcolor(BROWN);
getpalette(&pal);
setrgbpalette(pal.colors[BROWN], 8*4, 8*4, 8*4);
setfillstyle(1,BROWN);
for (i=0;i0 ) ? (y–) : (y=max-1); break;
case 80: ( ypav,&(term->prad),&(term->pab));
if (!feof(F)) {
term->next=new(duom);
term=term->next;
}
}
term->next=NULL;
fclose(F);
F=fopen(„antras.dat”,”r”);
while (!feof(F)) {
fscanf (F,”%s%i”,e,&sk);
term=p;
while (term!=NULL) {
if (!strcmp(e,term->pav)) {
term->kartai=sk;
term->vid=(term->kartai)/( (term->pab)-(term->prad) );
}
term=term->next;
}
}
fclose(F);
}
int raktas (duom *term) {
return ((term->vid<(term->next)->vid) || ((term->vid==(term->next)->vid) &&
(strcmp((term->next)->pav,term->pav)<0)));
}
void tvarkyti (duom *term) {
duom *p,*sen,kop;
int pak;
p=term;
while (term!=NULL) {
sen=term;
if (term->vid<1) {
pastumti(term);
}
else term=term->next;
}
pak=1; if (term->next==NULL) pak=0;
while (pak) {
pak=0;
term=p;
while (term->next!=NULL) {
if (raktas(term)) {
pak=1;
kop=*term;
strcpy(term->pav,(term->next)->pav);
term->prad=(term->next)->prad;
term->pab=(term->next)->pab;
term->kartai=(term->next)->kartai;
term->vid=(term->next)->vid;
strcpy((term->next)->pav,kop.pav);
(term->next)->prad=kop.prad;
(term->next)->pab=kop.pab;
(term->next)->kartai=kop.kartai;
(term->next)->vid=kop.vid;
}
term=term->next;
}
}
term=p;
}
void pastumti (duom *term) {
duom *sen;
while (term->next!=NULL) {
strcpy(term->pav,(term->next)->pav);
term->prad=(term->next)->prad;
term->pab=(term->next)->pab;
term->kartai=(term->next)->kartai;
term->vid=(term->next)->vid;
sen=term;
term=term->next;
}
delete term;
sen->next=NULL;
}
void rezpr (void) {
FILE *F;
F=fopen(„rezult.rez”,”w”);
fprintf ( F, ” Laboratorinis darbas Nr.1n”);
fprintf ( F, „*********************************************************n”);
fprintf ( F, ” Uzduotis L1-51″);
fprintf ( F, ” Programa sudare Nerijus Skruodys, grupe IF 8/4.n”);
fprintf ( F, ” destytojas doc. V.Jusas.n”);
fprintf ( F, ” Data : 1999.03.24n”);
fprintf ( F, „*********************************************************n”);
fprintf ( F, „n Duomenysnn”);
fclose (F);
}
void spausdinti (duom *term) {
FILE *F;
duom *p;
int ma;
p=term;
F=fopen(„rezult.rez”,”a”);
fprintf(F,”*****************************************************************n”);
fprintf(F,”* terminas * prad. * pab. * pasikartoja * vidurkis *n”);
fprintf(F,”*****************************************************************n”);
while (term!=NULL) {
fprintf(F,”* %-20s * %5i *”,term->pav,term->prad);
fprintf(F,” %5i * %6i *”,term->pab,term->kartai);
fprintf(F,” %8.2f *n”,term->vid);
term=term->next;
}
fprintf(F,”*****************************************************************n”);
term=p;
ma=0;
while (term!=NULL) {
if (term->kartai>ma) ma=term->kartai;
term=term->next;
}
fprintf (F, „daugiausiai pasikartoja : n”);
term=p;
while (term!=NULL) {
if (term->kartai==ma) fprintf (F,”%-20s – – – %6in”,term->pav,term->kartai);
term=term->next;
}
fprintf(F,”*****************************************************************n”);
fclose (F);
}
void isvalyti (duom *term) {
duom *kop;
while (term!=NULL) {
kop=term;
term=term->next;
delete kop;
}
}
1.9 Programos testavimo rezultatai.
Laboratorinis darbas Nr.1
*********************************************************
Uzduotis L1-51 Programa sudare Nerijus Skruodys, grupe IF 8/4.
destytojas doc. V.Jusas.
Data : 1999.03.24
*********************************************************
Duomenys
*****************************************************************
* terminas * prad. * pab. * pasikartoja * vidurkis *
*****************************************************************
* internetas * 1 * 100 * 20 * 0.00 *
* scriptas * 68 * 1340 * 120 * 0.00 *
* multimedija * 70 * 85 * 100 * 6.00 *
* linuxas * 30 * 200 * 300 * 1.00 *
*****************************************************************
daugiausiai pasikartoja :
linuxas – – – 300
*****************************************************************
Rezultatai
*****************************************************************
* terminas * prad. * pab. * pasikartoja * vidurkis *
*****************************************************************
* multimedija * 70 * 85 * 100 * 6.00 *
* linuxas * 30 * 200 * 300 * 1.00 *
*****************************************************************
daugiausiai pasikartoja :
linuxas – – – 300
*****************************************************************
Šie rezultatai pateikiami tekstiniame faile “rezult.rez”.