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