Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C# for,kahden kokonaislukujen välisten lukujen summa

Zam [30.10.2010 21:35:33]

#

Käyttäjältä pyydetään kaksi kokonaislukua ja ohjelman tulisi
laskea näiden kahden kokonaislukujen välissä olevat luvut yhteen.
Jos käyttäjä esim. syöttää luvut 8 ja 4 niin kuinka saada for-toistorakenteesta
saadut 5,6,7 luvut yhteen ja tulostetua ne summana 18 näytölle(consolille).
Varmasti joudun vielä katsomaan lisäksi tuon vertailun uudestaan, kumpi luvuista on suurempi.
Olisin kiitollinen jos joku voisi tässä auttaa.

Koodi:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace for_silmukatSumma
{
    class Program
    {
        static void Main(string[] args)
        {


            int luku1;
            int luku2;

            int laskuri;


            Console.WriteLine("Anna kokonaisluku: ");
            luku1 = Int32.Parse(Console.ReadLine());

            Console.WriteLine("Anna toinen kokonaisluku: ");
            luku2 = Int32.Parse(Console.ReadLine());

            if (luku1 > luku2)  //onko luku1 suurempi
            {
                int raja = luku1;


                for (int i = luku2+1; i < raja; i++) //5,6,7
                {

                     laskuri = i;

                        Console.WriteLine("Laskurin arvo: " + laskuri);
                        Console.WriteLine(" ");

                }
            }

        }
    }
}

Tulostus:

Anna kokonaisluku:
8
Anna toinen kokonaisluku:
4
Laskurin arvo: 5

Laskurin arvo: 6

Laskurin arvo: 7

Jatka painamalla mitä tahansa näppäintä . . .

Mod. lisäsi kooditagit

eq [30.10.2010 21:47:52]

#

Tämä kuuluisi teknisesti ehkäpä ennemmin Muut kielet -alueelle Javan tavoin.

Tehtävässä ei ilmeisesti pyydetty tulostamaan erikseen lukuarvoja, jotka ovat annetun kahden annetun luvun välissä - vaan ainoastaan näiden lukujen summa. Muutenkin, laskuri-muuttuja ei nykyisessä koodissa täytä oikein mitään virkaa, sillä se saa samat arvot kuin muuttuja i. Ehkäpä sijoittamisen sijasta haluaisit lisätä i:n arvon laskuri:in - jos siis laskuri on ns. summausmuuttuja (muista määritellä alkuarvo!)

Ohjelman rakennetta voisit muuttaa niin, että for-silmukka, jossa summaus tehdään, esiintyisi vain kerran. Tällaiseen rakenteeseen pääsee, kun selvittää ensin, kumpi kahdesta luvusta on alaraja, ja kumpi yläraja, ja vasta sitten summaa luvut ala- ja ylärajan väliltä.

Zam [30.10.2010 21:57:06]

#

Totta laskuri muuttuja on turha, se jäi kun yritin kikkailla noita 8 ja 4:n välissä olevia lukuja.Tuo voi kyllä olla tosi että tarkoituksena on laskea ainoastaan nuo kokonaisluvut yhteen. Olen koodannut vuosi sitten viimeeksi javalla kun olin vielä koulussa, mutta nyt kun koulu on loppu olen ruvennut tekemään Ghodrat Moghadampourin kirjasta tehtäviä C#:lla. Kertaan näin joskus opittuja alkeita termeistä ja koodeista ja lähden sitten kokeilemaan vaikeampia juttuja.
Kyselyni vaikutti aika simppeliltä kun luin jälkeen päin kokeneempien kaverien ongelmia.
Kiitos eq

Grez [30.10.2010 22:20:26]

#

Siis jos haluat saada kahden luvun välisten lukujen summan, niin eikö se olisi järkevämpää tehdä seuraavasti:

static void Main(string[] args)
{
    int luku1;
    int luku2;

    Console.WriteLine("Anna kokonaisluku: ");
    luku1 = Int32.Parse(Console.ReadLine());

     Console.WriteLine("Anna toinen kokonaisluku: ");
     luku2 = Int32.Parse(Console.ReadLine());

     int lukuja = luku2 - luku1 - 1;
     if (lukuja < 0) lukuja = -lukuja;

     int tulos = (luku1+luku2) * lukuja  / 2;

     Console.WriteLine("Lukujen summa: " + tulos);
     Console.WriteLine(" ");
}

Zam [31.10.2010 00:42:12]

#

Kiitos Grez,
Ihan mielenkiintoinen näkökulma tutkia lukuja.
Tuosta vain tulee 30, jos annan luvut 8 ja 4.
Mutta antaessani 4 ja 8 tulee oikein eli 18.
Tästä minun kuitenkin on hyvä jatkaa ja tutkailla koodia.

int luku1;
    int luku2;

    Console.WriteLine("Anna kokonaisluku: "); //annetaan 8, / jos taas 4
    luku1 = Int32.Parse(Console.ReadLine());

     Console.WriteLine("Anna toinen kokonaisluku: "); //annetaan 4, / Jos taas 8
     luku2 = Int32.Parse(Console.ReadLine());

     int lukuja = luku2 - luku1 - 1; // 4 - 8 -1 = -5, / 8-4-1 = 3
     if (lukuja < 0) lukuja = -lukuja; // kahden miinuksen seurauksena tulee 5, / ei tutkita koska suurempi kuin nolla

     int tulos = (luku1 + luku2) * lukuja / 2 ;  // 12 * 5 / 2 = 30, / (8+4)*3/2=18

     Console.WriteLine("Lukujen summa: " + tulos);  //tulostaa 30 luvuilla 8 ja 4, / tulostaa 18 luvuilla 4 ja 8
     Console.WriteLine(" ");

Mod. lisäsi kooditagit

eq [31.10.2010 01:23:54]

#

Ehkäpä hieman liikaa tiivistystä laskuissa?

Kahden eri kokonaisluvun välissä olevien kokonaislukujen määrän saa tosiaan vähentämällä lukujen erotuksen itseisarvosta luvun 1. Itseisarvo pitää kuitenkin siis laskea ennen vähentämistä, ja erikseen pitää käsitellä tapaus kun luvut ovat yhtä suuret (myös tällöin niiden välissä on siis 0 k-lukua).

"Pseudokoodina" esim.:

int lukuja = 0;
if (luku1 > luku2) // |luku1 - luku2| = luku1 - luku2
    lukuja = luku1 - luku2 - 1;
else if (luku1 < luku2)  // |luku1 - luku2| = -(luku1 - luku2)
    lukuja = luku2 - luku1 - 1;

Tämän lukuja-muuttujan kanssa voi sitten käyttää tuota yhteenlaskun summakaavaa.

Zam [31.10.2010 09:43:54]

#

Kiitos eq, hienosti toimii.

Vastaus

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

Tietoa sivustosta