NPRG035 Jazyk C# a platforma .NET

Každý neuvedený předmět
MrCooper
Matfyz(ák|ačka) level II
Příspěvky: 59
Registrován: 17. 1. 2006 17:54

Re: NPRG035 Jazyk C# a platforma .NET

Příspěvek od MrCooper »

Tom píše:Použij ukázkové řešení z prvního příspěvku tohoto fóra. Domnívám se, že řešení bude jen o něco málo rozšířený tenhle zdroják.
Jo, to jsem zrecykloval :) Nakonec jsem to spachal... Ale soliter bych programovat nechtel :lol: Uvidime v patek. Diky a zatim.
Medved
Admin(ka) level I
Příspěvky: 168
Registrován: 30. 5. 2006 21:18

Re: NPRG035 Jazyk C# a platforma .NET

Příspěvek od Medved »

Dnesni zadani:

Na vstupu je boolovsky vyraz, to je vyraz, kde mate promenne a operatory.
Operator je: (), !, &, |, ->, <-> neboli zavorky, negace, konjunkce, disjunkce, implikace, ekvivalence. Priorita je dana tak, jak jsem to napsal zleva doprava. Kazdy atom (promenna nebo operator) je oddeleny zleva i zprava jednou mezerou. Promenna je posloupnost alfanumerickych znaku. Vstup je korektni. Jeste byl vstup zjednoduseny tim, ze nemusite hledet na prioritu, protoze jsou vzdy dvojice uzavorkovany. Takze se nestalo, ze by na vstupu bylo ( a & b & c ) ale ( a & ( b & c ) ).

Cely ten vyraz je v souboru, ktery prijde jako prvni parametr.

Ukolem je prevest vyraz na konjunktivni normalni formu (dale CNF) a vypsat vysledek na konzoli.
CNF je konjunkce klauzuli. Klauzule je disjunkce literalu a literal je promenna nebo jeji negace. Takze napriklad (( a & ( b | ! c)) & d). To je cele. Napsal na tabuli hinty, jak se to dela. Snad je to zhruba takhle:

~> znaci ze leva strana se nahradi za pravou
! ! a ~> a
a -> b ~> ! a | b
a <-> b ~> ( ! a | b ) & ( a | ! b )
! ( a & b ) ~> ! a | ! b
! ( a | b ) ~> ! a & ! b
( a & b) | c ~> ( a | c ) & ( b | c )
a | ( b & c ) ~> ( a | b ) & ( a | c )


CNF muze byt libovolna, nemusi byt minimalni, pouze rozumne velka (aby se to dalo kontrolovat) a muzete pocitat s prioritou, tzn. nemusi to byt uzavorkovane tak blbuvzdorne, jak na vstupu. Testovaci data dodal, ale tu stranku ted z hlavy nevim, snad to nekdo doplni.

Byly 3 hodiny casu (pokud nakonci nepridal). No a byl tam naky divny clovicek, ktereho jsem vzivote nevidel a vzhledem k tomu, ze jsem prisel pozde, tak jmeno nepovim (edit: tak pry kolega Sery :roll:).

Ja to teda nedal, vzdal jsem po 2 hodinach, protoze jsem zvolil dost nestastne datovou strukturu a pak uz se mi to nechtelo predelavat.

Pokud si to budete zkouset, tak asi doporucuju strom. Na tom je nejtezsi to nacteni a do toho se mi nechtelo jit. Takze jsem to resil v poli, tak, ze jsem postupne rusil jednu vec za druhou. Pak jsem se ale dost zasekal a porad jeste nevim proc. Az budu mit naladu, tak si to znova proberu.

Uspesnost asi musi doplnit nekdo, kdo tam vydrzel do konce.
Hodne stesti, M.
Naposledy upravil(a) Medved dne 4. 2. 2008 19:42, celkem upraveno 3 x.
MrCooper
Matfyz(ák|ačka) level II
Příspěvky: 59
Registrován: 17. 1. 2006 17:54

Re: NPRG035 Jazyk C# a platforma .NET

Příspěvek od MrCooper »

(Ne)Uspesnost mohu potvrdit - co jsem si vsimnul, tak dali max. ctyri lidi.
Ja zvolil strom dobre, nacetl, vypisoval, ale nestihnul jsem odladit samotne prevadeni. Vopruz, no. Tak ve stredu.
Medved
Admin(ka) level I
Příspěvky: 168
Registrován: 30. 5. 2006 21:18

Re: NPRG035 Jazyk C# a platforma .NET

Příspěvek od Medved »

Tak pry dva...
MrCooper píše:(Ne)Uspesnost mohu potvrdit - co jsem si vsimnul, tak dali max. ctyri lidi.
Uživatelský avatar
andree
Matfyz(ák|ačka) level III
Příspěvky: 106
Registrován: 9. 12. 2006 17:00
Typ studia: Informatika Mgr.
Kontaktovat uživatele:

Re: NPRG035 Jazyk C# a platforma .NET

Příspěvek od andree »

A o 15:00 bolo dalsie zadanie... Excel :o)

Vstup bola jedna alebo viac tabuliek, pricom na prikazovom riadku to bolo
program.exe input output (pricom ten input bol len nazov tabulky, ale fakticky sa potom otvoril subor input.sheet... vid nizsie ;-))

Pracou programu bolo sparsovat tabulku, dopocitat hodnoty a vypluvnut spocitanu tabulku (a pripadne chyby v bunkach)...

Jedna tabulka bola v podstate zadany pomocou "poloriedkej tabulky" - v textaku... Bola teda v tvare ze na kazdom riadku zoznam "hodnot", (vzdy jeden) z tychto typov:
* cislo
* [] ako prazdne policko (ktore sa neskor interpretovalo ako 0, ale vypisat sa znovu malo ako []);
* vec v tvare "=BUNKA+BUNKA", kde + mohol byt aj iny operator z [+-*/] a BUNKA bola v tvare bud AAA111 (standardne, ako to robi excel - AAA bol stlpec (a napr. stlpec1=A<B<AA<AB<AAA...), 111 cislo riadku), alebo List!AAA111 - kde List bola prva cast nazvu suboru s tabulkou (takze cely nazov suboru potom bol List.sheet); priklady: =A1+B2; =List1!XX4/AC2; =XY123-List!B5 ... skratka standardneee oneee.. :o)

Kazde policko bolo oddelene prave jednou medzerou - ak boli dve za sebou (atd.), bola hodnota daneho policka nedefinovana...

No a co bolo treba "ohlidat" bolo delenie nulou (vo vystupe potom vypisat na danom mieste v tabulke #DIV0), zacyklenie vo vypoctoch (napr. ak bolo na pozici A1 toto: =A1+A1 :-) - #CYCLE), pretecenie integeru pri operacii, praca s nedefinovanym polickom (#INVVAL, ci co..) a este par drobnosti...)

Samozrejme ze riesenie pomocou statickeho pola nebolo mozne - ja som to riesil na styl List<List<Entry>> + Dictionary<string name, List<List<Entry>>> (to druhe sa mi zda nejak drsne spravene, to som mal snad krajsie :-))

Zadanie bolo asi lahsie ako tie logicke veci a solitaire - ale aj tak mi 2 hodky zabralo (a ostatnym ocividne tiez, lebo tusim ze skor ako po 2.5 hodine to nik neodovzdal) rozparsovat tabulky, spravit si nejaky ten system ako nacitavat tabulky pocas vypoctu, hladat rekurziu atd. atd. - nic myslienkovo zlozite, ale cele som to odladil aj tak az tesne pred tymi 3 hodkami...

Kym som odisiel, odovzdali to asi 2ja ludia, jeden to vzdal... Dalsie info ked tak hodia kolegovia, good luck everyone... (uz len napisat 60k kodu - na druhej strane toto tu na 3 hodiny malo myslim nejakych 12k :o)) )
Naposledy upravil(a) andree dne 26. 1. 2008 10:19, celkem upraveno 1 x.
MrCooper
Matfyz(ák|ačka) level II
Příspěvky: 59
Registrován: 17. 1. 2006 17:54

Re: NPRG035 Jazyk C# a platforma .NET

Příspěvek od MrCooper »

Nemli byste k zadani excelu nejake vstupni testovaci soubory?? Diky, M
Uživatelský avatar
andree
Matfyz(ák|ačka) level III
Příspěvky: 106
Registrován: 9. 12. 2006 17:00
Typ studia: Informatika Mgr.
Kontaktovat uživatele:

Re: NPRG035 Jazyk C# a platforma .NET

Příspěvek od andree »

MrCooper píše:Nemli byste k zadani excelu nejake vstupni testovaci soubory?? Diky, M
sure thing :-)
testy.zip
origos testy + jeden moj (na testovanie cyklov).. z tych povodnych som vlastne vyhodil dva velke, ktore testovali len to, ci clovek pouziva dobre struktury (=ze to nezabera prilis RAM)...
(4.93 KiB) Staženo 314 x
keby niekto chcel vediet, ako vyzera kod, ktory zbucha clovek po dni citania sliedeov o C# a skusenia si jedneho prikladu este doma:
(=len pre silnejsie povahy... hlavne ta MyCell::Evalute metoda je fakt hnusne napisana... you've been warned!)

Kód: Vybrat vše

using System;
using System.Collections.Generic;
using System.Collections;
using System.Text;
using System.IO;

namespace ConsoleApplication1
{
    struct CellAddr
    {
        public string list;
        public int x, y;

        static public int ParseX(string s)
        {
            int cs = 'Z' - 'A' + 1;
            int cs2=0;

            for (int i = 0; i < s.Length;  i++)
            {
                cs2*=cs;
                cs2 += s[i]-'A'+1;
            }
            cs2--;
            //Console.WriteLine(s + "=>"+(cs2));
            return cs2;
        }

        public CellAddr(string addr)
        {
            if (addr.IndexOf('!') == -1) {
                list = "";
            } else {
                string[] s=addr.Split('!');
                list = s[0];
                addr = s[1];
            }
            int yp=addr.IndexOfAny(new char[] { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' });
            if (yp <=0) //X or Y not present...
                throw new Exception("Bad address " + addr);

            y = Int32.Parse(addr.Substring(yp))-1;
            x = ParseX(addr.Substring(0, yp));
        }
    }

    class MyCell
    {
        enum ValType
        {
            EMPTY, //''
            UNUSED, //[]
            VALUE,
            EXPR,
            ERROR
        };

        enum ErrType
        {
            NONE,
            INVVAL,
            MISSOP,
            FORMULA,
            DIV0,
            CYCLE,
            ERROR,
            OVERFLOW
        }

        private ValType type;
        private ErrType err;
        public char op;
        private CellAddr op_left, op_right;
        private int val;
        private MyList parent;
        private bool computing;

        public MyCell(MyList prnt, string s)
        {
            parent = prnt;

            err = ErrType.NONE;

            if (s == "")
            {
                type = ValType.EMPTY;
                err = ErrType.INVVAL;
            }
            else if (s == "[]")
            {
                type = ValType.UNUSED;
                val = 0;
            }
            else if (s[0] == '=')
            {
                type = ValType.EXPR;

                s = s.Substring(1);

                int opa = s.IndexOfAny(new char[] { '+', '-', '*', '/' });
                if (opa == -1)
                {
                    type = ValType.ERROR;
                    err = ErrType.MISSOP;
                    return;
                }
                op = s[opa];

                try
                {
                    op_left = new CellAddr(s.Substring(0, opa));
                    op_right = new CellAddr(s.Substring(opa + 1));
                }
                catch
                {
                    type = ValType.ERROR;
                    err = ErrType.FORMULA;
                }
            }
            else
            {
                if (!Int32.TryParse(s, out val))
                {
                    type = ValType.ERROR;
                    err = ErrType.INVVAL;
                }
                else
                {
                    type = ValType.VALUE;
                }
            }
        }

        public override string ToString()
        {
            string rv="BAAD";
            switch (type)
            {
                case ValType.UNUSED:
                    rv="[]";
                    break;
                case ValType.VALUE:
                    rv=val.ToString();
                    break;
                case ValType.EXPR:
                    if (err == ErrType.NONE)
                        goto case ValType.VALUE;
                    else goto case ValType.ERROR;
                case ValType.ERROR:
                case ValType.EMPTY:
                    switch (err)
                    {
                        case ErrType.NONE:
                            rv = "#NONE-WARNING!!!";
                            break;
                        case ErrType.INVVAL:
                            rv="#INVVAL";
                            break;
                        case ErrType.MISSOP:
                            rv="#MISSOP";
                            break;
                        case ErrType.FORMULA:
                            rv = "#FORMULA";
                            break;
                        case ErrType.DIV0:
                            rv = "#DIV0";
                            break;
                        case ErrType.CYCLE:
                            rv = "#CYCLE";
                            break;
                        case ErrType.ERROR:
                            rv = "#ERROR";
                            break;
                        case ErrType.OVERFLOW:
                            rv = "#OVERFLOW";
                            break;
                    }
                    break;
            }
            if (rv=="BAAD") throw new Exception("BAAAAAAAAAD");
            return rv;
        }

        public void Evalute(Commander main)
        {
            switch (type) {
                case ValType.VALUE:
                case ValType.EMPTY:
                case ValType.ERROR:
                case ValType.UNUSED:
                    return;
            }

            //System.Console.WriteLine(computing+"=>"+op_left.list + "!" + op_left.x + ":" + op_left.y + " "+op+" " + op_right.list + "!" + op_right.x + ":" + op_right.y);
            if (computing) {
                type = ValType.ERROR;
                err = ErrType.CYCLE;
                return;
            }

            computing = true;

            MyList l = parent, r=parent;
            MyCell cl=null, cr=null;
            bool el=false, er=false;

            if (op_left.list != "") {
                l=main.NeedList(op_left.list);
                if (l == null) {
                    type = ValType.ERROR;
                    err = ErrType.FORMULA;
                    return;
                }
            }            
            try {
                cl=l.Cells[op_left.y][op_left.x];
                cl.Evalute(main);
            } catch {
                el = true;
            }

            if (op_right.list != "") {
                r = main.NeedList(op_right.list);
                if (r == null) {
                    type = ValType.ERROR;
                    err = ErrType.FORMULA;
                    return;
                }
            }
            try {
                cr = r.Cells[op_right.y][op_right.x];
                cr.Evalute(main);
            } catch {
                er = true;
            }

            if ((el||cl.type == ValType.VALUE || cl.type==ValType.UNUSED) &&
                ((er||cr.type == ValType.VALUE) || cr.type==ValType.UNUSED))
            {
                if (!el && er && cl.type==ValType.ERROR) {
                    type = cl.type;
                    err = cl.err;
                } else if (el && !er && cr.type == ValType.ERROR) {
                    type = cr.type;
                    err = cr.err;
                } else {
                    type = ValType.VALUE;
                    Int64 ol, or;
                    if (el) ol = 0;
                    else ol = cl.val;

                    if (er) or = 0;
                    else or = cr.val;

                    Int64 ox = 0;

                    switch (op)
                    {
                        case '+':
                            ox = ol + or;
                            break;
                        case '-':
                            ox = ol - or;
                            break;
                        case '*':
                            ox = ol * or;
                            break;
                        case '/':
                            if (cr.val == 0)
                            {
                                type = ValType.ERROR;
                                err = ErrType.DIV0;
                            }
                            else
                                ox = ol / or;
                            break;
                    }

                    if (ox > Int32.MaxValue || ox < Int32.MinValue)
                    {
                        type = ValType.ERROR;
                        err = ErrType.OVERFLOW;
                    }
                    else val = (int)ox;
                }
            } else {
                type = ValType.ERROR;
                if (err==ErrType.NONE)
                    err = ErrType.ERROR;
            }
            computing = false;
            //ValType.EXPR
        }
    }

    class MyList
    {
        private List<List<MyCell>> cells;

        public List<List<MyCell>> Cells
        {
            get
            {
                return cells;
            }
        }

        public MyList(string fn)
        {
            cells=new List<List<MyCell>>();

            FileInfo f = new FileInfo(fn + ".sheet");
            if (!f.Exists)
                throw new Exception("Sheet " + f + " doesn't exist!");

            FileStream fs=f.OpenRead();
            StreamReader ifr = new StreamReader(fs);

            string line;

            while ((line=ifr.ReadLine())!=null)
            {
                List<MyCell> l = new List<MyCell>();

                foreach (string s in line.Split(new char[] { ' ' })) {
                    l.Add(new MyCell(this, s));
                }
                cells.Add(l);
            }

            ifr.Close();
        }

        public void Evalute(Commander main)
        {
            foreach (List<MyCell> l in cells) {
                foreach (MyCell c in l) {
                    c.Evalute(main);
                }
            }
        }

        public void WriteTo(string outf)
        {
            FileStream f = File.Create(outf);
            StreamWriter fw = new StreamWriter(f);

            bool lfrst = true;

            foreach (List<MyCell> l in cells)
            {
                if (lfrst)
                    lfrst = false;
                else fw.WriteLine();

                bool frst = true;
                foreach (MyCell c in l)
                {
                    if (frst)
                        frst = false;
                    else fw.Write(' ');

                    fw.Write(c);
                    
                }
            }
            fw.Close();
        }
    }

    class Commander
    {
        Dictionary<string, MyList> lists;

        public MyList NeedList(string list)
        {
            if (lists.ContainsKey(list))
                return lists[list];
            else {
                try {
                    lists[list] = new MyList(list);
                } catch {
                    return null;
                }
                return lists[list];
            }
        }

        public Commander(string baselist)
        {
            lists = new Dictionary<string, MyList>();
            lists[baselist] = new MyList(baselist);
        }

        public void Evaluate(string list) {
            lists[list].Evalute(this);
        }

        public void WriteTo(string list, string file)
        {
            lists[list].WriteTo(file);
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            if (args.Length < 2) {
                Console.WriteLine("Usage: program <list> <output>");
                return;
            }

            Commander c=new Commander(args[0]);

            c.Evaluate(args[0]);

            c.WriteTo(args[0], args[1]);
        }
    }
}
Xerxes
Matfyz(ák|ačka) level I
Příspěvky: 37
Registrován: 23. 1. 2007 16:32
Typ studia: Informatika Bc.
Bydliště: Zlínský kraj / Kolej 17. listopadu
Kontaktovat uživatele:

Re: NPRG035 Jazyk C# a platforma .NET

Příspěvek od Xerxes »

Dnes 30. ledna 2008 v 10:00 byl tento úkol:

Ve vstupním souboru máme zadaný vážený orientovaný graf formou vrhol:soused1,vaha1;soused2,vaha2;... na každém řádku. Úkolem bylo pěkně vypsat jeho matici sousednosti tak, aby byly vrcholy v jedné slabě souvislé komponentě u sebe, komponenty byly seřazené podle velikosti a vrcholy v rámci komponenty podle součtu vah hran, které do nich vedou.

V přílohách je upřesněné zadání a dva vzorové vstupy, které jsme si před odpojením internetu stáhli ze stránek zadávajícího (pan Poch). Dále je ještě přiloženo moje řešení (šité horkou jehlou, upozorňuju) a výstup, který vygenerovalo z prvního grafu. Výstup druhého grafu má 6 GB a v labu se generoval pět minut, takže ho sem nedám :wink:. Stejně ho jenom zajímalo, zda to na něm seběhlo a nespadlo.

Pan Poch detailně kontroloval výstup na prvním grafu i kód (v rámci možností).

Odcházel jsem jako první cca hodinu a tři čtvrtě od začátku měření tříhodinového limitu, takže úspěšnost druhých neznám. Možná někdo doplní.
zadani.txt
Upřesněné zadání
(1.3 KiB) Staženo 386 x
graph.txt
První graf (malý)
(582 bajtů) Staženo 346 x
biggraph.txt
Druhý graf (velký)
(679.98 KiB) Staženo 433 x
reseni.txt
Moje řešení
(5.03 KiB) Staženo 388 x
vystup.txt
Můj výstup na prvním grafu
(7.77 KiB) Staženo 372 x
a

Re: NPRG035 Jazyk C# a platforma .NET

Příspěvek od a »

úspěšnost moc velká nebyla, z těch co přišli určitě nepřekročila polovinu, z druhé strany bych řek, že to dohromady udělali tak 3-4 lidi, kdyžtak mě opravte
gASK
Admin(ka) level I
Příspěvky: 635
Registrován: 9. 6. 2005 12:33
Typ studia: Informatika Mgr.
Bydliště: Konečně Vinohrady:)
Kontaktovat uživatele:

Re: NPRG035 Jazyk C# a platforma .NET

Příspěvek od gASK »

Odpoledním zadáním byl interpret BASICu.

Zadání:

Kód: Vybrat vše

Naprogramovat interpret BASICu.

Načte zdroják ze souboru a vykonává. Vykonává se od řádku s nejmenším číslem, končí se při příkazem END nebo pokud jsem dorazil na poslední řádek.

Každý řádek musí začínat číslem (může být odtabulátorován atd), přirozené.
Řádky mohou být zpřeházené! Pořadí vykonávání určuje číslo na začátku řádku, ne pořadí v souboru!

Komentáře jsou uvozené ', mohou být kdekoliv (samostatný řádek, za příkazem).

Proměnné jsou řetězce znaků nezačínajícíc a

Příkazy:
PRINT "string" - string NEOBSAHUJE mezery
PRINT 10
PRINT a2
INPUT a2 - načte číslo ze vstupu
SET a2 = 5 - přiřadí do a2, může se přiřazovat proměnná nebo hodnota
LET a2 = b2 + 5 - přiřadí do proměnné výsledek operac +, -, *, / mezi dvěma proměnnými / čísly
GOTO 1050 - skočí na řádek 1050
GOSUB 1020 - totéž, rozdíl viz níže
RETURN - skočí na řádek, odkud byl vykonán poslední příkaz GOSUB
FOR i = 1 TO b2 - for cyklus, proměnné se mohou "menit za běhu"
NEXT - konec for cyklu, neboli skok zpět na nejbližší předchozí FOR a inkrementace
IF a < 2 THEN GOTO 10 - pokud je splněna podmínka, jde na řádek specifikovaný na konci, podmínka obsahuje dvě proměnné / čísla a operátory <, >, <=, >=, <>, =
END - ukončí program

+ošetřit chyby syntaxe, ošetřit že nesmí být RETURN uvnitř FOR cyklu, nesmí být RETURN nebo NEXT bez FOR cyklul nebo GOSUB, řádky nezačínající číslem, neexistující příkazy, ...
Můj "ne přílíš pěkný" zdroják je přiložen, stejně jako testy.
BASIC.txt
Zdrojovy kod
(14.25 KiB) Staženo 417 x
BASICtests.zip
Testy
(2.25 KiB) Staženo 322 x
Času bylo dost (3 a něco hodiny), úspěšnost nevím, já odešel hodinu před koncem jako první.
Návštěvník

Re: NPRG035 Jazyk C# a platforma .NET

Příspěvek od Návštěvník »

myslim zes to dal jako jediny.(pokud se nemilim)
jsem si to trochu protach i prez cas a stejnak mi chybelo 5 minutek na odladeni, hloupej preklep mel jsem : list<int>.Remove(int index) , ale me bejt list<int>.RemoveAt(int index), njn to je tim jak v tom clovek nepise a tim casovyp presem. Ale nato ze jsem si VS2005 nainstaloval 26.1 a slaidy stah 28.1 tak bych si to stejnak nezaslouzil dat ;]

Diky za zdrojak, mas tam sikovne resene ty komentare(kodove) a resit ty chyby v kodu pomoci vyjimek me nenapadlo ;[

Ale jinak celkem prijemne stravene dopoledn ;]]]
Uživatelský avatar
Petr-H
Matfyz(ák|ačka) level II
Příspěvky: 81
Registrován: 30. 1. 2006 14:18
Typ studia: Informatika Mgr.
Bydliště: VŠK 17. listopadu
Kontaktovat uživatele:

Re: NPRG035 Jazyk C# a platforma .NET

Příspěvek od Petr-H »

Návštěvník píše:Diky za zdrojak, mas tam sikovne resene ty komentare(kodove) a resit ty chyby v kodu pomoci vyjimek me nenapadlo ;[
Můj názor je, že pokud je v zadání těchto zápočtových příkladů požadováno ošetřování chyb, tak se počítá s řešením pomocí vyjímek, minimálně proto aby si zadávající ověřil že je umíme používat (a taky proto že je to obecně jednodušší přístup) :)
graham realyze

Re: NPRG035 Jazyk C# a platforma .NET

Příspěvek od graham realyze »

Tak zadani pro 4. 2. dopoledni termin bylo "konzolove hledani min".

Pry ze solitaire uz byl, tak ted je na rade tohle. Ze zacatku jsem valil oci, protoze ten clovek popsal dve tabule ruznymi pravidly a podobne (chtel, abychom pouzivai ruzne barvy pro ruzne stavy policek, pak tam mohla byt na policku vlajecka nebo otaznicek, kdyz se zmacklo F1, melo se docasne odkryt vsechno, kdyz se zmacklo X, fungovalo to jako soucasne zmacknuti L i P tlacitka mysi ve wokenich minach (odkryti vic policek najednou) atd.)

Ale zas tak tezky to nebylo. Teda respektive myslenkove skoro vubec, jen to bylo docela pracne.

Celkove zatim asi jedno z nejlehcich zadani (muj subjektivni dojem).
Tom
Matfyz(ák|ačka) level I
Příspěvky: 17
Registrován: 1. 1. 2007 22:29
Typ studia: Informatika Mgr.

Re: NPRG035 Jazyk C# a platforma .NET

Příspěvek od Tom »

graham realyze píše:Tak zadani pro 4. 2. dopoledni termin bylo "konzolove hledani min".

Pry ze solitaire uz byl, tak ted je na rade tohle. Ze zacatku jsem valil oci, protoze ten clovek popsal dve tabule ruznymi pravidly a podobne (chtel, abychom pouzivai ruzne barvy pro ruzne stavy policek, pak tam mohla byt na policku vlajecka nebo otaznicek, kdyz se zmacklo F1, melo se docasne odkryt vsechno, kdyz se zmacklo X, fungovalo to jako soucasne zmacknuti L i P tlacitka mysi ve wokenich minach (odkryti vic policek najednou) atd.)

Ale zas tak tezky to nebylo. Teda respektive myslenkove skoro vubec, jen to bylo docela pracne.

Celkove zatim asi jedno z nejlehcich zadani (muj subjektivni dojem).
Zdravim.

Co se týče mě, největší problém byl zjistit, jak to vlatně na té konzoli udělat (Ježek nám napsal nějaké funkce, které by se nám mohli hodit. Většinu jsem použil. K zadání bych chtěl ještě doplnit, že program se volal:

Kód: Vybrat vše

MojeMiny.exe sirka_tabulky vyska_tabulky celkovy_pocet_min
Pro představu přidávám svůj zdroják. Upozorňuji, že kdybych to dělal doma, tak by to mělo tak poloviční velikost (dělané metodou Ctrl+C, Ctrl+V). Na nějaké private, public atd., na to se tu nehraje, takže tak vypadá i můj zdroják.
Přílohy
MojeMiny.cs.txt
(13.69 KiB) Staženo 384 x
Joe
Matfyz(ák|ačka) level I
Příspěvky: 2
Registrován: 4. 2. 2008 21:29
Typ studia: Informatika Bc.

Re: NPRG035 Jazyk C# a platforma .NET

Příspěvek od Joe »

Zadani odpoledniho terminu vypadalo asi nejak nasledovne:
Naprogramovat jednoduchy SQL server. Na vstupu bylo jmeno vstupniho souboru s sql prikazem a jmeno vystupniho souboru (tedy program se spoustel napr. nejak takhle: "server.exe query1.q outputfile.txt"). SQL prikaz obsavoval cast SELECT, FROM a mohl a nemusel obsahovat cast WHERE. Cast WHERE mohla obsahovat dva typy omezeni:
a) sloupec = 'hodnota'
b) tabulka1.sloupec = tabulka2.sloupec
Soubor s dotazem vypadal napr. takhle:

Kód: Vybrat vše

SELECT e.FirstName & e.LastName & o.OrderDate & c.ContactName & c.CompanyName FROM o = Orders & e = Employees & c = Customers WHERE o.EmployeeID = e.EmployeeID & o.CustomerID = c.CustomerID
K dispozici byly dale soubory s daty jednotlivych tabulek - Employees, Customers ... Ty obsahovaly na zacatku vycet dvojic <typ, nazev sloupce> tabulky a pak data tabulky oddelene strednikem. Nejak takhle:

Kód: Vybrat vše

Columns:
string Address
DateTime BirthDate
string City
PRIMARY_KEY int EmployeeID
string FirstName
string LastName
int? ReportsTo
string Title
Data:
507 - 20th Ave. E.<br />Apt. 2A;8.12.1948 0:00:00;Seattle;1;Nancy;Davolio;2;Sales Representative
908 W. Capital Way;19.2.1952 0:00:00;Tacoma;2;Andrew;Fuller;NULL;Vice President, Sales
722 Moss Bay Blvd.;30.8.1963 0:00:00;Kirkland;3;Janet;Leverling;2;Sales Representative
4110 Old Redmond Rd.;19.9.1937 0:00:00;Redmond;4;Margaret;Peacock;2;Sales Representative
14 Garrett Hill;4.3.1955 0:00:00;London;5;Steven;Buchanan;2;Sales Manager
Coventry House<br />Miner Rd.;2.7.1963 0:00:00;London;6;Michael;Suyama;5;Sales Representative
Edgeham Hollow<br />Winchester Way;29.5.1960 0:00:00;London;7;Robert;King;5;Sales Representative
4726 - 11th Ave. N.E.;9.1.1958 0:00:00;Seattle;8;Laura;Callahan;2;Inside Sales Coordinator
7 Houndstooth Rd.;27.1.1966 0:00:00;London;9;Anne;Dodsworth;5;Sales Representative
Otaznik za typem znamena, ze dany sloupec muze met hodnotu NULL. Vystupem pak mel byt vyhodnoceny SQL vyraz. Mel vypadat napr. asi nejak takhle:

Kód: Vybrat vše

Columns:
string ContactName
string CompanyName
Data:
Maria Anders;Alfreds Futterkiste;
Ana Trujillo;Ana Trujillo Emparedados y helados;
Antonio Moreno;Antonio Moreno Taquería;
Thomas Hardy;Around the Horn;
Christina Berglund;Berglunds snabbk├╢p;
Hanna Moos;Blauer See Delikatessen;
Frédérique Citeaux;Blondesddsl pere et fils;
Martín Sommer;Bólido Comidas preparadas;
Laurence Lebihan;Bon app';
Elizabeth Lincoln;Bottom-Dollar Markets;
Victoria Ashworth;B's Beverages;
Patricio Simpson;Cactus Comidas para llevar;
Francisco Chang;Centro comercial Moctezuma;
Pedro Afonso;Comércio Mineiro;
Elizabeth Brown;Consolidated Holdings;
Sven Ottlieb;Drachenblut Delikatessen;
Janine Labrune;Du monde entier;
Ann Devon;Eastern Connection;
Roland Mendel;Ernst Handel;
Aria Cruz;Familia Arquibaldo;
Diego Roel;FISSA Fabrica Inter. Salchichas S.A.;
Martine Rancé;Folies gourmandes;
Maria Larsson;Folk och fä HB;
Peter Franken;Frankenversand;
Carine Schmitt;France restauration;
Bylo toho zase hodne na psani, hlavne pri joinovani tabulek. Kdyz jsem odchazel (asi 1,5 hod po puvodne planovanem terminu), tak to tam jeste nikdo nemel, tak by me docela zajimalo, kolik lidi to vlastne nakonec dalo. Hodne zdaru!
Přílohy
Queries&Results.zip
(11.95 KiB) Staženo 346 x
Tables.zip
(17.58 KiB) Staženo 342 x
Odpovědět

Zpět na „Ostatní“