Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: Mitä seuraavaksi?

Sivun loppuun

Zetbo [25.12.2003 19:00:37]

#

Terve tässä harjoittelen C++. Sitä ennen vähä koodaillu pascalilla.

Eli tämmöinen on tullu "koodattua".

#include <iostream.h>

int main(int)
{
    int luku1, luku2, summa, erotus, osamaara, tulo;
    char merkki;


    cout << "Tama laskin laskee kahdesta luvusta tulon,                                  osamaaran, summan ja erotuksen!" << endl;
    cout << "Anna ensimmainen luku!" << endl;
    cin >> luku1;
    cout << "Anna toinen luku!" << endl;
    cin >> luku2;

    summa = luku1 + luku2;
    erotus = luku1 - luku2;
    osamaara = luku1 / luku2;
    tulo = luku1 * luku2;

    cout << "Summa on:" << summa << endl;
    cout << "Erotus on:" << erotus << endl;
    cout << "Osamaara on:" << osamaara << endl;
    cout << "Tulo on:" << tulo << endl;

cout << "Paina jotain nappainta lopettaaksesi ohjelman kayton.";
cin >> merkki;

}

Tein samanlaisen ohjelman pascalilla ja päätin tehdä saman C++:lla. En tiedä miten hyvää koodia tuo on, mutta se toimii ainakin Dev-C++:lla.

Mitä virheitä tuossa on ja mitä tuohon kannattaa alkaa vääntämään lisää? Jotain helppoja lisukkeita, koska olen aloittelija. :)

Toshiba [25.12.2003 19:33:31]

#

Jos ohjelmaa haluaa kehittää pidemmälle niin olisi varmasti hyvä käyttää funktioita. Eli näin koodista tulisi helpompi lukuisempi ja toimivampi.
-Mahti-

Zetbo [25.12.2003 20:03:32]

#

http://www.nic.funet.fi/c opas/ tuolta olen noita funktio juttuja katellu, mutta en oikee tajuu noita. :)

Zetbo [25.12.2003 23:46:26]

#

Eipä taida tää koodaus olla mun alaa. En oikee tajuu noista jutuista mitään. Tulipahan kokeiltua.

Antti Laaksonen [26.12.2003 00:11:56]

#

Ei sitä noin helposti pidä masentua. :)

Funktio on ohjelman itsenäinen osa, jota voi kutsua useita kertoja. Etuna on mm. se, että samaa koodia ei tarvitse kirjoittaa moneen kertaan, ja mahdollisen virheen korjaaminen on helppoa. Seuraavassa on funktio NaytaTervehdys, joka tulostaa tekstin "Moikka!"

#include <iostream.h>

void NaytaTervehdys(void);

int main(void) {
    NaytaTervehdys();
    cout << "Terve!" << endl;
    NaytaTervehdys();
}

void NaytaTervehdys(void) {
    cout << "Moikka!" << endl;
}

Funktion alkumääritys on toisella rivillä. Tässä näkyvät funktion palautusarvon tyyppi, funktion nimi ja funktion parametrit. Funktion nimi on nyt NaytaTervehdys - funktio ei palauta mitään ja parametreja ei ole, joten palautusarvon tyypin ja parametrien kohdalla on void eli ei mitään. Viimeisenä koodissa on itse funktio. Se tulostaa ainoastaan tekstin "Moikka!" ja rivinvaihdon. Funktiota kutsutaan kahdesti koodissa - välissä on tavallinen tekstin tulostus - ja lopputulos on seuraava:

Moikka!
Terve!
Moikka!

Funktiolla voi olla parametreja eli muuttujia, jotka sille välitetään. Funktio ei nimittäin pääse käsiksi pääohjelmassa määritettyihin muuttujiin. Seuraavassa on funktio TulostaLuku, jolla on yksi parametri: kokonaislukumuuttuja nimeltä luku. Tämän luvun funktio tulostaa.

#include <iostream.h>

void TulostaLuku(int luku);

int main(void) {
    TulostaLuku(5);
    TulostaLuku(10);
    TulostaLuku(15);
}

void TulostaLuku(int luku) {
    cout << luku << endl;
}

Funktiota kutsutaan pääohjelmassa kolme kertaa eri parametrien kanssa. Joka kerralla funktio tulostaa parametrinaan saaneen kokonaisluvun. Tulos on tässä:

5
10
15

Funktiolla on usein myös palautusarvo. Funktion palauttama arvo ilmestyy siihen koodin kohtaan, jossa funktiota kutsuttiin. Esimerkkifunktio on KertoLasku. Se kertoo parametrinaan saamansa kaksi lukua toisillaan ja palauttaa lukujen tulon. Palautusarvo asetetaan return-lauseella. Kuten esimerkissä näkyy, funktion palauttamaa arvoa voidaan käyttää aivan kuin vaikkapa suoraan koodiin kirjoitettua lukua tai tavallista muuttujaa.

#include <iostream.h>

int KertoLasku(int luku1, int luku2);

int main(void) {
    cout << KertoLasku(3, 3) << endl;
    cout << KertoLasku(5, 5) << endl;
    cout << KertoLasku(7, 7) << endl;
}

int KertoLasku(int luku1, int luku2) {
    return luku1 * luku2;
}

Lopputulos:

9
25
49

Tässäpä tämä. Jos selitin jonkun asian huonosti, niin kysy ihmeessä lisää!

Zetbo [26.12.2003 11:08:39]

#

Antti kiitoksia pienestä selvityksestä. Yritän tajuta tuosta jotain. ;)

Osaisko joku sanoa, että kun pistän Compile & Run niin tämä "MS-Dos"-ikkuna (Se ei ole MS-Dos-kehote, mutta näyttää siltä) pysyy auki n.1 sekunin. Saan sen kyllä pysymään auki, kun lisäilen cin komennon loppuun. Kuten oli tuossa minun ensimmäisessä esimerkissä. Käyttis WinME.

ZcMander [26.12.2003 11:23:17]

#

Eli ihan nomaalia:

Kun kääntäjä kutsuu vastakäännettyä ohjelmaa niin sen jälkeen ku se on suorittanu tarvittavat ohjelma kutsuu FreeCall komentoa ja ikkuna häipyy. Voit joko Lisätä cinin tai system("pause") lkomennon tai ajamalla ohjelman dossissa.

Antti Laaksonen [26.12.2003 11:30:12]

#

Siis ikkunan sulkeutuminen johtuu siitä, että ohjelma päättyy. Itse tapaan Dev-C++:aa käyttäessäni avata uuden komentoikkunan, mennä ohjelman hakemistoon ja ajaa ohjelman komentoriviltä (kääntämisen yhteydessähän syntyy EXE-tiedosto). Nyt ohjelman tulostama teksti jää näkyviin, koska komentoikkuna on itse avattu. Toki muitakin tapoja on, kuten ZaLaMaNDeRin mainitsemat.

Toshiba [27.12.2003 03:08:28]

#

Voi sen tehdä näinkin :P

#include<iostream.h>

int yhteen(int luku1, int luku2)
{
	return luku1+luku2;
}

int kerto(int luku1, int luku2)
{
	return luku1*luku2;
}

int jako(int luku1, int luku2)
{
	return luku1/luku2;
}

int main()
{
	int luku1,luku2,luku = 0;

	cout << "Anna kaksi lukua jotka lasketaan\n";
	cin >> luku1;
	cin >> luku2;
	luku = jako(luku1,luku2);
	cout <<"luku " << luku1 << " / " << luku2 <<" = "<<luku <<endl;
	luku = kerto(luku1,luku2);
	cout <<"luku " << luku1 << " * " << luku2 <<" = "<<luku <<endl;
	luku = yhteen(luku1,luku2);
	cout <<"luku " << luku1 << " / " << luku2 <<" = "<<luku <<endl;
	return 0;
}

Zetbo [27.12.2003 12:37:25]

#

Nyt aloin tajuumaan noista funktioista jotai :)

#include <iostream.h>

int Plus(int luku1, int luku2);
int Miinus(int luku1, int luku2);
int Jako(int luku1, int luku2);
int Kerto(int luku1, int luku2);


int main(int)
{
    int luku1, luku2, summa, erotus, osamaara, tulo;
    char merkki;

        cout << "Anna ensimmainen luku!" << endl;
        cin >> luku1;
        cout << "Anna toinen luku!" << endl;
        cin >> luku2;

        cout << "Summa on:" << Plus(luku1, luku2) << endl;
        cout << "Erotus on:" << Miinus(luku1, luku2) << endl;
        cout << "Osamaara on:" << Jako(luku1, luku2) << endl;
        cout << "Tulo on:" << Kerto(luku1, luku2) << endl;

cout << "Kirjoita jokin merkki ja paina Enter lopettaaksesi ohjelman.";
cin >> merkki;
}
int Plus(int luku1, int luku2)
{
    return luku1 + luku2;
}
int Miinus(int luku1, int luku2)
{
    return luku1 - luku2;
}
int Jako(int luku1, int luku2)
{
    return luku1 / luku2;
}
int Kerto(int luku1, int luku2)
{
    return luku1 * luku2;
}

Tällee tein ton noilla funktioilla.

Toshiba [28.12.2003 03:13:32]

#

voi sen tähhä näinki :?

#include<iostream.h>

int yhteen(int luku1, int luku2)
{
	return luku1+luku2;
}

int kerto(int luku1, int luku2)
{
	return luku1*luku2;
}

int jako(int luku1, int luku2)
{
	return luku1/luku2;
}



void valikko()
{

	cout <<"(1) JakoLasku" << endl;
	cout <<"(2) KertoLasku" << endl;
	cout <<"(3) YhteenLasku" << endl;
}

int main()
{
	int luku1,luku2,luku = 0;
	int valinta;

	cout << "-=Anna kaksi laskettavaa lukua=- " << endl;
	cin >> luku1;
	cin >> luku2;

	valikko();
	cin >> valinta;


	switch(valinta)
		{
		 case 1: luku = jako(luku1,luku2);
					cout <<"luku " << luku1 << " / " << luku2 <<" = "<<luku <<endl;
		 break;

		 case 2: luku = kerto(luku1,luku2);
					cout <<"luku " << luku1 << " * " << luku2 <<" = "<<luku <<endl;
		 break;

		 case 3: luku = yhteen(luku1,luku2);
					cout <<"luku " << luku1 << " + " << luku2 <<" = "<<luku <<endl;
		 break;
		 default: cout << "\n\nVirheellinen valinta";
		 break;
		}


	return 0;
}

Toshiba [28.12.2003 03:16:45]

#

hei! miten mä saan näkyy ton laatikon ton koodin ympäril ja noi sisennykset? eeehhh?

k-mikko [28.12.2003 03:20:11]

#

lainaus:

hei! miten mä saan näkyy ton laatikon ton koodin ympäril ja noi sisennykset? eeehhh?

Lukemalla keskustelun ohjeet :)

https://www.ohjelmointiputka.net/ohje.php?tunnus­=kohjeet

p-p [08.01.2004 18:55:22]

#

lainaus:

http://www.nic.funet.fi/c opas/ tuolta olen noita funktio juttuja katellu, mutta en oikee tajuu noita. :)

Toi linkki ei ainakaa mul toimi...

sooda [08.01.2004 18:57:54]

#

otappa tuo www. osa pois. eli: http://nic.funet.fi/c opas/
muok: kun nyt testasin huvikseen niin kumpikaan ei toimi. taitaapi olla serveri kaatunut, kokeile myöhemmin...

Meitsi [12.01.2004 15:40:17]

#

Miten dos-promptiohjelmassa voidaan käyttää hyväksi sille annettuja parametrejä?
Siis jos avaan promptissa ohjelman "puttepossu", eli näin:
(ensin cd:llä oikeaan kansioon)
PUTTEPOSSU
ja ohjelma tulostaa ikkunaan "on kingi!"
Niin miten saan tehtyä tämmöisen:
PUTTEPOSSU AKUANKKA
Niin se tulostaisikin "on kingi!", tekstin sijaan parametrin mukaan:
[PARAMETRI] "on kingi!"
Eli tulostaisi tässätapauksessa:
"AKUANKKA on kingi!"
Mutta jos parametriä ei ole mukana komennossa niin se tulostaa vain "on kingi!"

sqwiik [12.01.2004 16:36:10]

#

Määrittele main-funktion parametreiksi int ja char **, esim. int main(int argn, char ** argc). argn sisältää argumenttien määrän ja argc on argumenttitaulukko.
argn on aina vähintään 1, ja argc:n ensimmäinen merkkijono on ohjelman hakemistopolku levyllä (esim. "C:\DJGPP\PUTTEPOSSU.EXE"). Testaat siis vain, onko argumentteja enemmän kuin yksi ja tulostat sen mukaan joko toisen argumentin (argc[1]) tai et mitään.


Sivun alkuun

Vastaus

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

Tietoa sivustosta