Keresés

Új hozzászólás Aktív témák

  • Gülredy

    tag

    Sziasztok!

    Arra kérnék tőletek ötleteket, hogy c#-ban, hogyan oldanátok meg egy olyan programot, amely előállítana több száz olyan random számsorozatot 1-90-ig (tömbben vagy bármi másban), amelynek van legalább 5 eleme, és minden elem különböző egymástól (egy számsorozatban). De mondjuk az n-edik és k-adik számsorozatban lehet két, vagy több elem is ugyan olyan, arra nincs megkötés!

    Például:
    első számsorozat: 2,21,43,67,82
    Második számsorozat: 4,7,43,36,90
    ...
    így tovább míg nincs neki legalább száz vagy akár több ilyen sorozata.

    De most jönne a program lényege:
    Ezekre a sorozatokra, generáljon EGY olyan sorozatot, amelynek elemei a legkevesebbszer vagy egyáltalán nem fordulnak elő, az előző sorozatokban.

  • Gülredy

    tag

    válasz ArchElf #3259 üzenetére

    Köszönöm szépen a segítségedet! Így már könnyebben érthető a program!

  • Gülredy

    tag

    válasz ArchElf #3256 üzenetére

    Köszönöm a gyors választ!

    Azt hittem, bonyolultabb megoldása lesz!
    Legalábbis ha jól értelmezem, úgy működik, hogy a bekért string-et a bemeneti StringBuilder-be rakom, majd for ciklussal a szöveg hossza-tól az elejéig végigmegyek, majd a ciklusban generálok egy random számot, amely szám, a szöveg-edik karakterének felel meg, és aminek az értékét hozzáfűzi a kimeneti StringBuilder-hez, közben a bemenetiből pedig kivonja?

    Annyi kérdésem lenne, hogy a for ciklust miért a végéről az elejére megy miért nem fordítva? (úgy látom fordítva system out of range exeption-t kap de miért?)

  • Gülredy

    tag

    Sziasztok!
    Volna egy feladatom, amire van is megoldásom, de szerintem túl van bonyolítva, és megoldható lenne könnyebben(rövidebben) is. Erre kérném a segítségeteket:

    A feladat:
    "Írjon olyan függvényt vagy metódust, amely egy karakterláncban vagy sztringben
    véletlenszerűen összekeveri a karaktereket (véletlenszám–generátor használható)!"

    Kikötés, hogy "Tilos olyan függvényt/metódust használni, mely közvetlenül a megoldást adja!"

    Szóval van nekem 3 féle programnyelvben is megoldás, egy c, java, meg c#-os is.
    A c#-osat bemásolom ide, mert abban érdekelne egy rövidebb megoldás, ha ti tudtok rá egyet. Személy szerint egy StringBuilder + Random szám generátorban gondolkoztam, de igazából StringBuilderrel még nem sokat foglalkoztam így nem tudom hogy is nézzen ki a megoldás.

    class Program
    {
    static void keveres(string szoveg)
    {
    Random szam = new Random();
    int hossz= szoveg.Length;
    int[] szamok = new int[hossz];
    bool voltmar;

    for (int i = 0; i < hossz; i++)
    {
    do{
    voltmar = false;
    szamok = szam.Next(0,hossz);
    for (int j = 0; j < i; j++)
    {
    if (szamok(i)==szamok[j])
    {
    voltmar=true;
    }
    }
    } while (voltmar==true);
    }
    char[] kevert = new char[hossz];
    for (int i = 0; i < hossz; i++)
    {
    kevert(i)=szoveg[szamok(i)];
    }
    for (int i = 0; i < hossz; i++)
    {
    Console.Write(kevert(i));
    }

    }
    static void Main(string[] args)
    {
    Console.WriteLine( "Adjon meg egy karakterláncot majd véletlenszerűen összekeverve megkapja:");
    string szo = Console.ReadLine();
    keveres(szo);
    Console.ReadKey();
    }

    Létezik rá egy rövidebb megoldás amely ugyan ezt a funkciót elvégzi?

    Előre is köszönöm a válaszokat!

  • Gülredy

    tag

    ubid kérdéseire a válaszok engem is érdekelnének.

    ArchElf:
    "Amúgy mivel a kód többi része nem is látható, nem is tudom elképzelni, hogy volt többször lefuttatható a switch rész."

    goto címke paranncsal
    Tehát ha azt választja a felhasználó hogy igen újra akar választani a termékek közül akkor arra van egy switch i vagy n elágazás és ha i-t nyom akkor goto címkét használok.

    A hibát egyébként megoldottam, tényleg rossz helyen volt a változó deklarálva, csak nem vettem észre. Pedig szinte mindig szoktam használni a debugot de ez esetben ez kimaradt a használata.

    Még lenn még egy kérdésem, ha már ezt így megoldottuk:

    int valasztas;
    valasztas = int.Parse(Console.ReadLine());

    Itt kérem be azt a számot ami a termékek száma. Magyarul amit választani akarok.
    Az lenne kérdésem, hogy itt szükséges parse-olni vagy megoldhatnám parse nélkül?
    A fontosabb dolog amire a választ kérném, mivel nem használtam még sok kivételkezelést, így nem igazán vagyok otthonos benne.
    Szóval a fenti int.Parse-os sornál szeretném lekezelni a kivételt mivel ha beírom neki hogy 100 az oké arra van egy if utasítás de ha beírok neki mondjuk 50 db 9est akkor dob egy overflow exception-t. Ebből azt akarnám kihozni hogy ha ilyen nagy számot ír be akkor ne exceptiont dobjon hanem csak egy üzenetet hogy "túl nagy a megadott szám".

    Mindenképp kivételkezeléssel szeretném megoldani hogy ennek a használatával is jobban tisztában legyek!

    Ja és köszönöm mindenkinek aki eddig válaszolt!!

  • Gülredy

    tag

    Sziasztok!
    Nem túl régóta foglalkozom a c#-al így gyakorlásképp kitaláltam magamnak egy feladatot amit konzolon akarok kivitelezni.
    Egy nagyon egyszerű bevásárló program lenne, van 4 darab termék amit a kosárba lehet pakolni, minden kiválasztás után lehetőségünk van új termék hozzáadásához, és dönthetünk arról hogy befejezzük-e a vásárlást vagy sem.
    Röviden ennyi, de amivel gondom van az a következő:
    A termékek előtt egy szám áll (1-4) és egy switch case szerkezettel adom meg hogy mit választok. A probléma az, hogy készítettem egy kosár nevű string-et, amibe beírja a választott terméket, ez működik is egy terméknél, de ha választok egy másik terméket is, akkor az nem hozzáadja, hanem felülírja az előzőt.

    Itt a kód részlet, ha ez nem elég bemásolhatom az egész kódot is de hosszú lenne:

    string kosar= "Termékekek: ";
    switch (valasztas)
    {
    case 1: kosar += "Egér, ";
    break;
    case 2: kosar += "Hangfal, ";
    break;
    case 3: kosar += "Billentyűzet, ";
    break;
    case 4: kosar += "Monitor, ";
    break;

    }

    A "valasztas" változóba kérem be a számot 1-4 ig és azt szeretném, hogy a kosár nevű stringhez minden egyes alkalommal fűzze hozzá az aktuálisan választott elemet, de csak felülírja a már kiválasztott elemet.

    Nem tudom ezt meg lehet-e oldani így switch case-ben vagy sem, de ha igen akkor megköszönnék egy kódrészletet vagy magyarázatot!

  • Gülredy

    tag

    Tehát ha mondjuk nem a második hanem az első vagy a harmadik bitjére lennék kíváncsi azt hogyan íratnám ki?

  • Gülredy

    tag

    válasz emvy #2590 üzenetére

    Tehát akkor ha bináris alakban nézzük, megadok az x-nek mondjuk a 37-et, (100101) elosztom kettővel 18 (10010) itt kiesett a legszélső bitje, ahogy mondtad majd a 18-nak a maradékos osztásának értéke 0 lesz azaz rendes osztásban 9 (1001) és azért 0 a megoldás mert 9 maradék nélkül megvan 2* a 18-ban?

  • Gülredy

    tag

    Sziasztok!
    Egy kis magyarázat kellene egy meglévő programra.
    Szóval a feladat a következő volt:
    Írjon olyan függvényt vagy metódust, amely egy természetes számról eldönti, hogy a kettes számrendszerbeli felírásában a jobbról második bitje 1 vagy 0 (ne alakítsa át sztringgé/karaktertömbbé)

    Van is megoldásom a feladatra és 100%ig jó is, de nem értem hogy kapom vissza pont a második bitjét így.

    A megoldás
    static int masodikbit(int x);
    {
    x/=2;
    return x%2;
    }

    Az én logikám szerint ha az 'x'-nek megadom mondjuk hogy 110, azt osztom 2-vel akkor az 55, majd a maradékos osztásnál pedig 27,5 amiből a 0,5 a maradék. Szóval az lenne az értéke hogy 0,5 azaz 0 mert int típust kapunk vissza..

    Mégis 1 lesz az eredmény, és pont 1 a jobbról második bitje is.

    Előre is köszönöm a válaszokat!

  • Gülredy

    tag

    válasz Lacces #2466 üzenetére

    Na és a TryParse-t hogy használjam jelen esetbe mert ha csak átírom a Parse-t TryParse-re akkor azt mondja hogy:
    No overload for method 'TryParse' takes 1 arguments
    Tehát kell neki egy argumentum de ha beírom a zárójelbe az x-et akkor sem jó neki. PL így:
    x = int.TryParse(Console.ReadLine(x));

    Még nem használtam ezt a tryparse-t és a könyv amiből tanulok ott is csak enum típusoknál használják!

  • Gülredy

    tag

    válasz WonderCSabo #2462 üzenetére

    Tehát akkor, nekem kellene mondjuk egy for ciklus, amiben megvizsgálom, hogy az adott számnak hány osztója van, és ha az csak 2 akkor kiírom, hogy prím, ha több akkor nem prím?

  • Gülredy

    tag

    Sziasztok!
    Egy nagyon egyszerű program írásába kezdtem bele. Egy olyan programot írok ami kiírja egy bekért számról hogy prím-e vagy sem. (kezdő vagyok)
    A gond csak az hogy nem tudom milyen kikötést adhatnék meg. Mert amit én megadtam az minden számra igaz, így a program szerint minden szám prím amit csak beírok. (x % x == 1 && x%1 == x)
    Mert végül is ez a prím szám, hogy ha önmagával osztom akkor az 1, ha 1 el osztom akkor önmaga, de azt nem tudom, hogy azt hogy adthatnám meg hogy mással ne legyen osztható csak ezzel a két kikötéssel és akkor írja ki hogy prím. Valószínűleg nem jó irányból közelítem meg ezért kérném a segítségeteket, mert a neten csak olyat találok ami kiír egy megadott számú prímszámot.

    Így néz ki a program:

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

    namespace primszam_e
    {
    class Program
    {
    static void Main(string[] args)
    {
    int x;

    Console.WriteLine("Adjon meg egy természetes számot:");
    x=int.Parse(Console.ReadLine());


    if (x==1 || x==0)
    {
    Console.WriteLine("Az 1 és a 0 nem prím szám");
    }

    else if (x % x == 1 && x%1 == x)
    {
    Console.WriteLine("Prím szám");
    }
    else
    {
    Console.WriteLine("nem prím szám!");
    }

    Console.ReadKey();
    }
    }
    }

  • Gülredy

    tag

    válasz Jester01 #2412 üzenetére

    Volt egy feladat előtte de azzal sem mentem többre (más programozási feladat nem volt)
    Itt a feltételezett előzmény:

    A program inputja egyetlenegy kezdőállapot, outputja pedig a 10 lépés során az ágens által választott akciók, és mellé a világ aktuális állapotainak leírása. Pl.
    Input: pozíció:A A: koszos B:tiszta
    Output:
    1 -- akció:szív pozíció:A A:tiszta B:tiszta
    2 -- akció:jobbra pozíció:B A:tiszta B:tiszta akció:
    3 -- akció:balra pozíció:A A:tiszta B:tiszta
    4 -- ...........

    Tehát az lenne a lényege, hogy egy porszívó robotot kell készíteni, amely először bekér egy kezdőállapotot , majd a 10. lépés után kiírja hogy milyen lépést választott(?), és ha jól veszem ki akkor mind a 10et kiírja.
    Ennyi volt az előzménye.

    Elég kezdő vagyok c#-ban így valószínűleg csak ezért okoz gondot ez, bár a tanár magyarázása is elég össze vissza. Tudnál segíteni hogy induljak el?

  • Gülredy

    tag

    Sziasztok, volna egy igen érdekes kérdésem.
    Kiadtak egy feladatot (szorgalmi) amit plussz pontért lehetne megcsinálni. A gond csak az hogy nem igazán értem, hogy hogy is kezdjek neki, részben a szöveg érthetetlenségén, részben pedig bizonyára a saját tudatlanságom végett.
    A feladat ez lenne:

    Fejlettebb porszívó-ágens:
    Továbbra is két szoba van, de a szobák a 100 egységnyi élettartam alatt
    véletlenszerűen bekoszolódnak, minden időpillanatban bármelyik szoba 1:100
    valószínűséggel. teljesítménymérték: minden 10-ik időpillanatban a tiszta szobáért +2p, a koszosért -4p, minden mozgás -1p, minden szívás -2p.
    Adjon egy ágensfüggvényt papíron és implementálja is programban. 1000-szer futtassa és közölje outputban, hogy melyik futásnál mennyi pontot ért el. Egy futást úgy dokumentáljon, ahogy az előző feladatban, csak tegyen a bekoszolódott szoba mellé egy felkiáltójelet, pl ha. a 72. lépésben bekoszolódott a B szoba:

    72 -- pozíció:A A:tiszta B:koszos!

    Le tudná valaki írni hogy hogyan is programozná ezt meg c#-ban?
    Nem a 100%os megoldást várom bár azért sem haragudnék meg :), hanem olyanokat hogy ezt meg ezt felvenném változónak, kellene hozzá egy for ciklus ami vizsgálná ezt meg ezt ...
    Például ezt a 1:100-hoz valószínűségű dolgot se tudom, hogy lehetne kivtelezni, mert jelenleg csak ezt ismerem Random r = newRandom(); number = r.Next(100); de ez csak 0-100 ig kiválaszt egy random számot az meg ide nem lenne jó.
    Valakinek valami ötlete az egészre?

  • Gülredy

    tag

    válasz st4rlight #2246 üzenetére

    Pont ebből a könyvből tanulok :)

    Egyébként köszi a válaszokat, 6 oldal továbbolvasása után rájöttem hogy mit csinál a {0}

  • Gülredy

    tag

    Sziasztok!
    Most tanulom a c#-ot így lenne egy alapvető kérdésem!
    A {0} mit jelent? Az első elemet? Vagy hogy van ez? Beírok két példakódot (main-től) amiben találkozni lehet vele, leírnátok hogy a két esetben mit csinál a {0} ??

    Első:
    Itt a Console.Write("{0}",(char)1); sor most a karaktertáblázatból kiszedi az első karaktert nem? De mire van a {0}? Mert jelen esetben ha kitörlöm is ugyan úgy kiírja a megadott karaktereket!

    int x, y;
    for (x = 0; x < 10; x++,
    System.Console.Write("\n"))
    for (y = 0; y < 10; y++)
    Console.Write("{0} ", (char)1);
    Console.ReadKey();

    Második:
    Itt meg pont ellenkezőleg van, ha kitörlöm a {0}-át, akkor nem ír ki semmit, hiába ott van a ,circum meg a ,area

    int radius = 4;
    const double PI = 3.14159;
    double circum, area;

    area = PI * radius * radius;
    circum = 2 * PI * radius;

    Console.WriteLine(" Radius = {0}, PI={1}",radius,PI);
    Console.WriteLine("The area is {0}", area);
    Console.WriteLine("The circum is {0}", circum);
    Console.ReadKey();

    Sehol sem találtam rá egy értelmes választ, szóval várom a válaszokat!
    Előre is köszi!! :)

Új hozzászólás Aktív témák

Hirdetés