Pereiti prie turinio

Reikia pagalbos su uždaviniu


Rekomenduojami pranešimai

Sveiki, bandau savarankiškai mokytis programuoti ir susidūriau su tokia problemėle. Yra uždavinys: Parašykite programą rasti mažiausiam intervalo [m;n] skaičiui, turinčiam k daliklių.

Pasirašiau programą, bet ji man atspausdina visus skaičius esančius intervale [m,n] ir turinčius k daliklių. Kaip reikėtų pakeisti programą, kad spausdintų tik mažiausią skaičių?

 

program Dalikliai;
var d :integer;
{--------------------Procedûra ieðkanti dalikliø skaièiaus---------------------}
procedure Daliklis(x :integer);
var i  :integer;
Begin
d:= 1;
if x = 1
then d:= 1
else for i:= 1 to x div 2 do
   if x mod i = 0
    then d:= d + 1;
end;
{--------Funkcija tikrinanti ar skaièius turi tiek dalikliø, kiek norima-------}
function ArTuri(var a, b :integer) :boolean;
Begin
    if a = b
     then ArTuri:= True
     else ArTuri:= False;
end;
{------------------------------------------------------------------------------}
var m,
   n,
   j,
   k :integer;
begin
 WriteLn('Áveskite intervalo rëþius');
 Readln(m,n);
 WriteLn('Áveskite dalikliø kieká');
 ReadLn(k);
 Write('Maþiausias skaièius intervale [',m,';',n,'], turintis ',k,' dalikliø: ');
  for j:= m to n do
   begin
   Daliklis(j);
   if ArTuri(d,k)
    then
     begin
      Write(j,' ');
     end;
   end;
Readln;
end.

 

P.S. suradau kaip įkelti programą tiesiai čia, tai gal bus patogiau :)

Reik pagalbos.bmp

Redagavo Cibulinskis
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Sveiki, bandau savarankiškai mokytis programuoti ir susidūriau su tokia problemėle. Yra uždavinys: Parašykite programą rasti mažiausiam intervalo [m;n] skaičiui, turinčiam k daliklių.

Pasirašiau programą, bet ji man atspausdina visus skaičius esančius intervale [m,n] ir turinčius k daliklių. Kaip reikėtų pakeisti programą, kad spausdintų tik mažiausią skaičių?

Pakopink kodą į http://www.pastebin.com

arba čia tarp tag'ų

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Ateičiai:

function ArTuri(var a, b :integer) :boolean;
Begin
    if a = b
     then ArTuri:= True
     else ArTuri:= False;
end;

 

Galima užrašyti tiesiog taip:

function ArTuri(var a, b : integer) : boolean; // Kažkur dar reiktų parašyt, kad a ir b yra const'ai - jų reikšmės keisti negalima
begin
   ArTuri := a = b;
end;

 

 

Beje, kaip manai, kas bus, jeigu mano intervalas - [1; 3], o aš noriu skaičiaus, kuris turi 100000 daliklių? :-)

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Vėl prireikė pagalbos :( Turiu uždavinį: Parašykite programą, kuri įvestus skaičius suskirstytų į m stulpelių. Kintamasis m taip pat įvedamas klaviatūra.

 

Pvz:

Jei įvedu 1 2 3 4 5 6 7 ir m = 3 tada programa turi išspausdinti:

1 2 3

4 5 6

7

 

tačiau man išspausdina:

1 2 3

4 5 6 7

 

Programa:

 

program Stulpeliai;
const CMax = 100;
var s :integer;
   Skai :array [1..CMax] of integer;
   n,
   i,
   m,
   j :integer;
begin
WriteLn('Áveskite skaièius (pabaiga þymima 0): ');
n:= 0;
readLn(s);
 while s <> 0 do
  begin
   n:= n + 1;
   skai[n]:= s;
   readln(s);
  end;
  writeln;
Writeln('Áveskite stulpeliø skaièiø: ');
Readln(m);
WriteLn;
if m > n then WriteLn('Nelogiski duomenys!!!')
        else
for i:= 1 to m do
begin
 Write(skai[i]:5);
 if i = m
  then
   begin
    writeLn;
    for j:= m + 1 to n do
     Write(skai[j]:5);
    end;
end;
Readln;
end.

 

Gal galite paaiškinti, ką darau ne taip ir kaip reikėtų keisti programą? :unsure:

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Vėl iškilo problemų :unsure: Pradėjau mokytis apie tekstinius failus ir susidūriau su tokia problema, turiu programą:

 

program Pirminiai_skaièiai;
type Masyvas = array [1..10] of integer;

var A :Masyvas;

procedure Duomenys;
var F :text;
   i :integer;
Begin
Assign(F,'Duomenys.txt');
Reset(F);
while not Eof do
  for i:= 1 to 10 do
   Read(F,A[i]);
Close(F);
end;

procedure Sukurti(B :Masyvas);
var F :text;
   i :integer;
Begin
 Assign(F,'Rezultatai.txt');
 Rewrite(F);
  for i:= 10 downto 1 do
   WriteLn(F,B[i]);
 Close(F);
end;

begin
 Duomenys;
 Sukurti(A);
 Readln;
end.

 

Pagal idėją programa turėtų nuskaityti 10 skaičių iš failo Duomenys.txt, tada sukurti naują failą Rezultatai.txt ir užrašyti juos atbulai, pvz turiu 1 2 3, užrašo 3 2 1 ir pan. Programa, mano galva, parašyta lyg ir teisingai, tačiau kažkodėl man meta klaidą:

http://78.lt/di-TGNJ.jpg

 

http://78.lt/di-RIQI.jpg

 

Noriu paklausti ką ši klaida reiškia ir kaip ją ištaisyti?

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Ištrink šią eilutę ir patikrink ar tikrai tam tavo tekstiniame dokumente yra įrašyti visi skaičiai.

while not Eof do

Šią klaidą meta, kai bandai nuskaityti duomenys, bet jų nėra.

 

Nepadeda :( Patikrinau duomenys yra. O yra kažkoks skirtumas ar tekstinį failą kuri su NotePad'u ar su FreePascal'io redaktoriumi?

 

EDIT: Ar gali būti toks dalykas, kad mano paskalis nevisiškai pilnai dirba su .txt failais, nes duomenų failo galūnę pakeitus į .dat programa veikia tik vietoj skaičių esančių faile rodo nulius.

Redagavo Cibulinskis
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Nepadeda :( Patikrinau duomenys yra. O yra kažkoks skirtumas ar tekstinį failą kuri su NotePad'u ar su FreePascal'io redaktoriumi?

 

EDIT: Ar gali būti toks dalykas, kad mano paskalis nevisiškai pilnai dirba su .txt failais, nes duomenų failo galūnę pakeitus į .dat programa veikia tik vietoj skaičių esančių faile rodo nulius.

Kas dabar blogai? Man tai viskas gerai veikia. Gal tu ne į tą failą duomenys surašei? Pvz surašei į duomenys.txt, bet skaito iš kito failo Duomenys.txt . Gal to failo galūnė ne .txt, o .rtf ar .doc?

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Taip būti negali. Jei duomenų faile yra 10 skaičių ir tavo programa turi nuskaityti 10 skaičių, tai jinai juos ir nuskaitinės, juk nepradės ne iš šio, ne iš to tarpo simbolių nuskaitinėt, nebent, žinoma duomenų faile nebuvo 10 skaičių. Gal pamiršai padėti tarpą tarp dviejų skaičių ir juos nuskaitė kaip vieną? Na nesvarbu, svarbu tai, kad whitespace perteklius jokios įtakos skaičių nuskaitimui neturi.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Ot va pasirasyk sita koda ir pabandyk irases i duomenu faila tik 10 skaiciu ir irases 10 skaiciu ir po paskutinio skaiciaus dar tarpa :) Cia viska gadina tas While not Eof(F), be jo gali kad ir melejonas tarpu but, for ciklas nuskaitys tik 10 skaiciu, o vat dar papildomai naudoji while, tai prasideda suktis while ciklas, jo viduje esantis for ciklas nuskaito 10 skaiciu, tuomet while ciklas per naujo dar karta prasideda suktis, nes failas dar nepasibaiges (yra tarpas pabaigoje), ir tada, kai antra kart pradeda suktis for, jis tarpa skaito kaip integer ir pareina klaida :)

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Ot va pasirasyk sita koda ir pabandyk irases i duomenu faila tik 10 skaiciu ir irases 10 skaiciu ir po paskutinio skaiciaus dar tarpa :) Cia viska gadina tas While not Eof(F), be jo gali kad ir melejonas tarpu but, for ciklas nuskaitys tik 10 skaiciu, o vat dar papildomai naudoji while, tai prasideda suktis while ciklas, jo viduje esantis for ciklas nuskaito 10 skaiciu, tuomet while ciklas per naujo dar karta prasideda suktis, nes failas dar nepasibaiges (yra tarpas pabaigoje), ir tada, kai antra kart pradeda suktis for, jis tarpa skaito kaip integer ir pareina klaida :)

Na tai aš ir sakiau jam ištrinti tą eilutę, bet jis sakė kad vis tiek yra ta pati klaida. Praeitoje žinutėje kalbėjau būtent apie šią programą, o ne apskritai :) .

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