Pereiti prie turinio

FPS is masyvo atimti nari


Rekomenduojami pranešimai

Kaip jau minėjau temos pavadinime susidūriau su šiokiu tokiu sunkumu.

Štai mano parašyta programa:

program Bevardė2;
type grybai= record
diena,bar,raud,lep : integer;
end;
type masyvas=array[1..100] of grybai;
var f : text;m:masyvas;k,i,j,c:integer;

procedure skaitymas;
begin;
assign (f,'C:\grybai.txt');reset(f);
readln(f,k);
for i:=1 to k do
readln(f,m[i].diena,m[i].bar,m[i].raud,m[i].lep);
close(f);
end;

procedure sudejimas;
begin
for i:=1 to k do
for j:=i+1 to k do
if m[i].diena=m[j].diena then
begin
m[i].bar:=m[i].bar+m[j].bar;
m[i].raud:=m[i].raud+m[j].raud;
m[i].lep:=m[i].lep+m[j].lep;
end;
end;

procedure atemimas;
begin
for i:=m[i].diena to k-1 do   {Čia nežinau kai darau taip atimą 10 dieną. Žinau kažką praleidžiu ,bet nesuprantu ką }
 m[i]:=m[i+1];
 k:=k-1;
 end;

procedure rodymas;
begin
for i:=1 to k do
writeln(m[i].diena,' ',m[i].bar,' ',m[i].raud,' ',m[i].lep);
end;

begin
skaitymas;
sudejimas;
atemimas;
rodymas;
end.

 

Programos paskirtis iš failai grybai.txt reikia ištraukti informacija, kiek tam tikrą dieną buvo sugrybauta: Dienos numeris, lepsiai, baravykai,raudonviršiai ( 1 2 4 9)

 

Uždotis yra jei dienos numeris yra dar vienas pvz: 1 5 7 8 ir kitas yra 1 2 4 7 , juos reikia sudėti ir atimti iš masyvo vieną narį.

 

Yra 10 dienų ir kai yra sudedama liktu 9. Tai viską parašiau suklupau ties atėmimu. Gal kas padėsite?

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Tai gal geriau kai skaitai, vietoj masyvo numerio "i" rašyk dienos numerį, tarkim m[1] bus pirmos dienos surinkti grybai. Taip lengviau bus atsekti, kuri diena. Ir skaityk į pagalbinius kintamuosius, tada patikrink, ar tą dieną jau yra grybų, ir jei yra - pridėk. Ir iš vis, nuskaitai duomenis ir iškart pridedi prie tos dienos, pvz:

1 5 7 8, skaitai į kokius a b c d, m[a].bar := m[a].bar + b; (taip ir su kitais). Jei m[a].bar buvo 0, tai įgaus b reikšmę, jei ne, tai tiesiog prisidės.

 

O dabar su kurio nors failo pašalinimu, tai čia būtų sudėtingiau. Jei norėtum išlaikyt kuo paprastesnį ir mažesnį atminties atžvilgiu, tai jei reikia panaikinti narį "i", tai turėtum narį "i+1" perkelti į "i", paskui "i+2",..., galiausiai paskutiniam narį priskirti reikšmes 0. O paprasčiau, pasidarai atskirą loginį masyvą, jei atitinkama reikšmė reikalinga, tai TRUE, jei pašalinta, tai FALSE. Tada išvedant rezultatus atsisijoji.

 

EDIT: be to, jei masyvo elementus žymėsi savaitės dienomis, labai sumažės atminties sąnaudos (dabar 1..100). Patarimas: rašyk funkcijų ir procedūrų pavadinimus iš didžiosios raidės, nes taip priimta (visos pascal funkcijos rašomos iš didžiosios raidės - ReadLn, Frac, Assign - tai reikėtų rašyti ir savo).

Redagavo wi_lius
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Prisijunkite prie diskusijos

Jūs galite rašyti dabar, o registruotis vėliau. Jeigu turite paskyrą, prisijunkite dabar, kad rašytumėte iš savo paskyros.

Svečias
Parašykite atsakymą...

×   Įdėta kaip raiškusis tekstas.   Atkurti formatavimą

  Only 75 emoji are allowed.

×   Nuorodos turinys įdėtas automatiškai.   Rodyti kaip įprastą nuorodą

×   Jūsų anksčiau įrašytas turinys buvo atkurtas.   Išvalyti redaktorių

×   You cannot paste images directly. Upload or insert images from URL.

Įkraunama...
  • Dabar naršo   0 narių

    Nei vienas registruotas narys šiuo metu nežiūri šio puslapio.

×
×
  • Pasirinkite naujai kuriamo turinio tipą...