Program v C#

Místo pro dotazy a rady ohledně programovacích jazyků (C++, C#, PHP, ASP, Javascript, VBS..) a tvorby webových stránek

Moderátor: Mods_senior

Uživatelský avatar
Firen
nováček
Příspěvky: 30
Registrován: leden 13
Pohlaví: Muž
Stav:
Offline

Program v C#

Příspěvekod Firen » 10 led 2013 10:54

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.

Reklama
Uživatelský avatar
Wradi
Level 4
Level 4
Příspěvky: 1373
Registrován: říjen 12
Pohlaví: Muž
Stav:
Offline

Re: Porgram v C#

Příspěvekod Wradi » 10 led 2013 11:11

[url]Vítej na Pc-Help.cz :D[/url]
Computer Settup
Procesor : Intel Core i5-4440 * 3,2Ghz TurboBoost 3,7gHZ
Operační Pamět : 3x HyperX Blu 4GB DDR3 = 12GB
Základní deska : Asus ProGamer
Grafika : MSI R9 270 Gaming 2G
Zvuková karta : na Desce
1 HDD : WD Caviar Green 500GB
2 HDD : SSD Kingston V300, SATA III, 2,5", 120GB

Uživatelský avatar
cosmosD
Level 3
Level 3
Příspěvky: 437
Registrován: únor 11
Bydliště: Praha
Pohlaví: Muž
Stav:
Offline

Re: Porgram v C#

Příspěvekod cosmosD » 10 led 2013 11:15

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.

Uživatelský avatar
domitea
Tvůrce článků
Level 4.5
Level 4.5
Příspěvky: 1971
Registrován: červen 09
Bydliště: Královehradecký kraj
Pohlaví: Muž
Stav:
Offline
Kontakt:

Re: Porgram v C#

Příspěvekod domitea » 10 led 2013 11:34

Doplním: Na náhodná čísla je třída Random. A stačil by na to jeden for :wink:

Uživatelský avatar
Firen
nováček
Příspěvky: 30
Registrován: leden 13
Pohlaví: Muž
Stav:
Offline

Re: Porgram v C#

Příspěvekod Firen » 10 led 2013 11:42

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

            }

Uživatelský avatar
cosmosD
Level 3
Level 3
Příspěvky: 437
Registrován: únor 11
Bydliště: Praha
Pohlaví: Muž
Stav:
Offline

Re: Porgram v C#

Příspěvekod cosmosD » 10 led 2013 11:50

A stačil by na to jeden for


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

Uživatelský avatar
domitea
Tvůrce článků
Level 4.5
Level 4.5
Příspěvky: 1971
Registrován: červen 09
Bydliště: Královehradecký kraj
Pohlaví: Muž
Stav:
Offline
Kontakt:

Re: Porgram v C#

Příspěvekod domitea » 10 led 2013 12:46

Jednoduše, dám tam While :lol:

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

Uživatelský avatar
Firen
nováček
Příspěvky: 30
Registrován: leden 13
Pohlaví: Muž
Stav:
Offline

Re: Program v C#

Příspěvekod Firen » 10 led 2013 14:07

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?

Uživatelský avatar
domitea
Tvůrce článků
Level 4.5
Level 4.5
Příspěvky: 1971
Registrován: červen 09
Bydliště: Královehradecký kraj
Pohlaví: Muž
Stav:
Offline
Kontakt:

Re: Program v C#

Příspěvekod domitea » 10 led 2013 16:29

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

Uživatelský avatar
Firen
nováček
Příspěvky: 30
Registrován: leden 13
Pohlaví: Muž
Stav:
Offline

Re: Program v C#

Příspěvekod Firen » 10 led 2013 16:53

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

Uživatelský avatar
Jara
Level 2
Level 2
Příspěvky: 221
Registrován: prosinec 08
Bydliště: Frýdek-Místek
Pohlaví: Muž
Stav:
Offline
Kontakt:

Re: Program v C#

Příspěvekod Jara » 10 led 2013 17:24

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]);
      }
   }

}
Nobody expects the Spanish Inquisition!

Uživatelský avatar
faraon
Master Level 8.5
Master Level 8.5
Příspěvky: 7397
Registrován: prosinec 10
Pohlaví: Muž
Stav:
Offline

Re: Program v C#

Příspěvekod faraon » 10 led 2013 19:14

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 ;-)
"Král Lávra má dlouhé oslí uši, král je ušatec!

(pravil K. H. Borovský o cenzuře internetu)


  • Mohlo by vás zajímat
    Odpovědi
    Zobrazení
    Poslední příspěvek

Zpět na “Programování a tvorba webu”

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 5 hostů