» »

[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:

            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

        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…

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

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 :8)

Lolz Spura komaj sem to verzijo spravila skup :'(

Zgodovina sprememb…

krastača ::

Morda kaj takega

        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:
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…

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

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 !

Spura ::

Ja tko kot je ta verzija sm mislu.

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 ::

mchaber je izjavil:



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

Mavrik ::

Podvojeno ime teme.
The truth is rarely pure and never simple.


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

[C#] Input string was not in a correct format.

Oddelek: Programiranje
61092 (1029) Cvenemir
»

[C#] Reševanje domačih nalog

Oddelek: Programiranje
173288 (2792) krastača

[C#]naloga iz metod!

Oddelek: Programiranje
81674 (1507) Ziga Dolhar
»

[C#] razlaga

Oddelek: Programiranje
161605 (1322) krastača
»

Naloga v C#

Oddelek: Programiranje
72620 (2120) Hardstyle

Več podobnih tem