C++ programavimo aplinka.

1. Laboratorinio darbo L2 ataskaita.

C++ programavimo aplinka.

Pristatymo data: 1999.03.24

1.1 Užduotis (L2-5).

Knygoje naudojami techniniai terminai: terminas (žodis), psl., kuriame panaudotas pirmą kartą, psl., kuriame panaudotas paskutinį kartą. Terminų naudojimo intensyvumas: terminas, pasikartojimų skaičius. Sudaryti sąrašą terminų, kurie panaudojami vidutiniškai bent vieną kartą puslapyje. Sàraše:žodis, pasikartojimø skaičius. Kuris terminas panaudotas daugiausia kartų? Tvarkymo raktai:pasikartoijimų skaičius, žodis.

1.2 Užduoties analizė.

Analizuojant šią užduotį tikslinga pastebėti, kad informacija įvedama iš dviejų failų. Todėl iš vieno įvedus pradinius duomenis reikia suderinti juos su kitame faile esančia iinformacija. Be to, duomenų masyvo pirmas elementas turi būti sukurtas prieš jį paduodant į funkciją. Nors informacija nuskaitoma iš dviejų failų rezultatai formuojami viename. Rūšiavimas vyksat pagal du dalykus taigi sudaoma funkcja Raktas, kuri tikrina lyginimo sąlygą. Norint ką nors pakeisti rūšiuojant duomenis pakanka pakeisti funkciją Raktas. Programoje naudojamas meniu išnaudoja egavga.bgi grafikos privalumus. Formuojamas dinaminis duomenų sąrašas. Pabaigoje atmintis išlaisvinama.

1.3 Pradinių duomenų pavyzdys.

Failas “pirmas.dat” :

internetas 1 100

scriptas 68 1340

multimedija 70 85

linuxas 30 200

Failas “antras.dat” :

internetas 20

multimedija 100

klaustrofobija 200

kinas 13

scriptas 120

linuxas 300

1.4 Testinis rezultatų pavyzdys.

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:PROGBCBGI“);

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”.