Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: Ohjelma joka tekee sen, mitä haluat

Sivun loppuun

Azure [10.12.2005 23:41:15]

#

Miten tehdä ohjelma joka tekee tiettyt asiat kun sinun haluamasi mukaan esimerkiksi tässä alla yksinkertainen laskimen alku joka miinustaa kaksi lukua toisistaan eli tekee erotuksen::

#include <iostream>
using std::cin;
using std::cout;

int main(void)
{
  cout << "TERVETULOA LASKIMEEN:";

  int luku1, luku2, tulos;
  luku1 = luku2 = tulos = 0;

  cout << "Anna eka luku:";
  cin >> luku1;
  cout << "Anna toinen luku:";
  cin >> luku2;

  tulos = luku1 - luku2;

  cout << "Tulos on " << tulos;
  }

Mutta miten saan sen kysymään, että mitä halaut laskea. Haluatko laskea summan vai erotuksen?

Ja siihen kenttään kirjoitan että summan niin se laskee sitten summaa tai tässäkin minun viritelmässä voisi lisätä sen että se antaisikin heti nämä kaksi vaihtoehtoa ja nuolinäppäimiä painamalla voisin valita haluamani toimen piteen? ESIM:

TERVETULOA LASKIMEEN
Paina enter jatkaaksesi:

( ja sitten se tulostaa tuon "mitä haluat tehdä" kysymyksen näytölle )

Mitä haluat tehdä?

>laske lukujen summa
>laske lukujen erotus

Ja tuota koodia vain pikkusen muuttamallahan voi tehdä tuon summa laskun, kun vaihtaa tuon yhden koodi pätkän täksi:::

tulos = luku1 + luku2;

(Ja kun olet laskenu vaikka tuon erotuksen niin se palaa takaisin tuohon mitä halaut tehdä osioon eikä sammuta ohjelmaa!!!)

Zach [11.12.2005 00:27:27]

#

Ehtolauseet on ohjelmoinnissa yksi tärkeimmistä jutuista. Voit tehdä vaikka "ikuisen while-silmukan, joka jossain vaiheessa katkaistaan. Käyttäjältä saatu toiminto tarkistetaan if:llä.

#include <iostream>
using std::cin;
using std::cout;

int main(void)
{
  cout << "TERVETULOA LASKIMEEN:";

  while (1)									//silmukka, joka toistetaan niin kauan kuin 1 = 1 :)
  {
    int luku1, luku2, tulos;
    char toiminto;
    luku1 = luku2 = tulos = 0;

    cout << "Haluatko vähentää vai lisätä? (+ tai -, q lopettaa)\n";
    cin >> toiminto;
    if (toiminto == 'q') break;				//jos käyttäjä syöttää q:n poistutaan while-silmukasta

    cout << "Anna eka luku:";
    cin >> luku1;
    cout << "Anna toinen luku:";
    cin >> luku2;

    if (toiminto == '+')					//tutkitaan toiminto:a, ja lasketaan tulos sen mukaan
    {
      tulos = luku1 + luku2;
    }else if (toiminto == '-')
    {
      tulos = luku1 - luku2;
    }


  cout << "Tulos on " << tulos << "\n";		// \n on rivinvaihtomerkki
  }
  return 0;
}

Laskutavan kysyminen cin:llä on helppoa, mitä valikon tekeminen ja saaminen nuolinäppäimillä toimivaksi ei välttämättä vielä tuossa vaiheessa ole.

Baglair [11.12.2005 00:34:46]

#

Suosittelen tutustumaan switch case rakenteeseen.

Tässä pieni esimerkki Cllä:

//Tässä ohjelmassa on helppo esimerkki switch case rakenteen käytöstä
#include <stdio.h>

//Nämäkin tietysti olisi voinut kysyä käyttäjältä
#define LUKU1   10
#define LUKU2   5

int laskin(void);

main()
{
	laskin();
	main();
}

int laskin(void)
{
	int valinta, vastaus = 0;

//Tulostaa.
	printf("1. Erotus\n");
	printf("2. Summa\n");

	printf("\nAnna valinta: ");

//Otetaan valinta ylös valinta muuttujaan.
	scanf("%i", &valinta);

//Tässä tulee switch case rakenne:
	switch(valinta)	{
		case 1:
			vastaus = LUKU1 - LUKU2;
			break;
		case 2:
			vastaus = LUKU1 + LUKU2;
			break;
//default pätee aina, jos valinta ei ole väliltä 1 - 2
		default:
			printf("Virhe! Valintasi täytyy olla välitä 1 - 2\n\n");
			return 0;
	}
	printf("\n%d\n\n", vastaus);
}

kooderi [11.12.2005 12:33:25]

#

Näyttöön tärähtää stack overflow kun tuota pätkää ajelee riittävästi. Loputonta rekursiota ei kannata käyttää koskaan ohjelmissa, päättymätön silmukka järkevämpi toteuttaa vaikka while (1) - silmukalla.

Baglair [11.12.2005 13:46:08]

#

kooderi kirjoitti:

Näyttöön tärähtää stack overflow kun tuota pätkää ajelee riittävästi.

Onko tosiaan näin? Jos on niin miksi?

Azure [11.12.2005 14:01:16]

#

Tuo Baglair:in antama neuvo viittaa aika paljon C -kieleen, koska siinä esiintyy nuo printf ja scanf. Itse opiskelen ennemmin tuota C++ -kieltä.

Mutta mikä tämä else if- muuttuja on?

Baglair [11.12.2005 14:11:42]

#

Azure, enkös maininnut että ohessa on esimerrki C-kielellä?

Baglair kirjoitti:

Tässä pieni esimerkki Cllä:

Ajattelin postittaa sen, koska muistaakseni C++ kääntäjällä on mahdollista myös kääntää C kieltä. Sitäpaitsi C ja C++ eroavat hyvin niukasti toisistaan ja tuo switch case rakenteen pitäisi toimia C++:ssakin.

Blaze [11.12.2005 14:42:29]

#

Baglair kirjoitti:

kooderi kirjoitti:

Näyttöön tärähtää stack overflow kun tuota pätkää ajelee riittävästi.

Onko tosiaan näin? Jos on niin miksi?

Jokaisesta funktiokutsusta tulee tietoa pinoon (stackiin), johon sitä mahtuu rajallinen määrä. Tieto kyllä poistuu pinosta kun funktion suoritus loppuu, mutta kun nyt main kutsuu kokoajan itseään uusiksi, se ei lopu koskaan, vaan lisää vain kokoajan uutta tavaraa pinon päälle, jolloin pino jossain vaiheessa tulee täyteen ja ohjelma kaatuu stack overflowiin.

hunajavohveli [11.12.2005 15:14:20]

#

Azure kirjoitti:

Mutta mikä tämä else if- muuttuja on?

https://www.ohjelmointiputka.net/oppaat/opas.php?tunnus=cohj_3


Sivun alkuun

Vastaus

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

Tietoa sivustosta