Forum » Programiranje » [C#] naloga iz metod
[C#] naloga iz metod
krastača ::
sem na nalogi
Napiši program, ki prebere dve celi števili, v metodi Vmes pa izpiše vsa cela števila med njima.
Najprej sem želela nastaviti program v Main metodi da vidim če deluje izid je:
Sedaj sem to želela spraviti v 2 metodi
Pa ne vem v čem je problem! Verjetno je banalen a vendar a kdo vidi napako?
Napiši program, ki prebere dve celi števili, v metodi Vmes pa izpiše vsa cela števila med njima.
Najprej sem želela nastaviti program v Main metodi da vidim če deluje izid je:
int i; Console.Write("Vnesi prvo celo število: "); int st1 = int.Parse(Console.ReadLine()); Console.Write("Vnesi drugo celo število: "); int st2 = int.Parse(Console.ReadLine()); Console.WriteLine(); i = st1 + 1; while (i <= st2) { Console.WriteLine("{0}!", i); i++; } Console.ReadKey(true);
Sedaj sem to želela spraviti v 2 metodi
static void Vmes(int st1, int st2, int i) { i = st1 + 1; while (i <= st2) { Console.WriteLine("{0}!", i); i++; } } static void Main(string[] args) { Console.Write("Vnesi prvo celo število: "); int st1 = int.Parse(Console.ReadLine()); Console.Write("Vnesi drugo celo število: "); int st2 = int.Parse(Console.ReadLine()); Console.WriteLine(); }
Pa ne vem v čem je problem! Verjetno je banalen a vendar a kdo vidi napako?
- zaklenil: Mavrik ()
celebro ::
Nikjer ne kličeš metode "Vmes". Main se vedno kliče pri vstopu v program, ostale moraš klicati sama. Poleg tega, parameter i v metodi Vmes je popolnoma nepotreben, moral bi biti lokalna spremenljivka.
krastača ::
Mislim, da sem jo
A je sledeč nazivu naloge rešitev dobra? In hvala celebro na nasvet in opozorilo sem komaj začela metode - so zoprne!
static void Vmes(int st1, int st2, out int i) { i = st1 + 1; while (i <= st2) { Console.WriteLine("{0}!", i); i++; } } static void Main(string[] args) { int i; Console.Write("Vnesi prvo celo število: "); int st1 = int.Parse(Console.ReadLine()); Console.Write("Vnesi drugo celo število: "); int st2 = int.Parse(Console.ReadLine()); Console.WriteLine(); Vmes(st1, st2, out i); Console.WriteLine(); Console.ReadKey(true); }
A je sledeč nazivu naloge rešitev dobra? In hvala celebro na nasvet in opozorilo sem komaj začela metode - so zoprne!
Zgodovina sprememb…
- spremenilo: krastača ()
roba87 ::
Je dobra ja. Ampak kot že rečeno, spremenljivka i bi lahko bila lokalna v funkciji "Vmes". Probaj še s for zanko.
Zgodovina sprememb…
- spremenil: roba87 ()
Spura ::
Par pomanjkljivosti:
- metoda vmes ne rabi parametra i, ker je ta lahko lokalna spremenljivka, v main metodi je pa nepotrebna spremenljivka
- ne preverjas, katero od vpisanih stevil je vecje, torej ce uporabnik vpise 10 5 ne bo izpisalo nic.
- v metodi vmes bi bila boljsa for zanka
- metoda vmes ne rabi parametra i, ker je ta lahko lokalna spremenljivka, v main metodi je pa nepotrebna spremenljivka
- ne preverjas, katero od vpisanih stevil je vecje, torej ce uporabnik vpise 10 5 ne bo izpisalo nic.
- v metodi vmes bi bila boljsa for zanka
roba87 ::
Aja, seveda. Naloga zahteva, da izpišeš števila med 2 vnešenima. Kar pa še ne pomeni, da mora bit prvo število manjše od drugega.
krastača ::
OMG na to niti pomislila nisem
Lolz Spura komaj sem to verzijo spravila skup
Lolz Spura komaj sem to verzijo spravila skup
Zgodovina sprememb…
- spremenilo: krastača ()
krastača ::
Morda kaj takega
Vendar mi out nagaja
static void Vmes(int st1, int st2, out int st3) { if (st1 > st2) { st3 = st1 + 1; Console.WriteLine("{0}!", st3); st3++; } else if (st2 > st1) { st3 = st2 - 1; Console.WriteLine("{0}!", st3); st3--; } } static void Main(string[] args) { int st3; Console.Write("Vnesi prvo celo število: "); int st1 = int.Parse(Console.ReadLine()); Console.Write("Vnesi drugo celo število: "); int st2 = int.Parse(Console.ReadLine()); Console.WriteLine(); Vmes(st1, st2, out st3); Console.WriteLine(); Console.ReadKey(true); }
Vendar mi out nagaja
Marat ::
samo dva parametra rabiš, st1 in st2. Torej static void Vmes(int st1, int st2)
Zgodovina sprememb…
- spremenil: Marat ()
krastača ::
Kaj takega? vendar še vedno ne deluje
static void Vmes(int st1, int st2) { if (st1 >= st2) { st1++; Console.WriteLine("{0}!", st1); } else if (st1 <= st2) { st2--; Console.WriteLine("{0}!", st2); } } static void Main(string[] args) { Console.Write("Vnesi prvo celo število: "); int st1 = int.Parse(Console.ReadLine()); Console.Write("Vnesi drugo celo število: "); int st2 = int.Parse(Console.ReadLine()); Console.WriteLine(); Vmes(st1, st2); Console.ReadKey(true); }
Marat ::
znotraj metode lahko uporabiš tretjo spremenljivko tipa int (v tvojem primeru st3), samo ne je dajat kot parameter - to pomeni v tiste oklepaje pri imenu metode.
krastača ::
še na ta način sem probala
static void Vmes(int st1, int st2) { if (st1 <= st2) { st1 = st1+1; Console.WriteLine("{0}!", st1); st1++; } else if (st1 >= st2) { st1 = st1 - 1; st1--; Console.WriteLine("{0}!", st1); } } static void Main(string[] args) { Console.Write("Vnesi prvo celo število: "); int st1 = int.Parse(Console.ReadLine()); Console.Write("Vnesi drugo celo število: "); int st2 = int.Parse(Console.ReadLine()); Console.WriteLine(); Vmes(st1,st2); Console.ReadKey(true); }
Marat ::
upam da se zavedaš da spremenljivke ne rabiš imeti kot parametra, zato da jo lahko uporabiš znotraj metode...
izmišljen primer:
izmišljen primer:
public void enaMetoda(int cifra1, int cifra2) { int cifra3; cifra3 = cifra1 + cifra2; Console.WriteLine("resitev: " + cifra3); }
Zgodovina sprememb…
- spremenil: Marat ()
krastača ::
no vem kaj misliš saj ne gre za main metodo in bi bila st3 vidna le v notranji metodi. Sem tudi to varijanto sedaj probala da bi naredi st3 = st1+1 ali st3 = st1-1. Ne razumem pa to da se zadeva ne ponavlja dokler st1 ne pride do st2 v obeh smereh mislim. Smo za eno gor in dol mi gre. a nebi ++ in -- morala ravno to delati?
Zgodovina sprememb…
- spremenilo: krastača ()
krastača ::
dala sem for zanke notri samo - samo neboste verjeli rezulatom - programu je zmeden zgleda
static void Vmes(int st1, int st2) { for (;st1 <= st2; st1++) { st1 = st1+1; Console.WriteLine("{0}!", st1); } for (; st1 >= st2; st1-- ) { st1 = st1 - 1; Console.WriteLine("{0}!", st1); } } static void Main(string[] args) { Console.Write("Vnesi prvo celo število: "); int st1 = int.Parse(Console.ReadLine()); Console.Write("Vnesi drugo celo število: "); int st2 = int.Parse(Console.ReadLine()); Console.WriteLine(); Vmes(st1,st2); Console.ReadKey(true); }
LeQuack ::
Z uporabo while zanke se mi zdi še najlažje:
static void Vmes(int st1, int st2) { // Spodnja in zgornja meja intervala int SpodnjaMeja = Math.Min(st1, st2); int ZgornjaMeja = Math.Max(st1, st2); // Izpis celih stevil v intervalu od (SpodnjaMeja + 1) do (ZgornjaMeja - 1) while (SpodnjaMeja < ZgornjaMeja - 1) Console.WriteLine("{0}!", ++SpodnjaMeja); } static void Main(string[] args) { // Preberi prvo stevilo Console.Write("Vnesi prvo celo število: "); int st1 = int.Parse(Console.ReadLine()); // Preberi drugo stevilo Console.Write("Vnesi drugo celo število: "); int st2 = int.Parse(Console.ReadLine()); // Klic metode za izpis stevil Vmes(st1, st2); // Press any key to exit Console.ReadKey(true); }
Quack !
krastača ::
Lequack - tvoja verzija je zelo dobra vendar jo sama nebi znala spraviti skupaj ker premalo poznam programiranje - bom pa si izpisala tvojo verzijo tudi
a bi mo povedal kaj bi mogla storiti pri meni da bi delovalo do sedaj imam
a bi mo povedal kaj bi mogla storiti pri meni da bi delovalo do sedaj imam
static void Vmes(int st1, int st2) { for (; st1 <= st2; ) { st1 = st1 + 1; Console.WriteLine("{0}!", st1); } for (; st1 >= st2; ) { st1 = st1 - 1; Console.WriteLine("{0}!", st1); } }
LeQuack ::
Nekako tako, kot je bilo prej (z if pogoji):
// Ce je st1 spodnja meja if(st1 < st2) // Interval od (st1 +1) do (st2 - 1) for (int i = st1 + 1; i < st2; ++i) Console.WriteLine("{0}!", i); // Ce je st2 spodnja meja else // Interval od (st2 +1) do (st1 - 1) for (int i = st2 + 1; i < st1; ++i) Console.WriteLine("{0}!", i);
Quack !
krastača ::
Vsem skupaj hvala za pomoč pri nalogi. Bom uporabila LeQuack verzijo ker je res najbolj enostavna.
mchaber ::
int max = st1; int min = st2; if(st1 < st2) max = st2; min = st1; // Interval od (min +1) do (max - 1) for (int i = min + 1; i < max; ++i) Console.WriteLine("{0}!", i);
.
Spura ::
int max = st1;
int min = st2;
if(st1 < st2)
max = st2;
min = st1;
// Interval od (min +1) do (max - 1)
for (int i = min + 1; i < max; ++i)
Console.WriteLine("{0}!", i);
Odlicen primer zakaj jst vedno delam zavite oklepaje tudi kadar mi jih ni treba in zakaj tezim sodelavcem, ki jih ne.
Zgodovina sprememb…
- spremenil: Spura ()
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | [C#] Input string was not in a correct format.Oddelek: Programiranje | 1083 (1020) | Cvenemir |
» | [C#] Reševanje domačih nalogOddelek: Programiranje | 3269 (2773) | krastača |
⊘ | [C#]naloga iz metod!Oddelek: Programiranje | 1655 (1488) | Ziga Dolhar |
» | [C#] razlagaOddelek: Programiranje | 1595 (1312) | krastača |
» | Naloga v C#Oddelek: Programiranje | 2609 (2109) | Hardstyle |