Sveiki. Reikia sukurti paprastute programa kuri apskaiciuoja nuo m iki n nelyginiu skaciu sandauga ir lyginiu skaiciu suma. Uzstrigau ties sandaugos radimu ;/ gal galit pagelbet?
int m, n; int sum =0; int sand =0;
cout << "m = "; cin >> m; cout <<"n = "; cin>>n;
for(int i=m; i<=n; i++){ if(i%2==0) sum = sum + i; else sand = ...... }
almostlow (+3116)
int main() { int m,n,sum=0,sand,k=0; cout << "m = "; cin >> m; cout <<"n = "; cin>>n; for(int i=m;i<=n;i++) { if (i%2==0) sum+=i; else { if (k==0){ sand=i; k++; } else { sand=sand*i; }
}
} cout << sum <<"\n"; cout << sand ; return 0; }
RokasQ (+95)
Arba tiesiog sandaugai priskirti 1 iš pat pradžių. Tada sakinį " sand=sand*i;" (trumpiau: sand *= i;) bus galima vykdyti nuo pat pirmos iteracijos ir bus apsieita be kintamojo k.
valdas3 (+1276)
RokasQArba tiesiog sandaugai priskirti 1 iš pat pradžių. Tada sakinį " sand=sand*i;" (trumpiau: sand *= i;) bus galima vykdyti nuo pat pirmos iteracijos ir bus apsieita be kintamojo k.
Neveiks kai m=n (niekur neparašyta kad taip negali būti, o kokioje olimpiadoje tokią situaciją tikrai įdėtų, nes nes jokių apribojimų m ir n nėra). Bet šiuo atveju neveiks ir almostlow programa, nes sand tuo atveju būna neinicializuotas. O ir šiaip, kintamasis k pagal savo panaudojimą turėtų būti boolean, o ne integer, toks programavimo stilius man neatrodo labai geras (na savaime aišku ir beprasmiai kintamųjų vardai nėra gerai :D ).
RokasQ (+95)
Kai m = n, ciklas bus įvykdytas vieną kartą. Jei tas skaičius m = n yra lyginis, suma lygi jam, o sandauga pagal sąlygą neturi prasmės. Jei skaičius m = n yra nelyginis, sandauga lygi jam, o suma neturi prasmės.
Tokius reikalavimus programa tenkina: kai m = n lyginis, išveda jam lygią sumą, o kai nelyginis - išveda jam lygią sandaugą. Antrojo skaičiaus išvedama pradinė vertė (atitinkamai 1 arba 0).
Sakydamas, kad neveiks, turbūt turėjai omeny, kad jei m = n lyginis, turėtų išvesti 2m (2n), o kai nelyginis - m*m (n*n). Tačiau m ir n žymi intervalo galus; kai m = n intervalas susitraukia į tašką, t. y. vieną skaičių. Taigi tuo atveju nėra dviejų skaičių.
pakeista prieš 11 m
valdas3 (+1276)
Norėjau pasakyti, kad sudauginus nulį skaičių logiškiau yra gauti atsakymą 0, o ne 1. Na o ar dauginti/sumuoti nulį skaičių neturi prasmės nėra akivaizdu ir sąlygoje apie tai nėra parašyta.
almostlow (+3116)
Na tada reiktu dar įvesti ifa kuris tikrina ar skaičius m yra mažesnis už n ir atvirkščiai. Šiaip aš galiu įvesti tarkim m - 20 , n - 15 ir man irgi turėtu skaičiuoti viska. Na manau šitos užduoties autoriai ne to norėjo.
RokasQ (+95)
valdas3Norėjau pasakyti, kad sudauginus nulį skaičių logiškiau yra gauti atsakymą 0, o ne 1.
Na čia gana subtilus požiūrio dalykas. Pvz., pagalvok apie faktorialo apibrėžimą:
[tex]0!=1[/tex]
Bet kuriuo atveju manau, kad, kaip rašė almostlow, šį uždavinį išsprendėme tinkamai.
pakeista prieš 11 m
almostlow (+3116)
Tiesiog reiktu ivesti apribojima kad vartotojas negalėtu ivesti tokiu pat skaičiu ir manau būtų viskas tvarkingai. Nes sąlyga "Rasti lyginių skaičių suma nuo 8 iki 8" nemanau kad skamba labai logiškai.