Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: lisäystermi

Sivun loppuun

cloudi [25.09.2003 11:01:43]

#

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)

thefox [25.09.2003 11:12:18]

#

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

cloudi [25.09.2003 17:04:44]

#

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+2+3+4+5+6)/6=13.5. en tiiä voiks saada tulostuun. mut tällai se laskee:

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

ottis [25.09.2003 17:25:01]

#

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.

Antti Laaksonen [25.09.2003 17:38:08]

#

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

cloudi [25.09.2003 19:27:09]

#

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

cloudi [25.09.2003 19:29:26]

#

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!

cloudi [25.09.2003 20:12:59]

#

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

cloudi [25.09.2003 21:12:29]

#

tämmöstä väsänny sinne while-silmuun...iiks

				   				if(i-1==n)	cout << '=';
      else cout <<"("<<i-2<<'+'<<i-1<<")/"<<i-1<<'+';

ottis [25.09.2003 23:32:38]

#

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

cloudi [26.09.2003 11:29:52]

#

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

cloudi [26.09.2003 13:28:20]

#

otto-ville voisikko sää jotai kommentoida, etten olis aina viimeisin..ja vielä mairittelut: onnea sinne lavennus-kokeisiin :D

thefox [26.09.2003 18:52:21]

#

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

cloudi [26.09.2003 19:19:48]

#

paljonko sais olla? kiitti aivan hitsisti mestari-fawkz!hieno homma. ja toimi jees!

cloudi [26.09.2003 21:04:21]

#

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

cloudi [27.09.2003 10:43:45]

#

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

cloudi [27.09.2003 13:07:59]

#

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!

Gwaur [27.09.2003 13:28:00]

#

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.

cloudi [27.09.2003 19:07:42]

#

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.

thefox [29.09.2003 14:30:29]

#

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.

cloudi [29.09.2003 17:07:14]

#

joo kiitostan jälleen. eihä noist kirjoista ja opuksista löydy juur kunnolla mitää ku ettii jotai :x


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta