Stránka 1 z 1

Program v C#

Napsal: 10 led 2013 10:54
od Firen
Zdravím,
potřeboval bych poradit ohledně programu, který jsem dostal za úkol vytvořit. Bohužel jsem začátečník a na škole nás to nedokáží naučit :huh: .

Zadání programu zní následovně:
Vytvořte program Sazky do kterého bude možné napsat 6 čísel, poté program vylosuje 6 náhodných čísel, porovná je mezi sebou a vypíše počet shodných čísel a případnou výhru.

Byl by prosím někdo tak hodný a poradil mi? :oops: Na vzhledu nezáleží, stačí aby fungoval v příkazáku.

Re: Porgram v C#

Napsal: 10 led 2013 11:11
od Wradi
[url]Vítej na Pc-Help.cz :D[/url]

Re: Porgram v C#

Napsal: 10 led 2013 11:15
od cosmosD
Na implementaci musis prijit sam, jen ti zkusim poradit algoritmus.

Vytvor vstup do ktereho zadas bud vsech 6 cisel naraz, nebo 6 cisel po jednom. Tenhle vstup uloz do pole.

V C# predpokladam existuje funkce pro generovani nahodnou cisel. Takze si vytvor dalsi pole, do ktereho v cyklu dej 6 nahodnych cisel (na nejakem intervalu).

Pro porovnani tvych cisel a cisel pocitace pouzij dva cykly for v sobe. Prvni vezme prvni cislo v poli generovane pocitacem a provede pro nej porovnani se vsemi hodnotami v poli tvych cisel. Jestlize najde shodu zvys nejake pocitadlo, ktere bylo inicializovano na hodnotu 0. No a takle porad do konce cyklu.

Jako vysledek bude hodnota pocitadla - pocet shodnych cisel.
Vyhru pak res podle toho kolik je hodnota pocitadla. Resil bych to ifama, tady muzes mit max. 6 shod, tak to se da napsat ifama ;)

Btw: v C# jsem nedelal, nevim jestli je tam tento algoritmus mozny, ale nevidim duvod proc by nebyl.

Re: Porgram v C#

Napsal: 10 led 2013 11:34
od domitea
Doplním: Na náhodná čísla je třída Random. A stačil by na to jeden for :wink:

Re: Porgram v C#

Napsal: 10 led 2013 11:42
od Firen
Díky moc, ale jak jsem psal- jsem začátečník :lol: . Teď to tu zkoušim kutit a zatím mi jde jen vypsat těch 10 svých čísel a deset náhodných. Snad jsou v poli, ikdyž stejně to mam určitě špatně že? :D

Kód: Vybrat vše

 static void Main(string[] args)
        {
            {
                Console.WriteLine("Zadejte svych stastnych 10: ");
                Console.ReadLine();


                int a = int.Parse(Console.ReadLine());
                int b = int.Parse(Console.ReadLine());
                int c = int.Parse(Console.ReadLine());
                int d = int.Parse(Console.ReadLine());
                int e = int.Parse(Console.ReadLine());
                int f = int.Parse(Console.ReadLine());
                int g = int.Parse(Console.ReadLine());
                int h = int.Parse(Console.ReadLine());
                int i = int.Parse(Console.ReadLine());
                int j = int.Parse(Console.ReadLine());

                int[] k = new int[10] { a, b, c, d, e, f, g, h, i, j };

            }
            {
                Console.WriteLine("10 nahodne vylosovanych cisel: ");

                Random random = new Random();

                int q = 0;
                int r = 0;
                int s = 0;
                int t = 0;
                int u = 0;
                int v = 0;
                int w = 0;
                int x = 0;
                int y = 0;
                int z = 0;
               
                int[] l = new int[10] { q, r, s, t, u, v, w, x, y, z };
               
                q = random.Next(1, 50);
                r = random.Next(1, 50);
                s = random.Next(1, 50);
                t = random.Next(1, 50);
                u = random.Next(1, 50);
                v = random.Next(1, 50);
                w = random.Next(1, 50);
                x = random.Next(1, 50);
                y = random.Next(1, 50);
                z = random.Next(1, 50);

                Console.WriteLine(q);
                Console.WriteLine(r);
                Console.WriteLine(s);
                Console.WriteLine(t);
                Console.WriteLine(u);
                Console.WriteLine(v);
                Console.WriteLine(w);
                Console.WriteLine(x);
                Console.WriteLine(y);
                Console.WriteLine(z);

                Console.Read();

            }

Re: Porgram v C#

Napsal: 10 led 2013 11:50
od cosmosD
A stačil by na to jeden for


To me zajima, jak by to slo jednim?:)

Re: Porgram v C#

Napsal: 10 led 2013 12:46
od domitea
Jednoduše, dám tam While :lol:

Chybka se vždycky vloudí.... :problem:

Re: Program v C#

Napsal: 10 led 2013 14:07
od Firen
Tak vážně nevim co s tim :( To porovnání mi prostě nejde udělat ať se snažim sebevíc. Zadal jsem si jednu nulovou hodnotu int o , na kterou by se přičítaly správný pokusy toho for cyklu, ale nefunguje mi to :-( Kdybych měl výstupní hodnotu těch správných čísel, tak už by se to snad dalo...ale z tohohle se asi jen tak nedostanu. Pomohl by někdo prosím s timhle kouskem?

Re: Program v C#

Napsal: 10 led 2013 16:29
od domitea
Ale no tak... To se nepodíváš na nějaký tutorial jak se píše For?

Syntaxe je takováhle:

Kód: Vybrat vše

for (int i = 0; i < 6; i++)
{
// code here
}

Vzhledem k tomu, že tam máš pole o 6 prvcích, tak indexy jsou 0 až 5

Dále podmínka, taky problém si to najít ?

Kód: Vybrat vše

if (poleHodnot[i] == poleRandom[x])
{
pocetShod++;
}

Jen dodám, že ++ je to samé jako + 1

Teď už jen dáš dva fory do sebe, a do nich podmínku. Jen si dávej pozor na proměnné ;)

P.S: Všechny práce s polem se dělají přes cyklus, ušetří ti to hodně vrásek na obličeji ;)

Re: Program v C#

Napsal: 10 led 2013 16:53
od Firen
Děkuji za rady a po tutoriálech jsem se díval, ale jak jsem psal na začátku - teprve s tímto jazykem začínám a moc toho o něm nevím. To že si náš pan učitel vymyslel program...to je sice super, ale asi to bude znamenat konec studia :-( Každopádně ještě jednou všem děkuji za snahu ;)

Re: Program v C#

Napsal: 10 led 2013 17:24
od Jara
Je to sice Java, ale snad pomůže :))

Kód: Vybrat vše

import java.util.Random;


public class Sazka {
   Input in;
   int pocetCisel;
   int [] stastnaCisla; //stastnaCisla[i]
   int [] losovanaCisla;
   
   public Sazka() {
      in = new Input();
      pocetCisel = 6;
      stastnaCisla = new int[pocetCisel];
      losovanaCisla = new int[pocetCisel];
      
      for (int i=0; i<pocetCisel; i++) {
         System.out.println("Zadejte Vaše šťastné číslo:");
         int cislo = in.nextInt(); //načte číslo z konzole od uživatele
         while(JizObsahuje(stastnaCisla,cislo)) {
            System.out.println("Toto číslo již bylo zadáno, zadejte jiné");
            cislo = in.nextInt();
         }
         stastnaCisla[i] = cislo;
      }
      Losuj();
      Shoda();
      UkazVylosovane();
   }
   
   private boolean JizObsahuje(int[] poleCisel, int cislo) {
      for (int i=0; i<poleCisel.length; i++) {
         if(poleCisel[i] == cislo) {
            return true;
         }
      }
      return false;
   }
   
   private int Nahodne() {
      Random r;
      r = new Random();
      return r.nextInt(49)+1;
   }
   
   public void Losuj() {

      int nahodneCislo;
      for (int i=0; i<pocetCisel; i++) {
         nahodneCislo = Nahodne();
         while(JizObsahuje(losovanaCisla,nahodneCislo)) {
            nahodneCislo = Nahodne();
         }
         losovanaCisla[i] = nahodneCislo;
      }
   }
   
   public void Shoda() { //něco jako výpočet výhry
      int pocetShod = 0;
      for (int i=0; i<pocetCisel; i++) {
         for (int j=0; j<pocetCisel; j++) {
            if(stastnaCisla[i] == losovanaCisla[j]) {
               pocetShod++;
               System.out.println("Nalezena shoda čísla: " + stastnaCisla[i]);
            }
         }
      }
      if(pocetShod>0) {
         System.out.println("Stal jste se milionářem, shodoval jste se z " + pocetCisel+"-ti čísel celkem "+pocetShod+"-krát");
      } else {
         System.out.println("Zase smůla, příště to výjde!");
      }
   }

   public void UkazVylosovane() {
      for (int i=0; i<losovanaCisla.length; i++) {
         System.out.println(""+losovanaCisla[i]);
      }
   }
   
   /* SPOUŠTĚČ */
   public static void main(String[] args) {
      // TODO Auto-generated method stub
      new Sazka();
   }

}


--- Doplnění předchozího příspěvku (10 Led 2013 17:49) ---

Koukám že syntaxi máme podobnou... Zkusím ten prográmek napsat zjednodušeně

--- Doplnění předchozího příspěvku (10 Led 2013 18:16) ---

Tady je mnohem jednodušší verze... Snad to pomůže ;)

Kód: Vybrat vše

import java.util.Random;

public class Sazka2 {

   public static void main(String[] args) {
      // TODO Auto-generated method stub
      
      int [] zadanaCisla = new int[6]; //vytvoření pole o 6 prvcích
      Input in = new Input();
      
      //načítání
      for(int i=0; i<zadanaCisla.length; i++) { //zadanaCisla.length je 6 (celkem 6 prvku: 0..5)
         //prochazeni pole, i se bude zvysovat od nuly do peti
         System.out.println("Zadejte číslo");
         zadanaCisla[i] = in.nextInt(); // do i -teho prvku vlož číslo od uživatele      
      }
      
      //losování
      int [] losovanaCisla = new int[6]; //vytvoření pole o 6 prvcích, pro uložení náhodných čísel
      Random r = new Random();
      for(int i=0; i<losovanaCisla.length; i++) {
         losovanaCisla[i] = r.nextInt(49)+1; // vygeneruje náhodné čislo od 1-49, v C# bude asi neco jako random.Next(1, 50);
      }   
      
      //nyní máme v poli zadanaCisla čísla od uživatele, a v poli losovanaCisla čísla
      //porovnáme tyto pole a zjistíme zda mají některé prvky stejné hodnoty
      //je potřeba udělat 2x cyklus for
      //tedy pro prvni prvek z pole losovanaCisla vyzkousis zda neni shoda kdekoliv v poli zadanaCisla
      int pocetShod = 0; //nastavime pocet shod na nulu
      for(int i=0; i<losovanaCisla.length; i++) {
         for(int j=0; j<zadanaCisla.length; j++) {
            if(losovanaCisla[i] == zadanaCisla[j]) { //nasla se shoda
               pocetShod = pocetShod+1; //nebo taky pocetShod++;
            }
         }
      }
      //zeptáme se zda se aspon nektera cisla sohovala
      if(pocetShod>0) { //pocetShod je vetsi nez nula, shoda byla tedy nalezena
         System.out.println("Vyhrál jste! ");
         System.out.println("Nalezen počet shod "+pocetShod);
      } else {
         System.out.println("Nevyhrál jste :(");
         System.out.println("Nenalezena shoda");
      }
      for(int i=0; i<losovanaCisla.length; i++) {
         System.out.println(losovanaCisla[i]);
      }
   }

}

Re: Program v C#

Napsal: 10 led 2013 19:14
od faraon
Jak bych na to šel já:

1. Cyklus pro vstup, zadá se šest různých(!) čísel, po zadání každého z nich se vnořeným cyklem porovná s již vloženými, jestli nedošlo k opakování.
2. Cyklus pro losování, a opět se vnořeným cyklem kontroluje, jestli už číslo nebylo vylosované (pro parádu bys je mohl řadit).
3. Dva vnořené cykly, porovnávají se čísla v obou polích každé s každým, a počítáš kolikrát došlo ke shodě.
4. Switch podle počtu shod, a vypíše se buď příslušné pořadí, nebo litujeme, zkuste to znovu.

Činnost bodu 3 by se dala provádět už v bodě 2, trochu by to program urychlilo, ale při takhle malé složitosti nemá cenu se tím zabývat a komplikovat ho. On se někdy dá použít i bubblesort ;-)