Pereiti prie turinio

Rekomenduojami pranešimai

Žiauriai reikia pagalbos. Iki 3h šiandienos.

 

Klaviatura ivedami 3 sveiki (logint) skaiciai A' date=' B, C.

Rasti ir memo1 lauke parodyti:

1. Kiekvieno skaiciaus lyginiu skaitmenu kieki (function)

2. Kiekvieno skaiciaus skaitmenu sandauga (procedure)

3. Kiekvieno skaiciaus didziausia skaitmeni (function)

4. Visu skaiciu lyginiu skaitmenu kieki (procedure)

 

Jei kas gali padaryt iki 3h ŠIANDIEN atsilyginsiu

 

Žiauriai reikia!!![/quote']

4-tos nebereikia :)

Nuoroda į pranešimą
Dalintis kituose puslapiuose
  • po 2 savaičių...

Dabar klausimas dar vienas :D

 

Darbas su dideliais skaičiais. Vakar reikėjo skaičiuoti didelių skaičių faktorialus, tai pagalvojau, kad neapsimoka geriau programą pasidarysiu. Parašiau programą, ir atsakymas jei viršyja 10 skaitmenų rašo atsakymą 0. Čia turbūt dėl to logint kaip NuPagady sakė ir norėčiau paklaust ar kaip nors išeitų padaryti, kad atsakymą pateiktų neroboto skaitmenų kiekio, ar bent kieknors daugiau nei 10 skaitmenų. Va kodas faktorialo:

 

var sk, fakt : integer;

begin

sk := StrToInt(Edit1.Text);

fakt := 1;

while sk > 0 do begin

fakt := fakt * sk;

sk := sk - 1;

end;

Memo1.Lines.Clear;

Memo1.Lines.Add('' + IntToStr(fakt));

 

Viskas veikia su nedideliais skaičiais, kurių faktorialas neviršyja 10 skaitmenų.

 

Faktorialas = "n! = n * (n - 1) * (n - 2) ... * 1" (pvz. 5! = 5 * 4 * 3 * 2 * 1 )

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Na cia jau labai priklauso nuo to, kokiu skaiciu faktoriala nori skaiciuoti...

Vien 100! - skaicius dideja dviem skaitmenimis sulig kiekvienu dauginimu (na pradzioj, bet uztektinai kartu, kad ilgis isaugtu milziniskai).

 

As siulyciau paciam pasirasyti daugybos funkcija, kuri skaicius saugo tekstu, o daugyba atlieka "stulpeliu" - taip kaip mus mokino antroj ar trecioj klasej :D

 


1234 x

  56

------

7404 +

6170

-------

69104

 

:D

Nuoroda į pranešimą
Dalintis kituose puslapiuose
Na cia jau labai priklauso nuo to, kokiu skaiciu faktoriala nori skaiciuoti...

Vien 100! - skaicius dideja dviem skaitmenimis sulig kiekvienu dauginimu (na pradzioj, bet uztektinai kartu, kad ilgis isaugtu milziniskai).

 

As siulyciau paciam pasirasyti daugybos funkcija, kuri skaicius saugo tekstu, o daugyba atlieka "stulpeliu" - taip kaip mus mokino antroj ar trecioj klasej :D

 


1234 x

  56

------

7404 +

6170

-------

69104

 

:D

 

Na man reikia skaičių iki 60!

 

Kaip tu pasakei tai nelabai supratau apie tą funkciją :oops: dar palyginus pradžiamokslis delphi esu :oops:

Nuoroda į pranešimą
Dalintis kituose puslapiuose
arba tiesiog integer pakeisk i real tipa :D nemanau kad delphi neturi tokio jei visi kiti turi :D

 

Nelabai suprantu ką gali pakeisti tipo pakeitimas į real nes pvz integer yra visi teigiami ir neigiami sveikieji skaiciai (1; 2; 3) o real tai realieji skaičiai kur gali būti trupmeninė dalis, nu bet vis dėl to pabandžiau ir tarkim 30! real rodo 2,65252859812191E32; su integer rodo 1409286144 su real parašo kitą skaičiaus išraišką, kurią nelabai prisimenu kaip paverst į normalų skaičių, lyg ir mokiaus... :?

Nuoroda į pranešimą
Dalintis kituose puslapiuose
arba tiesiog integer pakeisk i real tipa :) nemanau kad delphi neturi tokio jei visi kiti turi :D

 

Na beda viena - reikalingas sveikos israiskos rezultatas. Ir siaip real skaiciu tikslumas yra mazas. Pasakyk kaip gausi 20-a skaitmeni po kablelio? :)

 

Na o del tos funkcijos: tai aprasai mazdaug tokie

 

   function Dauginti(Skaicius1, Skaicius2: String) : String;

  function Sumuoti(Skaicius1, Skaicius2: String) : String;

  function Atimti(Skaicius1, Skaicius2: String) : String;

 

Tada programa atrodytu taip:

 

var sk, fakt : String; 

begin 

sk := Edit1.Text;

fakt := "1"; 

while sk <> "0" do begin 

fakt := Dauginti(fakt, sk); 

sk := Atimti(sk, "1"); 

end; 

Memo1.Lines.Clear; 

Memo1.Lines.Add(fakt);

 

Na o tos funkcijos veiksmus atlieka kaip ir sakiau - "stulpeliu". Ta skaiciavima ir reikia suprogramuoti :D

Nuoroda į pranešimą
Dalintis kituose puslapiuose
arba tiesiog integer pakeisk i real tipa :D nemanau kad delphi neturi tokio jei visi kiti turi :D

 

Nelabai suprantu ką gali pakeisti tipo pakeitimas į real nes pvz integer yra visi teigiami ir neigiami sveikieji skaiciai (1; 2; 3) o real tai realieji skaičiai kur gali būti trupmeninė dalis, nu bet vis dėl to pabandžiau ir tarkim 30! real rodo 2,65252859812191E32; su integer rodo 1409286144 su real parašo kitą skaičiaus išraišką, kurią nelabai prisimenu kaip paverst į normalų skaičių, lyg ir mokiaus... :?

 

Na didelių skaičių sudėtis ir daugyba yra kietas olimpiadinis uždavinys, kurį spręsti reikia su string tipo kintamaisiais. Kaip jau kažkas sakė, reikia atlikti veiksmus stulpeliu, tik kaip kompą priversti tai padaryti, tikrai geras klausimas :) Galiu patarti nebent vieną: nueik į mokyklos biblioteką ir paprašyk programavimo olimpijados uždavinių pavyzdžių, ten turėtų būti ir jų sprendimai. Na manau be literatūros nelabai išsiversi, nes ir mokančiam gerai programinti prie tokio uždavinio dar reikia pasėdėti ir pagalvoti.

Nuoroda į pranešimą
Dalintis kituose puslapiuose
arba tiesiog integer pakeisk i real tipa :D nemanau kad delphi neturi tokio jei visi kiti turi :D

 

Na beda viena - reikalingas sveikos israiskos rezultatas. Ir siaip real skaiciu tikslumas yra mazas. Pasakyk kaip gausi 20-a skaitmeni po kablelio? :D

 

Na o del tos funkcijos: tai aprasai mazdaug tokie

 

   function Dauginti(Skaicius1, Skaicius2: String) : String;

  function Sumuoti(Skaicius1, Skaicius2: String) : String;

  function Atimti(Skaicius1, Skaicius2: String) : String;

 

Tada programa atrodytu taip:

 

var sk, fakt : String; 

begin 

sk := Edit1.Text;

fakt := "1"; 

while sk <> "0" do begin 

fakt := Dauginti(fakt, sk); 

sk := Atimti(sk, "1"); 

end; 

Memo1.Lines.Clear; 

Memo1.Lines.Add(fakt);

 

Na o tos funkcijos veiksmus atlieka kaip ir sakiau - "stulpeliu". Ta skaiciavima ir reikia suprogramuoti :D

 

Hmm skaičiavimui stulpeliu reikės vėl skaidyt skaičius į skaitmenis ir tt kaip supratau. Nu bandysiu įveikt, gal pavyks :) su string nedaug dirbau, bet tam yra delphi helpas, koders.com ir knyga :)

Nuoroda į pranešimą
Dalintis kituose puslapiuose
Na cia skaidymas daug paprastesnis - tiesiog eini per kiekviena simboli nuo galo ir viskas.

Jei kils klausimu - klausk. Grizes vakare namo gal pabandysiu pats parasyti sitas funkcijas :D Labai sudetingai neatrodo.

 

Labai ačiū, kad padedi :D

 

Dabar pats bandau parašyti šitą programą

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Siūlau pasidaryti tris integer tipo variablus, tada paleisti ciklą, kuris pereitu per visus skaitmenis. Cikle į vieną iš integer vis įrašai koks tai skaičius, kad sekantį kartą galėtum patikrinti ar prieš tai buvęs skaitmuo buvo mažesnis ar didesnis. Jei buvo mažesnis, pridedi +1 prie variablo, kuris nurodo kiek kartų skaičius mažėjo, jei didesnis - pridedi +1 prie kintamojo, kuris nurodo kiek kartų mažėjo. Po ciklo pažiūri į šiuos kintamuosius ir tada jau aišku ar tik didėjo, ar tik mažėjo, ar ir taip ir taip.

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