Pereiti prie turinio

Reikiai pagalbos su Pascal


Rekomenduojami pranešimai

Gal būt yra žmonių, kurie žino kaip galima padaryti mano programa su funkciją (function)? Kažkaip nelabai suprantu, kaip tai įmanoma padaryti.

Mano kodas:

 

program Noname1;
var Df, Rf:text;
   i,k,n,skaicius,s:integer;
begin
 k:=0;
 Assign(Df,'duom.txt');
 Reset(Df);
 Assign(Rf,'rez.txt');
 Rewrite(Rf);
 Readln(Df,n);
 for i:=1 to n do
 begin
 Read(Df,skaicius);
 s:=trunc(sqrt(skaicius));
 if (s mod 2=0) and (s*s=skaicius) then begin
 k:=k+1;
 if k=1 then writeln(Rf,'surasti skaiciai: ');
 writeln(Rf,skaicius);
 end;
 end;
 Close(Df);
 if k=0 then writeln('Nera') else
 begin
 writeln(Rf,'Is viso:' , k);
 end;
 Close(Rf);

 end.

 

 

Duomenų failas:

 

15
1
2
3
4
16
25
27
49
50
100
121
625
900
1600
1681

 

Prisimenu, kad reikia be procedurų, tik funkcija.

Redagavo Dmitrijus
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Būdų perrašyti programą į funkciją gali būti nemažai šiaip jau. Gali būti kad ir toks:

function funkcija (i:integer; k:integer; n:integer; skaicius:integer; s:integer): boolean;
var Df, Rf: text;
begin
 k:=0;
 Assign(Df,'duom.txt');
 Reset(Df);
 Assign(Rf,'rez.txt');
 Rewrite(Rf);
 Readln(Df,n);
 for i:=1 to n do
 begin
 Read(Df,skaicius);
 s:=trunc(sqrt(skaicius));
 if (s mod 2=0) and (s*s=skaicius) then begin
 k:=k+1;
 if k=1 then writeln(Rf,'surasti skaiciai: ');
 writeln(Rf,skaicius);
 end;
 end;
 Close(Df);
 if k=0 then writeln('Nera') else
 begin
 writeln(Rf,'Is viso:' , k);
 end;
 Close(Rf);
 funkcija := true;
end;

Ir apskritai, norint parašyti funkciją, reikia numatyti tokius dalykus: Kokie funkcijos argumentai? Ką funkcija grąžins?

Na nebent klausimas buvo tik dėl sintaksės.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Būdų perrašyti programą į funkciją gali būti nemažai šiaip jau. Gali būti kad ir toks:

function funkcija (i:integer; k:integer; n:integer; skaicius:integer; s:integer): boolean;
var Df, Rf: text;
begin
 k:=0;
 Assign(Df,'duom.txt');
 Reset(Df);
 Assign(Rf,'rez.txt');
 Rewrite(Rf);
 Readln(Df,n);
 for i:=1 to n do
 begin
 Read(Df,skaicius);
 s:=trunc(sqrt(skaicius));
 if (s mod 2=0) and (s*s=skaicius) then begin
 k:=k+1;
 if k=1 then writeln(Rf,'surasti skaiciai: ');
 writeln(Rf,skaicius);
 end;
 end;
 Close(Df);
 if k=0 then writeln('Nera') else
 begin
 writeln(Rf,'Is viso:' , k);
 end;
 Close(Rf);
 funkcija := true;
end;

Ir apskritai, norint parašyti funkciją, reikia numatyti tokius dalykus: Kokie funkcijos argumentai? Ką funkcija grąžins?

Na nebent klausimas buvo tik dėl sintaksės.

 

 

Dėja, tai man netinka. Man pavyzdžiui reikia, kad kur function man jis skaičiavo, o paskui, kur yra bendras begin, net viskas įrašo į failą...

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Man labai lengvai skaityti tavo gerai indentintą kodą...

 

Tiesiog kiši

 for i:=1 to n do
 begin
   Read(Df,skaicius);
   s:=trunc(sqrt(skaicius));
   if (s mod 2=0) and (s*s=skaicius) then
     k:=k+1; // Tingejau žiūrėt tavo super indentintą kodą, tai dasirašyk, jei nukirpau

 

į funkciją ir returnini 'k', tada jau lygini.

Redagavo kashiukas
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Man labai lengvai skaityti tavo gerai indentintą kodą...

 

Tiesiog kiši

 for i:=1 to n do
 begin
   Read(Df,skaicius);
   s:=trunc(sqrt(skaicius));
   if (s mod 2=0) and (s*s=skaicius) then
     k:=k+1; // Tingejau žiūrėt tavo super indentintą kodą, tai dasirašyk, jei nukirpau

 

į funkciją ir returnini 'k', tada jau lygini.

 

Ar jūs galėtumėte parašyti visą pilną kodą, nes kažkaip nelabai suprantu, kaip tai padaryti...

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Tu papastinai kažkokį kodą ir net nepasakei, ką programa daro ir apskritai kokie jos reikalavimai :) Reikia patiems aiškintis maždaug.. ir tokie kintamieji kaip k, n aiškumo neprideda :)

program Noname1;
var Df, Rf:text;
   i,k,n,skaicius,s:integer;

function kazkaDaryti(k :integer) : integer 
 begin
   Assign(Df,'duom.txt');
   Reset(Df);
   Readln(Df,n);
   for i:=1 to n do
     begin
       Read(Df,skaicius);
       s:=trunc(sqrt(skaicius));
       if (s mod 2=0) and (s*s=skaicius) then begin
          k:=k+1;
          if k=1 then writeln(Rf,'surasti skaiciai: ');
          writeln(Rf,skaicius);
                                         end;
     end;
   kazkaDaryti := k;
   Close(Df);
 end;
rezultatas : integer;
begin
 k:=0;
 rezultatas := kazkaDaryti(k);
 Assign(Rf,'rez.txt');
 Rewrite(Rf);
 if rezultatas=0 then writeln('Nera') else
   begin
     writeln(Rf,'Is viso:' , rezultatas);
   end;
 Close(Rf);

 end.

kažkas tokio

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