Pereiti prie turinio

2013 bandomojo VBE pascal užduotis


Rekomenduojami pranešimai

Sveiki,

 

gal kas žinot kaip pvz ciklo metu palyginti vieną sakinį su tarkim visais 13 likusiais? Nes aš dabar su funkcija bandau padaryt, kad jis suskaičiuotų kiek vyriškų ir moteriškų batų porų yra. Štai taip atrodo mano Pascal kodas:

 

function Skaiciuoti(n : integer; duom : Masyvas) : integer;
 var i : integer;
    mb : integer;
    vb : integer;
 begin
   mb := 0;
   vb := 0;
   for i := 1 to n do
     begin
       if (duom[i].lytis = 3) AND (duom[i].koja <> duom[i].koja) AND (duom[i].m = duom[i].m) then
         vb := vb + 1;
     end;
   Skaiciuoti := vb;
 end;

 

Detalesnė užduotis čia:

http://www.nec.lt/failai/3398_2013-IT-pavyz-uzd.pdf (2. Batai)

 

Dėkui už pagalbą iš anksto! :)

Redagavo Sprunkas
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Kodėl? Ar man reikia parašyti kodą kaip reikia imti pirma reikšmę iš masyvo ir tikrinti ar nera sutapimų tarp likusių reikšmių, po to imti antra reikšmį ir t.t ?

 

EDIT: Perdariau kaip ir, tai dabar truputį geriau, bet gaunu atsakymą 3, vietoj 2:

 

function Skaiciuoti(n : integer; duom : Masyvas) : integer;
 var i : integer;
     j : integer;
    vb : integer;
 begin
   vb := 0;
   for i := 1 to n do
     begin
       if duom[i].lytis = 3 then
         begin
           for j := i + 1 to n do
             begin
               if (duom[j].lytis = 3) AND (duom[i].koja <> duom[j].koja) AND (duom[i].m = duom[j].m) then
                 vb := vb + 1;
             end;
         end;
     end;
   Skaiciuoti := vb;
 end;

Redagavo Sprunkas
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Pastabos:

1. “program Bevardė22;” – nenaudok lietuviškų raidžių.

2. Masyvai prasideda nuo nulio.

 

program Bevarde22;

type
 batai = record
   lytis : integer;
    koja : integer;
       m : integer;
 end;

 Masyvas = array [0..100] of batai;

procedure Skaitymas(var n : integer; var duom : Masyvas);
 var i : integer;
    Fr : text;
 begin
   Assign(Fr, 'U1.txt');
   Reset(Fr);
   ReadLn(Fr, n);
     for i := 0 to n do
       ReadLn(Fr, duom[i].lytis, duom[i].koja, duom[i].m);
 end;

function Skaiciuoti(n, lytis : integer; duom : Masyvas) : integer;
 var i,j, rezultatas : integer;
 begin
   rezultatas := 0;
   for i := 0 to n - 1 do
     begin
       for j := i + 1 to n do
         begin
           if (duom[i].lytis = lytis)
           AND (duom[j].lytis = lytis) AND
           (duom[i].koja <> duom[j].koja) AND
           (duom[i].m = duom[j].m)
           then
           begin
             rezultatas := rezultatas + 1;
             duom[j].lytis := 0;
             break;
             end;
         end;
     end;
     Skaiciuoti := rezultatas;
 end;

procedure Rasymas(n : integer; duom : Masyvas);
 var Fw : text;
     vb : integer;
 begin
   Assign(Fw, 'Rezultatai.txt');
   Rewrite(Fw);
   vb := Skaiciuoti(n,3, duom);
   WriteLn(Fw, vb);
   vb := Skaiciuoti(n,4, duom);
   WriteLn(Fw, vb);
   Close(Fw);
 end;

var n : integer;
duom : Masyvas;

begin
 Skaitymas(n, duom);
 Rasymas(n, duom);
end.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Pastabos:

1. “program Bevardė22;” – nenaudok lietuviškų raidžių.

2. Masyvai prasideda nuo nulio.

 

program Bevarde22;

type
 batai = record
   lytis : integer;
    koja : integer;
       m : integer;
 end;

 Masyvas = array [0..100] of batai;

procedure Skaitymas(var n : integer; var duom : Masyvas);
 var i : integer;
    Fr : text;
 begin
   Assign(Fr, 'U1.txt');
   Reset(Fr);
   ReadLn(Fr, n);
     for i := 0 to n do
       ReadLn(Fr, duom[i].lytis, duom[i].koja, duom[i].m);
 end;

function Skaiciuoti(n, lytis : integer; duom : Masyvas) : integer;
 var i,j, rezultatas : integer;
 begin
   rezultatas := 0;
   for i := 0 to n - 1 do
     begin
       for j := i + 1 to n do
         begin
           if (duom[i].lytis = lytis)
           AND (duom[j].lytis = lytis) AND
           (duom[i].koja <> duom[j].koja) AND
           (duom[i].m = duom[j].m)
           then
           begin
             rezultatas := rezultatas + 1;
             duom[j].lytis := 0;
             break;
             end;
         end;
     end;
     Skaiciuoti := rezultatas;
 end;

procedure Rasymas(n : integer; duom : Masyvas);
 var Fw : text;
     vb : integer;
 begin
   Assign(Fw, 'Rezultatai.txt');
   Rewrite(Fw);
   vb := Skaiciuoti(n,3, duom);
   WriteLn(Fw, vb);
   vb := Skaiciuoti(n,4, duom);
   WriteLn(Fw, vb);
   Close(Fw);
 end;

var n : integer;
duom : Masyvas;

begin
 Skaitymas(n, duom);
 Rasymas(n, duom);
end.

 

Labai dėkingas :). Tuo pačiu man būtų įdomu sužinoti ką daro šio kodo dalys:

 

duom[j].lytis := 0;
break;

 

Žinau, kad nustato lytį į 0, bet įdomu kodėl jį reik nustatyt.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Todėl, kad yra du ciklai ir batas iš duom[j], kuris jau buvo paskaičiuotas, kaip poros dalys, ne butų skaičiuojamas antra karta, jeigu yra toks pats dar trečias batas – mes žymėm kaip lytis = 0.

Break – naudojamas tam, kad išeiti iš ciklo. Pora rasta toliau ieškoti nėra kam.

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