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
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ä.
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
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(" "); }
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
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.
Kiitos eq, hienosti toimii.
Aihe on jo aika vanha, joten et voi enää vastata siihen.