Kezdőoldal » Számítástechnika » Programozás » Üdv! Magamtól és némi elő...

Ü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?

Figyelt kérdés

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.


2010. jún. 18. 17:10
 1/9 A kérdező kommentje:
vagyis inkább úgy mondom rövidebben:)
2010. jún. 18. 17:12
 2/9 anonim ***** válasza:
inkább a sima C-ben tanulj programozni, mert sokkal logikusabb nyelv a kezdetekhez
2010. jún. 18. 17:17
Hasznos számodra ez a válasz?
 3/9 anonim ***** válasza:

É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);

2010. jún. 18. 17:56
Hasznos számodra ez a válasz?
 4/9 anonim ***** válasza:

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!

2010. jún. 18. 18:10
Hasznos számodra ez a válasz?
 5/9 anonim ***** válasza:

É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.

2010. jún. 18. 22:04
Hasznos számodra ez a válasz?
 6/9 A kérdező kommentje:
Köszi a választ és a megoldást! Én is úgy látom érdemes C#-ot tanulni. Anno tanultam pascalt de nem szereztem elég alapos tudást. C#-nak 5 napja kezdtem neki egy talált e-book segítségével, unaloműzés céljából:) aztán kitudja. Ahogy így sikerül megoldani a fejezetek végén lévő feladatokat egyre lelkesebb vagyok. Persze bőven van hová fejlődnöm de pl ennél a feladatnál is először "if else" párossal próbálkoztam és sehogy se akart sikerülni, és így maradt ez a "drasztikus" módszer. Még lehet kérek segítséget egy-egy feladatnál mégis csak jó egy "vérbeli" programozótól látni hogy is festene a dolog:)
2010. jún. 18. 22:14
 7/9 anonim válasza:

É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

2010. jún. 23. 15:52
Hasznos számodra ez a válasz?
 8/9 anonim válasza:
Előző vagyok, A logaritmus belsejéből kihagytam egy Abs() függvényt. Mert így negatív számra hibát ír ki
2010. jún. 23. 15:53
Hasznos számodra ez a válasz?
 9/9 A kérdező kommentje:

Ü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();

2010. jún. 23. 18:57

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!