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 informacija. 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 100scriptas 68 1340multimedija 70 85linuxas 30 200
Failas “antras.dat” :
internetas 20multimedija 100klaustrofobija 200kinas 13scriptas 120linuxas 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:\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”.