![]() |
[C] variable naar 'commando'
Ok even bezig met c progje...
stel: het programma word gestart: >> calc 2 5 * (calc a b c) << 10 Kortom moet met die drie dingen gevormt worden door een som. 2*5=10 Hoe kan je dat doen in c (of c++)? Hoe kan je de input afhandelen als 'som'. Ik kan ook wel doen dat ik kijk of ik een operator heb en dan met if-jes, maar ik denk dat het ook wel in 1 keer kan? Dus niet: if (c=="*") { d = a * b; } else if (c == "+") { ... maar rechtstreeks: d = a c b; Iemand? |
ik snap je vraag niet.
en dat zegt heel wat |
ik denk dat de TS dit wil
(bij gebrek aan C kennis kloot ik wat aan) Code:
|
met een stack of lijst en een evaluator.
simpel gezegd: je analyseert de string. er staat "43 * 34" dit moet je opsplitsten in: "43" "*" "34" dat kan met strtok, lees daar de manual page van. "43" en "34" zet je met atoi om in integers. dan maak je een stack. Een stack is domweg een lijst die je van FIFO (first in first out) evalueert. De functies in kwestie zijn 'pop' en 'push' - push doet er 1tje op, pop er 1tje af. Je maakt een lijst met de volgende volgorde: * 43 34 je kunt in principe het eerste lijstelement een functie maken (die een de rest van de lijst evalueert) maar omdat je het zo simpel kunt maken kun je een evaluator als volgt maken: Code:
struct geschakelde_lijst { |
Ok bedankt. Ik wist verder wel dat het met stacks het beste was enzo. Ik heb wel heel wat programmeerkennis. Maar het ging me om dat de input uitgevoerd kon worden eigenlijk als commando.
Dat kon met PHP wel gedaan worden. Maar ik hoopte dat het ook kon met C, maar ik moet het dus gewoon uitschrijven. Nogmaals iig bedankt voor de reacties. |
Citaat:
|
Citaat:
hmm... wel functioneel :P |
Citaat:
|
Citaat:
|
Citaat:
|
Citaat:
|
Citaat:
|
Citaat:
vandaar uit is 't een kwestie van elementen uit de queue nemen en eventueel in een LIFO stack te stoppen en daarmee de bewerkingen te doen. Practisch voorbeeld. Als je 1 + 1 hebt, stop je het in een FIFO queue in RPN: 1 1 + Daarna begin je ze er een voor een uit te halen 1 .. Stop je in een LIFO stack 1 .. Stop je ook in een LIFO stack + .. Je pop'd twee uit de LIFO stack en bewerkt ze en pusht het resultaat terug de LIFO stack in. Aan het einde kan je de uitslag van de expressie uit je LIFO stack halen. Zo ongeveer werkt het geloof ik als ik 't goed onthouden hebt. Maar in den beginne heb je dus een FIFO queue. |
Citaat:
|
Citaat:
Maar daar heb ik vooralsnog weinig practische ervaring mee. Blijft 't feit dat je niet betweterig met pannenkoeken aan moet komen zetten als je ook gewoon kan helpen. Voor lol kan je bij onzin terecht. |
Citaat:
|
ahem, my bad.
Ja, een stack is idd FILO of LIFO. Maar met een queue is het in ieder geval ook wel op te lossen. Ik heb een (incomplete) s-expressie evaluator gemaakt . lisp_exp.tar.bz2 zou redelijk portable moeten zijn, en er zijn geen bugs bekend. compilatie doe je zo: # cc main.c printlist.c lisp_func.c lisp_input.c is niet ubersimpel, werkt wel redelijk aardig :) werkt met domme lijsten. |
Alle tijden zijn GMT +1. Het is nu 18:33. |
Powered by vBulletin® Version 3.8.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.