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?
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...
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();
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
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.
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
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!