4. Laboratorinio darbo L4 ataskaita Tiesinis dinaminis sąrašas Pristatymo data: 2001 m. Balandžio 17 d. Dėstytojas: V. Jusas Atlikėjas: IF 0/4 gr. Stud. Tautvydas Vikšraitis 4.1 Užduotis : Duota informacija apie futbolininkus: komanda, pavardė, vardas, žaistų rungtynių skaičius, įmuštų įvarčių skaičius. Surasti 2 futbolininkus, kurių naudingumo koeficientas didžiausias, t.y žaista ne mažiau kaip vidutinis rungtynių skaičius ir įmušta daugiausiai įvarčių. Ar yra tokia komanda, kurios visi žaidėjai pelnė įvarčių. 4.2 Užduoties analizė: 4.2.1 Sprendimo aprašymas: Programa valdoma meniu pagalba, vartotojas pasirenka ka atlikti.Yra sukuriamos klasės.Taip galimybė perrašyti duomenis į tipizuotą failą. 4.2.2 Duomenų struktūros: Saugomos faile Unit3.pas unit Unit3; interface const L=15; type Fu=^rod; Futbolas = record kom :string[L]; pav :string[L]; vard:string[L]; run :integer; iv :integer; end; rod = record //iraso masyvo dinaminis sarasas inf : Futbolas; sek : Fu; end; tip = file of futbolas; masb = array [1..L] of boolean; komandos = ^elem; elem = record //komandu dinaminis sarasas kom : string[L]; yra : integer; sek : komandos; end; 4.2.3 Duomenų struktūros paveikslas. inf sek inf sek inf . …… nil Inf –lauke saugomas įrašas Futbolas, sek –rodyklė į sekantį elementą. kom yra sek kom yra sek kom yra . …… nil Kom yra komandos vardas, ‘yra’ skaičius kurio pagalba daromi redagavimai. 4.3 Programos aprašymas: 4.3.1 Formos paveikslas: 1 - OpenDialog 2 - SaveDialog 3 - MainMeniu 4.3.2 Meniu schema ir aprašymas Įvedimas : Atidaryti Įveda duomenis iš failo Išsaugoti Išsaugo į mūsų pasirinkta failą Veiksmai : Du naudingiausi futbolininkai.. Suranda du geriausius Geriausi klubai Suranda tuos klubus kurių žaidėjai pelnė bent po įvartį Apie : Programa…. Parodo pradinį sąrašą ekrane Užduotis… Išsaugo pradinį sąrašą ir rezultatus į failą 4.3.3 Klasių aprašymas: Tform1 saugoma Lab_3.pas naudoja klasę Futbol. TForm1 = class(TForm) MainMenu1: TMainMenu; Failas1: TMenuItem; N1: TMenuItem; Skaiiuoti1: TMenuItem; N4: TMenuItem; N5: TMenuItem; Apie1: TMenuItem; StringGrid1: TStringGrid; N6: TMenuItem; N7: TMenuItem; Panel1: TPanel; //apvadas Panel2: Tpanel; //apvadas Label1: TLabel; //apvadas OpenDialog1: TOpenDialog; //atidarymo dialogas SaveDialog1: TSaveDialog; //išsaugojimo dialogas Isaugotifail1: TMenuItem; procedure N1Click(Sender: TObject); procedure N5Click(Sender: TObject); procedure N3Click(Sender: TObject); procedure N6Click(Sender: TObject); procedure N7Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure N4Click(Sender: TObject); procedure Isaugotifail1Click(Sender: TObject); procedure Rikiuoti1Click(Sender: TObject); private vid: real; Ft:Futbol; B : masb; bb:masb; rez,rez1 :string; pradinis, geriausi2:fu; komandu:komandos; { Private declarations } public { Public declarations } end; procedure N1Click; Praocedūra, kurios pagalba išeinama iš programos. procedure N5Click; Suranda du naudingiausius futbolininkus. procedure N3Click; Nuskaito duomenis iš pasirinkto failo. procedure N6Click; Programos tekstas. procedure N7Click; Apie autorių. procedure FormCreate; Sukuria forma bei teisingumo vektorių. procedure N4Click; Suranda geriausius klubus procedure Isaugotifail1Click; Procedūra atlieka duomenų išsaugojimą faile, kurį nurodo vartotojas. procedure Rikiuoti1Click; Rikiuoja . procedure TForm1.Nusk; Nuskaito duomenis iš pasirinkto failo. procedure TForm1.NeigEl; Ieško kiekvienos eilutės didžiausio neigiamo elemento. procedure TForm1.Vienetas; Ieško elementų lygių vienetui skaičiaus matricoje. procedure TForm1.Kvadratine; Jei matrica nekvadratinė, padaro ją kvadratine. procedure TForm1.Sal_El; Ieško didžiausio neigiamo elemento virš šalutinės įstrižainės. procedure TForm1.Iss; Procedūra atlieka duomenų išsaugojimą faile, kurį nurodo vartotojas. Klasė Unit4 saugoma faile Unit4.pas type Futbol=class vid:real; pradinis, geriausi2, galutinis : Fu; komandu : komandos; procedure Spaus_KO(var f:textfile; komandu:komandos); procedure Salinimas(var komandu:komandos); procedure Taisymas (pradinis : fu; var komandu:komandos); procedure Nauj_kom(pradinis:Fu; var komandu:komandos); procedure Rikiuojam_kom(var komandu:komandos); procedure Vienod_Sal(var komandu:komandos); procedure naujas(pradinis :Fu; var geriausi2:fu); procedure rikiavimas( var geriausi2:fu); procedure Skaitymas(var rez:string; var pradinis:fu); procedure Vidutinis(var vid:real; pradinis:fu); procedure Geriausias2( vid:real; pradinis:fu; var geriausi2:fu); procedure Komandoss(pradinis :fu; var komandu:komandos ); procedure Spausdinam ( pradinis:Fu; var f:textfile) ; procedure RIkiuoti (var pradinis:Fu); end; procedure Spaus_KO(var f:textfile; komandu:komandos); Spausdina geriausias komandas. procedure Salinimas(var komandu:komandos); Pašalina komandas, kurių futbolininkai neįmušė įvarčių. procedure Taisymas (pradinis : fu; var komandu:komandos); Redaguoja komandų sąrašą, pagal pradini sarašą. procedure Nauj_kom(pradinis:Fu; var komandu:komandos); Sudaro naują komandų sąrašą. procedure Rikiuojam_kom(var komandu:komandos); Surikiuoja pagal komandas, komandų sąrašą. procedure Vienod_Sal(var komandu:komandos); Iš komandų sąrašo pašalina vienodus vardus. procedure naujas(pradinis :Fu; var geriausi2:fu); Iš sąrašo naujas padaro kitą sąrašą geriausi2. procedure rikiavimas( var geriausi2:fu); Surikiuoja geriausi2 pagal įvarčius. procedure Skaitymas(var rez:string; var pradinis:fu); Nuskaito duomenis iš pradinio sąrašo. procedure Vidutinis(var vid:real; pradinis:fu); Apskaičiuoja vidutinį rungtynių skaičių. procedure Geriausias2( vid:real; pradinis:fu; var geriausi2:fu); Suredaguoja geriausi2, jame palieka tik geriausius futbolininkus. procedure Komandoss(pradinis :fu; var komandu:komandos ); Išrenka geriausias komandas. procedure Spausdinam ( pradinis:fu ;var f:textfile) ; Spausdina pradinį sąrašą. procedure RIkiuoti (var pradinis:Fu); Rikiuoja pradinį sąrašą. 4.4 Atmintinė vartotojui: Programos naudotojas privalo papildomomis priemonėmis (notepad ir kitais teksto redaktoriais) susivesti matricos F skaičius (sveikojo tipo skaičiai) į tekstinio tipo failą. Skaičiai vedami matricos formos į eilutes ir stulpelius, skaičiai skiriami vienu tarpu. Duomenys rašomi į pasirinktą failą išplėtimu *.dat . Vartotojas patogiai spausdamas mygtukus gali atlikti skaičiavimus. Norint išsaugoti duomenis ir rezultatus reikia paspausti mygtuką IŠSAUGOTI pasirinkti jau esamą failą arba suvesti norimo failo pavadinimą (numatant, kad jo turinys bus sunaikintas) arba pasirenkant naują failą (Pvz.: rezultatai.rez). Programa taip pat pateikia duomenis apie programos autorių ir uždavinio sąlygą. Patogus programos baigimas, bet kuriuo momentu. Jeigu kiltų kokių neaiškumų ar aptiktumėte avarinių situacijų labai prašome pranešti programos kūrėjui. 4.5 Programos tekstas: ///////////////////////////////////////////////////////// // Programos autorius: Tautvydas Viksraitis // // Grupe: IF - 0/4 // // Darbo pavadinimas: Dvimatis masyvas // // Uzduoties sifras: L3-12 // // Paskutinio redagavimo data: 2001 metai Balandzio17 // ///////////////////////////////////////////////////////// unit Lab_3; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Menus, StdCtrls, Grids, ExtCtrls,Unit1, Unit2, Unit4, Unit3, Unit5; type TForm1 = class(TForm) MainMenu1: TMainMenu; Failas1: TMenuItem; N1: TMenuItem; N3: TMenuItem; Skaiiuoti1: TMenuItem; N4: TMenuItem; N5: TMenuItem; Apie1: TMenuItem; StringGrid1: TStringGrid; N6: TMenuItem; N7: TMenuItem; Panel1: TPanel; Panel2: TPanel; Label1: TLabel; OpenDialog1: TOpenDialog; SaveDialog1: TSaveDialog; Isaugotifail1: TMenuItem; Rikiuoti1: TMenuItem; procedure N1Click(Sender: TObject); procedure N5Click(Sender: TObject); procedure N3Click(Sender: TObject); procedure N6Click(Sender: TObject); procedure N7Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure N4Click(Sender: TObject); procedure Isaugotifail1Click(Sender: TObject); procedure Rikiuoti1Click(Sender: TObject); private vid: real; Ft:Futbol; B : masb; bb:masb; rez,rez1 :string; pradinis, geriausi2:fu; komandu:komandos; { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.DFM} procedure TForm1.N1Click(Sender: TObject); var e,e1:string; begin if b[1] and b[2] and b[3] then begin e:='Duomenys nuskaityti'+#13+rez+#13+'duomenys issaugoti'+#13+rez1; e1:=' Atlikti visi veiksmai ' +#13+#13; AboutBox.Label1.caption:=e1+e; AboutBox.Showmodal; application.Terminate; end else Label1.Caption:=' Nebuvo pakankamai duomenu atlikti visus veiks.'; end; procedure TForm1.N3Click(Sender: TObject); var F1:TextFile; i:integer; m: fu; begin Opendialog1.filter:='Tipizuoti failai(*.tip)|*.Tip'; if OpenDialog1.execute then begin B[1] := true; rez:=OpenDialog1.filename; Ft.Skaitymas(rez,pradinis); Label1.Caption:= 'Duomenys nuskaityti ir surusiuoti: '+rez ; StringGrid1.Rowcount:=5; StringGrid1.Cells[1,0]:= ' Komanda '; StringGrid1.Cells[2,0]:= ' Pavardė '; StringGrid1.Cells[3,0]:= ' Vardas '; StringGrid1.Cells[4,0]:= 'Žaistos rungtynės'; StringGrid1.Cells[5,0]:= ' Imušė įvarčių'; m:=pradinis; i:=0; while m nil do begin i:=i+1; StringGrid1.Cells[0,i]:= ' '+FloatToStr(i); StringGrid1.Cells[1,i]:= ' '+m^.inf.kom; StringGrid1.Cells[2,i]:= ' '+m^.inf.pav; StringGrid1.Cells[3,i]:= ' '+m^.inf.vard; StringGrid1.Cells[4,i]:= ' '+FloatToStr(m^.inf.run); StringGrid1.Cells[5,i]:= ' '+FloatToStr(m^.inf.iv); m:=m^.sek; end; end; end; procedure TForm1.N5Click(Sender: TObject); var m:fu; i:integer; begin if B[1] then begin Ft.Vidutinis(vid,pradinis); Label1.Caption:= ' Geriausi du žaidėjai yra: '; Ft.Geriausias2(vid,pradinis,geriausi2); Label1.caption:=' Naudingiausi 2 žaidėjai :'; m:=geriausi2; i:=0; while m nil do begin i:=i+1; StringGrid1.RowCount:=3; StringGrid1.Cells[0,i]:= ' '+FloatToStr(i); StringGrid1.Cells[1,i]:= ' '+m^.inf.kom; StringGrid1.Cells[2,i]:= ' '+m^.inf.pav; StringGrid1.Cells[3,i]:= ' '+m^.inf.vard; StringGrid1.Cells[4,i]:= ' '+FloatToStr(m^.inf.run); StringGrid1.Cells[5,i]:= ' '+FloatToStr(m^.inf.iv); m:=m^.sek; end; B[2] := true; end else Label1.caption :='Nera duomenu'; end; procedure TForm1.N6Click(Sender: TObject); begin AboutBox2.Showmodal; end; procedure TForm1.N7Click(Sender: TObject); var e,e1,e2,e3,e4,e5:string; begin e:=' 55. Duota informacija apie futbolininkus:komanda, pavardė,'+#13; e1:=' vardas,žaistų rungtynių skaičius,įmuštų įvarčių skaičius.'+#13; e2:=' Surasti 2 futbolininkus, kurių naudingumo koeficientas'+#13; e3:=' didžiausias,t.y. žaista ne mažiau kaip vidutinis rungtynių'+#13; e4:=' skaičius ir įmušta daugiausiai įvarčių. Ar yra tokia komanda,'+#13; e5:=' kurios visi žaidėjai pelnė įvarčių'; AboutBox.Label1.caption:=e+e1+e2+e3+e4+e5; AboutBox.Showmodal; end; procedure TForm1.FormCreate(Sender: TObject); var i : integer; begin For i := 1 to 3 do B[i]:=false; Ft:= Futbol.create; end; procedure TForm1.N4Click(Sender: TObject); var S : string; i : integer; m:komandos; begin if b[1] then begin FT.Komandoss(pradinis,komandu); m:=komandu; while m nil do begin s:=s + ' '+ m^.kom; m:=m^.sek; end; Label1.Caption := 'Komandos,kuriu žaidėjai pelnė įv. : '+s; B[3]:=true; end else Label1.Caption :='Nera duomenu'; end; procedure TForm1.Isaugotifail1Click(Sender: TObject); var i : integer; rez:string; f:textfile; begin if B[1] and b[2] and b[3] then begin SaveDialog1.Filter := 'Text failai(*.rez)|*.rez'; if SaveDialog1.Execute then begin rez1 := SaveDialog1.FileName; AssignFile (f,rez1); Rewrite(f); WriteLn(F, 'Pradiniai Duomenys'); Ft.Spausdinam(pradinis,f); WriteLn(f); WriteLn(f,' Geriausi futbolininkai'); Ft.Spausdinam(Geriausi2,f); Ft.Spaus_ko(f,komandu); closefile(f); Label1.Caption:='Duomenys išsaugoti: '+rez1; end; end else label1.caption:='Nera Duomenu'; end; procedure TForm1.Rikiuoti1Click(Sender: TObject); var i:integer; m:fu; begin if b[1] and not b[2] and not b[3] then begin Ft.Rikiuoti(pradinis); m:=pradinis; i:=0; while m nil do begin i:=i+1; StringGrid1.Cells[0,i]:= ' '+FloatToStr(i); StringGrid1.Cells[1,i]:= ' '+m^.inf.kom; StringGrid1.Cells[2,i]:= ' '+m^.inf.pav; StringGrid1.Cells[3,i]:= ' '+m^.inf.vard; StringGrid1.Cells[4,i]:= ' '+FloatToStr(m^.inf.run); StringGrid1.Cells[5,i]:= ' '+FloatToStr(m^.inf.iv); m:=m^.sek; end; end else Label1.Caption:=' Neatliktas veiksmas '; end; end. Klasė Unit4 saugoma faile unit4.pas. /////////////////////////////////////////////////////// // Programos autorius: Tautvydas Viksraitis // // Grupe: IF - 0/4 // // Darbo pavadinimas: Dvimatis masyvas // // Uzduoties sifras: L3-12 // // Paskutinio redagavimo data: 2001 metai Balandzio17 // ///////////////////////////////////////////////////////// unit Unit4; interface Uses unit3,SysUtils; type Futbol=class vid:real; pradinis, geriausi2, galutinis : Fu; komandu : komandos; procedure Spaus_KO(var f:textfile; komandu:komandos); procedure Salinimas(var komandu:komandos); procedure Taisymas (pradinis : fu; var komandu:komandos); procedure Nauj_kom(pradinis:Fu; var komandu:komandos); procedure Rikiuojam_kom(var komandu:komandos); procedure Vienod_Sal(var komandu:komandos); procedure naujas(pradinis :Fu; var geriausi2:fu); procedure rikiavimas( var geriausi2:fu); procedure Skaitymas(var rez:string; var pradinis:fu); procedure Vidutinis(var vid:real; pradinis:fu); procedure Geriausias2( vid:real; pradinis:fu; var geriausi2:fu); procedure Komandoss(pradinis :fu; var komandu:komandos ); procedure Spausdinam ( pradinis:Fu; var f:textfile) ; procedure RIkiuoti (var pradinis:Fu); end; implementation procedure Futbol.RIkiuoti; var keisti:boolean; d,d1:Fu; info:Futbolas; begin keisti := true; if pradinis Nil then while keisti do begin keisti := false; D := pradinis; D1 := pradinis; while D1^.sek NIL do begin D:= D1; D1:=D1^.sek; if D1^.inf.pav D^.inf.vard) then begin info := D^.inf; D^.inf := D1^.inf; D1^.inf := info; keisti := true; end; end; end; end; procedure Futbol.skaitymas; var t : tip; g : Fu; begin AssignFile (t,rez); Reset (t); pradinis:=nil; If not EoF(t) then begin New(pradinis); read(t,pradinis^.inf); g:=pradinis; g^.sek:=nil; While not Eof(t) do begin New(g^.sek); g:=g^.sek; Read(t, g^.inf); g^.sek:=nil; end; end; CloseFile (t); end; procedure Futbol.Spaus_KO; var m:komandos; begin m:=komandu; WriteLn(f,' geriausios komandos'); while mnil do begin writeln (f,' ', m^.kom ,' '); m:=m^.sek; end; end; procedure Futbol.Spausdinam; var i : integer; m : Fu; begin m := pradinis; for i:=1 to 64 do Write (f,'*'); Writeln(f); writeln (f,'* Komanda * Pavardė * Vardas * Rungtyės * ' ,'Įvarčiai *'); for i:=1 to 64 do Write (f,'*'); Writeln(f); while mnil do begin writeln (f,'* ',m^.inf.kom,'* ',m^.inf.pav,'* ',m^.inf.vard, '* ',m^.inf.run,'* ',m^.inf.iv,' *'); m:=m^.sek; end; for i:=1 to 64 do Write (f,'*'); Writeln(f); end; procedure Futbol.Vidutinis; var i,s,n: integer; m: fu; begin s:=0; n:=0; m:=pradinis; while mnil do begin n:=n+1; s:=s+ m^.inf.run; m:=m^.sek; end; vid:= s / n; end; procedure Futbol.naujas; var d,g:fu; begin d:= pradinis; geriausi2:=nil; if dnil then begin new(geriausi2); geriausi2^.inf:=d^.inf; g:=geriausi2; g^.sek:=nil; while dnil do begin New (g^.sek); g:= g^.sek; g^.inf := d^.inf; d:=d^.sek; g^.sek:=nil; end; end; end; procedure Futbol.Rikiavimas; var keisti:boolean; d,d1:Fu; info:Futbolas; begin keisti := true; if geriausi2 Nil then while keisti do begin keisti := false; D := geriausi2; D1 := geriausi2; while D1^.sek NIL do begin D:= D1; D1:=D1^.sek; if D1^.inf.iv > D^.inf.iv then begin info := D^.inf; D^.inf := D1^.inf; D1^.inf := info; keisti := true; end else if (D1^.inf.iv = D^.inf.iv) and (D1^.inf.pav > D^.inf.pav) then begin info := D^.inf; D^.inf := D1^.inf; D1^.inf := info; keisti := true; end; end; end; end; procedure Futbol.Geriausias2; var D, D1, g ,p: fu; keisti : boolean; info : futbolas ; begin naujas(pradinis, geriausi2); rikiavimas(geriausi2); p := geriausi2; while p^.seknil do if p^.inf.run nil then begin new (komandu); komandu^.kom:=p^.inf.kom; komandu^.yra:=0; m:=komandu; m^.sek:=nil; p:=p^.sek; while pnil do begin New (m^.sek); m:=m^.sek; m^.kom:=p^.inf.kom; m^.yra:=0; p:=p^.sek; m^.sek:=nil; end; end; end; procedure Futbol.Rikiuojam_kom; var keisti:boolean; d,d1: komandos; info:string; begin keisti:=true; while keisti do begin keisti := false; d := komandu; D1 := komandu; while D1^.sek NIL do begin D:= D1; D1:=D1^.sek; if D1^.kom > D^.kom then begin info := D^.kom; D^.kom := D1^.kom; D1^.kom := info; keisti := true; end ; end; end; end; procedure Futbol.Vienod_sal; var m:komandos; begin m:= komandu; while m^.seknil do if m^.kom = m^.sek^.kom then begin m^.kom:=m^.sek^.kom; m^.sek:=m^.sek^.sek; end else m:=m^.sek; end; procedure Futbol.Taisymas; var p : Fu; m : komandos; begin m:=komandu; while mnil do begin p:=pradinis; while pnil do if p^.inf.kom =m^.kom then if P^.inf.iv=0 then begin m^.yra:=m^.yra+1; p:=p^.sek; end else begin m^.yra:=m^.yra; p:=p^.sek; end else p:=p^.sek; m:=m^.sek; end; end; procedure Futbol.Salinimas; var m:komandos; begin m:= komandu; while m^.seknil do if m^.yra 0 then begin m^.kom:=m^.sek^.kom; m^.sek:=m^.sek^.sek; end else m:=m^.sek; end; procedure Futbol.Komandoss; begin Nauj_kom(pradinis,komandu); Rikiuojam_kom(komandu); Vienod_Sal(komandu); Taisymas(pradinis,komandu); Salinimas(komandu); end; end. Programos testavimo rezultatai: Duomenų failas tipizuotas.tip : Rezultatų failas ats.rez : Pradiniai Duomenys ************************************************************** * Komanda * Pavardė * Vardas * Rungtyės*Įvarčiai* * ************************************************************** * Neptunas * Jonas * Miezys * 11 * 11 * * Merfiodija * Bazilikas * Kleptys * 9 * 5 * * Neptunas * Kolibinijanas * Kaprynunas * 12 * 18 * * Nakranas * Kolia * Maktijian * 11 * 0 * ************************************************************** Geriausi futbolininkai ************************************************************** * Komanda * Pavardė * Vardas * Rungtyės*Įvarčiai* ************************************************************** * Neptunas * Kolibinijanas * Kaprynunas* 12 * 18 * * Neptunas * Jonas * Miezys * 11 * 11 * ************************************************************** geriausios komandos Neptunas Merfiodija
Šį darbą sudaro 2160 žodžiai, tikrai rasi tai, ko ieškai!
★ Klientai rekomenduoja
Šį rašto darbą rekomenduoja mūsų klientai. Ką tai reiškia?
Mūsų svetainėje pateikiama dešimtys tūkstančių skirtingų rašto darbų, kuriuos įkėlė daugybė moksleivių ir studentų su skirtingais gabumais. Būtent šis rašto darbas yra patikrintas specialistų ir rekomenduojamas kitų klientų, kurie po atsisiuntimo įvertino šį mokslo darbą teigiamai. Todėl galite būti tikri, kad šis pasirinkimas geriausias!
Norint atsisiųsti šį darbą spausk ☞ Peržiūrėti darbą mygtuką!
Mūsų mokslo darbų bazėje yra daugybė įvairių mokslo darbų, todėl tikrai atrasi sau tinkamą!
Panašūs darbai
Kiti darbai
Atsisiuntei rašto darbą ir neradai jame reikalingos informacijos? Pakeisime jį kitu nemokamai.
Pirkdamas daugiau nei vieną darbą, nuo sekančių darbų gausi 25% nuolaidą.
Išsirink norimus rašto darbus ir gauk juos akimirksniu po sėkmingo apmokėjimo!