Pereiti prie turinio

Pascal uzduoti-grybai


Rekomenduojami pranešimai

Sveikuciai dar karta. taigi meta klaida bad numeric format, ka daryt? :)

program Grybas;

type gryb=record
   vard:string[15];
   gryb,gryb1,gryb2,d:integer;
end;

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

var i,n,j,didz:integer;
Df,Rf:text;
A:mas;
bar,raud,lep,sum:mas1;
vardukas:string[15];

procedure Duomenys;
begin
   Assign(Df,'U2.txt');
   Reset(Df);
   Readln(Df,n);
   for i:=1 to n do
   begin
       Readln(Df,A[i].vard,A[i].d);
       for j:=1 to A[i].d do
       Readln(Df,A[i].gryb,A[i].gryb1,A[i].gryb2);
   end;
   Close(Df);
end;

procedure Is_viso;
begin
   for i:=1 to n do
   begin
       for j:=1 to A[i].d do
       begin
           bar[i]:=bar[i]+A[i].gryb;
           raud[i]:=raud[i]+A[i].gryb1;
           lep[i]:=lep[i]+A[i].gryb2;
       end;
   end;
   for i:=1 to n do
   Writeln(Rf,bar[i],raud[i],lep[i]);
end;

function geriausias:integer;
begin
   didz:=0;
   for i:=1 to n do
   sum[i]:=bar[i]+raud[i]+lep[i];
   for i:=1 to n do
   if didz<sum[i] then
   begin
       didz:=sum[i];
       vardukas:=A[i].vard;
   end;
  geriausias:=didz;
end;

procedure Rezultatai;
begin
   Assign(Rf,'U2rez.txt');
   Rewrite(Rf);
   Is_viso;
   Close(Rf);
end;

begin
   Duomenys;
  Rezultatai;
end.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Sveikuciai dar karta. taigi meta klaida bad numeric format, ka daryt? :)

program Grybas;

type gryb=record
   vard:string[15];
   gryb,gryb1,gryb2,d:integer;
end;

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

var i,n,j,didz:integer;
Df,Rf:text;
A:mas;
bar,raud,lep,sum:mas1;
vardukas:string[15];

procedure Duomenys;
begin
   Assign(Df,'U2.txt');
   Reset(Df);
   Readln(Df,n);
   for i:=1 to n do
   begin
       Readln(Df,A[i].vard,A[i].d);
       for j:=1 to A[i].d do
       Readln(Df,A[i].gryb,A[i].gryb1,A[i].gryb2);
   end;
   Close(Df);
end;

procedure Is_viso;
begin
   for i:=1 to n do
   begin
       for j:=1 to A[i].d do
       begin
           bar[i]:=bar[i]+A[i].gryb;
           raud[i]:=raud[i]+A[i].gryb1;
           lep[i]:=lep[i]+A[i].gryb2;
       end;
   end;
   for i:=1 to n do
   Writeln(Rf,bar[i],raud[i],lep[i]);
end;

function geriausias:integer;
begin
   didz:=0;
   for i:=1 to n do
   sum[i]:=bar[i]+raud[i]+lep[i];
   for i:=1 to n do
   if didz<sum[i] then
   begin
       didz:=sum[i];
       vardukas:=A[i].vard;
   end;
  geriausias:=didz;
end;

procedure Rezultatai;
begin
   Assign(Rf,'U2rez.txt');
   Rewrite(Rf);
   Is_viso;
   Close(Rf);
end;

begin
   Duomenys;
  Rezultatai;
end.

 

Duomenų failą galima?

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Jau sutvarkiau pasirodo stringui per daug vietos daviau, bet dabar yra kita problemele, siek tiek paeditinau koda, taigi ji imesiu vel i cia.Problema tokia, kad rez faile vel neratokiu skaiciu,kokie turetu buti, ziurekit i procedura Is_viso, ji turi suskaiciuoti kiek zmogus surinko grybu per tam tikra dienu skaiciu.Duomenu failas:

4

Petras 3

15 13 8

4 0 5

16 1 0

Algis 1

9 6 13

Jurgis 4

4 14 2

4 4 15

16 15 251

1 2 3

Rita 2

6 65 4

4 4 13

 

Rez failas:

26 9 16

16 1 0

30 13 29

25 7 13

 

program Grybas;

type gryb=record
   vard:string[7];
   gryb,gryb1,gryb2,d:integer;
end;

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

var i,n,j,didz:integer;
Df,Rf:text;
A:mas;
bar,raud,lep,sum:mas1;
vardukas:string[7];

procedure Duomenys;
begin
   Assign(Df,'U2.txt');
   Reset(Df);
   Readln(Df,n);
   for i:=1 to n do
   begin
       Readln(Df,A[i].vard,A[i].d);
       for j:=1 to A[i].d do
       Readln(Df,A[i].gryb,A[i].gryb1,A[i].gryb2);
   end;
   Close(Df);
end;

procedure Is_viso;
begin
   for i:=1 to n do
   begin
       for j:=1 to A[i].d do
       begin
           bar[i]:=bar[i]+A[j].gryb;
           raud[i]:=raud[i]+A[j].gryb1;
           lep[i]:=lep[i]+A[j].gryb2;
       end;
   end;
   for i:=1 to n do
   Writeln(Rf,bar[i],' ',raud[i],' ',lep[i]);
end;

function geriausias:integer;
begin
   didz:=0;
   for i:=1 to n do
   sum[i]:=bar[i]+raud[i]+lep[i];
   for i:=1 to n do
   begin
       if didz<sum[i] then
       begin
           didz:=sum[i];
           vardukas:=A[i].vard;
       end;
   end;
  geriausias:=didz;
end;

procedure Rezultatai;
begin
   Assign(Rf,'U2rez.txt');
   Rewrite(Rf);
   Is_viso;
   Close(Rf);
end;

begin
   Duomenys;
  Rezultatai;
end.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Bet ten praso atskira procedura sukurt grybu sumavimui :) Beto kodel bus tik paskutinis gali detaliau paaiskint?:) Taigi indeksai, tai skiriasi, neturetu buti paskutinis

 

Tai tada viską meti į masyvus ir kitur sumuosi.

 

Tavo atveju

A[i].gryb

.

 

Ciklo pirmo bus indeksas i kuris eis tik kiekvienam žmogui kitas, o grybams ciklas j naudojamas taigi

 

Tavo atvėju A[1].gryb įgys tik vieną reikšmę paskutinę.

 

Jei reikalauja sutvarkyti viską vėliau tai darome taip

Pavyzdukas:

type mas1=array[1..100] of integer;
type gryb=record
vard:string[7];
d:integer;
gryb,gryb1,gryb2:mas1; //turėsime įraše masyvą.
end;
type mas=array[1..100] of gryb;

Taigi nuskaityme naudojame

for i:=1 to n do
begin
   	Readln(Df,A[i].vard,A[i].d);
   	for j:=1 to A[i].d do
   	Readln(Df,A[i].gryb[j],A[i].gryb1[j],A[i].gryb2[j]);
end;

 

Tada turėsi.

A[1].gryb[1]=15

A[1].gryb[2]=4

A[1].gryb[3]=16

Supratai manau?

Redagavo wigas
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Bet gi tas j ciklas, tai priklausomai nuo dienu skaiciaus,priskiria j indeksa masyvo elementui, o paskiau prideda prie kintamojo bar ir tas j indeksas kai baigiasi, visi grybai turi buti sudeti,juk logiska, ar ne?:)

 

Pirma nuskaitymą susitvarkyk ir išsiaiškink kur sakau klaida yra.

Tik iš dalies tu teisingai mastai, tik blogai rašai.

 

procedure Is_viso;
begin
   for i:=1 to n do
   begin
       for j:=1 to A[i].d do
       begin
           bar[i]:=bar[i]+A[j].gryb;
           raud[i]:=raud[i]+A[j].gryb1;
           lep[i]:=lep[i]+A[j].gryb2;
       end;
   end;
   for i:=1 to n do
   Writeln(Rf,bar[i],' ',raud[i],' ',lep[i]);

end;

Kaip manai ar skirsis reikšmė? Jei imsi i vietoj j ? Nesiskirs tik turės mažesnį rezultatų skaičių.

 

Juk logiškai mastom, kaip sakiai tai kaip gali sutalpinti kelis skaičius į vieną įrašo masyvo, kuris turi tik vieną elementą?

 

Atsispausdink visus elementus kai nuskaitei failą ir matysi savo klaidą nebus visų elementų masyve..

Redagavo wigas
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Na nezinau, tu turbut kad sita vieta puikiai supranti, o as ne.As ukiskai paaiskinsiu kaip suprantu ja.Konkreciai sita vieta, skaityk komentarus ir suprasi kaip as mastau:

procedure Is_viso;
begin
   for i:=1 to n do
   begin
       vardukas1[i]:=A[i].vard;
       for j:=1 to A[i].d do //vykdomas pirmas ciklas
       begin
           bar[i]:=bar[i]+A[j].gryb; //paimama pirma pirmo grybo reiksme pirma diena.Ji pridedama prie masyvo elemento,kuris pradziuj bus pirmas, ir kai per kitus j ciklus vel prideda reiksmes, jis vis dideja ir dideja, kol buna suskaiciuota visu grybu suma.Kai vykdomas 2 ciklas, vietoj j atsiranda 2, todel paimama reiksme esanti zemiau buvusios ir taip vykdoma iki galo, kol baigiasi dienu skaicius, todelas manau negali buti taip, kad tos ankstesnesreiksmes ima ir isnyksta kazkur, nebent as kazko nesuprantu:) 
           raud[i]:=raud[i]+A[j].gryb1; //paimama 1 reiksme pirma diena, bet jau antro grybo ir viskas vyksta taip pat kaip rasiau prie bar[i] komentare
           lep[i]:=lep[i]+A[j].gryb2; //paimama pirma reiksme, bet jau trecio grybo ir cia viskas taip pat vyksta kaip virsuje
       end; //visas ciklas vykdomas tiek kartu, kiek zmogus grybavo  
       Writeln(Rf,vardukas1[i],' ',bar[i],' ',raud[i],' ',lep[i]); //kiekvieno i ciklo pabaigos metu parasomas bendras kiekis grybu susumuotu anksciau esanciam cikle
   end;
end;

 

Nezinau gal dabar ir aiskiai parasiau, pasakyk kas butent mano mastyme yra klaidinga? :)

Redagavo RealEfect
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Na nezinau, tu turbut kad sita vieta puikiai supranti, o as ne.As ukiskai paaiskinsiu kaip suprantu ja.Konkreciai sita vieta, skaityk komentarus ir suprasi kaip as mastau:

procedure Is_viso;
begin
   for i:=1 to n do
   begin
       vardukas1[i]:=A[i].vard;
       for j:=1 to A[i].d do //vykdomas pirmas ciklas
       begin
           bar[i]:=bar[i]+A[j].gryb; //paimama pirma pirmo grybo reiksme pirma diena.Ji pridedama prie masyvo elemento,kuris pradziuj bus pirmas, ir kai per kitus j ciklus vel prideda reiksmes, jis vis dideja ir dideja, kol buna suskaiciuota visu grybu suma.Kai vykdomas 2 ciklas, vietoj j atsiranda 2, todel paimama reiksme esanti zemiau buvusios ir taip vykdoma iki galo, kol baigiasi dienu skaicius, todelas manau negali buti taip, kad tos ankstesnesreiksmes ima ir isnyksta kazkur, nebent as kazko nesuprantu:) 
           raud[i]:=raud[i]+A[j].gryb1; //paimama 1 reiksme pirma diena, bet jau antro grybo ir viskas vyksta taip pat kaip rasiau prie bar[i] komentare
           lep[i]:=lep[i]+A[j].gryb2; //paimama pirma reiksme, bet jau trecio grybo ir cia viskas taip pat vyksta kaip virsuje
       end; //visas ciklas vykdomas tiek kartu, kiek zmogus grybavo  
       Writeln(Rf,vardukas1[i],' ',bar[i],' ',raud[i],' ',lep[i]); //kiekvieno i ciklo pabaigos metu parasomas bendras kiekis grybu susumuotu anksciau esanciam cikle
   end;
end;

 

Nezinau gal dabar ir aiskiai parasiau, pasakyk kas butent mano mastyme yra klaidinga? :)

 

IS_Viso tavo iš dalies gera, bet tu matau nesupratai savo klaidos nuskaityme, pabandei atsispausdinti savo nuskaitytas reikšmes?

 

Duosiu programa taip turėtu būti gal suprasi :)

 

Jei kas neaišku klausk.

program grybai;
type
mas=array[1..50] of integer;
sarasas=record
       	Vardas:string[15];
       	Barv,Raudon,Lep:mas;
       	D,B,R,L:integer;
       	end;
mas1=array[1..100] of sarasas;

procedure Duomenys(var n:integer; var Grybautojai:mas1);
var i,j:integer;
F1:text;
begin
assign(F1,'U2.txt');
reset(F1);
readln(F1,n);
for i:=1 to n do
begin
   	readln(F1,Grybautojai[i].Vardas,Grybautojai[i].D);
   	for j:=1 to Grybautojai[i].D do
   	readln(F1,Grybautojai[i].Barv[j],Grybautojai[i].Raudon[j],Grybautojai[i].Lep[j]);
end;
close(F1);
end;

procedure Is_Viso(n:integer; var Grybautojai:mas1);
var i,j:integer;
begin
for i:=1 to n do
begin
   	for j:=1 to Grybautojai[i].D do
   	begin
       	Grybautojai[i].B:=Grybautojai[i].B+Grybautojai[i].Barv[j];
       	Grybautojai[i].R:=Grybautojai[i].R+Grybautojai[i].Raudon[j];
       	Grybautojai[i].L:=Grybautojai[i].L+Grybautojai[i].Lep[j];
   	end;
end;
end;

procedure Rezultatas(n:integer; Grybautojai:mas1);
var i:integer;
F2:text;
begin
assign(F2,'U2rez.txt');
rewrite(F2);
for i:=1 to n do
writeln(F2,Grybautojai[i].Vardas,' ',Grybautojai[i].B,' ',Grybautojai[i].R,' ',Grybautojai[i].L);
close(F2);
end;
var Grybautojai:mas1;
n:integer;
begin
Duomenys(n,Grybautojai);
Is_Viso(n,Grybautojai);
Rezultatas(n,Grybautojai);
end.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Labai dekui, kad tu padedi :) Ziurek, bet as buvau padares kaip tu sakei, sumavima iskart nuskaityme, tai viskas ok buvo, nes reiksmes buvo gautos tokios,kokiu ir reikia, tai kuo skiriasi sumavimas is karto ir sumavimas kitoj proceduroje, bet be tu dvigubu masyvu?:) Kitas klausimas, pabandziau nuskaityti reiksmes ir jas ideti i rez faila su savo kodu ankstesniu kaip tu man pasakei, ir visaiska nesamone gavos, nes siaip turetu reiksmes spausdint tai ne belekokias, o imt kiekvieno zmogaus reiksmes ir isspausdint?? tai va koks rez failas:

6 65 4

6 65 4

6 65 4

4 4 13

16 15 251

16 15 251

16 15 251

16 15 251

1 2 3

1 2 3

 

O pats kodas su irasymu tu reiksmiu i faila:

program Grybas;

type gryb=record
   vard:string[7];
   gryb,gryb1,gryb2,d:integer;
end;

type mas=array[1..100] of gryb;
type mas1=array[1..100] of integer;
type mas2=array[1..100] of string[7];

var i,n,j,didz:integer;
Df,Rf:text;
A:mas;
bar,raud,lep,sum:mas1;
vardukas:string[7];
vardukas1:mas2;

procedure Duomenys;
begin
   Assign(Df,'U2.txt');
   Reset(Df);
   Readln(Df,n);
   for i:=1 to n do
   begin
       Readln(Df,A[i].vard,A[i].d);
       vardukas1[i]:=A[i].vard;
       for j:=1 to A[i].d do
           Readln(Df,A[j].gryb,A[j].gryb1,A[j].gryb2);
   end;
   Close(Df);
end;

{procedure Is_viso;
begin
   for i:=1 to n do
   Writeln(Rf,vardukas1[i],' ',bar[i],' ',raud[i],' ',lep[i]);
   for i:=1 to n do
   begin
       vardukas1[i]:=A[i].vard;
       for j:=1 to A[i].d do
       begin
           bar[i]:=bar[i]+A[j].gryb;
           raud[i]:=raud[i]+A[j].gryb1;
           lep[i]:=lep[i]+A[j].gryb2;
       end;
       Writeln(Rf,vardukas1[i],' ',bar[i],' ',raud[i],' ',lep[i]);
   end;
end; }

function geriausias:integer;
begin
   didz:=0;
   for i:=1 to n do
   sum[i]:=bar[i]+raud[i]+lep[i];
   for i:=1 to n do
   begin
       if didz<sum[i] then
       begin
           didz:=sum[i];
           vardukas:=A[i].vard;
       end;
   end;
  geriausias:=didz;
end;

procedure Rezultatai;
begin
   Assign(Rf,'U2rez.txt');
   Rewrite(Rf);
   for i:=1 to n do
   begin
       for j:=1 to A[i].d do
       Writeln(Rf,A[i].gryb,' ',A[i].gryb1,' ',A[i].gryb2);
   end;
   Close(Rf);
end;

begin
   Duomenys;
  Rezultatai;
end.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Jau supratai, sumavimas skiriasi tik tuo, kad tu turėsi perduoti reikšmes visas į kitą procedūrą,

 

Tavo atveju tu tik po vieną reikšmę perduodavai t.y paskutine.

 

Dar syki tavo klaida tokia buvo

Readln(Df,A[i].gryb,A[i].gryb1,A[i].gryb2);

Petras 3

15 13 8

4 0 5

16 1 0

Algis 1

9 6 13

Jurgis 4

4 14 2

4 4 15

16 15 251

1 2 3

Rita 2

6 65 4

4 4 13

Įsivaizduok,

 

Nuskaitai viską pirmas ciklas i ima reikšme ir jos tik bus panaudotos toliau j ciklo tik paskutinė reikšmė nes pirmutinė bus pakeista kita ir t.t kol bus galas.

 

A[1].Vardas=Petras;

A[1].gryb=16;.

A[1].gryb1=1;.

A[1].gryb2=0;.

 

A[2].Vardas=Algis;

A[2].gryb=9;.

A[2].gryb1=6;.

A[2].gryb2=3;.

 

A[3].Vardas=Jurgis;

A[3].gryb=1;.

A[3].gryb1=2;.

A[3].gryb2=3;.

 

Kur dabar kodą įdėjai tai visos reikšmės bus ant viršaus užrašomos.

Redagavo wigas
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Tai pagal toki principa, kaip isivaizduoju, turi buti spausdinamos paskutinio zmogaus reiksmes, tai grybu skaciai, nes visi masyvo elementai pasikeicia iki paskutinio zmogaus?Ar ne taip? :)

 

Pirmo tavo kodo atveju tai kiekvieno žmogaus paskutinius grybavimus spausdins.

 

Antro tavo kodo atveju tai tikriausiai paskutinio žmogaus duomenis priskirs visiems nesu garantuotas.

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.

  • Prisijunk prie bendruomenės dabar!

    Uždarbis.lt nariai domisi verslo, IT ir asmeninio tobulėjimo temomis, kartu sprendžia problemas, dalinasi žiniomis ir idėjomis, sutinka būsimus verslo partnerius ir dalyvauja gyvuose susitikimuose.

    Užsiregistruok dabar ir galėsi:

    ✔️ Dalyvauti diskusijose;

    ✔️ Kurti naujas temas;

    ✔️ Rašyti atsakymus;

    ✔️ Vertinti kitų žmonių pranešimus;

    ✔️ Susisiekti su bet kuriuo nariu asmeniškai;

    ✔️ Naudotis tamsia dizaino versija;

    ir dar daugiau.

    Registracija trunka ~30 sek. ir yra visiškai nemokama.

  • Naujausios temos

  • Karštos temos

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