Atsiskaityti privalote iki paskutinės praktinės paskaitos.
Pasirinktinai atlikti vieną užduotį 3.1 arba 3.2:
3.1. užduotis.
Ekspertinė sistema.
- Sukurti konsolinę programą, kuri gebėtų atspėti jūsų sugalvotą žodį laisvai pasirinkta tema.
- Pavyzdžiui tema yra gyvūnai: Sistema užduodą klausimą ar šis gyvunas yra šiltakraujis? taip/ne, atsakome taip.
- Sistema toliau klausia ar šis gyvūnas su plunksnomis? taip/ne, atsakome taip. Sistema atsako spėju: Gandras. taip/ne, atsakome ne.
- Tada sistema paklausia, o koks tai gyvūnas? Įvedame savo atsakymą pvz: Gervė ir papildomą klausimą: Ar tas gyvūnas turi kuodą? Sistemos sąrašas yra papildomos nauju klausimu ir atsakymu. Sekantį kartą užduos papildomą klausimą, kurį mes nesenai įvedėme.
Užduoties palengvinimas žemiau rasite pateiktą pavyzdį Paskalio programavimo kalba.
type el = record
info : string;
id, lid, rid : integer;
end;
var
F : text;
data : array[1..100] of el;
data_length : integer;
i: integer;
procedure load;
begin
Assign(F,'duom.txt'); Reset(F);
readln(f, data_length);
for i:=1 to data_length do
begin
Readln(F,
data[i].id,
data[i].lid,//lid
data[i].rid,
data[i].info);
end;
Close(F);
end;
procedure save;
begin
Assign(F,'duom.txt'); Rewrite(F);
writeln(f, data_length);
for i:=1 to data_length do
begin
writeln(F,
data[i].id, ' ',
data[i].lid, ' ', //lid
data[i].rid, ' ', //rid
data[i].info);
end;
Close(F);
end;
procedure pildysim(i:integer);
var kl,s:string;
begin
writeln('O koks tavo teisingas atsakymas ? ');
readln(s);
writeln('Koks klausimas ? ');
readln(kl);
data_length := data_length + 1;
with data[data_length] do
begin
id := data_length;
lid := 0;
rid := 0;
info := data[i].info;
data[i].rid := data_length; //lid
end;
data_length := data_length + 1;
with data[data_length] do
begin
id := data_length;
lid := 0;
rid := 0;
info := s;
data[i].lid := data_length; //rid
end;
data[i].info := kl;
save;
end;
procedure zaidimas;
var i:integer;
c:char;
begin
i:=1;
writeln(data[i].lid, ' ', data[i].rid); // lid rid
while (data[i].lid <> 0) and (data[i].rid <> 0) do
begin
writeln(data[i].info);
writeln('Taip/Ne?');
readln(c);
if upcase(c) = 'T' then
i := data[i].lid //rid lid
else
i := data[i].rid; //lid rid
end;
writeln('Spëju: ' +data[i].info);
writeln('Ar teisingai? Taip/Ne');
readln(c);
if upcase(c) = 'N' then
pildysim(i);
end;
begin
load;
zaidimas;
readln;
end.
Duomenų failas duom.txt
11
1 2 3 Ar turi uodegà?
2 4 5 Ar skraido?
3 0 0 Þmogus
4 6 7 Ar su plunksnom?
5 9 8 Ar duoda pienà?
6 0 0 Paukðtis
7 0 0 Ðikðnosparnis
8 11 10 Ar gyvena Dziunglese ?
9 0 0 Karve
10 0 0 Ðuo
11 0 0 Driezas
3.2. užduotis.
Tikslas sukurti unikalią momentinę loteriją arba pasirinkti iš esamų momentinių loterijų, kurių taisykles privalote sugalvoti patys arba surasti medžiaga internete jau egzistuojančių momentinių loterijų.
- Atkreipti dėmesį į esamų loterijų taisykles ir prizinį fondą, nuo kurio ir priklausys laimėjimai.
- Turi būti galimybė žaisti: įsygyti bilietą/-us, nutrinti (užtenka išvesti pranešimą, kad bilietas yra trinamas), kaupti statistiką apie laimėjimus ir pan.
- Bilietų rezultatus išvesti HTML formatu naršyklėje.
- Sukurti momentinės loterijos šabloną, kurį atvaizduosite HTML formatu pvz:
Studento atliktas Loterijos algoritmo C++ kalba pavyzdys.
#include <iostream>
#include <fstream>
#include <stdio.h>
#include <cstdlib>
using namespace std;
int pasirinkimas /* meniu pasirinkimas */;
// Þaidëjas:
int zPinigai = 3000 /* zaidejo pradiniai pinigai */, zBilietai /* zaidejo bilietai */;
// Loterija
int pinigai = 3000 /* loterijos fondas */, bilietai = 1000 /* biudzeto bilietai */, bilSuma /* bilieto skaiciu suma*/;
int Bilietas[3][3];
int kiekBuvoLaimingu[5] = {0};
bool arLaimingas = false;
void Meniu();
void Pirkimas();
void Tikrinimas();
void SugeneruotiBilieta();
void Statistika();
void IrasytiLaimejima(int lotNR);
int main()
{
printf("Loterijos fonda sudaro 1000 bilietu ir 3000 EU. bilieta sudaro atsitiktiniai skaiciai nuo 1 iki 9, kurie\n");
printf("yra sugeneruojami i tris eilutes ir tris stulpelius. Zaidejas, turintis bilieta dalyvauja dvejose zaidimuose:\n\n");
printf("\tPagrindinis zaidimas (kombinacijos):\n");
printf("\t\tPagrindine istrizaine, prizas: 500 EU.\n");
printf("\t\tSalutine istrizaine, prizas: 250 EU.\n");
printf("\t\tVidurine eilute, prizas: 100 EU.\n");
printf("\t\tVidurinis stulpelis, prizas: 100 EU.\n\n");
printf("\tPapildomas zaidimas (skaiciu suma):\n");
printf("\t\tBiliete esanciu skaiciu suma didesne nei 60, prizas: 10 EU.\n");
printf("\t\tBiliete esanciu skaiciu suma didesne nei 50, prizas: 5 EU.\n\n");
printf("\tLaimingu bilietu tikimybes (1000 bilietu):\n");
printf("\t\t0-1 - pagrindine istrizaine\n");
printf("\t\t0-2 - salutine istrizaine\n");
printf("\t\t0-3 - vidurine eilute\n");
printf("\t\t0-3 - vidurinis stulpelis\n");
printf("\t\t0-50 - biliete esanciu skaiciu suma didesne nei 60\n");
printf("\t\t0-60 - biliete esanciu skaiciu suma didesne nei 50\n\n");
Meniu();
return 0;
}
void Meniu()
{
cout << "Isrinkite norima punkta:" << endl;
cout << "0 - Baigti loterija" << endl;
cout << "1 - Nusipirkti bilieta(-us)" << endl;
cout << "2 - Nutrinti bilieta(-us)" << endl;
cout << "3 - Zaidimo statistika" << endl;
cin >> pasirinkimas;
switch(pasirinkimas)
{
case 0: break;
case 1: Pirkimas(); break;
case 2: Tikrinimas(); break;
case 3: Statistika(); break;
}
}
void Pirkimas()
{
cout << "Jus turite " << zPinigai << " EU." << endl;
cout << "Vieno bilieto kaina - 3 EU." << endl;
cout << "Iveskite, kiek pirksite bilietu (daugiausiai 1000):" << endl;
cin >> pasirinkimas;
if(pasirinkimas > zPinigai) cout << "Jus neturite tiek pinigu" << endl, Meniu();
zBilietai += pasirinkimas;
bilietai -= zBilietai;
zPinigai -= pasirinkimas;
pinigai += pasirinkimas * 3;
cout << "Nusipirkote " << pasirinkimas << " bilietu" << endl;
Meniu();
}
void Tikrinimas()
{
if(zBilietai == 0) cout << "Jus neturite bilietu" << endl, Meniu();
cout << "=====" << endl;
for(int i=1 ; i <= zBilietai ; i++)
{
SugeneruotiBilieta();
cout << "-----" << endl;
cout << "Pagrindinis zaidimas (kombinacijos):" << endl;
if(Bilietas[1][1] == Bilietas[2][2] && Bilietas[1][1] == Bilietas[3][3]) // Pagrindine istrizaine
{
if(kiekBuvoLaimingu[0] > 0)
{
cout << "Deja, bet bilietas neatitiko jokios kombinacijos, taciau jus turite galimybe laimeti papildomoje loterijoje" << endl, cout << "Deja, bet bilietas nebuvo laimingas ir papildomame zaidime" << endl;
cout << "-----" << endl;
cout << "Papildomas zaidimas (skaiciu suma):" << endl;
cout << "Deja, bet bilietas nebuvo laimingas ir papildomame zaidime" << endl;
continue;
}
cout << "Pagrindine istrizaine, jusu laimejimas - 500 EU." << endl;
pinigai -= 500;
zPinigai += 500;
arLaimingas = true;
kiekBuvoLaimingu[0] ++;
IrasytiLaimejima(1);
}
if(Bilietas[3][1] == Bilietas[2][2] && Bilietas[3][1] == Bilietas[1][3]) // Salutine istrizaine
{
if(kiekBuvoLaimingu[1] > 2)
{
cout << "Deja, bet bilietas neatitiko jokios kombinacijos, taciau jus turite galimybe laimeti papildomoje loterijoje" << endl, cout << "Deja, bet bilietas nebuvo laimingas ir papildomame zaidime" << endl;
cout << "-----" << endl;
cout << "Papildomas zaidimas (skaiciu suma):" << endl;
cout << "Deja, bet bilietas nebuvo laimingas ir papildomame zaidime" << endl;
continue;
}
cout << "Salutine istrizaine, jusu laimejimas - 250 EU." << endl;
pinigai -= 250;
zPinigai += 250;
arLaimingas = true;
kiekBuvoLaimingu[1] ++;
IrasytiLaimejima(2);
}
if(Bilietas[2][1] == Bilietas[2][2] && Bilietas[2][1] == Bilietas[2][3]) // Vidurine eilute
{
if(kiekBuvoLaimingu[2] > 3)
{
cout << "Deja, bet bilietas neatitiko jokios kombinacijos, taciau jus turite galimybe laimeti papildomoje loterijoje" << endl, cout << "Deja, bet bilietas nebuvo laimingas ir papildomame zaidime" << endl;
cout << "-----" << endl;
cout << "Papildomas zaidimas (skaiciu suma):" << endl;
cout << "Deja, bet bilietas nebuvo laimingas ir papildomame zaidime" << endl;
continue;
}
cout << "Vidurine eilute, jusu laimejimas - 100 EU." << endl;
pinigai -= 100;
zPinigai += 100;
arLaimingas = true;
kiekBuvoLaimingu[2] ++;
IrasytiLaimejima(3);
}
if(Bilietas[1][2] == Bilietas[2][2] && Bilietas[1][2] == Bilietas[3][2]) // Vidurinis stulpelis
{
if(kiekBuvoLaimingu[3] > 3)
{
cout << "Deja, bet bilietas neatitiko jokios kombinacijos, taciau jus turite galimybe laimeti papildomoje loterijoje" << endl, cout << "Deja, bet bilietas nebuvo laimingas ir papildomame zaidime" << endl;
cout << "-----" << endl;
cout << "Papildomas zaidimas (skaiciu suma):" << endl;
cout << "Deja, bet bilietas nebuvo laimingas ir papildomame zaidime" << endl;
continue;
}
cout << "Vidurinis stulpelis, jusu laimejimas - 100 EU." << endl;
pinigai -= 100;
zPinigai += 100;
arLaimingas = true;
kiekBuvoLaimingu[3] ++;
IrasytiLaimejima(4);
}
if(!arLaimingas)
{
cout << "Deja, bet bilietas neatitiko jokios kombinacijos, taciau jus turite galimybe laimeti papildomoje loterijoje" << endl;
}
cout << "-----" << endl;
cout << "Papildomas zaidimas (skaiciu suma):" << endl;
if(bilSuma >= 60)
{
if(kiekBuvoLaimingu[4] > 50)
{
cout << "Deja, bet bilietas neatitiko jokios kombinacijos, taciau jus turite galimybe laimeti papildomoje loterijoje" << endl, cout << "Deja, bet bilietas nebuvo laimingas ir papildomame zaidime" << endl;
cout << "-----" << endl;
cout << "Papildomas zaidimas (skaiciu suma):" << endl;
cout << "Deja, bet bilietas nebuvo laimingas ir papildomame zaidime" << endl;
continue;
}
cout << "Jusu tureto bilieto skaiciu suma didesne nei 60, laimejote 10 EU." << endl;
pinigai -= 10;
zPinigai += 10;
kiekBuvoLaimingu[4] ++;
IrasytiLaimejima(5);
}
else if(bilSuma >= 50)
{
if(kiekBuvoLaimingu[5] > 60)
{
cout << "Deja, bet bilietas neatitiko jokios kombinacijos, taciau jus turite galimybe laimeti papildomoje loterijoje" << endl, cout << "Deja, bet bilietas nebuvo laimingas ir papildomame zaidime" << endl;
cout << "-----" << endl;
cout << "Papildomas zaidimas (skaiciu suma):" << endl;
cout << "Deja, bet bilietas nebuvo laimingas ir papildomame zaidime" << endl;
continue;
}
cout << "Jusu tureto bilieto skaiciu suma didesne nei 50, laimejote 5 EU." << endl;
pinigai -= 5;
zPinigai += 5;
kiekBuvoLaimingu[5] ++;
IrasytiLaimejima(6);
}
else
{
cout << "Deja, bet bilietas nebuvo laimingas ir papildomame zaidime" << endl;
}
cout << "=====" << endl;
cout << endl;
}
Meniu();
}
void SugeneruotiBilieta()
{
bilSuma = 0;
for(int i=1 ; i <= 3 ; i++)
{
for(int j=1 ; j <= 3 ; j++)
{
Bilietas[i][j] = rand() % 9 + 1;
cout << Bilietas[i][j] << " ";
bilSuma += Bilietas[i][j];
}
cout << endl;
}
arLaimingas = false;
//Bilietas[1][2] = 2, Bilietas[2][2] = 2, Bilietas[3][2] = 2;
}
void Statistika()
{
cout << "Fonde yra bilietu: " << bilietai << " vnt." << endl;
cout << "Fonde yra pinigu: " << pinigai << " EU." << endl;
Meniu();
}
void IrasytiLaimejima(int lotNR)
{
ofstream fr("laimejimai.txt", ios::app);
switch(lotNR)
{
case 1: fr << "Nutrintas bilietas, kuris turejo pagrindine istrizaine. Zaidejas laimi 500 EU. Dabar fonde: " << pinigai << " EU." << endl; break;
case 2: fr << "Nutrintas bilietas, kuris turejo salutine istrizaine. Zaidejas laimi 250 EU. Dabar fonde: " << pinigai << " EU." << endl; break;
case 3: fr << "Nutrintas bilietas, kuris turejo vidurine eilute. Zaidejas laimi 100 EU. Dabar fonde: " << pinigai << " EU." << endl; break;
case 4: fr << "Nutrintas bilietas, kuris turejo vidurini stulpeli. Zaidejas laimi 100 EU. Dabar fonde: " << pinigai << " EU." << endl; break;
case 5: fr << "Nutrintas bilietas, kuris turejo skaiciu suma didesne nei 60. Zaidejas laimi 10 EU. Dabar fonde: " << pinigai << " EU." << endl; break;
case 6: fr << "Nutrintas bilietas, kuris turejo skaiciu suma didesne nei 50. Zaidejas laimi 5 EU. Dabar fonde: " << pinigai << " EU." << endl; break;
}
fr.close();
}
Tekstinio dokumento laimejimai.txt turinys.
Nutrintas bilietas, kuris turejo skaiciu suma didesne nei 50. Zaidejas laimi 5 EU. Dabar fonde: 3025 EU.
Nutrintas bilietas, kuris turejo skaiciu suma didesne nei 60. Zaidejas laimi 10 EU. Dabar fonde: 3015 EU.
Nutrintas bilietas, kuris turejo skaiciu suma didesne nei 50. Zaidejas laimi 5 EU. Dabar fonde: 3004 EU.
Nutrintas bilietas, kuris turejo skaiciu suma didesne nei 60. Zaidejas laimi 10 EU. Dabar fonde: 2994 EU.