moes kaikki! proplems on sellainen että millä tapaa onnistuus saada lisäys aikaseksi, ku antaa lukumäärän esim. 3 niin pitäs saada 1+(1+2)/2+(1+2+3)3=vast. tai jos antaa 5 niin 1+(1+2)/2+(1+2+3)3+(1+2+3+4)/4+(1+2+3+4+5)/5 jne saan kyllä näin: 1+(1+2)/2+(2+3)3+(3+4)/4+(4+5)/5 eli jakajan lisättyä ja suluissa muutettua. mutta sulkujen väliin lisäys..nou tietoa.(edes miten sais laskemaan,kiva jos vielä tulostumaan,tai toisinpäin)
Siis milläs logiikalla nuo lausekkeesi oikein rakentuvat? Miksi 3:lla kerrotaan ja 2:lla, 4:lla ja 5:lla jaetaan? Muutenkin selostuksesi ole hieman epäselvä.
no, annetaan n-määrä, niin sarjan termit lisääntyy. eli jos annan määräks 6 tulostus seuraavaa:
1+(1+2)/2+(1+2+3)/3+(1+2+3+4)/4+(1+2+3+4+5)/5+(1
#include <iostream.h> #include <conio.h> int main(void) { int i=1,n; double summa=0,jakaja=0; do { cout<<"Anna kokonaisluku väliltä 1 - 25 "; cin >> n; if(n<1 || n>25) cout<<"Kielletty arvo\n"; }while(n<1 || n>25); cout << '\n'; while(i<=n) { jakaja=jakaja+i; summa=summa+jakaja/i; i++; } cout <<"Vastaus: "<< summa << "\n\nPaina näppäintä" << endl; getch(); return 0; }
joo, oli tylsää:
1+(1+2) (1+2+3) (1+2+3+4) (1+2+3+4+5) (1+2+3+4+5+6) ------- + ------ + ------- + ---------- + ------------- =13.5 2 3 4 5 6 4 6 10 15 21 ----- + --- + --- + --- + --- =13.5 2 3 4 5 6 10 21 2 + 3 + -- + 3 + --- =13.5 4 6 10 21 5 + -- + 3 + --- =13.5 4 6 10 21 5 + 3 + -- + --- =13.5 4 6 10(2) 21(3) 8 + -- + --- =13.5 (lavennus on suluissa) 4 6 5 7 8 + - + - = 13.5 2 2 12(2) 8 + ---- = 13.5 2 8 + 6 = 13.5 14=13.5 Epätosi!
Ei liity aiheeseen mitenkään mutta oli pakko ratkaista toi.
Tarkoitatko tällaista ohjelmaa?
#include <stdio.h> int main(void) { int kerrat, summa, i, j; float yht; printf("\nKuinka monta kertaa? "); scanf("%i", &kerrat); for (i=1; i<=kerrat; i++) { summa = 0; for (j=1; j<=i; j++) { summa+=j; } yht+=summa / (float)i; } printf("Tulos: %f", yht); }
tuleehan tost sama vastaus kyllä, muttei ei sitä tulostetta (coutilla tai printf:llä ..miten siitä sais ain lisääntymään ...) -no desimaalijutskaa täs (ei se mun aiempi cout::precision(1) jen. näemmä sovikaa borlandin c plusaplusassa)
#include<iostream.h> #include<conio.h> #include <stdio.h> //YHDELLÄ DESIMAALILLA int main(void) { int kerrat, summa, i, j; float yht; printf("\nKuinka monta kertaa? "); scanf("%i", &kerrat); for (i=1; i<=kerrat; i++) { summa = 0; for (j=1; j<=i; j++) { summa+=j; yht=0; } yht+=summa /(float) i; } printf("Tulos: %.1f", yht); return 0; }
en sit viel ole kats mikä toi otto-villen jutska on...onx vaik joku idis siinä. kertokaa äkkii jos ei tarvi katsoo sitä ollenkaa, lähen kats. salattui!
mihinkä tuo juttu otto-ville ois tarkootus laittaa. iiks miulle tulosteeksi. arvelin et jos ohjelma tekis sen mun puolesta,ku alkuun pukkais. iiks.
ideana on et alussa olevaa 1:stä ei lasketa sin viivan yläpuolelle. vaan 1+ 3/2+6/3+10/4+15/5+21/6=13.5
tämmöstä väsänny sinne while-silmuun...iiks
if(i-1==n) cout << '='; else cout <<"("<<i-2<<'+'<<i-1<<")/"<<i-1<<'+';
lainaus:
mihinkä tuo juttu otto-ville ois tarkootus laittaa. iiks miulle tulosteeksi. arvelin et jos ohjelma tekis sen mun puolesta,ku alkuun pukkais. iiks.
ideana on et alussa olevaa 1:stä ei lasketa sin viivan yläpuolelle. vaan 1+ 3/2+6/3+10/4+15/5+21/6=13.5
joo mun moka, olishan mun toi pitäny tajuta kun ykkönen ei ole suluissa. No tässä korjattu versio, ethän sä tällä mitään tee mutta kun mulla on matikan koe ens viikolla niin pitää harjoitella ;)
(1+2) (1+2+3) (1+2+3+4) (1+2+3+4+5) (1+2+3+4+5+6) 1 + ---- + ------ + ------- + ---------- + ----------- =13.5 2 3 4 5 6 3 6 10 15 21 1 + - + - + -- + -- + -- = 13.5 2 3 4 5 6 3 10 21 1 + - + 3 + -- + 3 + --- =13.5 2 4 6 3 10 21 1 + - + 3 + -- + 3 + --- =13.5 2 4 6 3 10 21 1 + 3 + 3 + - + -- + -- = 13.5 2 4 6 3 10(2) 21(3) 7 + - + ---- + ----- = 13.5 (lavennus on suluissa) 2 4 6 3 5 7 7 + - + - + - = 13.5 2 2 2 15 7 + -- = 13.5 2
no heh heh :p yritin muistella mitä tuo lavennus-asia pitää sisällään. ainaki se lavensi tätä asiaa, että kyllä me osataan ainaki laskee yhteen ja jakaa. kyllä tää päivä iha hyvi alkoi!
(...mutta se tulostus while-silmus..tai jossaki, ois kiva ku antaa kertoimen lisäykselle,et se iha ihka tulostus ruudulle kertoimen mukaisesti. oisko se mahdollista?)
otto-ville voisikko sää jotai kommentoida, etten olis aina viimeisin..ja vielä mairittelut: onnea sinne lavennus-kokeisiin :D
Mjooh, kirjoittele ensikerralla kysymyksesi lausekkeet tarkkaan ja oikein niin ei tapahdu turhia sekaannuksia. Nyt olit järjestelmällisesti typottanut ne :-)
Tuo on ihan nakki toteuttaa kun hieman mietit.
Tässä cplusplussaa (paikoittain huonoa sellaista):
// hoonoa koodia paikoittain, kelvannee esimerkiksi #include <iostream> #include <string> using namespace std; int main() { int n; cout << "paljonko sais olla? "; cin >> n; if(n < 1) return 1; // virhe // spesiaalitapaus if(n == 1) { cout << "1" << endl; return 0; } string s = "1+"; // voidaan iskeä ykkönen suoraan stringiin // koska ykköstä pienempää inputtia ei hyväksytä char tmp[16]; for(int a=2; a<=n; ++a) { s += "("; for(int b=1; b<=a; ++b) { itoa(b, tmp, 10); // base-10 s += tmp; if(b != a) s += "+"; } s += ")/"; itoa(a, tmp, 10); // base-10 s += tmp; // pistetään + vain jos ei vedetä viimeistä kerta... if(a != n) s += "+"; } cout << s << endl; return 0; }
paljonko sais olla? kiitti aivan hitsisti mestari-fawkz!hieno homma. ja toimi jees!
tää toimii loistavasti yhteensovitettuna. meikän repiantai oli kyl nyt pelastettu! jees repiantai.
int main(void) { int i=1,n; double summa=0,jakaja=0; do{ cout<<"paljonko sais olla valilta 1 - 25 "; cin >> n; if(n<1 || n>25) return 1; // virhe //cout<<"Kielletty arvo\n"; // spesiaalitapaus if(n == 1) { cout << "1" << endl; return 0; } }while(n<1 || n>25); cout << '\n'; string s = "1+"; // voidaan iskeä ykkönen suoraan stringiin // koska ykköstä pienempää inputtia ei hyväksytä char tmp[16]; for(int a=2; a<=n; ++a) { s += "("; for(int b=1; b<=a; ++b) { itoa(b, tmp, 10); // base-10 s += tmp; if(b != a) s += "+"; } s += ")/"; itoa(a, tmp, 10); // base-10 s += tmp; // pistetään + vain jos ei vedetä viimeistä kerta... if(a != n) s += "+"; if (a==n)s+='='; //=-MERKKI lopuksi } while(i<=n) { jakaja=jakaja+i; summa=summa+jakaja/i; i++; } cout << s ; cout << summa ; cout<<"\n\nPaina näppäintä" << endl; getch(); return 0; }
ikioma moka tos mun virheentarkistukses. voi olla vieläki, sillä mun pahis on et liian hätäinen oon, jää testit tekemättä tai ei osaa testata. iiks. no ny on yö goisittu ja herään ehkä tunnin päästä.
do{ cout<<"paljonko sais olla valilta 2 - 25 "; cin >> n; if(n<2 || n>25) cout<<"\nKielletty arvo\n"; // virhe }while(n<2 || n>25);
fawkz:lle olis kysymyksiä pari kun en mie tajua :
-että miksi taulukossa on juuri 16 riviä?
char tmp[16];
-ja muutetaaks täs kokonaisluvuks sulkuja ym.,vai mitä?
itoa(b, tmp, 10);
NYT TAAS MOKASIN IHA KAIKKIEN NÄHDEN, VOI MUUSUS!
lainaus:
joo, oli tylsää:
10(2) 21(3) 8 + -- + --- =13.5 (lavennus on suluissa) 4 6
Ei mullakaan liity aiheeseeenyhtän, mutta kerronpahan sen, että lavennukset tulee vasemmanlle. Tossa toi olis supistamista, ei laventamista.
oikeesti. en muista pätkääkää miten tollanen piti aatella.siis lavennus yäm.siitä on aikaa vuonna kirves ja miekka. mutta jatketaan astioilla.eli jeesataa.mua on mestari-fawkz jeesanu joten mun oikeus ja velvollisuus on tehdä sama jutska kaikille.jos voin.kaikil on sama.
Taulukossa on 16 solua ihan vaan sen takia että itoa:n merkkijono sinne 100% varmasti sopii. Vähempikin riittäisi tosin.
itoa (int to ascii) konvertoi annetun int-arvon (tässä b) merkkijonoksi (tässä tmp) annetussa kannassa (2-36, tässä 10). Eli tuo funktiokutsu, "itoa(b, tmp, 10);" konvertoi luvun 'b' merkkijonoksi 'tmp':hen, normaalissa base-10 (0-9)-kannassa.
joo kiitostan jälleen. eihä noist kirjoista ja opuksista löydy juur kunnolla mitää ku ettii jotai :x
Aihe on jo aika vanha, joten et voi enää vastata siihen.