Pereiti prie turinio

Reikia truputį pagalbos su Pascal.


Rekomenduojami pranešimai

Sveiki, turiu vieną problemą, su if'u. Iš dalies lyg ir viską gerai atlikau, bet kažkas blogai tikrinant minutes. Rezultate man gaunasi 35min., o jis neturi būti didesnis, nei 30, nes ale neturi būt skaičiai didesni, kitu atveju kodas turės išvesti NE, bet jis realiai turi suspėt iki: 21d ( a ) 10h ( b ) 30min. ( c ) Pagal mano programą jis suspėja (Rezultatas, kada jis atvyksta: 21d ( ds ) 8h ( v ) 35min. ( m )), bet, kadangi 35 minutės yra daugiau, nei 30, tai man spausdina atsakymą: NE vietoj TAIP. Gal kas žinot kaip ištaisyt šią bėdą? Štai mano if'o kodas:

 

    if (a <= ds) AND (b <= v) AND (c <= m)
     then WriteLn('TAIP')
     else WriteLn('NE');

 

Dėkui už atsakymus iš anksto! :)

 

P.S Skliaustuose raidės = kintamieji

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Arba gali daryti vienam if'e kitus... Nes su tuo END VISKAS kas yra skliausteliuose turi turėti teigiamą reikšmę, jei bent viename skliaustelyje bus neigiama (false) reikšmė tuomet visas If'as bus neigimas ir vykdys Else operaciją.. (Jei supranti ką noriu pasakyt :D)

Redagavo wiruzzz
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Arba, kaip Ignaz sake, versk viska i minutes:

total = a*1440 + b*60 + c

ir t.t.

arba, reikia tikrinti kiekviena duomeni atskirai

if(ds<a)
'TAIP'
else if (ds==a)
if (v<b)
	'TAIP'
else if (v ==b)
	if (m <= c)
		'TAIP'
	else
		'NE'
else
	'NE' 
else
'NE'

if ( (ds<a) OR (ds==a AND v<=b) OR (ds==a AND v==b AND m<=c) )
'TAIP'
else
'NE'

Redagavo Imago
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Arba, kaip Ignaz sake, versk viska i minutes:

total = a*1440 + b*60 + c

ir t.t.

arba, reikia tikrinti kiekviena duomeni atskirai

if(ds<a)
'TAIP'
else if (ds==a)
if (v<b)
	'TAIP'
else if (v ==b)
	if (m <= c)
		'TAIP'
	else
		'NE'
else
	'NE' 
else
'NE'

if ( (ds<a) OR (ds==a AND v<=b) OR (ds==a AND v==b AND m<=c) )
'TAIP'
else
'NE'

 

Na žinok kodas su labai daug klaidų, kad net neveikia, net pats nerandu kur jas palikai :S

 

Arba gali daryti vienam if'e kitus... Nes su tuo END VISKAS kas yra skliausteliuose turi turėti teigiamą reikšmę, jei bent viename skliaustelyje bus neigiama (false) reikšmė tuomet visas If'as bus neigimas ir vykdys Else operaciją.. (Jei supranti ką noriu pasakyt :D)

 

Maždaug taip?:

 

if Sąlyga1 then
 if Sąlyga2 then
     PirmasSakinys
     else AntrasSakinys
 else TrečiasSakinys; 

Redagavo Sprunkas
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Turėtų suveikt:

 

If (ds <= a)
   then  If (v < b) or ((v = b) and (m < c))
           then WriteLn('Taip')
           else WriteLn('Ne')
   else WriteLn('Ne');

 

Tik pratestuok su visokiais galimais variantais, gali tekt pataisyt :)

Patikra yra bloga, nes nera tvarkingai kreipiamas demesys i diena:

iki - 21d 10h 30min

bus - 20d 11h 31min

 

tavo kodas, duos 'Ne'

 

 

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Patikra yra bloga, nes nera tvarkingai kreipiamas demesys i diena:

iki - 21d 10h 30min

bus - 20d 11h 31min

 

tavo kodas, duos 'Ne'

 

Daba gal geriau bus :D

 

If (ds < a)
   then  WriteLn('Taip')
   else if (ds = a)
          then If (v < b) or ((v = b) and (m < c))
                 then WriteLn('Taip')
                 else WriteLn('Ne')
           else WriteLn('Ne');

 

Va jei konors neišeina pasikeist:

 

 if (ds<a) OR ((ds=a) AND (v<=b)) OR ((ds=a) AND (v=b) AND (m<=c))
   then  WriteLn('TAIP')
   else  WriteLn('NE');

Redagavo wiruzzz
Nuoroda į pranešimą
Dalintis kituose puslapiuose

if ((ds<a) OR ((ds=a) AND (v<=b)) OR ((ds=a) AND (v=b) AND (m<=c))) then
   writeLn('TAIP')	
else	
   writeLn('NE');

 

Na, bet dabar pvz, jeigu

Atvykimo laikas būna: 30d. 15h 15min.

Susitikimo laikas irgi būna toks pats (30d. 15h 15min.) turėtų atvaizduoti 'TAIP', bet man rašo 'NE'

 

P.S Prie ((ds<a) bandžiau dėt lygybės ženklą

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Na, bet dabar pvz, jeigu

Atvykimo laikas būna: 30d. 15h 15min.

Susitikimo laikas irgi būna toks pats (30d. 15h 15min.) turėtų atvaizduoti 'TAIP', bet man rašo 'NE'

 

P.S Prie ((ds<a) bandžiau dėt lygybės ženklą

Pastebejau, kad turiu klaida antroj patikroj, turetu buti ((ds=a) AND (v<b)), v<=b i v<b. Bet siaip, net ir su mano pirmu variantu, lyg turetu buti gerai. Susirasiu koki online runner ir pameginsiu paziureti

 

Pameginau ir veikia: http://ideone.com/YEV5RM

 

Ir budas, konvertuojant viska i minutes: http://ideone.com/TJnG4S

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Pastebejau, kad turiu klaida antroj patikroj, turetu buti ((ds=a) AND (v<b)), v<=b i v<b. Bet siaip, net ir su mano pirmu variantu, lyg turetu buti gerai. Susirasiu koki online runner ir pameginsiu paziureti

 

Pameginau ir veikia: http://ideone.com/YEV5RM

 

Ir budas, konvertuojant viska i minutes: http://ideone.com/TJnG4S

 

Ne... vistiek tikrinant kitus duomenis tarkim atvaizduoja neteisingai. Žodžiu, kad būtų paprasčiau štai mano visas pilnas kodas:

program Susitikimas;

function skaiciavimas() : integer;
 var ds, v, m, a, b, c, d, e : integer;
                      Fr, Fw : text;
 begin
   Assign(Fr, 'Duomenys.txt');
   Reset(Fr);
   ReadLn(Fr, a, b, c, d, e);
   ReadLn(Fr, ds, v, m);
   Close(Fr);
   b := b + d;
   c := c + e;

   while b >= 24 do
     begin
       b := b - 24;
       a := a + 1;
     end;

   while c >= 60 do
     begin
       c := c - 60;
       b := b + 1;
     end;

   Assign(Fw, 'Rezultatai.txt');
   Rewrite(Fw);
   WriteLn(Fw, a, ' ', b, ' ', c);
   WriteLn(a, 'd ', b, 'h ', c, 'min.');
   Close(Fw);
   if ((ds=a) OR ((ds=a) AND (v<=b)) OR ((ds=a) AND (v=b) AND (m<=c)))
     then WriteLn('Taip')
     else WriteLn('Ne');
 end;

begin
 skaiciavimas();
 Readln;
end.

 

Duomenys.txt:

28 15 00 25 00
29 15 00

 

O uždavinys:

http://gabija.simnet.lt/it/ITegz.pdf (4.2.1. tema 1 užduotis)

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Neperziurejau viso kodo, bet matau, kad dar nepakeitei klaidos kuria paminejau:

if ((ds=a) OR ((ds=a) AND (v<=b)) OR ((ds=a) AND (v=b) AND (m<=c)))

i

if ((ds<a) OR ((ds=a) AND (v<b)) OR ((ds=a) AND (v=b) AND (m<=c)))

Redagavo Imago
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Pilnai netestavau, bet pas tave yra logikoj problemu. Reiktu pirma surasti valandas is minuciu, o tik po to dienas is valandu.

 

Patvarkiau laiko skaiciavima ir panaikinau while: http://ideone.com/7d3Ofc

 

EDIT: tik dabar pasitikrinau su tavo uzduotim. Tu savo problemos aprasyme esi sumaises atvykimo ir susitikimo laikus. Pakitimus padariau ir kodo pavyzdyje. Pameginau su keletu is duotu duomenu - rezultatas buvo teisingas.

Redagavo Imago
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Kad nereiktų tiek if'ų rašyt ir pačiam maišytis kur, kas, kaip, kodėl - paprasčiau būtų buvę viską verstis minutėmis, ir tada paprasčiausiai palyginti.

Vertimas i minutes yra paprastesnis, taciau reiktu suprasti ir if-else logika, nes ne visada be jos issiversi, o siuo atveju, ji ganetinai paprasta. Na, bet del idomumo, pridejau prie galutinio sprendimo varianto ir patikra su vertimu i minutes. Autoriu gales pasirinkti, kas jam labiau patinka.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Vertimas i minutes yra paprastesnis, taciau reiktu suprasti ir if-else logika, nes ne visada be jos issiversi, o siuo atveju, ji ganetinai paprasta. Na, bet del idomumo, pridejau prie galutinio sprendimo varianto ir patikra su vertimu i minutes. Autoriu gales pasirinkti, kas jam labiau patinka.

 

O gal dar žinai, kaip pvz iš vieno failo sudėti visus šituos skaičius?:

5 1 0 7 6 7 6 5 6 7 6

 

Nes bandau per for ciklą, tai man sudeda tik pirmus 2 skaitmenis ir tiek :/

Redagavo Sprunkas
Nuoroda į pranešimą
Dalintis kituose puslapiuose

pasidaryk for ciklą, ir viduje skaityk po skaičių iš failo ir kiekvieną skaičių pridėk prie kokio nors kintamojo, pvz "suma" ar kažkas tokio

 

Na aš irgi taip mąsčiau, bet manau yra daug paprastesnis variantas, nei dar rašytis papildomai kokius 8-9 kintamuosius :?

 

EDIT: Susitvarkiau :)

Redagavo Sprunkas
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Dabar iškilo kita problema. if'as for cikle nesiciklina, o kaip suprantu vykdomas tik vieną kartą. Kodas:

program Planas;

function skaiciuoti() : integer;
 var z, zz, d, dt, dp, i, sk : integer;
                      Fr, Fw : text;
 begin
   Assign(Fr, 'Duomenys.txt');
   Reset(Fr);
   ReadLn(Fr, d, z);
   zz := 0;
   dt := d;
   for i := 1 to d do
     begin
       Read(Fr, sk);
       zz := zz + sk;
       if sk >= z then
         dt := d - 1;
     end;
   z := d * z - zz;
   dp := z div d;
   if z mod d <> 0
     then dp := dp + 1;
   Close(Fr);
   WriteLn(dt);
   WriteLn(z);
   WriteLn(dp);
 end;
begin
 skaiciuoti();
 Readln;
end.

 

Gal kas žino, kaip ištaisyt tai? Dėkui iš anksto! :)

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Dabar iškilo kita problema. if'as for cikle nesiciklina, o kaip suprantu vykdomas tik vieną kartą...

 

Nelabai suprantu problemos, nes if'as ir neturetu ciklintis, jis turetu buti atliekamas viena karta kiekvienoje ciklo operacijoje.

 

Jeigu reikia, kad if'as veiktu kaip ciklas, tada jau teks deti dar viena cikla cikle.

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