<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Calcifer &#187; c</title>
	<atom:link href="http://blog.calcifer.com.ar/tag/c/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.calcifer.com.ar</link>
	<description></description>
	<lastBuildDate>Sat, 02 Oct 2010 05:32:38 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Calculadora de notación polaca inversa en C</title>
		<link>http://blog.calcifer.com.ar/2009/04/calculadora-de-notacion-polaca-inversa-en-c/</link>
		<comments>http://blog.calcifer.com.ar/2009/04/calculadora-de-notacion-polaca-inversa-en-c/#comments</comments>
		<pubDate>Wed, 15 Apr 2009 18:16:13 +0000</pubDate>
		<dc:creator>lvidarte</dc:creator>
				<category><![CDATA[None]]></category>
		<category><![CDATA[c]]></category>
		<category><![CDATA[code]]></category>

		<guid isPermaLink="false">http://blog.calcifer.com.ar/?p=419</guid>
		<description><![CDATA[La Notación Polaca Inversa (RPN en inglés, Reverse Polish Notation) es un método de introducción de datos alternativo al algebráico. Fue creada en 1920 por el matemático polaco Jan Lukasiewicz como una forma de escribir expresiones matemáticas sin tener que utilizar paréntesis y corchetes.
En la notación polaca inversa los operadores suceden a sus operandos. Por [...]]]></description>
			<content:encoded><![CDATA[<p>La Notación Polaca Inversa (RPN en inglés, Reverse Polish Notation) es un método de introducción de datos alternativo al algebráico. Fue creada en 1920 por el matemático polaco Jan Lukasiewicz como una forma de escribir expresiones matemáticas sin tener que utilizar paréntesis y corchetes.</p>
<p>En la notación polaca inversa los operadores suceden a sus operandos. Por ejemplo, la expresión algebráica<code>5+((1+2)*4)-3</code>se traduce a la notación polaca inversa como<code>5 1 2 + 4 * + 3 -</code>.</p>
<p>Su principio es el de evaluar los datos directamente cuando se introducen y manejarlos dentro de una estructura LIFO (Last In First Out), lo que optimiza los procesos a la hora de programar.</p>
<p>El siguiente programa es una implementación en C de una calculadora que funciona con notación polaca inversa. El programa es una versión modificada del que figura en el libro &#8220;<a href="http://en.wikipedia.org/wiki/The_C_Programming_Language_(book)" class="external">El lenguaje de programación C</a>&#8221; de Kernighan y Ritchie.</p>
<div class="codecolorer-container c blackboard" style="overflow:auto;white-space:nowrap;width:435px;height:500px"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br />47<br />48<br />49<br />50<br />51<br />52<br />53<br />54<br />55<br />56<br />57<br />58<br />59<br />60<br />61<br />62<br />63<br />64<br />65<br />66<br />67<br />68<br />69<br />70<br />71<br />72<br />73<br />74<br />75<br />76<br />77<br />78<br />79<br />80<br />81<br />82<br />83<br />84<br />85<br />86<br />87<br />88<br />89<br />90<br />91<br />92<br />93<br />94<br />95<br />96<br />97<br />98<br />99<br />100<br />101<br />102<br />103<br />104<br />105<br />106<br />107<br />108<br />109<br />110<br />111<br />112<br />113<br />114<br />115<br />116<br />117<br />118<br />119<br />120<br />121<br />122<br />123<br />124<br />125<br />126<br />127<br />128<br />129<br />130<br />131<br />132<br />133<br /></div></td><td><div class="c codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="co2">## ************</span><br />
<span class="co2">## @file calc.c</span><br />
<span class="co2">## ************</span><br />
<br />
<span class="co2">#include &lt;stdio.h&gt;</span><br />
<span class="co2">#include &lt;stdlib.h&gt;</span><br />
<br />
<span class="co2">#define MAXVAL 100</span><br />
<span class="co2">#define NUMBER '0'</span><br />
<br />
<span class="coMULTI">/**<br />
&nbsp;* &nbsp;Variables<br />
&nbsp;*/</span><br />
<span class="kw4">int</span> verbose<span class="sy0">;</span><br />
<span class="kw4">int</span> sp <span class="sy0">=</span> <span class="nu0">0</span><span class="sy0">;</span><br />
<span class="kw4">double</span> val<span class="br0">&#91;</span>MAXVAL<span class="br0">&#93;</span><span class="sy0">;</span><br />
<br />
<span class="coMULTI">/**<br />
&nbsp;* &nbsp;Prototypes<br />
&nbsp;*/</span><br />
<span class="kw4">int</span> toi <span class="br0">&#40;</span><span class="kw4">char</span> <span class="kw4">const</span> <span class="sy0">*</span>s<span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="kw4">void</span> push <span class="br0">&#40;</span><span class="kw4">double</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="kw4">double</span> pop <span class="br0">&#40;</span><span class="kw4">void</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<br />
<span class="coMULTI">/**<br />
&nbsp;* &nbsp;Main<br />
&nbsp;*/</span><br />
<span class="kw4">int</span> main <span class="br0">&#40;</span><span class="kw4">int</span> argc<span class="sy0">,</span> <span class="kw4">char</span> <span class="kw4">const</span> <span class="sy0">*</span>argv<span class="br0">&#91;</span><span class="br0">&#93;</span><span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
&nbsp; <span class="kw4">int</span> offset<span class="sy0">,</span> i<span class="sy0">;</span><br />
&nbsp; <span class="kw4">double</span> op2<span class="sy0">;</span><br />
<br />
&nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>argc <span class="sy0">&lt;</span> <span class="nu0">2</span><span class="br0">&#41;</span><br />
&nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; fprintf <span class="br0">&#40;</span>stderr<span class="sy0">,</span> <br />
&nbsp; &nbsp; &nbsp; <span class="st0">&quot;Usage: %s [-v] EXP<span class="es1">\n</span>&quot;</span><span class="sy0">,</span> argv<span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">return</span> <span class="nu0">1</span><span class="sy0">;</span><br />
&nbsp; <span class="br0">&#125;</span><br />
<br />
&nbsp; verbose <span class="sy0">=</span> offset <span class="sy0">=</span> <br />
&nbsp; &nbsp; <span class="br0">&#40;</span>strcmp <span class="br0">&#40;</span>argv<span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="sy0">,</span> <span class="st0">&quot;-v&quot;</span><span class="br0">&#41;</span> <span class="sy0">==</span> <span class="nu0">0</span><span class="br0">&#41;</span> <span class="sy0">?</span> <span class="nu0">1</span> <span class="sy0">:</span> <span class="nu0">0</span><span class="sy0">;</span><br />
&nbsp; <br />
&nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span>i <span class="sy0">=</span> <span class="nu0">1</span> <span class="sy0">+</span> offset<span class="sy0">;</span> i <span class="sy0">&lt;</span> argc<span class="sy0">;</span> i<span class="sy0">++</span><span class="br0">&#41;</span><br />
&nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">switch</span> <span class="br0">&#40;</span>toi <span class="br0">&#40;</span>argv<span class="br0">&#91;</span>i<span class="br0">&#93;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; <span class="kw1">case</span> <span class="st0">'+'</span> <span class="sy0">:</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>verbose<span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span class="kw3">printf</span></a> <span class="br0">&#40;</span><span class="st0">&quot;operator +<span class="es1">\n</span>&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; push <span class="br0">&#40;</span>pop<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy0">+</span> pop<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">break</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; <span class="kw1">case</span> <span class="st0">'-'</span> <span class="sy0">:</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>verbose<span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span class="kw3">printf</span></a> <span class="br0">&#40;</span><span class="st0">&quot;operator -<span class="es1">\n</span>&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; op2 <span class="sy0">=</span> pop<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; push <span class="br0">&#40;</span>pop<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy0">-</span> op2<span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">break</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; <span class="kw1">case</span> <span class="st0">'*'</span> <span class="sy0">:</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>verbose<span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span class="kw3">printf</span></a> <span class="br0">&#40;</span><span class="st0">&quot;operator *<span class="es1">\n</span>&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; push <span class="br0">&#40;</span>pop<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy0">*</span> pop<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">break</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; <span class="kw1">case</span> <span class="st0">'/'</span> <span class="sy0">:</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>verbose<span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span class="kw3">printf</span></a> <span class="br0">&#40;</span><span class="st0">&quot;operator /<span class="es1">\n</span>&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; op2 <span class="sy0">=</span> pop<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>op2 <span class="sy0">!=</span> <span class="nu16">0.0</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; push <span class="br0">&#40;</span>pop<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy0">/</span> op2<span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fprintf <span class="br0">&#40;</span>stderr<span class="sy0">,</span> <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&quot;Error: division by zero<span class="es1">\n</span>&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">break</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; <span class="kw1">case</span> NUMBER <span class="sy0">:</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; push <span class="br0">&#40;</span>atof <span class="br0">&#40;</span>argv<span class="br0">&#91;</span>i<span class="br0">&#93;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">break</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; <span class="kw1">default</span> <span class="sy0">:</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; fprintf <span class="br0">&#40;</span>stderr<span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&quot;Error: unknown operator %s<span class="es1">\n</span>&quot;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; argv<span class="br0">&#91;</span>i<span class="br0">&#93;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">break</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; <span class="br0">&#125;</span><br />
<br />
&nbsp; <span class="co1">// Result</span><br />
&nbsp; <a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span class="kw3">printf</span></a> <span class="br0">&#40;</span><span class="st0">&quot;%f<span class="es1">\n</span>&quot;</span><span class="sy0">,</span> val<span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<br />
&nbsp; <span class="kw1">return</span> <span class="nu0">0</span><span class="sy0">;</span><br />
<br />
<span class="br0">&#125;</span><br />
<br />
<span class="coMULTI">/**<br />
&nbsp;* &nbsp;Toi<br />
&nbsp;*/</span><br />
<span class="kw4">int</span> toi <span class="br0">&#40;</span><span class="kw4">char</span> <span class="kw4">const</span> <span class="sy0">*</span>s<span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
&nbsp; <span class="kw1">return</span> <span class="br0">&#40;</span>isdigit<span class="br0">&#40;</span>s<span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="sy0">?</span> <br />
&nbsp; &nbsp; NUMBER <span class="sy0">:</span> <span class="br0">&#40;</span><span class="kw4">int</span><span class="br0">&#41;</span> s<span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><br />
<br />
<span class="coMULTI">/**<br />
&nbsp;* &nbsp;Push<br />
&nbsp;*/</span><br />
<span class="kw4">void</span> push <span class="br0">&#40;</span><span class="kw4">double</span> e<span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
&nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>sp <span class="sy0">&lt;</span> MAXVAL<span class="br0">&#41;</span><br />
&nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>verbose<span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; <a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span class="kw3">printf</span></a> <span class="br0">&#40;</span><span class="st0">&quot;push %f in %d<span class="es1">\n</span>&quot;</span><span class="sy0">,</span> e<span class="sy0">,</span> sp<span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; val<span class="br0">&#91;</span>sp<span class="sy0">++</span><span class="br0">&#93;</span> <span class="sy0">=</span> e<span class="sy0">;</span><br />
&nbsp; <span class="br0">&#125;</span><br />
&nbsp; <span class="kw1">else</span><br />
&nbsp; &nbsp; fprintf <span class="br0">&#40;</span>stderr<span class="sy0">,</span> <span class="st0">&quot;Error: full stack<span class="es1">\n</span>&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><br />
<br />
<span class="coMULTI">/**<br />
&nbsp;* &nbsp;Pop<br />
&nbsp;*/</span><br />
<span class="kw4">double</span> pop <span class="br0">&#40;</span><span class="kw4">void</span><span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
&nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>sp <span class="sy0">&gt;</span> <span class="nu0">0</span><span class="br0">&#41;</span><br />
&nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="sy0">--</span>sp<span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>verbose<span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; <a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span class="kw3">printf</span></a> <span class="br0">&#40;</span><span class="st0">&quot;pop %f from %d<span class="es1">\n</span>&quot;</span><span class="sy0">,</span> val<span class="br0">&#91;</span>sp<span class="br0">&#93;</span><span class="sy0">,</span> sp<span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">return</span> val<span class="br0">&#91;</span>sp<span class="br0">&#93;</span><span class="sy0">;</span><br />
&nbsp; <span class="br0">&#125;</span><br />
&nbsp; <span class="kw1">else</span><br />
&nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; fprintf <span class="br0">&#40;</span>stderr<span class="sy0">,</span> <span class="st0">&quot;Error: empty stack<span class="es1">\n</span>&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">return</span> <span class="nu16">0.0</span><span class="sy0">;</span><br />
&nbsp; <span class="br0">&#125;</span><br />
<span class="br0">&#125;</span></div></td></tr></tbody></table></div>
<p>Para compilarlo ejecutamos</p>
<div class="codecolorer-container bash blackboard" style="overflow:auto;white-space:nowrap;width:435px"><div class="bash codecolorer" style="font-family:Monaco,Lucida Console,monospace">$ <span class="kw2">gcc</span> <span class="re5">-o</span> calc calc.c</div></div>
<p>A diferencia del programa original publicado en el libro de C, aquí se utiliza el array<code>argv[]</code>como fuente de operandos y operadores. Esto permite que podamos llamar al programa desde línea de comandos de la siguiente manera:</p>
<div class="codecolorer-container bash blackboard" style="overflow:auto;white-space:nowrap;width:435px"><div class="bash codecolorer" style="font-family:Monaco,Lucida Console,monospace">$ .<span class="sy0">/</span>calc <span class="nu0">5</span> <span class="nu0">1</span> <span class="nu0">2</span> + <span class="nu0">4</span> \<span class="sy0">*</span> + <span class="nu0">3</span> -</div></div>
<p>Notar que para el caso especial del operador multiplicación, debemos <i>escaparlo</i> para evitar la expansión propia de bash antes de la llamada efectiva al programa.</p>
<p>El programa admite la opción<code>-v</code>(verbose), que muestra información acerca de uno de los pasos realizados.</p>
<h4>Ejemplo I</h4>
<div class="codecolorer-container text blackboard" style="overflow:auto;white-space:nowrap;width:435px;height:300px"><div class="text codecolorer" style="font-family:Monaco,Lucida Console,monospace">$ ./calc -v 5 1 2 + 4 \* + 3 -<br />
push 5.000000 in 0<br />
push 1.000000 in 1<br />
push 2.000000 in 2<br />
operator +<br />
pop 2.000000 from 2<br />
pop 1.000000 from 1<br />
push 3.000000 in 1<br />
push 4.000000 in 2<br />
operator *<br />
pop 4.000000 from 2<br />
pop 3.000000 from 1<br />
push 12.000000 in 1<br />
operator +<br />
pop 12.000000 from 1<br />
pop 5.000000 from 0<br />
push 17.000000 in 0<br />
push 3.000000 in 1<br />
operator -<br />
pop 3.000000 from 1<br />
pop 17.000000 from 0<br />
push 14.000000 in 0<br />
14.000000</div></div>
<p><span id="more-419"></span></p>
<h4>Ejemplo II</h4>
<p>La expresión algebráica (de resultado -3)</p>
<div class="codecolorer-container text " style="overflow:auto;white-space:nowrap;width:435px"><div class="text codecolorer" style="font-family:Monaco,Lucida Console,monospace">(3 * 9 / ((4 - 1) * 3)) - 6</div></div>
<p>Tiene la siguiente notación polaca inversa</p>
<div class="codecolorer-container text blackboard" style="overflow:auto;white-space:nowrap;width:435px;height:300px"><div class="text codecolorer" style="font-family:Monaco,Lucida Console,monospace">$ ./calc -v 3 9 \* 4 1 - 3 \* / 6 -<br />
push 3.000000 in 0<br />
push 9.000000 in 1<br />
operator *<br />
pop 9.000000 from 1<br />
pop 3.000000 from 0<br />
push 27.000000 in 0<br />
push 4.000000 in 1<br />
push 1.000000 in 2<br />
operator -<br />
pop 1.000000 from 2<br />
pop 4.000000 from 1<br />
push 3.000000 in 1<br />
push 3.000000 in 2<br />
operator *<br />
pop 3.000000 from 2<br />
pop 3.000000 from 1<br />
push 9.000000 in 1<br />
operator /<br />
pop 9.000000 from 1<br />
pop 27.000000 from 0<br />
push 3.000000 in 0<br />
push 6.000000 in 1<br />
operator -<br />
pop 6.000000 from 1<br />
pop 3.000000 from 0<br />
push -3.000000 in 0<br />
-3.000000</div></div>
<h4>Referencias</h4>
<ul>
<li><a href="http://en.wikipedia.org/wiki/Polish_notation" class="external">Polish notation</a></li>
<li><a href="http://en.wikipedia.org/wiki/Reverse_Polish_notation" class="external">Reverse Polish notation</a></li>
<li><a href="http://h41111.www4.hp.com/calculators/es/es/articles/rpn.html" class="external">RPN: Introducción a la notación polaca inversa</a></li>
<li><a href="http://codigomaldito.blogspot.com/2008/04/calculadora-con-notacin-polaca-inversa.html" class="external">Calculadora con notación polaca inversa en C</a><br />(código original publicado en libro de C)</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.calcifer.com.ar/2009/04/calculadora-de-notacion-polaca-inversa-en-c/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

