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 | 1208 (1145) | Cvenemir |
| » | [C#] Reševanje domačih nalogOddelek: Programiranje | 3561 (3065) | krastača |
| ⊘ | [C#]naloga iz metod!Oddelek: Programiranje | 1935 (1768) | Ziga Dolhar |
| » | [C#] razlagaOddelek: Programiranje | 1732 (1449) | krastača |
| » | Naloga v C#Oddelek: Programiranje | 2724 (2224) | Hardstyle |