Pereiti prie turinio

Pascal uzduotis-grybautojas


Rekomenduojami pranešimai

Vel bandau issprest egzaminine uzduoti ir kazko nesigauna.Uzduotis tokia:"Petras liepos mėnesį kiekvieną kartą grįžęs iš miško užrašo, kiek rado baravykų, raudonikių ir lepšių. Retkarčiais Petras eina į mišką tą pačią dieną kelis kartus. Parašykite programą, kuri: 1) skaičiuotų kiekvieną grybavimo dieną surinktų grybų skaičių pagal rūšis (baravykai, raudonikiai, lepšės); 2) nustatytų dieną, kurią rasta daugiausia grybų ir kiek jų tą dieną rasta. Pradiniai duomenys surašyti į tekstinį failą U1.txt. Pirmoje eilutėje įrašytas grybavimo kartų skaičius n (1 ≤ n ≤ 100). Tolesnėse eilutėse pateikti duomenys apie grybus. Viena eilutė skiriama vieno grybavimo karto laimikiui. Joje įrašyti keturi skaičiai: dienos numeris d (1 ≤ d ≤ 31), surinktų baravykų, raudonikių ir lepšių skaičiai. Petras, surašydamas skaičius faile, nesilaikė dienų nuoseklumo. Rezultatai turi būti spausdinami į tekstinį failą U1rez.txt. Kiekvienai dienai skiriama po vieną eilutę. Dienos turi būti spausdinamos didėjančia tvarka. Reikia spausdinti tik tas dienas, kuriomis buvo rastas bent vienas grybas. Pirmiausia pateikiamas dienos numeris, toliau – kiek per tą dieną buvo surinkta baravykų, raudonikių ir lepšių (jei kurios nors rūšies grybo nerasta, spausdinamas nulis). Paskutinėje eilutėje spausdinami du skaičiai: dienos, kurią surinkta daugiausia grybų, numeris ir visų tą dieną surinktų grybų skaičius. (Jeigu yra kelios tokios dienos, tai reikia spausdinti dieną, kurios numeris mažesnis.) Nurodymai: ƒ Rašydami programą naudokite tik vienmačius sveikųjų skaičių masyvus. ƒ Parašykite funkciją dienos, kurią surinkta daugiausia grybų, numeriui rasti. ƒ Parašykite procedūrą surinktų grybų pagal dienas sąrašui spausdinti faile. ƒ Programoje neturi būti sakinių, skirtų darbui su ekranu."

 

Man rez faile raso visiskas nesamones:

1 2 3 4

2 12 8 4

2 16 12 8

3 5 44 453

3 9 88 897

3 18 176 1794

5 4 14 2

15 25 45 13

16 12 30 52

16 7 15 27

28 13 13 13

 

 

O duomenu failas:

11

2 8 4 0

3 1 0 9

1 2 3 4

5 4 14 2

2 4 4 4

3 0 0 0

15 25 45 13

28 13 13 13

16 2 0 2

16 5 15 25

3 4 44 444

 

Kodel gi taip raso rez faile, ir dar ta pacia diena po kelis kartus pakartoja, jeigu as padariau proceduroje, kad jeigu atranda, kad yra tos pacios dienos, tai tu dienu surinktu grybu skaiciu sudetu, o veliau parasytu i rez faila, bet kazkodel taip nera :(

Beje i funkcija neziurekit, ja reiks pertvarkyt, bet ziurekit i procedura, delko man nesuskaiciuoja tu grybu normaliai :)

program Grybautojai;

type mas=array[1..100] of integer;

var Df,Rf:text;
didz,i,j,n,nr,tmp,tmp1,tmp2,tmp3,a:integer;
num1,num2,num3,num4,suma,suma1,suma2,numeriukas:mas;

procedure Duomenys;
begin
   Assign(Df,'U1.txt');
   Reset(Df);
   Readln(Df,n);
   for i:=1 to n do
   Readln(Df,num1[i],num2[i],num3[i],num4[i]);
   Close(Df);
end;

function daugiausiai:integer;
begin
   for i:=1 to n do
   begin
       if suma[i]>didz then
       begin
           didz:=suma[i];
           nr:=num1[i];
       end;
   end;
daugiausiai:=didz;
end;

procedure grybai;
begin
a:=0;
for i:=1 to n do
begin
   for j:=1 to n do
   begin
       if (num1[i] = num1[j]) and (j<>i) and (numeriukas[j]<>num1[i]) then
       begin
           numeriukas[i]:=num1[i];
           num2[i]:=num2[i]+num2[j];
           num3[i]:=num3[i]+num3[j];
           num4[i]:=num4[i]+num4[j];
           a:=n-1;
       end
       else numeriukas[i]:=num1[i];
   end;
end;
   tmp:=0;
   tmp1:=0;
   tmp2:=0;
   tmp3:=0;
   for j:=1 to a do
   begin
       for i:=1 to a do
       begin
           if numeriukas[j]<numeriukas[i] then
           begin
               tmp:=numeriukas[i];
               numeriukas[i]:=numeriukas[j];
               numeriukas[j]:=tmp;
               tmp1:=num2[i];
               num2[i]:=num2[j];
               num2[j]:=tmp1;
               tmp2:=num3[i];
               num3[i]:=num3[j];
               num3[j]:=tmp2;
               tmp3:=num4[i];
               num4[i]:=num4[j];
               num4[j]:=tmp3;
           end;
       end;
   end;
   for i:=1 to a do
   Writeln(Rf, numeriukas[i],' ',num2[i],' ',num3[i],' ',num4[i]);
end;

begin
 Duomenys;
 Assign(Rf,'U1rez.txt');
 Rewrite(Rf);
 grybai;
 Close(Rf);
end.

Redagavo RealEfect
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Na štai katik aš padariau

 

Panagrinėk viską, jei ko nesuprasi klausk.

 

program Grybautojai;

Const   Cduom  = 'U1.txt';
       Crez   = 'U1rez.txt';
       Cmax   = 31;

Type    Grybai = Record
                   r,
                   b,
                   l : integer;
                End;

       Mas    = Array[1..Cmax] of grybai;

Var     Df, Rf : text;
       A      : Mas;
       n      : integer;
{-----------------------------Funkcijos ir procedûros-------------------------}
Function Daugiausia : integer;
Var i, max, maxd : integer;
Begin
max := 0;
For i := 1 to Cmax do
   if max < A[i].b + A[i].l + A[i].r then
   Begin
       max  := A[i].b + A[i].l + A[i].r;
       maxd := i;
   End;
   Daugiausia := maxd;
End;



Procedure Spausdinti;
Var i : integer;
Begin
Assign(Rf, Crez); ReWrite(Rf);
   For i := 1 to Cmax do
   Begin
       If (A[i].b > 0) And (A[i].r > 0) And (A[i].l > 0) then
       WriteLn(Rf, i,' ', A[i].b,' ', A[i].r,' ', A[i].l);
   End;
       WriteLn(Rf, Daugiausia,' ',
                   A[daugiausia].b,' ',
                   A[daugiausia].r,' ',
                   A[daugiausia].l);
Close(Rf);
End;



Procedure Duomenys;
Var i, die, bar, rau, lep : integer;
Begin
Assign(Df, Cduom); Reset(Df);
ReadLn(Df, n);
   For i := 1 to n do
   Begin
       ReadLn(Df, die, bar, rau, lep);
       A[die].b := A[die].b + bar;
       A[die].r := A[die].r + rau;
       A[die].l := A[die].l + lep;
   End;
Close(Df);
End;
{-------------------------------Pagrindinë programa---------------------------}

begin
 Duomenys;
 Spausdinti;
end.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Aciu,kad tu taip stengeisiir parasei programa, bet man rytoj informatikos egzaminas ir butu geriau, jeigu paziuretum i mano koda ir pasakytum kas ten yra ne taip, tada as suprasciau ka ne taip padariau :)

 

Ten pas tave jau vien nuskaitymas man rodos blogas :) tu tas dienas naudok kaip indeksą masyvui, tada kai viską išvedinėsi bus lengviau išvedinėti didėjimo tvarka.

 

P.S. man taip pat ryt egzaminas

Redagavo raima220
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Bet as nuskaitau kiekviena eilute, o tada proceduroje grybai, sudedineju visus grybus, jeigu if salygoj randama, kad dienos sutampa..Ir tuomet jeigu jau bunu ta diena patikrines, jos jau nebetikrina.O is to n atimu 1,nes nes noriu isimti tas pasikartojancias dienas, bet vistiek tas pats :(

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Bet as nuskaitau kiekviena eilute, o tada proceduroje grybai, sudedineju visus grybus, jeigu if salygoj randama, kad dienos sutampa..Ir tuomet jeigu jau bunu ta diena patikrines, jos jau nebetikrina.O is to n atimu 1,nes nes noriu isimti tas pasikartojancias dienas, bet vistiek tas pats :(

 

Tik save apsunkini tokiu sprendimu, sakau patarimas naudot kaip indeksus dienas, nieko nei rūšiuot nebereiks :) nei dar kokius burbulus naudot, kad viską didėjimo tvarka padarytų. Taip pat išspręst uždavinį su pirštinėm ten geresnis ir sunkesnis, taip pat reikia naudot kintamuosius kaip indeksus ;)

 

Taip pat stenkis viską tikrint po žingsnį pamatysi kur klaidos.

Redagavo raima220
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Bet pasiziurejau dabar,tai pacioje uzduoties salygoje parasyta, kad tik vienmacius masyvus naudot galima, bet record negalima, jeigu teisingai supratau :) Beje klausimas, kaip tu ten kur cikla naudoji duomenu proceduroje, tai kaip tas i isistato vietoj indekso die, jeigu jie ne tokie patys?

Redagavo RealEfect
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Bet pasiziurejau dabar,tai pacioje uzduoties salygoje parasyta, kad tik vienmacius masyvus naudot galima, bet record negalima, jeigu teisingai supratau :) Beje klausimas, kaip tu ten kur cikla naudoji duomenu proceduroje, tai kaip tas i isistato vietoj indekso die, jeigu jie ne tokie patys?

 

Record naudot galima, negalima dvimačių masyvų. tai čia būtų Array[1..100][1..100]. Aš paimiau, kad kiekviena diena turi savo skaičių grybų, todėl tą die naudoju kaip indeksą. jeigu trečia dieną pririnkt pvz 1 2 3 ir ten kai kur toliau vėl bus parašyta kad trečią dieną pririnkta 5 6 7 tai man skaičiuos kad A[3] 6 8 9 nes Procedūroje pas mane viską sudeda.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Tik save apsunkini tokiu sprendimu, sakau patarimas naudot kaip indeksus dienas, nieko nei rūšiuot nebereiks :) nei dar kokius burbulus naudot, kad viską didėjimo tvarka padarytų. Taip pat išspręst uždavinį su pirštinėm ten geresnis ir sunkesnis, taip pat reikia naudot kintamuosius kaip indeksus ;)

 

Taip pat stenkis viską tikrint po žingsnį pamatysi kur klaidos.

Su tom pirstinem... kintamuju naudojimas kaip indeksu man uzkliuvo ten. Itariu, kad naudoti nori kad pvz VyrK[dydis] = 1/0 (1 - tokio dydzio pirstine yra, 0 - nera). Kas gi man uzkliuvo... o gi nera jokiu apribojimu kokio dydzio pirstines gali buti :) Tada pvz jeigu maksimalus masyvo dydis butu 100, o pirstines dydis 101, kur ji pasidetu?:D

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Su tom pirstinem... kintamuju naudojimas kaip indeksu man uzkliuvo ten. Itariu, kad naudoti nori kad pvz VyrK[dydis] = 1/0 (1 - tokio dydzio pirstine yra, 0 - nera). Kas gi man uzkliuvo... o gi nera jokiu apribojimu kokio dydzio pirstines gali buti :) Tada pvz jeigu maksimalus masyvo dydis butu 100, o pirstines dydis 101, kur ji pasidetu?:D

 

 

Jo dabar pažiūrėjau, kad nėra apribojimų, bet logiškai pagalvojus tai sniego žmonės nevaikšto juk su 168 dydžiu, aš manau, jog čia įvelta klaida.

Redagavo raima220
Nuoroda į pranešimą
Dalintis kituose puslapiuose

program Grybai;
type Irasas = record
           	vardas : string[15];
           	bar,
           	rau,
           	lep,
           	vis	: integer;
          	end;
	Mas = array[1..100] of Irasas;
var n:integer;
A:Mas;
D,R:text;
{----------------Proceduros ir funkcijos---------------}
procedure Skaitymas;
var i,j,x:integer;
b,r,l:integer;
begin
Assign(D,'U2.txt');Reset(D);
ReadLn(D,n);

 	for i:=1 to n do
   	begin
      	ReadLn(D,A[i].vardas,x);
       	for j:=1 to x do
           	begin
              	ReadLn(D,b,r,l);
               	A[i].bar := A[i].bar + b;
               	A[i].rau := A[i].rau + r;
               	A[i].lep := A[i].lep + l;
               	A[i].vis := A[i].vis + b + r + l;
           	end;
   	end;
	Close(D);
end;
//-----------------------------------------
procedure Grybai_rasymas;
var i:integer;
begin

for i:=1 to n do
   	WriteLn(R,A[i].vardas,A[i].bar:5,A[i].rau:5,A[i].lep:5);

end;
//----------------------------------------
function Geriausias:integer;
var i,max,index:integer;
begin
max   := 0;
index := 1;

for i:=1 to n do
	begin
   	if max < A[i].vis then
       	begin
          	index := i;
          	max   := A[i].vis;
       	end;
	end;
Geriausias := index;
end;
{------------------------------------------------------}
begin
Assign(R,'U2rez.txt');ReWrite(R);
Skaitymas;
Grybai_rasymas;
WriteLn(R,A[Geriausias].vardas,A[Geriausias].vis);
Close(R);
end.

 

mano variantas, pasinagrinėk

 

Na štai katik aš padariau

 

 

Darai užduotis 5 ryte? :D :huh:

Nuoroda į pranešimą
Dalintis kituose puslapiuose

program Grybai;
type Irasas = record
           	vardas : string[15];
           	bar,
           	rau,
           	lep,
           	vis	: integer;
          	end;
	Mas = array[1..100] of Irasas;
var n:integer;
A:Mas;
D,R:text;
{----------------Proceduros ir funkcijos---------------}
procedure Skaitymas;
var i,j,x:integer;
b,r,l:integer;
begin
Assign(D,'U2.txt');Reset(D);
ReadLn(D,n);

 	for i:=1 to n do
   	begin
      	ReadLn(D,A[i].vardas,x);
       	for j:=1 to x do
           	begin
              	ReadLn(D,b,r,l);
               	A[i].bar := A[i].bar + b;
               	A[i].rau := A[i].rau + r;
               	A[i].lep := A[i].lep + l;
               	A[i].vis := A[i].vis + b + r + l;
           	end;
   	end;
	Close(D);
end;
//-----------------------------------------
procedure Grybai_rasymas;
var i:integer;
begin

for i:=1 to n do
   	WriteLn(R,A[i].vardas,A[i].bar:5,A[i].rau:5,A[i].lep:5);

end;
//----------------------------------------
function Geriausias:integer;
var i,max,index:integer;
begin
max   := 0;
index := 1;

for i:=1 to n do
	begin
   	if max < A[i].vis then
       	begin
          	index := i;
          	max   := A[i].vis;
       	end;
	end;
Geriausias := index;
end;
{------------------------------------------------------}
begin
Assign(R,'U2rez.txt');ReWrite(R);
Skaitymas;
Grybai_rasymas;
WriteLn(R,A[Geriausias].vardas,A[Geriausias].vis);
Close(R);
end.

 

mano variantas, pasinagrinėk

 

 

 

Darai užduotis 5 ryte? :D :huh:

 

Ilga ir sunki naktis buvo :) draugę tik 4h ryto išlydėjau, tai dar laiko buvo tai sakau padarysiu ;) koks skirtumas vistiek nesimiega ;D Naktinis žmogus aš.

Redagavo raima220
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Jo dabar pažiūrėjau, kad nėra apribojimų, bet logiškai pagalvojus tai sniego žmonės nevaikšto juk su 168 dydžiu, aš manau, jog čia įvelta klaida.

Nu cia aisku logiskai tai tokiu dydziu neturetu but, bet jeigu sugalvotu pagudraut ir toki testuka viena kita imest tikrinimuj, pasizetu ar programa visais atvejais, nors ir nelogiskais veikia, tai butu sakutes truputi :)

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Nu cia aisku logiskai tai tokiu dydziu neturetu but, bet jeigu sugalvotu pagudraut ir toki testuka viena kita imest tikrinimuj, pasizetu ar programa visais atvejais, nors ir nelogiskais veikia, tai butu sakutes truputi :)

 

Na taip tavo tiesa, bet ir taip pat nesąmonė, kad visai jokių rėžių nėra įvesta. Sakau manau, kad klaida arba neatsižvelgė tiesiog į tai :) Na bet tu ir žinok, "balamutina" tai žiauriai.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Ziurekit, dabar padariau taip kaip saket, bet nesamoniu nesamone kazkokia, meta lentele, kad file not found, ar kazkas panasiai.Kodas:

program Grybautojai;

type mas=array[1..100] of integer;

var Df,Rf:text;
bar,raud,lep,suma:mas;
n,i,d,max,k:integer;

procedure Duomenys;
begin
   Assign(Df,'U1.txt)');
   Reset(Df);
   Readln(Df,n);
   for i:=1 to n do
   Readln(Df,d,bar[i],raud[i],lep[i]);
   bar[d]:=bar[d]+bar[i];
   raud[d]:=raud[d]+raud[i];
   lep[d]:=lep[d]+lep[i];
   suma[d]:=suma[d]+bar[d]+raud[d]+lep[d];
   Close(Df);
end;

function daugiausia:integer;
begin
   max:=0;
   k:=1;
   for i:=1 to n do
   begin
       if suma[d]>max then
       begin
           max:=suma[d];
           k:=d;
       end;
   end;
   daugiausia:=max;
end;

procedure Irasymas;
begin
   Assign(Rf,'U1rez.txt');
   Rewrite(Rf);
   daugiausia;
   Writeln(Rf,k,' ',max);
   Close(Rf);
end;

begin
   Duomenys;
   Irasymas;
end.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Ziurekit, dabar padariau taip kaip saket, bet nesamoniu nesamone kazkokia, meta lentele, kad file not found, ar kazkas panasiai.Kodas:

program Grybautojai;

type mas=array[1..100] of integer;

var Df,Rf:text;
bar,raud,lep,suma:mas;
n,i,d,max,k:integer;

procedure Duomenys;
begin
   Assign(Df,'U1.txt)');
   Reset(Df);
   Readln(Df,n);
   for i:=1 to n do
   Readln(Df,d,bar[i],raud[i],lep[i]);
   bar[d]:=bar[d]+bar[i];
   raud[d]:=raud[d]+raud[i];
   lep[d]:=lep[d]+lep[i];
   suma[d]:=suma[d]+bar[d]+raud[d]+lep[d];
   Close(Df);
end;

function daugiausia:integer;
begin
   max:=0;
   k:=1;
   for i:=1 to n do
   begin
       if suma[d]>max then
       begin
           max:=suma[d];
           k:=d;
       end;
   end;
   daugiausia:=max;
end;

procedure Irasymas;
begin
   Assign(Rf,'U1rez.txt');
   Rewrite(Rf);
   daugiausia;
   Writeln(Rf,k,' ',max);
   Close(Rf);
end;

begin
   Duomenys;
   Irasymas;
end.

 

Vien šita vieta man skamba nelogiškai

 

jei bus trečia diena ir tuo pačiu bus i := 3

 

   for i:=1 to n do
   Readln(Df,d,bar[i],raud[i],lep[i]);
   bar[d]:=bar[d]+bar[i];
   raud[d]:=raud[d]+raud[i];
   lep[d]:=lep[d]+lep[i];
   suma[d]:=suma[d]+bar[d]+raud[d]+lep[d];

 

Geriau pasidaryk atskirus kintamuosiuos

 

   for i:=1 to n do
   Readln(Df,d,bar,raud,lep);
   bar[d]:=bar[d]+bar;
   raud[d]:=raud[d]+raud;
   lep[d]:=lep[d]+lep;
   suma[d]:=suma[d]+bar[d]+raud[d]+lep[d];

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Vistiek meta file not found, pizdc-neislaikysiu as to egzo :( Gali pasakyti kaip tavo kode isrikiuoja duomenis didejimo tvarka???

 

 

kadangi įvedinėjant duomenis aš naudoju dienas kaip indeksus išvedinėjant duomenis nuo 1 iki 31 pagavus dieną kurioje buvo surinktas bent vienas grybas ją išveda kaip pavizdys

 

A[1] - grybų nebuvo neveda

A[2] - grybų nebuvo neveda

A[3] - išveda 1 5 4

A[4] - nebuvo

 

ir taip iki A[31] :)

 

Nesinervink viskas bus allright :) išlaikysi, nėra tas egzas toks sunkus

 

Beje kuo daugiau nervuosies tuo daugiau klaidų pripilsi

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