eMatematikas Prisijunk Forumas Užduotys Testai Pradžia

C uždavinys rasti nelyginių skaičių sandaugą


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 = ......
    }

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;
}

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.

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

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

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.

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.

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

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.

pakeista prieš 11 m

Nori sudalyvauti šioje temoje ir parašyti savo pranešimą? Prisijungti »