» »

[C] Seznam s poljem

[C] Seznam s poljem

aceton ::

Pozdravljeni

narediti moram seznam s polejm in sicer tako, da moram implementirat pdatkovno strukturo vsaNarocila, ki je polje elementov tipa narocilo in hrani podatke o vseh podanih naročilih. posamezni elementi tega polaja so torej tipa narocilo in omogočajo hranjenje podatkov o mizi, natakarju, datumu, jedi, kolicini in statusu jedi. Vemo, da ima restavracija 77 miz. Status jedi pa izgleda tako, da po natakarjevemu vnosu enka "vneseeno", po kuharjevi končni potrditvi pa "prirpavljeno".

prosim za pomoč
  • spremenil: Mavrik ()

Vesoljc ::

in kje je problem? domacih nalog ti ne bomo reseval, povej kje se ti zatakne.
Abnormal behavior of abnormal brain makes me normal...

aceton ::

Zatakne se mi že na samem začeetku...in sicer deklariram strukturo
struct narocila {
int miza;
char natakar[10];
int datum;
char jed[12];
int kolicina;
char status;

};

narocila VsaNarocila[100]; // tuki mi javi program napako in ne vem zakaj

no in potem ne vem na kakšn način naredim, da uporabnik (natakar) vpisuje podatke v to polje

Pimoz ::

ojoj....dej mal pazi na memory use. ker tole vodi v katastrofo.

Vesoljc ::

Pimoz je izjavil:

ojoj....dej mal pazi na memory use. ker tole vodi v katastrofo.


do explain please...
Abnormal behavior of abnormal brain makes me normal...

Vesoljc ::

aceton je izjavil:

Zatakne se mi že na samem začeetku...in sicer deklariram strukturo
struct narocila {
int miza;
char natakar[10];
int datum;
char jed[12];
int kolicina;
char status;

};

narocila VsaNarocila[100]; // tuki mi javi program napako in ne vem zakaj

no in potem ne vem na kakšn način naredim, da uporabnik (natakar) vpisuje podatke v to polje


in zakaj ne napises kake napake ti javi?
Abnormal behavior of abnormal brain makes me normal...

commissar ::

struct narocila {
int miza;
char natakar[10];
int datum;
char jed[12];
int kolicina;
char status;

}
narocila VsaNarocila[100];

probej to,
ko ne boš mogel dostopati do fieldov v structu jih pa daj na public

Zgodovina sprememb…

amacar ::

Polje v C# se drugače inicializira.
narocila []VsaNarocila=new narocila[100];
VsaNarocila[0].miza=1 //primer pisanja v strukturo

Pimoz ::

@Vesoljc
Tole sicer ni bilo še blizu katastrofe, vendar sem že večkrat videl nadaljevanje teh primerov v stilu:
struct narocila {
int miza;
char natakar[10];
int datum;
char jed[12];
int kolicina;
char status;
}
narocila VsaNarocila[100000];

Stvar postane kar zabavna. Lahko pa da avtor teme ni hotel zatavati v te vode. V tem primeru se pardoniram.

mihies ::

amacar ima prav. A strukturo ti pa prevede na tak način - mislim tista char[] polja?
Sicer pa uporabi raje kar string namesto char[]. To ni C :)
http://blog.rthand.com/
SLODUG - uporabniška skupina
https://www.facebook.com/groups/slodug/

aceton ::

pri inicializaciji polja na način: narocila []VsaNarocilanew narocila[100]; mi javlja napako in sicer, citiram:
syntax error before '[' token
'VsaNarocila' undeclared (fisrt use in this function)
(Each undeclared identifier is reported only once for each function it appears in.)
in tut prvič vidm to inicializacijo za polja

drugače, če uporabim char niz[5] mi prevede, če v oklepajih ne napišem nobene številke mi tut javi napako.

amacar ::

Pa ka ti sploh delaš C# ali imaš C++ to?

Recimo:
class Program
    {
        struct narocila {
        public int miza;
        public string natakar;
        public string datum; 
        public string jed;
        public int kolicina;
        public int status;
        };
        static void Main(string[] args)
        {
            narocila []VsaNarocila=new narocila[100];
            VsaNarocila[0].miza = 1;
            VsaNarocila[0].natakar = "Joze";
            VsaNarocila[0].datum = "7.3.2013";
            VsaNarocila[0].jed = "Polenta";
            VsaNarocila[0].kolicina = 1;
            VsaNarocila[0].status = 1;

            Console.WriteLine(VsaNarocila[0].miza.ToString());
            Console.WriteLine(VsaNarocila[0].natakar);
            Console.WriteLine(VsaNarocila[0].datum);
            Console.WriteLine(VsaNarocila[0].jed);
            Console.WriteLine(VsaNarocila[0].kolicina.ToString());
            Console.WriteLine(VsaNarocila[0].status.ToString());
            Console.ReadKey();
        }
    }

mihies ::

Da ni pomešal ++ -> # :D
http://blog.rthand.com/
SLODUG - uporabniška skupina
https://www.facebook.com/groups/slodug/

aceton ::

Delam v programskem jeziku C
in ne c++

Senitel ::

In zakaj potem C# v naslovu?

aceton ::

moja napaka

darkkk ::

Torej, kje smo ostali ?
Ti moraš narest seznam, v katerem živijo tvoje živali (naročila itd).

celica v seznamu ti bo:

//deli za seznam
struct narocilo
{
 int id;
 ...

}


struct cell
{
 struct cell *next; 
 struct narocilo *content;
};

//konstruktor za narocilo (sam je pač funkcija)
bool narediNarocilo(struct narocilo *p, int id, ...)
{
 p = malloc(sizeof(narocilo));
 p->id = id;
 ...
}

//dodajanje v list zgleda pol tko(korake načeloma lahko združuješ):
1. narediš tvoje naročilo (če ne veš v naprej koliko in od kje prihajajo, jih moraš delat @runtime, tko da raznim malloc-om ne boš ušel. 
2. poturiš tvoje naročilo v celico
3. potisneš tvojo celico nekam v seznam


aceton ::

torej ostali smo nekako na začetku :/
torej strukturo naredim tako ja
struct narocila{
};


in ker imam jst seznam na osnovi polja (navodila naloge) naredim polje
struct narocila VsaNarocila[100];

torej nekak predvidevam, da ta del odpade:
struct cell
{
struct cell *next;
struct narocilo *content;
};

tadej123321 ::

Hey, ne vem če ti bo tole kej pomagalo, vendar če bi jaz recimo moral kaj podobnega napisati, bi naredil takole:
struktura:
typedef struct{
        int miza;
        char natakar[10];
        int datum;
        char jed[10];
        int kolicina;
        int status;        //1...vneseno   2...pripravljeno
        }narocilo;


ker pa maš število miz razločno on 0, recimo, 77, definiraš še konstanto #define MIZ 77
potem pa znotraj programa ustvariš seznam:
narocilo *vsaNarocila;
	 vsaNarocila=(narocilo*)malloc(MIZ*sizeof(narocilo));

aceton ::

zakaj vsi s kazalci delate? ne smem s kazalci ampak striktno s polji
hvala za idejo za konstanto

drgač pa sm že nrdila in sicer da vnašam v polje...npr naredim s for zanko
ampak kako naredim, da vnesem eno narocilo in nato program skoči na začetni meni, kjer uporabnik zbere natakarja oz kuharja..in če izberem ponovno natakarja, kako napišem, da začne vpisovati v naslednje polje? torej če sem prej vpisovala v 1. polje želim sedaj vpisovati v 2. in tako naprej...

darkkk ::

Načeloma "gui" sprogramiraš tako, da maš zanko, v kateri čakaš dokler ne pride ukaz za neki novega.

npr:
int a = 1;
while(a)
{ 
   int cmd;
   printf("lepo oblikovan GUI, vpisi izbiro...");
   scanf("%d", &cmd);
   switch cmd
  {
   case 1: {a = 0; break;} //exit
   case 2: {vnesiKuharja(); break;} //kličeš funkcijo, ki...
   case 3: {izpisiElement(); break;} //izpises neki 
   default:{continue;}
  }

}




Lepota oz. nelepota C-ja je, da je treba vso "logiko" vodit na roke oz. ni nobene vgrajene strukture, ki bi to zate počela :)
Recimo, peš moraš vodit koliko maš zares vpisanih elementov v polju (hint, zato je seznam boljši), itd.

Zgodovina sprememb…

  • spremenil: darkkk ()

Klobasa ::

aceton je izjavil:

kako napišem, da začne vpisovati v naslednje polje? torej če sem prej vpisovala v 1. polje želim sedaj vpisovati v 2. in tako naprej...



lahko daš v strukturo en static counter, potem ga pa u izi ++ ter --.

tadej123321 ::

Mal pozn odgovarjam, sam vseen, če bo kej pomagal...bomo pa vidl:)
jest sm uporabu samo dinamično polje, kar pomeni da sem samo rezerviral v pomnilniku toliko in toliko prostora [beri: malloc; sizeof;... te fore] in sem ustvaril s tem polje!

kako povečevati neko spremenljivko ko skačeš iz ene funkcije v drugo in nazaj v meni?
džabe:D primer:

ko skočim v funkcijo in želim povečati spremenljivko:
nova_miza(&i);
pri čemer je potem funkcija nekako takole:
void nova_miza(int *i){
...
}

to je vsa umetnost:)

aceton ::

tadej123321 je izjavil:



ker pa maš število miz razločno on 0, recimo, 77, definiraš še konstanto #define MIZ 77
potem pa znotraj programa ustvariš seznam:
narocilo *vsaNarocila;
vsaNarocila=(narocilo*)malloc(MIZ*sizeof(narocilo));


Vnesla to v kodo vendar mi ne deljuje. tudi če vpišem 78 mi pogram normalno deluje naprej...brez prekinitive

naredila sem z if stavkom, vendar tudi brez uspeha
printf("\nVnesite steviko mize:  ");
scanf("%d",&VsaNarocila[next_free].miza);
if (VsaNarocila[next_free].miza<77) printf("Napaka!");


Ugotovila :)

Zgodovina sprememb…

  • spremenilo: aceton ()


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

[C#] sortiranje priimkov po slovenski abecedi

Oddelek: Programiranje
61592 (1403) mihies
»

[C] strukture, kazalci in točen datum/čas

Oddelek: Programiranje
6698 (566) aceton
»

c problem pri zaključevanju programa

Oddelek: Programiranje
61161 (986) BigWhale

[C#]polje znakov

Oddelek: Programiranje
112387 (2215) Ziga Dolhar
»

c++ datoteke

Oddelek: Programiranje
464058 (3547) Vesoljc

Več podobnih tem