Üdv! Magamtól és némi elő tapasztalattal elkezdtem C#-ot tanulgatni. A kérdésem pedig annyi lenne, hogy én írogattam pár nagyon alap progit és hogy a következő programot meg lehet e egyszerűbben is csinálni?
A feladat az volt, hogy tetszőleges 0 és 1 millió közötti számról mondja meg a program hogy hány jegyű. Én ezt így csináltam:
string a;
float a1;
eleje:
Console.Write("\nKérek egy számot 0 és 1 millió között: ");
a=Console.ReadLine();
a1=float.Parse(a);
if (a1<10 && a1>0)
goto egyjegyu;
if (a1>=10 && a1<100)
goto ketjegyu;
if (a1>=100 && a1<1000)
goto haromjegyu;
if(a1>=1000 && a1<10000)
goto negyjegyu;
if (a1>=10000 && a1<100000)
goto otjegyu;
if(a1>=100000 && a1<1000000)
goto hatjegyu;
if (a1<0 || a1>1000000)
Console.WriteLine("\n 0 és 1 millió közötti számot kérek");
goto eleje;
egyjegyu:
Console.WriteLine("\nA szám egy jegyű");
goto vege;
ketjegyu:
Console.WriteLine("\nA szám két jegyű");
goto vege;
haromjegyu:
Console.WriteLine("\nA szám három jegyű");
goto vege;
negyjegyu:
Console.WriteLine("\nA szám négy jegyű");
goto vege;
otjegyu:
Console.WriteLine("\nA szám öt jegyű");
goto vege;
hatjegyu:
Console.WriteLine("\nA szám hat jegyű");
goto vege;
vege:
Console.WriteLine("\n \nNyomj entert a kilépéshez. Bye");
Console.ReadLine();
Működni működik, csak érdekelne egy rövidebb megoldás is. A válaszokat előre is köszönöm.
Én már 6 éve programozok. Kezdtem Basicben, majd két hónap után váltottam pascalra. Abban eltöltöttem 3 évet, és megtanultam szinte mindent leprogramozni benne, azután váltottam Delphire, ott is elvoltam 2 évet, most C#-ot használok és imádom. Tanultam Assemblyt is, középsuliban.
C-t ne használj, mert én mondom neked, úgy fogja végezni nemsoká mint a Fortran és az Algol. Még nem is objektum-orientált, mostanság már gyakorta csak hagyományos oprendszereket fejlesztenek vele.
Tanulj C#-ot nyugodtan. Ha az MS pedig befuccsol vele (kötve hiszem), könnyű Javára átnyergelni, mert irtózatosan hasonlít.
Rövidebben:
uint x = Convert.ToUInt32(Console.ReadLine());
string s = x.ToString();
Console.WriteLine("A szám {0} jegyű.",s.Length);
vagy, logikusan:
int x = Convert.ToInt32(Console.ReadLine());
byte i = 1;
//mindig leosztom tízzel, és összeadom a jegyeket.
//Ha x <= 9, akkor pedig egyjegyű.
while (x > 9)
{
x = Math.Truncate(x / 10);
i++;
}
Console.WriteLine(i);
Előző vagyok.
Persze, ebben nincs semmi feltétel ellenőrzés, azt majd beleírod. Pesrze, lehet még ezen csiszolni:
{
int x = -1;
do
{
Console.WriteLine("Kérek egy segész zámot 0 és 1 millió között:");
}
while (!Int32.TryParse(Console.ReadLine(),out x) || x < 0 || x > 1000000);
Console.WriteLine("A szám {0} jegyű.\nKilépéshez nyomj meg egy gombot...",x.ToString().Length);
Console.ReadKey(true);
}
Amúgy ha tényleg most kezdted pár napja, akkor ez egy jó kezdet. Próbáld meg fejleszteni a logikádat! Ha kell, vigyél a progba egy kis matekot. Igyekezd elkerülni a goto haszálatát! És ne csak könyvből tanulj, használd is a prognyelvet. Időigényes, de bombabiztos módszer.
Tipp: minek az a sok goto, rögtön jöhet a kiíratás a feltétel után?
Amúgy nézz utána a switch-szekezetnek is!
És ismételjük el százszor: struktúrált programozás.
Mondok én valamit. A C#-ot nehéz úgy megtanulni, hogy az ember nem tanul némi nyelvfüggetlen programozás elméletet. A struktúrált programozás csak az egyik, a másik az OOP, a harmadik a keretrendszer működése, a memóriakezelés, a fordítás etc. etc. Ehhez képest megtanulni a nyelvi szintaktikát gyerekjáték.
Én mondjuk személy szerint tizes alapú logaritmusát vettem volna, konvertálom intre, és hozzá adok egyet :)
string a;
float a1;
using System.Math
Console.Write("\nKérek egy számot 0 és 1 millió között: ");
a=Console.ReadLine();
a1=float.Parse(a);
int result = 1+(int)Log10(a1);
Console.WriteLine("\n A szam " + result + " jegyü" ) ;
Console.ReadLine(); //ha már muszáj
Üdv újra! Tetszett nagyon ez a fajta megoldás Thx:)
negatív számra lényegtelen úgyis 0 és 1 millió között kell jelenleg.
Ja és nekem csak így működött:
string a;
float a1;
Console.Write("\nKérek egy számot 0 és 1 millió között: ");
a=Console.ReadLine();
a1=float.Parse(a);
int result = 1+(int)Math.Log10(a1);
Console.WriteLine("\n A szam " + result + " jegyü" ) ;
Console.ReadLine();
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!