[ jelka993 @ 21.01.2013. 13:08 ] @
Nova sam sto se tice ovoga pa ako bi neko bio ljubazan da mi uradi jedan zadatak u vezi while nizova?
[ ravni @ 21.01.2013. 14:28 ] @
Jel moze ovaj?

Code:
int[] brojevi = new int[] {0, 1, 2, 3};
int suma = 0;
int i = 0;
while(i < brojevi.Length)
{
  i++;
  suma += brojevi[i];
}

Console.Writeline("Suma brojeva iz niza je {0}.", suma);
[ jelka993 @ 21.01.2013. 15:47 ] @
Malo je duzi zadatak, radi se o sledecem:

Treba da postavim pitanje DA LI ZELITE DA RADITE TEST? Ako zeli onda da ukuca DA, ako ne zeli da ukuca NE; ako ukuca nesto drugo da ga opet vrati na pitanje.
Ako je odgovori sa NE samo treba da ispisem DOVIDJENJA ili KRAJ ili bilo sta na tu foru.
E sad, ako je odgovorio sa DA, pitam ga da li zeli da radi test 1 ili test 2. Ako hoce test 1 da ukuca A, ako ce test 2 da ukuca B; a ako je ukucao nesto drugo da ispisem da je pogresan unos i da ga vratim opet na pitanje koji test hoce.
Ako je izabrao A, tu sad ide neko racunanje ali to znam sama i treba da ispisem REZULTAT JE:... i to je kraj.
Ako je izabao B, isto ima neko racunanje i REZULTAT JE...

Uglavnom, ne znam kako da te petlje uradim, to mi deluje kao da je jedna petlja unutar druge ali ne znam kako da to uradim. :(

[ Boyka @ 23.01.2013. 14:35 ] @
Citat:
jelka993: Malo je duzi zadatak, radi se o sledecem:

Treba da postavim pitanje DA LI ZELITE DA RADITE TEST? Ako zeli onda da ukuca DA, ako ne zeli da ukuca NE; ako ukuca nesto drugo da ga opet vrati na pitanje.
Ako je odgovori sa NE samo treba da ispisem DOVIDJENJA ili KRAJ ili bilo sta na tu foru.
E sad, ako je odgovorio sa DA, pitam ga da li zeli da radi test 1 ili test 2. Ako hoce test 1 da ukuca A, ako ce test 2 da ukuca B; a ako je ukucao nesto drugo da ispisem da je pogresan unos i da ga vratim opet na pitanje koji test hoce.
Ako je izabrao A, tu sad ide neko racunanje ali to znam sama i treba da ispisem REZULTAT JE:... i to je kraj.
Ako je izabao B, isto ima neko racunanje i REZULTAT JE...

Uglavnom, ne znam kako da te petlje uradim, to mi deluje kao da je jedna petlja unutar druge ali ne znam kako da to uradim. :(


nadam se da na ovo mislis

Code (csharp):

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            /*
             Treba da postavim pitanje DA LI ZELITE DA RADITE TEST?
             * Ako zeli onda da ukuca DA,
             * ako ne zeli da ukuca NE;
             * ako ukuca nesto drugo da ga opet vrati na pitanje.
             * Ako je odgovori sa NE samo treba da ispisem DOVIDJENJA ili KRAJ.
             * ako je odgovorio sa DA, pitam ga da li zeli da radi test 1 ili test 2.
             * Ako hoce test 1 da ukuca A,
             * ako ce test 2 da ukuca B;
             * a ako je ukucao nesto drugo da ispisem da je pogresan unos
             * i da ga vratim opet na pitanje koji test hoce.
             * Ako je izabrao A, tu sad ide neko racunanje i treba da ispisem REZULTAT
             * Ako je izabao B, isto ima neko racunanje i REZULTAT JE...*/


            string test, rez;
            int mat_rez;
        vrati:
            Console.Write("DA LI ZELITE DA RADITE TEST? (DA/NE) ");
            test = Console.ReadLine();
            switch (test.ToUpper())
            {
                case "DA":
                ponovo:
                    Console.Write("Koji test zelite da radite, test1 ili test2? (A/B)");
                    rez = Console.ReadLine();
                    switch (rez.ToUpper())
                    {
                        case "A":
                            //neko racunanje, to sama definisi sta ces da racunas
                            Console.WriteLine("Koliko je 2+2 ? ");
                            int.TryParse(Console.ReadLine(),out mat_rez);
                            if (mat_rez == 4 || mat_rez.ToString() == "cetri") Console.Write("Tacno 4.");
                            else { Console.WriteLine("Netacno, Rezultat je 4."); goto ponovo; };
                            break;
                        case "B":
                            //neko racunanje, to sama definisi sta ces da racunas
                            Console.WriteLine("Koliko je 3*2 ? ");
                            int.TryParse(Console.ReadLine(),out mat_rez);
                            if (mat_rez == 6 || mat_rez.ToString().ToLower() == "sest") Console.WriteLine("Tacno 6.");
                            else { Console.WriteLine("Netacno, Rezultat je 6."); goto ponovo; };
                            break;
                        default:
                            Console.Write("Pogresan unos!");
                            goto ponovo;
                    }
                    break;
                case "NE":
                    Console.Write("DOVIDJENJA!");
                    break;
                default:
                    goto vrati;
            }
            Console.ReadKey();
        }
    }
}
 


[Ovu poruku je menjao Boyka dana 23.01.2013. u 16:28 GMT+1]

[Ovu poruku je menjao Boyka dana 23.01.2013. u 17:35 GMT+1]
[ ravni @ 23.01.2013. 14:56 ] @
Stari dobri goto
[ sallle @ 23.01.2013. 15:00 ] @
@boyka

Sta se desava ako slovima odgovori : "cetri"?
[ Boyka @ 23.01.2013. 15:27 ] @
Citat:
sallle: @boyka

Sta se desava ako slovima odgovori : "cetri"?


E dobro si me podsetio, na brzinu sam ovo uradio,

uglavnom, postoje dva resenja:

prvo je da samo kaze if(mat_rez.ToString().ToLower() == "cetri") {//radi}

drugo je da ogranicimo da je samo moguce uneti broj,
int rezultat;
bool mat_rez = int.TryParse(Console.ReadLine(), out rezultat);


Ispravio sam sa prvim resenjem...
[ lonelyrider_44 @ 23.01.2013. 15:35 ] @
@jelka993, da li vam je dozvoljeno da koristite skokove (goto) ?
[ sallle @ 23.01.2013. 16:04 ] @
@boyka

Code:

int mat_rez = int.Parse(Console.ReadLine());
if (mat_rez == 4 || mat_rez.ToString().ToLower() == "cetri") Console.Write("Tacno 4.");


1. red ce da baci invalid cast exception, za uneto "cetri"
[ jelka993 @ 23.01.2013. 16:23 ] @
Mozemo da koristimo sta hocemo, jer sami kuci sastavljamo zadatak i donesemo na ispit, ali ja taj zadatak moram da objasnim profesoru da vidi da razumem to sto sam uradila. Hvala na pomoci, mada ne smem da upotrebim taj zadatak jer ima dosta stvari koje nismo radili na vezbama pa necu znati da objasnim. Ali sacuvacu ga, kontam da ce mi pomoci kasnije. :)

Sad imam krace pitanje, sta je STATIC VOID MAIN. PRIVATE STATIC VOID I PUBLIC STATIC VOID? Ta tri treba da objasnim na ispitu, pa ako moze neko da mi objasni ali nekim jednostavnijim recenicama jer sam jos pocetnik.

[ Boyka @ 23.01.2013. 16:54 ] @
Citat:
jelka993: Mozemo da koristimo sta hocemo, jer sami kuci sastavljamo zadatak i donesemo na ispit, ali ja taj zadatak moram da objasnim profesoru da vidi da razumem to sto sam uradila. Hvala na pomoci, mada ne smem da upotrebim taj zadatak jer ima dosta stvari koje nismo radili na vezbama pa necu znati da objasnim. Ali sacuvacu ga, kontam da ce mi pomoci kasnije. :)

Sad imam krace pitanje, sta je STATIC VOID MAIN. PRIVATE STATIC VOID I PUBLIC STATIC VOID? Ta tri treba da objasnim na ispitu, pa ako moze neko da mi objasni ali nekim jednostavnijim recenicama jer sam jos pocetnik.


probaj ovo:

Code (csharp):

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            /*
             Treba da postavim pitanje DA LI ZELITE DA RADITE TEST?
             * Ako zeli onda da ukuca DA,
             * ako ne zeli da ukuca NE;
             * ako ukuca nesto drugo da ga opet vrati na pitanje.
             * Ako je odgovori sa NE samo treba da ispisem DOVIDJENJA ili KRAJ.
             * ako je odgovorio sa DA, pitam ga da li zeli da radi test 1 ili test 2.
             * Ako hoce test 1 da ukuca A,
             * ako ce test 2 da ukuca B;
             * a ako je ukucao nesto drugo da ispisem da je pogresan unos
             * i da ga vratim opet na pitanje koji test hoce.
             * Ako je izabrao A, tu sad ide neko racunanje i treba da ispisem REZULTAT
             * Ako je izabao B, isto ima neko racunanje i REZULTAT JE...*/


            string test, rez;
            int mat_rez;
        vrati:
            Console.Write("DA LI ZELITE DA RADITE TEST? (DA/NE) ");
            test = Console.ReadLine();
            if(test.ToUpper() == "DA")
            {
                ponovo:
                    Console.Write("Koji test zelite da radite, test1 ili test2? (A/B)");
                    rez = Console.ReadLine();
                    if(rez.ToUpper() == "A")
                    {
                            //neko racunanje, to sama definisi sta ces da racunas
                            Console.WriteLine("Koliko je 2+2 ? ");
                            int.TryParse(Console.ReadLine(),out mat_rez);
                            if (mat_rez == 4) Console.Write("Tacno 4.");
                            else { Console.WriteLine("Netacno, Rezultat je 4."); goto ponovo; };
                    }
                    else if(rez.ToUpper() == "B")
                    {
                            //neko racunanje, to sama definisi sta ces da racunas
                            Console.WriteLine("Koliko je 3*2 ? ");
                            int.TryParse(Console.ReadLine(),out mat_rez);
                            if (mat_rez == 6) Console.WriteLine("Tacno 6.");
                            else { Console.WriteLine("Netacno, Rezultat je 6."); goto ponovo; };
                    }
                    else
                    {
                            Console.Write("Pogresan unos!");
                            goto ponovo;
                    }
            }
            else if(test.ToUpper() == "NE")
            {
               Console.Write("DOVIDJENJA!");
            }
            else
            {
               goto vrati;
            }
            Console.ReadKey();
        }
        }
    }
 


goto - sluzi da bi preskocila neki deo koda, sama mu rec kaze, to je najlaksi nacin skoka,
[ vujkev @ 23.01.2013. 17:47 ] @
Citat:
goto - sluzi da bi preskocila neki deo koda, sama mu rec kaze, to je najlaksi nacin skoka,

i generalno ne bi trebalo da je koristiš :)

Koristi while petlje
[ Boyka @ 23.01.2013. 21:38 ] @
@vujkev znam da ne treba forsirati taj goto, ali mi nikad nije bilo jasno zasto, guglao sam sad ima stackoverflow-u bas rasprava....

evo bez goto

Code (csharp):

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            /*
             Treba da postavim pitanje DA LI ZELITE DA RADITE TEST?
             * Ako zeli onda da ukuca DA,
             * ako ne zeli da ukuca NE;
             * ako ukuca nesto drugo da ga opet vrati na pitanje.
             * Ako je odgovori sa NE samo treba da ispisem DOVIDJENJA ili KRAJ.
             * ako je odgovorio sa DA, pitam ga da li zeli da radi test 1 ili test 2.
             * Ako hoce test 1 da ukuca A,
             * ako ce test 2 da ukuca B;
             * a ako je ukucao nesto drugo da ispisem da je pogresan unos
             * i da ga vratim opet na pitanje koji test hoce.
             * Ako je izabrao A, tu sad ide neko racunanje i treba da ispisem REZULTAT
             * Ako je izabao B, isto ima neko racunanje i REZULTAT JE...*/

            do
            {
                string test, rez;
                int mat_rez;
                Console.Write("DA LI ZELITE DA RADITE TEST? (DA/NE) ");
                test = Console.ReadLine();
                if (test.ToUpper() == "DA")
                {
                    Console.Write("Koji test zelite da radite, test1 ili test2? (A/B)");
                    rez = Console.ReadLine();
                    if (rez.ToUpper() == "A")
                    {
                        //neko racunanje, to sama definisi sta ces da racunas
                        Console.WriteLine("Koliko je 2+2 ? ");
                        int.TryParse(Console.ReadLine(), out mat_rez);
                        if (mat_rez == 4) { Console.Write("Tacno 4."); break; }
                        else { Console.WriteLine("Netacno, Rezultat je 4."); break; }
                    }
                    else if (rez.ToUpper() == "B")
                    {
                        //neko racunanje, to sama definisi sta ces da racunas
                        Console.WriteLine("Koliko je 3*2 ? ");
                        int.TryParse(Console.ReadLine(), out mat_rez);
                        if (mat_rez == 6) { Console.WriteLine("Tacno 6."); break; }
                        else { Console.WriteLine("Netacno, Rezultat je 6."); break; };
                    }
                    else
                    {
                        Console.Write("Pogresan unos!");
                        break;
                    }
                }
                else if (test.ToUpper() == "NE")
                {
                    Console.Write("DOVIDJENJA!");
                    break;
                }
            } while (true);
        }
    }
}
                 
 


[Ovu poruku je menjao Boyka dana 23.01.2013. u 22:56 GMT+1]

[Ovu poruku je menjao Boyka dana 23.01.2013. u 22:57 GMT+1]

[Ovu poruku je menjao Boyka dana 23.01.2013. u 23:02 GMT+1]
[ lonelyrider_44 @ 23.01.2013. 21:44 ] @
Strukturirano programiranje
[ Boyka @ 23.01.2013. 22:05 ] @
Citat:
vujkev:
Citat:
goto - sluzi da bi preskocila neki deo koda, sama mu rec kaze, to je najlaksi nacin skoka,

i generalno ne bi trebalo da je koristiš :)

Koristi while petlje


bolje do-while
[ Shadowed @ 24.01.2013. 10:30 ] @
Zasto?
[ ravni @ 24.01.2013. 12:55 ] @
I mene zanima
[ Dejan Carić @ 24.01.2013. 14:40 ] @
GOTO naredba se u C# (ne znam kako je u ostalim prog. jezicima) smatra lošom praksom jer dovodi do pisanja špageti koda.

Primer sa MSDN-a:
Code:

public class GotoTest1 
{
   public static void Main() 
   {
      int x = 200, y = 4;
      int count = 0;
      string[,] myArray = new string[x,y];

      // Initialize the array:
      for (int i = 0; i < x; i++) 
         for (int j = 0; j < y; j++)
            myArray[i,j] = (++count).ToString();      
   
      // Read input:
      Console.Write("Enter the number to search for: ");

      // Input a string:
      string myNumber = Console.ReadLine();

      // Search:
      for (int i = 0; i < x; i++)
         for (int j = 0; j < y; j++)
            if (myArray[i,j].Equals(myNumber))
               goto Found;

      Console.WriteLine("The number {0} was not found.", myNumber);
      goto Finish;

   Found:
      Console.WriteLine("The number {0} is found.", myNumber);

   Finish: 
      Console.WriteLine("End of search.");
   }
}


1. Prvo smo inicijalizovali promenljive x i y i kreirali niz. OK
2. Inicijalizovali smo niz. OK
3. Od korisnika tražimo da unese broj. OK
4. Vršimo pretragu niza i ako uspemo da pronađemo broj skačemo na liniju Found. Nije OK, jer umesto da nastavimo sa čitanjem koda, skrolujemo do linije Found da vidimo šta se tamo dešava, pa onda pokušavamo da se vratimo tamo gde smo stali. Pri tom moramo da skočimo na vrh koda da vidimo vrednosti za x i y i proverimo da li su te vrednosti u međuvremenu promenjene (pošto nisu const / readonly).
5. Ispisujemo da nismo pronašli broj i skačemo na liniju Finish. Nije OK jer ponovo jurimo po kodu i pokušavamo da shvatimo šta se dešava.

Ovaj primer je jednostavan jer sadrži samo 2 goto naredbe, ali kada debagujemo aplikaciju sa više goto naredbi onda je jako teško shvatiti šta je pisac želeo da kaže.

Prethodni primer bih refaktorisao na sledeći način:
Code:

internal class Program
{
    private static void Main(string[] args)
    {
        var myArray = CreateArray(200, 4);

        Console.Write("Enter the number to search for: ");

        string myNumber = Console.ReadLine();

        if (myArray.Contains(myNumber))
        {
            Console.WriteLine("The number {0} is found.", myNumber);
        }
        else
        {
            Console.WriteLine("The number {0} was not found.", myNumber);
        }

        Console.WriteLine("End of search.");
    }

    private static string[,] CreateArray(int x, int y)
    {
        var myArray = new string[x, y];

        int count = 0;
        for (int i = 0; i < x; i++)
        {
            for (int j = 0; j < y; j++)
            {
                myArray[i, j] = (++count).ToString(CultureInfo.InvariantCulture);
            }
        }

        return myArray;
    }
}

public static class ArrayHelpers
{
    public static bool Contains(this string[,] myArray, string number)
    {
        if (myArray == null)
        {
            return false;
        }

        foreach (var item in myArray)
        {
            if (item == number)
            {
                return true;
            }
        }

        return false;
    }
}


1. Kreiram matricu 200x4. Ne zanimaju me detalji.
2. Od korisnika tražim da unese broj.
3. Gledam da li postoji broj. Opet me ne zanima po kom algoritmu. Ako broj postoji ispisujem jednu poruku, ako ne postoji, ispisujem drugu poruku.

Ovaj primer ima više linija koda, ali je dosta fleksibilniji od prvog.

1. CreateArray metodu mogu da iskoristim na više mesta umesto da radim C/P.
2. Contains metoda radi sa bilo kojim dvodimenzionalnim nizom, a iz naziva se već vidi šta radi. Nije potrebno komentarisati / tumačiti parče koda gde se ova metoda poziva :)
[ Boyka @ 24.01.2013. 20:14 ] @
Citat:
Shadowed:
Zasto?


Zbog preglednosti, nista vise.
[ Shadowed @ 24.01.2013. 22:25 ] @
Cek, kako je do-while preglednije od while? Nikad cuo..
[ ravni @ 25.01.2013. 08:34 ] @
do{...}while ima drugacije znacenje od while{...}

Prva petlja ce se izvrsiti barem jednom, a druga mozda nece ni jednom, tako da od toga zavisi i kada ce se koja primeniti.
[ Boyka @ 25.01.2013. 09:12 ] @
Citat:
Shadowed: Cek, kako je do-while preglednije od while? Nikad cuo..


pa meni jeste, logicnija mi je.
[ Shadowed @ 25.01.2013. 10:51 ] @
Cek sad, logicnija ili preglednija?

Na stranu to sto uopste nije ista stvar, kao sto rece ravni.
[ Boyka @ 25.01.2013. 12:21 ] @
Citat:
Shadowed: Cek sad, logicnija ili preglednija?

Na stranu to sto uopste nije ista stvar, kao sto rece ravni.


i jedno, i drugo :)

znam da nije, radi dok je uslov ispunjen(do-while) ili dok je uslov ispunjen radi(while-do -> while)