Kezdőoldal » Számítástechnika » Programozás » Határozzuk meg egy [a, b]...

Határozzuk meg egy [a, b] intervallum belsejébe eső négyzetszámokat (írjuk ki a képernyőre), és azok összegét! Az a és b értékét kérjük be billentyűzetről! Hogyan tudnám megoldani ezt a feladatot?

Figyelt kérdés

C# nyelven írom. Eddig idáig jutottam :

int a = Convert.ToInt32(Console.ReadLine());

int b = Convert.ToInt32(Console.ReadLine());

int i;


for (i=a;i<b;i=i+1)


{


Console.WriteLine("{0} négyzetszám = {1} ",i,i*i);


csak ezzel az a baj, hogy a két szám közti összes szám négyzetét írja ki, nem pedig a négyzetszámokat...


2011. máj. 12. 22:28
 1/4 anonim ***** válasza:

Esetleg ez:

int a = Convert.ToInt32(Console.ReadLine());

int b = Convert.ToInt32(Console.ReadLine());

int osszeg = 0;

for (int i = a; i < b; i++)

{

Console.WriteLine(i * i);

osszeg += i * i;

}

Console.WriteLine(osszeg);

Console.ReadKey();

2011. máj. 12. 22:35
Hasznos számodra ez a válasz?
 2/4 A kérdező kommentje:
Az összeg része rendben is van, az nekem sem okozna nagy problémát, csak a te megoldásoddal is az a baj, hogy pl 2-10 az intervallum, akkor ő a 2-10 közti számok négyzetét írja ki. Nekem meg az kéne, hogy 2-10 közti négyzetszám ami csak a 4 és a 9!
2011. máj. 12. 22:39
 3/4 A kérdező kommentje:

na sikerült rájönnöm, ez a helyes megoldás :

int a = Convert.ToInt32(Console.ReadLine());

int b = Convert.ToInt32(Console.ReadLine());

int i;

for (i = a; i < b; i++)

{

int negyzetszam = i * i;

if((negyzetszam>a) && (negyzetszam<b))

Console.WriteLine("{0} és {1} közti négyzetszámok = {2} ",a,b, negyzetszam);

}

Console.ReadKey();


köszönöm fáradtságod, csak még most tanulom a c#-ot...:D

2011. máj. 12. 23:28
 4/4 bongolo válasza:

Még ez sem a helyes megoldás! Próbáld ki más input-tal, és meglátod. pl. 99 és 101-gyel. Ekkor a 100-at kellene kiírnia, de ahhoz i-nek 10-nek kell lennie, és nem lesz az sose.


Valójában négyzetgyök a és négyzetgyök b között kell mennie a ciklusnak!


...

int aa = (int)Math.Ceiling(Math.Sqrt((double)a));

int bb = (int)Math.Floor(Math.Sqrt((double)b));

for (int i=aa; i<=bb; i++)

{

...

}


Amikor a Ceiling meg a Floor ilyen sorrendben van, akkor a ciklus belsejében nem kell vizsgálni, hogy a négyzet a és b közé esik-e. Figyelj arra is, hogy most i<=bb a ciklus feltétele, tehát az egyenlőséget is megengedi!


Viszont amikor lebegőpontos számokkal számol az ember, akkor sosem lehet benne biztos, hogy a kerekítés jól alakul, úgyhogy lehet, hogy jobb fordítva csinálni a Floor meg Ceiling-et, hogy aa és bb nagyobb intervallum legyen, de ekkor már kell a ciklus belsejében a feltétel, amit beleírtál.

2011. máj. 13. 00:48
Hasznos számodra ez a válasz?

Kapcsolódó kérdések:





Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!