<?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>BlackSmurf&#039;s Diary</title>
	<atom:link href="http://www.blacksmurf.net/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.blacksmurf.net</link>
	<description>Don&#039;t think you are, know you are</description>
	<lastBuildDate>Tue, 10 Apr 2012 21:46:02 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Vers une gestion personnalisée des événements avec Java</title>
		<link>http://www.blacksmurf.net/2011/04/vers-une-gestion-personnalisee-des-evenements-avec-java/</link>
		<comments>http://www.blacksmurf.net/2011/04/vers-une-gestion-personnalisee-des-evenements-avec-java/#comments</comments>
		<pubDate>Fri, 29 Apr 2011 09:49:33 +0000</pubDate>
		<dc:creator>BlackSmurf</dc:creator>
				<category><![CDATA[Programmation]]></category>
		<category><![CDATA[contrôleur]]></category>
		<category><![CDATA[événements]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[modèle]]></category>
		<category><![CDATA[mvc]]></category>
		<category><![CDATA[observateur]]></category>
		<category><![CDATA[pattern]]></category>
		<category><![CDATA[vue]]></category>

		<guid isPermaLink="false">http://www.blacksmurf.net/?p=524</guid>
		<description><![CDATA[Dans la réalisation d&#8217;une application je devais mettre en place une architecture MVC minimaliste et par conséquent implémenter un mécanisme d&#8217;événements. Voici la solution que j&#8217;ai réalisé&#8230; Dans le cadre du développement d&#8217;applications, il est de plus en plus indispensable de structurer le code selon le patron : Modèle, Vue et Contrôleur ou MVC. Cette [...]]]></description>
			<content:encoded><![CDATA[<p>Dans la réalisation d&#8217;une application je devais mettre en place une architecture MVC minimaliste et par conséquent implémenter un mécanisme d&#8217;événements. Voici la solution que j&#8217;ai réalisé&#8230;<br />
<span id="more-524"></span><br />
Dans le cadre du développement d&#8217;applications, il est de plus en plus indispensable de structurer le code selon le patron : Modèle, Vue et Contrôleur ou MVC. Cette séparation des différentes logiques nécessite la mise en place d&#8217;une gestion d&#8217;événements personnalisé afin que lorsque le modèle change, la vue en soit informé et vis et versa, quand l&#8217;utilisateur interagit sur la vue, le modèle doit prendre en compte les modifications.</p>
<p>Si des tas d&#8217;usine à gaz existent et vous proposent des patrons MVC tout prêt vous aurez peut-être besoin de développer vous même votre propre moteur.</p>
<p align="center"><a href="http://www.blacksmurf.net/wp-content/uploads/2011/04/MVC.jpg"><img class="alignnone size-full wp-image-578" title="MVC" src="http://www.blacksmurf.net/wp-content/uploads/2011/04/MVC.jpg" alt="Modèle Vue Contrôleur" width="520" height="417" /></a><br />
<em>fig. 1 &#8211; Principe du MVC</em></p>
<p>Les éléments doivent être indépendant les uns des autres et la communication s&#8217;effectue avec l&#8217;aide d&#8217;événements. Pour y arriver un mécanisme d&#8217;événements et d&#8217;écouteurs doit être mis en place selon le patron de conception (Design Pattern ou DP) &laquo;&nbsp;Observateur&nbsp;&raquo;. Avant d&#8217;aller plus loin, il est important de comprendre le fonctionnement de ce patron. Vous trouverez toute la documentation nécessaire à son implémentation sur <a href="http://fr.wikipedia.org/wiki/Observateur_(patron_de_conception)">wikipedia</a>.</p>
<p>L&#8217;idée est donc ici d&#8217;implémenter des classes qui s&#8217;inspirent du DP Observer. En me basant sur mon expérience avec AS3, j&#8217;ai tenté une approche avec la modélisation suivante :</p>
<p align="center"><a href="http://www.blacksmurf.net/wp-content/uploads/2011/04/Events00.jpg"><img class="alignnone size-medium wp-image-685" title="Events00" src="http://www.blacksmurf.net/wp-content/uploads/2011/04/Events00-300x151.jpg" alt="" width="300" height="151" /></a><br />
<em>fig 2. &#8211; Diagramme de classes : Evénements personnalisés</em></p>
<p>Pour illustrer ma gestion d&#8217;événements, j&#8217;ai choisi d&#8217;implémenter un pseudo modèle MVC : &laquo;&nbsp;ViewClass&nbsp;&raquo; et &laquo;&nbsp;ModelClass&nbsp;&raquo; étant des classes d&#8217;événements et &laquo;&nbsp;ControllerClass&nbsp;&raquo; étant l&#8217;écouteur. Pour produire un événement, les classes d&#8217;événements doivent préciser, au travers de la méthode &laquo;&nbsp;dispatchEvent&nbsp;&raquo;, le type l&#8217;événement qui s&#8217;est produit. Pour écouter, &laquo;&nbsp;ControllerClass&nbsp;&raquo; doit appeler la méthode &laquo;&nbsp;addEventListener&nbsp;&raquo; sur chacun des objets, être lui-même l&#8217;objet de retour et implémenter la méthode &laquo;&nbsp;eventPerformed&nbsp;&raquo; qui sera appelé à chaque événements (grâce à MyEventListener).</p>
<p>Plutôt que des mots, démo, passons au code avec tout d&#8217;abord l&#8217;ensemble des classes de gestion des écouteurs/événements :</p>
<pre class="brush: java; title: MyEventListener.java; notranslate">
public interface MyEventListener {
	public void eventPerformed(MyEvent e);
}
</pre>
<pre class="brush: java; title: MyEventEnum.java; notranslate">
public interface MyEventEnum {}
</pre>
<pre class="brush: java; title: MyEvent.java; notranslate">
public class MyEvent {
    private transient Object eventSource;
    private MyEventEnum eventType;

    // forcer la création d'événements avec une source et un type
    public MyEvent(Object eventSource, MyEventEnum eventType) {
        this.eventSource = eventSource;
        this.eventType = eventType;
    }

    public Object getEventSource() {
        return eventSource;
    }

    public MyEventEnum getEventType() {
        return eventType;
    }

    public String toString() {
        return eventSource.getClass().toString();
    }
}
</pre>
<pre class="brush: java; title: MyEventDispatcher.java; notranslate">
import java.util.ArrayList;
import java.util.Hashtable;
import java.util.Iterator;

public abstract class MyEventDispatcher {
	// Tableau associatif : MyEventEnum =&gt; Tableau de MyEventListener
	private Hashtable&lt;MyEventEnum, ArrayList&lt;MyEventListener&gt;&gt; listeners = new Hashtable&lt;MyEventEnum, ArrayList&lt;MyEventListener&gt;&gt;();

	public synchronized void addEventListener(MyEventEnum eventType, MyEventListener list) {
		// si l'eventType est déjà présent dans le tableau associatif
		if (listeners.containsKey(eventType)) {
			listeners.get(eventType).add(list);

		// sinon :
		} else {
			// création
			ArrayList&lt;MyEventListener&gt; t = new ArrayList&lt;MyEventListener&gt;();
			listeners.put(eventType, t);
			// puis appel récursif
			addEventListener(eventType, list);
		}

	}

	public synchronized void removeEventListener(MyEventEnum eventType, MyEventListener list) {
		if (listeners.containsKey(eventType)) {
			listeners.get(eventType).remove(list);
		}
	}

	protected boolean dispatchEvent(MyEvent e) {

		// si le type est bien présent dans la liste
		if (listeners.containsKey(e.getEventType())) {

			// on récupère tous les écouteurs
			Iterator&lt;MyEventListener&gt; l = listeners.get(e.getEventType()).iterator();
			while(l.hasNext()) {
				MyEventListener gl = l.next();

				// pour chaque écouteur, on invoque la méthode eventPerformed
				gl.eventPerformed(e);
			}

			return true;
		}

		return false;
	}
}
</pre>
<p>Maintenant, voici le code d&#8217;implémentation MVC utilisant le système :</p>
<pre class="brush: java; title: MyEventEnumModel.java; notranslate">
public enum MyEventEnumModel implements MyEventEnum {
	MODEL_EVENT1, MODEL_EVENT2;
}
</pre>
<pre class="brush: java; title: MyEventEnumView.java; notranslate">
public enum MyEventEnumView implements MyEventEnum {
	VIEW_EVENT1, VIEW_EVENT2;
}
</pre>
<pre class="brush: java; title: ModelClass.java; notranslate">
public class ModelClass extends MyEventDispatcher {

	// exemple d'utilisation...
	public void foo() {
		// ToDo....
		event1();
	}

	private void event1() {
		dispatchEvent(new MyEvent(this, MyEventEnumModel.MODEL_EVENT1));
	}

	private void event2() {
		dispatchEvent(new MyEvent(this, MyEventEnumModel.MODEL_EVENT2));
	}
}
</pre>
<pre class="brush: java; title: ViewClass.java; notranslate">
public class ViewClass extends MyEventDispatcher {

	// exemple d'utilisation...
	public void foo() {
		// ToDo....
		event1();
	}

	private void event1() {
		dispatchEvent(new MyEvent(this, MyEventEnumView.VIEW_EVENT1));
	}

	private void event2() {
		dispatchEvent(new MyEvent(this, MyEventEnumView.VIEW_EVENT2));
	}
}
</pre>
<p>Pour finir par le contrôleur :</p>
<pre class="brush: java; title: ControllerClass.java; notranslate">
// contrôleur
public class ControllerClass implements MyEventListener {
	private ModelClass model;
	private ViewClass view;

	public ControllerClass() {
		model = new ModelClass();
		view = new ViewClass();

		model.addEventListener(MyEventNumModel.MODEL_EVENT1, this);
		model.addEventListener(MyEventNumModel.MODEL_EVENT2, this);

		view.addEventListener(MyEventNumView.VIEW_EVENT1, this);
		view.addEventListener(MyEventNumView.VIEW_EVENT2, this);
	}

	// gestion des événements du modèle de la vue
	public void eventPerformed(GameEvent e) {

		// si l'événement est levé par le modèle
		if (e.getEventSource() instanceof ModelClass) {

			// quel est l'événement ?
			switch((MyEventNumModel)e.getEventType()) {

				case MODEL_EVENT1:
					break;

				case MODEL_EVENT2:
					break;
			}

		// sinon si l'événement est levé par la vue
		} else if (e.getEventSource() instanceof ViewClass) {

			// quel est l'événement ?
			switch((MyEventNumView)e.getEventType()) {

				case VIEW_EVENT1:
					break;

				case VIEW_EVENT2:
					break;
			}
		}

	}
}
</pre>
<p>Cette implémentation fonctionne très bien. Toutefois on pourrait lui reprocher le fait que les objets qui émettent des événements, à savoir ViewClass et ModelClass, soient si fortement liés à la classe MyEventDispatcher que cela bloque tout autre héritage. Des solutions existent, mais me concernant cela fera l&#8217;objet d&#8217;un prochain article <img src='http://www.blacksmurf.net/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Références:<br />
<a href="http://rom.developpez.com/java-listeners/">http://rom.developpez.com/java-listeners/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.blacksmurf.net/2011/04/vers-une-gestion-personnalisee-des-evenements-avec-java/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Redimensionnement dynamique d&#8217;une animation Flash</title>
		<link>http://www.blacksmurf.net/2011/02/redimensionnement-dynamique-flash/</link>
		<comments>http://www.blacksmurf.net/2011/02/redimensionnement-dynamique-flash/#comments</comments>
		<pubDate>Fri, 11 Feb 2011 10:13:14 +0000</pubDate>
		<dc:creator>BlackSmurf</dc:creator>
				<category><![CDATA[Programmation]]></category>
		<category><![CDATA[actionscript]]></category>
		<category><![CDATA[dynamique]]></category>
		<category><![CDATA[flash]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[redimensionner]]></category>

		<guid isPermaLink="false">http://www.blacksmurf.net/?p=367</guid>
		<description><![CDATA[Comment certain site arrive à redimensionner leur animation flash au sein de leur page HTML ? Suivez le guide&#8230; Le redimensionnement dynamique de l&#8217;animation flash : de plus en plus de site l&#8217;utilise. Que ce soit pour un bandeau de publicité ou pour afficher un catalogue de produit, d&#8217;abord surprenante, on s&#8217;aperçoit vite que cette [...]]]></description>
			<content:encoded><![CDATA[<p>Comment certain site arrive à redimensionner leur animation flash au sein de leur page HTML ? Suivez le guide&#8230;</p>
<p><span id="more-367"></span></p>
<p>Le redimensionnement dynamique de l&#8217;animation flash : de plus en plus de site l&#8217;utilise. Que ce soit pour un bandeau de publicité ou pour afficher un catalogue de produit, d&#8217;abord surprenante, on s&#8217;aperçoit vite que cette technique est diablement efficace.</p>
<p style="text-align: left;"><div class='toc wptoc'>
<h2>Sommaire</h2>
<ol class='toc-odd level-1'>
	<li>
		<a href="#FSCommand">FSCommand</a>
	</li>
	<li>
		<a href="#Lorient_objet_selon_AS3">L'orienté objet selon AS3</a>
	</li>
	<li>
		<a href="#Code_final">Code final</a>
	</li>
</ol>
</div>
<div class='wptoc-end'>&nbsp;</div></p>
<span id="FSCommand"><h1>FSCommand</h1></span>
<p>Par quelle magie peut-on arriver à ce résultat ? Une première partie de la réponse est qu&#8217;en pratique il ne faut pas chercher à redimensionner l&#8217;animation Flash mais plutôt l&#8217;objet HTML dans lequel l&#8217;animation est imbriqué. Afin que l&#8217;animation se redimensionne automatiquement, il faut définir la largeur et la hauteur de l&#8217;animation à 100%. Ainsi l&#8217;animation prend 100% de l&#8217;objet HTML dans lequel il est imbriqué et si on change la taille de cet objet, Flash se redimensionnera tout seul.</p>
<p>Concrètement, si on utilise une balise &laquo;&nbsp;div&nbsp;&raquo;, cela se traduit par le code suivant :</p>
<pre class="brush: xml; title: ; notranslate">
&lt;div id=&quot;animationID&quot; style=&quot;width: 200px; height: 300px;&quot;&gt;
   &lt;object id=&quot;monanimation&quot; width=&quot;100%&quot; height=&quot;100%&quot;&gt;
       &lt;param name=&quot;src&quot; value=&quot;monanimation.swf&quot; /&gt;
       &lt;param name=&quot;name&quot; value=&quot;monanimation&quot; /&gt;
       &lt;embed id=&quot;monanimation&quot; width=&quot;100%&quot; height=&quot;100%&quot; src=&quot;monanimation.swf&quot; name=&quot;monanimation&quot;&gt;&lt;/embed&gt;
   &lt;/object&gt;
&lt;/div&gt;
</pre>
<p>L&#8217;autre partie de la réponse se trouve dans la capacité de Flash à communiquer avec le code HTML qui l&#8217;héberge et plus particulièrement avec  le code JavaScript présent sur la page. En effet pour changer les propriétés d&#8217;une balise HTML, il conviendra d&#8217;implémenter des interfaces JavaScript afin d&#8217;assurer la communication entre l&#8217;animation et le code HTML. Dans Flash cette fonctionnalité s&#8217;appelle &laquo;&nbsp;FSCommand&nbsp;&raquo;.</p>
<p>Ainsi pour activer FSCommand dans une animation Flash et définir la taille à 100% dans le code HTML, il suffit de choisir comme modèle d&#8217;exportation HTML le modèle : &laquo;&nbsp;Flash avec FSCommand&nbsp;&raquo; et de définir les dimensions dans les paramètres de publication du format HTML.</p>
<p style="text-align: center;"><a href="http://www.blacksmurf.net/wp-content/uploads/2011/02/flash00.jpg"><img class="alignnone size-medium wp-image-397" title="Export HTML Flash" src="http://www.blacksmurf.net/wp-content/uploads/2011/02/flash00-208x300.jpg" alt="" width="208" height="300" /></a></p>
<span id="L8217orient_objet_selon_AS3"><h1>L&#8217;orienté objet selon AS3</h1></span>
<p>L&#8217;utilisation de FSCommand se fait forcement par le biais de la programmation Flash. Si d&#8217;un côté nous avons le langage JavaScript, dans Flash le langage utilisé est ActionScript.</p>
<p>Créé en 1998 l&#8217;ActionScript a eu 3 itérations. Avec l&#8217;avènement de la version 3 en 2009, le langage a complètement changé de logique. Dorénavant orienté objet, ce langage est devenu plus mature, plus normalisé et son appréhension devient plus naturel pour ceux qui développe en POO (Programmation Orienté Objet).</p>
<p>Dans Flash, la communication avec la page qui l&#8217;héberge se fait par l&#8217;appel de fonctions déclarées en JavaScript. Cet appel se réalise en utilisant la méthode de classe :
<pre class="brush: as3; title: ; notranslate">ExternalInterface.call(nom_fonction, param1, param2, ...).</pre>
<p>Ainsi en écrivant ceci dans le code de l&#8217;animation Flash :</p>
<pre class="brush: as3; title: ; notranslate">ExternalInterface.call(&quot;setSWFHeight&quot;, 400);</pre>
<p>J&#8217;appel l&#8217;interface implémenté dans la page HTML ci-dessous :</p>
<pre class="brush: jscript; title: ; notranslate">
&lt;script type=&quot;text/javascript&quot; language=&quot;JavaScript&quot;&gt;
    function setSWFHeight(_height) {
        alert(&quot;Ca marche : &quot; + _height + &quot; !&quot;);
    }
&lt;/script&gt;
</pre>
<p>Une fois la communication assuré, il ne manque plus que d&#8217;implémenter la fonction setSWFHeight correctement.</p>
<span id="Code_final"><h1>Code final</h1></span>
<p>Pour conclure vous trouverez ci-dessous le code final réalisant le redimensionnement dynamique d&#8217;une animation Flash.</p>
<span id="Code_ActionScript_de_l8217animation_Flash"><h3>Code ActionScript de l&#8217;animation Flash</h3></span>
<pre class="brush: as3; title: ; notranslate">
// Ajout du package ExternalInterface
import flash.external.ExternalInterface;

// code actionscript... //

// à utiliser dans un évènement onClick, etc...
ExternalInterface.call(&quot;setSWFHeight&quot;, 1000);
</pre>
<span id="Code_HTMLJavaScript"><h3>Code HTML/JavaScript</h3></span>
<pre class="brush: xml; title: ; notranslate">
&lt;script type=&quot;text/javascript&quot; language=&quot;JavaScript&quot;&gt;
	function setSWFWidth(_width){
		document.getElementById(&quot;animationID&quot;).style.width = _width+&quot;px&quot;;
	}

	function setSWFHeight(_height){
		document.getElementById(&quot;animationID&quot;).style.height =_height+&quot;px&quot;;
	}
&lt;/script&gt;
&lt;div id=&quot;animationID&quot; style=&quot;width:200px; height:300px;&quot;&gt;
   &lt;object classid=&quot;clsid:d27cdb6e-ae6d-11cf-96b8-444553540000&quot; codebase=&quot;http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=10,0,0,0&quot; id=&quot;monanimation&quot; width=&quot;100%&quot; height=&quot;100%&quot; align=&quot;middle&quot;&gt;
      &lt;param name=&quot;allowScriptAccess&quot; value=&quot;always&quot; /&gt;
      &lt;param name=&quot;movie&quot; value=&quot;monanimation.swf&quot; /&gt;
	  &lt;param name=&quot;quality&quot; value=&quot;high&quot; /&gt;
	  &lt;embed src=&quot;monanimation.swf&quot; quality=&quot;high&quot; width=&quot;100%&quot; height=&quot;100%&quot; swLiveConnect=true id=&quot;monanimation&quot; name=&quot;monanimation&quot; align=&quot;middle&quot; allowScriptAccess=&quot;always&quot; type=&quot;application/x-shockwave-flash&quot; pluginspage=&quot;http://www.adobe.com/go/getflashplayer_fr&quot; /&gt;
   &lt;/object&gt;
&lt;/div&gt;
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.blacksmurf.net/2011/02/redimensionnement-dynamique-flash/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Qu&#8217;est-ce qu&#8217;une couleur ?</title>
		<link>http://www.blacksmurf.net/2010/08/quest-ce-quune-couleur/</link>
		<comments>http://www.blacksmurf.net/2010/08/quest-ce-quune-couleur/#comments</comments>
		<pubDate>Mon, 23 Aug 2010 01:27:30 +0000</pubDate>
		<dc:creator>BlackSmurf</dc:creator>
				<category><![CDATA[Science]]></category>
		<category><![CDATA[couleurs]]></category>
		<category><![CDATA[lumière]]></category>
		<category><![CDATA[rvb]]></category>

		<guid isPermaLink="false">http://www.blacksmurf.net/?p=211</guid>
		<description><![CDATA[Elle est parmi nous à chaque instant de notre vie et pourtant nous sommes nombreux à ignorer ce qu&#8217;elle est. Avec mes connaissances et sans prétention, j&#8217;ai tenté l&#8217;explication de ce que peut être une couleur. Définition d&#8217;une couleur En admettant simplement que le réel est ce qui existe effectivement par opposition à l&#8217;imagination, on [...]]]></description>
			<content:encoded><![CDATA[<p>Elle est parmi nous à chaque instant de notre vie et pourtant nous sommes nombreux à ignorer ce qu&#8217;elle est. Avec mes connaissances et sans prétention, j&#8217;ai tenté l&#8217;explication de ce que peut être une couleur.</p>
<p><span id="more-211"></span><br />
<div class='toc wptoc'>
<h2>Sommaire</h2>
<ol class='toc-odd level-1'>
	<li>
		<a href="#Dfinition_dune_couleur">Définition d'une couleur</a>
	</li>
	<li>
		<a href="#La_couleur_des_objets">La couleur des objets</a>
	</li>
	<li>
		<a href="#La_reprsentation_dune_couleur">La représentation d'une couleur</a>
	</li>
	<li>
		<a href="#Le_mot_de_la_fin">Le mot de la fin</a>
	</li>
</ol>
</div>
<div class='wptoc-end'>&nbsp;</div></p>
<span id="Dfinition_d8217une_couleur"><h1>Définition d&#8217;une couleur</h1></span>
<p>En admettant simplement que le réel est ce qui existe effectivement par opposition à l&#8217;imagination, on peut dire alors que intrinsèquement la couleur n&#8217;existe pas.</p>
<p>En réalité, la couleur n&#8217;est qu&#8217;une perception subjective de l&#8217;oeil. Sans ce dernier, il n&#8217;y aurait pas de couleur. Toutefois cette perception induit qu&#8217;un élément fondamental est à l&#8217;origine : la lumière blanche. En effet, cette lumière est composé de plusieurs ondes avec des fréquences et des amplitudes différentes. Ce sont ces ondes que notre oeil interprète comme une couleur.</p>
<p style="text-align: center;"><a href="http://www.blacksmurf.net/wp-content/uploads/2010/08/prisme.jpg"><img class="size-medium wp-image-332 aligncenter" title="Décomposition et recomposition de la lumière blanche" src="http://www.blacksmurf.net/wp-content/uploads/2010/08/prisme-300x175.jpg" alt="" width="300" height="175" /></a></p>
<p style="text-align: center;"><em>fig. 1 &#8211; La lumière blanche peut être décomposé et recomposé à l&#8217;aide de prisme</em></p>
<p>Ce <em>spectre </em>est vaste et l&#8217;oeil humain n&#8217;est pas capable d&#8217;en percevoir la totalité. D&#8217;ailleurs chaque individu possède son propre spectre visible. Effectivement, nous ne percevons pas tous la même fourchette de couleurs en raison de l&#8217;âge, de la cornée, etc. Malgré cela, on est capable d&#8217;affirmer que chez l&#8217;Homme, le spectre visible varie entre 400nm et 700nm, ce qui se traduit par une variation de la couleur du violet au rouge. Au dessous se trouve alors les ultra-violets et au dessus les infra-rouges.</p>
<p style="text-align: center;"><a href="http://www.blacksmurf.net/wp-content/uploads/2010/08/Spectre.jpg"><img class="size-medium wp-image-221 aligncenter" title="Spectre" src="http://www.blacksmurf.net/wp-content/uploads/2010/08/Spectre-300x189.jpg" alt="" width="300" height="189" /></a></p>
<p style="text-align: center;"><em>fig. 2 &#8211; Le spectre visible de l&#8217;oeil humain</em></p>
<p style="text-align: center;">
<p>Si l&#8217;oeil est par conséquent le seul outil de perception, on peut alors se poser la question de savoir si d&#8217;autres espèces l&#8217;interprète de la même façon. Mark L. Winston dans son ouvrage &laquo;&nbsp;La biologie de l&#8217;Abeille&nbsp;&raquo; annonce que le spectre visible de l&#8217;abeille est différent du notre et qu&#8217;il s&#8217;étend dans les basses fréquences des ondes. Grâce à cela l&#8217;abeille serait capable de voir le soleil caché derrière un nuage !</p>
<p style="text-align: center;"><a href="http://www.blacksmurf.net/wp-content/uploads/2010/08/couleurs-visibles.jpg"><img class="size-full wp-image-213 aligncenter" title="Couleurs visibles" src="http://www.blacksmurf.net/wp-content/uploads/2010/08/couleurs-visibles.jpg" alt="" width="500" height="119" /></a></p>
<p style="text-align: center;"><em>fig. 3 &#8211; Comparaison entre le spectre visible chez l&#8217;homme et l&#8217;abeille</em></p>
<p style="text-align: left;">
<span id="La_couleur_des_objets"><h1>La couleur des objets</h1></span>
<p>Maintenant que nous savons que l&#8217;oeil et la lumière blanche sont à l&#8217;origine des couleurs, on est en droit de se demander comment on perçoit les couleurs des objets, comment cela fonctionne ?</p>
<p>Si nous projetons une lumière blanche (<em>qui correspond à l&#8217;ensemble des ondes du spectre y compris le spectre visible</em>) sur un objet, ce dernier va absorber tout ou partie les ondes et renvoyer les autres. Notre oeil va alors percevoir les ondes réfléchis et ainsi déduire une couleur. Si un objet nous apparait de couleur blanche, c&#8217;est parce qu&#8217;il n&#8217;absorbe aucune onde alors qu&#8217;un objet qui les absorberais toutes nous paraîtrait de couleur noire.</p>
<p>D&#8217;une autre manière : si nous éclairons le même objet mais avec une lumière qui n&#8217;est pas blanche : une lumière d&#8217;un projecteur comme ceux que l&#8217;on peut trouver dans les salles de concert. De quelle couleur va apparaître mon objet ? Si je prend comme exemple un cube d&#8217;origine bleu (sous la lumière blanche) que j&#8217;éclaire avec un projecteur rouge, celui-ci apparaîtra violet. Cette expérience, toute bête, qui fonctionne exactement de la même façon qu&#8217;avec de la lumière blanche, démontre une chose importante : il est possible de changer la couleur de l&#8217;objet ! A la vue de ces caractéristiques, nous pouvons en déduire que ni le cube et ni aucun objets autour de nous possède une &laquo;&nbsp;propriété&nbsp;&raquo; couleur : seule la source lumineuse et une certaine propriété d&#8217;absorption sont à l&#8217;origine de ce que notre oeil interprète comme une couleur.</p>
<p style="text-align: center;"><a href="http://www.blacksmurf.net/wp-content/uploads/2010/08/objet-2.jpg"><img class="size-medium wp-image-315 aligncenter" title="Réflexion couleur" src="http://www.blacksmurf.net/wp-content/uploads/2010/08/objet-2-300x182.jpg" alt="" width="300" height="182" /></a></p>
<p style="text-align: center;"><em>fig. 4- Couleur bleu d&#8217;un objet</em></p>
<p style="text-align: left;">
<span id="La_reprsentation_d8217une_couleur"><h1>La représentation d&#8217;une couleur</h1></span>
<p>Si la couleur n&#8217;existe pas, comment peut-on la mesurer et la reproduire ? La colorimétrie est la science qui tente d&#8217;apporter des réponses. Tout d&#8217;abord il faut être capable de définir les caractéristiques d&#8217;une couleur. Il existe plusieurs méthodes de représentation. Pour l&#8217;exemple je n&#8217;en citerais que deux, les plus connus :</p>
<ul>
<li>la synthèse additive et le format de codage RVB (rouge, vert et bleu) utilisé en vidéo ;</li>
<li>la synthèse soustractive avec le CMJ (cyan, magenta et jaune) utilisé notamment en peinture.</li>
</ul>
<p style="text-align: center;"><a href="http://www.blacksmurf.net/wp-content/uploads/2010/08/syntha-ses-des-couleurs-rvb-cmj.jpg"><img class="size-medium wp-image-264 aligncenter" title="Synthèse couleurs" src="http://www.blacksmurf.net/wp-content/uploads/2010/08/syntha-ses-des-couleurs-rvb-cmj-300x164.jpg" alt="" width="300" height="164" /></a></p>
<p style="text-align: center;"><em>fig. 5 &#8211; Les synthèses additive et soustractive</em></p>
<p style="text-align: center;">
<p>Toute deux se basent sur la trichromie en utilisant les couleurs que l&#8217;on appelle primaires dans la synthèse additive, et les couleurs secondaires pour la synthèse soustractive (cf. la figure 5 pour le fonctionnement de ces méthodes). Toutefois si l&#8217;on devait retenir un système qui se rapproche le plus de notre perception des couleurs on utiliserait le modèle TSL composé :</p>
<ul>
<li>d&#8217;une teinte (angle sur le cercle des couleurs) ;</li>
<li>d&#8217;une saturation (intensité de la teinte) ;</li>
<li>d&#8217;une luminosité (pourcentage de blanc apporté à la teinte).</li>
</ul>
<p style="text-align: center;"><a href="http://www.blacksmurf.net/wp-content/uploads/2010/08/video-images-tsl.jpg"><img class="alignnone size-medium wp-image-340" title="TSL" src="http://www.blacksmurf.net/wp-content/uploads/2010/08/video-images-tsl-300x151.jpg" alt="" width="300" height="151" /></a></p>
<p style="text-align: center;"><em>fig. 6 &#8211; Le modèle TSL</em></p>
<p style="text-align: center;"><em><br />
</em></p>
<p>Mais alors pourquoi parle-t-on souvent de RVB dans la vie de tous les jours alors que le modèle TSL se rapproche plus de la réalité ? La réponse se trouve dans la composition de l&#8217;oeil humain.</p>
<p>L&#8217;oeil humain est composé de 3 types de cônes : le cône erytholabe, le cône chlorolabe et le cône cyanolabe. Chaque cône est respectivement sensible aux couleurs : rouges/oranges, verts et bleus/violets. Le modèle RVB est facilement exploitable d&#8217;autant plus que finalement c&#8217;est de cette façon que notre oeil fonctionne. RVB est la méthode la plus utilisé notamment dans la représentation des couleurs en photo/vidéo : les tubes cathodiques de nos anciennes télévisions, les écrans LCD mais aussi l&#8217;imprimerie ou les pellicules de cinéma. De recherches laissent penser que chez certaines personnes il existerait un quatrième cône qui serait sensible aux oranges.</p>
<p style="text-align: center;"><a href="http://www.blacksmurf.net/wp-content/uploads/2010/08/cones.png"><img class="size-medium wp-image-262 aligncenter" title="Cones Oeil Humain" src="http://www.blacksmurf.net/wp-content/uploads/2010/08/cones-300x264.png" alt="" width="300" height="264" /></a></p>
<p style="text-align: center;"><em>fig. 7 &#8211; Correspondance entre les cornées de l&#8217;oeil humain et le spectre visible</em></p>
<p style="text-align: left;">
<span id="Le_mot_de_la_fin"><h1>Le mot de la fin</h1></span>
<p>En résumé et pour finir, tous ces modèles ne définissent en aucun cas les propriétés d&#8217;une couleur. Elle ne sont que des méthodes pragmatiques permettant d&#8217;apporter une &laquo;&nbsp;certaine&nbsp;&raquo; compréhension de notre monde.</p>
<p>Références : <a href="http://www.colorimetrie.net">http://www.colorimetrie.net</a>, <a href="http://fr.wikipedia.org">http://fr.wikipedia.org</a>, <a href="http://www.profil-couleur.com">http://www.profil-couleur.com</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.blacksmurf.net/2010/08/quest-ce-quune-couleur/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Les bases de la programmation C</title>
		<link>http://www.blacksmurf.net/2010/06/les-bases-de-la-programmation-c/</link>
		<comments>http://www.blacksmurf.net/2010/06/les-bases-de-la-programmation-c/#comments</comments>
		<pubDate>Wed, 30 Jun 2010 22:23:31 +0000</pubDate>
		<dc:creator>BlackSmurf</dc:creator>
				<category><![CDATA[Programmation]]></category>
		<category><![CDATA[langage c]]></category>
		<category><![CDATA[programmation]]></category>

		<guid isPermaLink="false">http://www.blacksmurf.net/wordpress/?p=99</guid>
		<description><![CDATA[Petite introduction sur la programmation avec le langage C. Voici un de mes premiers tutorial du net. J&#8217;espère qu&#8217;il vous aidera dans votre apprentissage du C. Histoire du C Le langage C a été mis au point par D.Ritchie et B.W.Kernighan au début des années 70. Leur but était de permettre de développer un langage [...]]]></description>
			<content:encoded><![CDATA[<p>Petite introduction sur la programmation avec le langage C.</p>
<p style="text-align: left;"><span id="more-99"></span></p>
<p style="text-align: left;">Voici un de mes premiers tutorial du net. J&#8217;espère qu&#8217;il vous aidera dans votre apprentissage du C.</p>
<p style="text-align: left;"><div class='toc wptoc'>
<h2>Sommaire</h2>
<ol class='toc-odd level-1'>
	<li>
		<a href="#Histoire_du_C">Histoire du C</a>
	</li>
	<li>
		<a href="#Les_programmes">Les programmes</a>
	</li>
	<li>
		<a href="#Les_commentaires">Les commentaires</a>
	</li>
	<li>
		<a href="#Les_types_de_donnes">Les types de données</a>
	</li>
	<li>
		<a href="#La_gnse_du_compilateur">La génèse du compilateur</a>
	</li>
	<li>
		<a href="#Les_variables">Les variables</a>
	</li>
	<li>
		<a href="#Les_tableaux">Les tableaux</a>
	</li>
	<li>
		<a href="#Les_fonctions">Les fonctions</a>
	</li>
	<li>
		<a href="#Le_Prprocesseur">Le Préprocesseur</a>
	</li>
	<li>
		<a href="#Les_conditions">Les conditions</a>
	</li>
</ol>
</ol>
</div>
<div class='wptoc-end'>&nbsp;</div></p>
<span id="Histoire_du_C"><h2>Histoire du C</h2></span>
<p>Le langage C a été mis au point par D.Ritchie et B.W.Kernighan au début des années 70. Leur but était de permettre de développer un langage qui permettrait d&#8217;obtenir un système d&#8217;exploitation de type UNIX portable. D.Ritchie et B.W.Kernighan se sont inspirés des langages B et BCPL, pour créer un nouveau langage: le langage C. La première définition de ce langage a été donnée dans leur livre commun &laquo;&nbsp;The C programming language&nbsp;&raquo;. Toutefois, suite à l&#8217;apparition de nombreux compilateurs C, l&#8217;ANSI (abréviation de American National Standards Institute) a décidé de normaliser ce langage pour donner ce que l&#8217;on appelle le C-ANSI. Suite à cette norme, Ritchie et Kernighan ont sorti une deuxième édition du livre en intégrant les modifications apportées par l&#8217;ANSI. Le langage C reste un des langages les plus utilisés actuellement. Cela est dû au fait que le langage C est un langage comportant des instructions et des structures de haut niveau (contrairement à l&#8217;assembleur par exemple) tout en générant un code très rapide grâce à un compilateur très performant. Les performances du langage C sont en réalité dues au fait que les instructions du langage sont proches du langage machine, ce qui se traduit par un programme compact (donc rapide) dans la mesure où le programmeur respecte une syntaxe proche des spécifications&#8230; Ainsi, les programmes en C sont très peu longs. En contrepartie le langage C reste un langage assez compliqué.</p>
<span id="Les_programmes"><h2>Les programmes</h2></span>
<p>Qu&#8217;est-ce qu&#8217;un programme ? Un programme est tout simplement une suite d&#8217;instructions qui s&#8217;exécutent. Ces instructions sont envoyées au microprocesseur, qui se charge de les traiter, et de contrôler l&#8217;ensemble de votre Unité Centrale (UC). Comme il s&#8217;agit d&#8217;un dialogue avec le microprocesseur, il donc faut un langage de communication. Ce langage se nomme le langage machine. Il faut savoir que le langage machine est fait de 0 et de 1 (binaire). Pourquoi du binaire ? La simplicité même. Comme le microprocesseur est fait de composants électroniques, il ne circule que du courant. Et donc par convention, faire passer du courant dans une certaine fourchette de Volts (par exemple entre 3V et 4V) équivaut à 1, en faire passer dans une autre fourchette (par exemple entre 1V et 2V) équivaut à 0. Ainsi avec notre assemblage de circuits électroniques, notre convention pour communiquer avec lui, bah on va pouvoir écrire des programmes avec des 0 et des 1 !!!! C&#8217;est pas génial ?! Hum oué, je vois que vous aimez pas ! C&#8217;est exactement ce que les développeurs se sont dis ! Afin de pouvoir contrôler un microprocesseur par programmation, les développeurs ont ajouté un jeu d&#8217;instructions permettant donc de mieux commander le sujet. Ces instructions sont appelées Assembleur. En voici un exemple :</p>
<pre class="brush: cpp; title: ; notranslate">
add di, bx
mov es:[di], al
in al,dx
test al, 08h
jz 0011423
</pre>
<p>Il faut savoir que l&#8217;assembleur est le langage naturel de l&#8217;ordinateur et sa maîtrise vous permettra de faire beaucoup de choses. L&#8217;écrivain Rudy Rucker, dont je vous invite à lire sa page <a href="http://fr.wikipedia.org/wiki/Rudy_Rucker">Wikipédia</a>, disait : &laquo;&nbsp;Le langage Assembleur, c&#8217;est vraiment simple, c&#8217;est comme de programmer en ADN !&nbsp;&raquo;. Composé d&#8217;instructions basiques ce langage est très puissant, mais il rebute beaucoup de personnes car sa programmation est longue et complexe. Plus tard de nouveaux langages dis de &laquo;&nbsp;haut niveau&nbsp;&raquo; (c&#8217;est à dire plus proche du langage humain) font leur apparition : le Basic, le Fortran, l&#8217;Ada, le Cobol, le Pascal, le C&#8230; Mais comment fonctionnent tous ces langages ? Comment peut-on écrire des EXE (pour windows) à partir d&#8217;un langage ? Réponse : avec un ensemble d&#8217;outils proche des systèmes d&#8217;exploitation que l&#8217;on nomme : compilateurs. Les compilateurs, prennent un fichier avec du code écrit dans un langage spécifique, et vont le transformer les fichiers texte en un exécutable. Comme ce tutoriel s&#8217;oriente vers le langage C, je vais prendre pour exemple les compilateurs C. Voici les étapes de la &laquo;&nbsp;compilation&nbsp;&raquo; d&#8217;un fichier C :</p>
<p style="text-align: center;"><a href="http://www.blacksmurf.net/wp-content/uploads/2010/06/compil00.jpg"><img class="size-full wp-image-100 aligncenter" title="Etapes de compilation" src="http://www.blacksmurf.net/wp-content/uploads/2010/06/compil00.jpg" alt="" /></a></p>
<p>Le compilateur prend le fichier C le compile en fichier OBJ : il le traduit en langage machine. Ce fichier en langage machine donc maintenant être prêt à être exécuté ? Pas tout à fait. Pour pouvoir être exécuté il faut transformer une nouvelle fois, ce binaire en un fichier lisible par le système d&#8217;exploitation. Je parle du format qu&#8217;on les fichiers EXE dans un système d&#8217;exploitation. Exemple, si je veux qu&#8217;il s&#8217;exécute sous Windows, il faut que je convertisse ce fichier OBJ dans le format EXE pour Windows. Cet étape s&#8217;appelle donc l&#8217;Édition de liens.</p>
<p>Expliquons maintenant les règles de programmations en C. Ce langage possède certains mot clé. Les mots clés sont des commandes déjà intégré au langage et par conséquent ils ne peuvent être qu&#8217;utilisé. Par exemple pour créé une nouvelle variable en C on procède comme suit :</p>
<pre class="brush: cpp; title: ; notranslate">int maVariable;</pre>
<p>Ceci déclare une nouvelle variable. Une variable est comme une sorte de boite d&#8217;une certaine taille dans laquelle on va ranger une valeur. Si je parle de &laquo;&nbsp;taille&nbsp;&raquo; c&#8217;est parce que la mémoire d&#8217;un ordinateur à ses limites et on ne peut pas créer n&#8217;importe quelle boite avec n&#8217;importe quelle taille. Ainsi l&#8217;unité de mesure est l&#8217;octet. Il existe certains mots clés pour définir la taille et dans l&#8217;exemple précédent il s&#8217;agit du mot &laquo;&nbsp;int&nbsp;&raquo;. Une variable de type int, signifie qu&#8217;elle fait partie du domaine des nombres entiers et qu&#8217;elle prend en mémoire (dans la mémoire vive) 2 ou 4 octets (en fonction des compilateurs).</p>
<p>Le nom &laquo;&nbsp;maVariable&nbsp;&raquo; correspond à l&#8217;intitulé que je donne à ma boite. Bien évidemment on ne peut pas donner n&#8217;importe quel nom. Si par exemple j&#8217;écris en C ceci:</p>
<pre class="brush: cpp; title: ; notranslate">int main;</pre>
<p>cela provoque une erreur. Pourquoi ? Parce que <em><strong>main</strong> </em>est un mot clé du langage C et ne peux donc être utilisé ainsi (c&#8217;est à dire comme la définition d&#8217;une variable).</p>
<p>Le C différencie les majuscules des minuscules. Exemple:</p>
<pre class="brush: cpp; title: ; notranslate">
// ces deux caractères définissent que ce qui suit sera un commentaire
int toto; // ok
int Toto; // ok
int tOto; // ok
int toto; // faux car int est un mot clé et il est défini en minuscule
</pre>
<p>La dernière commande est bien entendu fausse. Chaque ligne d&#8217;instructions en C fini par un ; afin d&#8217;indiquer d&#8217;indiquer au compilateur que la ligne est fini et qu&#8217;il faut passer à la suivante. Le texte qui suit et qui commence par &laquo;&nbsp;//&nbsp;&raquo; indique qu&#8217;il s&#8217;agit d&#8217;un commentaire.</p>
<p>Comme je vous sens impatient pour faire du code, je vais donc commencer avec un exemple connu à travers le monde entier, j&#8217;ai nommé : HELLO THE WORLD!</p>
<pre class="brush: cpp; title: ; notranslate">
#include &lt;stdio.h&gt;

void main(void) {
     printf(&quot;Hello the World!\r\n&quot;);
}
</pre>
<p>Ce code source a pour but d&#8217;afficher le message: &laquo;&nbsp;<strong>Hello the World!</strong>&laquo;&nbsp;. Je vais tout d&#8217;abord commenter la commande &nbsp;&raquo; void main(void) &laquo;&nbsp;.</p>
<p>Il s&#8217;agit en fait d&#8217;une déclaration d&#8217;une fonction. Une fonction exécute l&#8217;ensemble des instructions qu&#8217;elle contient. Ici cette fonction n&#8217;est pas n&#8217;importe laquelle, c&#8217;est le point d&#8217;entré du programme, c&#8217;est-à-dire que lorsque nous exécuterons notre programme (une fois compilé) il exécutera les instructions qui se trouveront en premier lieu dans cette fonction.</p>
<p>Vous pouvez remarquer que le symbole qui marque le début de ma fonction est &laquo;&nbsp;{&nbsp;&raquo; et celui qui marque la fin est &laquo;&nbsp;}&nbsp;&raquo;. La déclaration de fonctions sera traitée dans le chapitre &laquo;&nbsp;Fondements du C&nbsp;&raquo;. Ensuite dedans, on trouve un nom bizarre &laquo;&nbsp;<strong><em>printf</em></strong><em> </em>&laquo;&nbsp;. Il s&#8217;agit en fait d&#8217;une fonction déjà existante dans le langage C ! En effet, dans tous les langages on trouve des fonctions primitives et des opérateurs permettant d&#8217;effectuer toutes les opérations possible de base. Ici la fonction &laquo;&nbsp;<strong><em>printf</em></strong>&nbsp;&raquo; a la capacité d&#8217;afficher en message le 1er paramètre que l&#8217;on va lui donner. Pour l&#8217;instant retenez que chaque fonction a cette syntaxe: <em>&lt;nom_de_la_fonction&gt;(param1, param2, &#8230;)</em>. Ici le 1er paramètre est : &laquo;&nbsp;hello the world!&nbsp;&raquo;.  Ce 1er paramètre est une chaine de caractères. On le remarque notamment grâce aux guillemets &nbsp;&raquo; &nbsp;&raquo; qui l&#8217;entoure. Pour indiquez à C qu&#8217;une instruction est terminée et qu&#8217;il doit passer à l&#8217;instruction suivante, on la termine par le caractère point-virgule &nbsp;&raquo; ; &laquo;&nbsp;.</p>
<p>Enfin, tout en haut vous voyez l&#8217;instruction : &nbsp;&raquo; <em><strong>#include &lt;stdio.h&gt;</strong></em>&laquo;&nbsp;. Il s&#8217;agit d&#8217;une commande dite commande préprocesseur. Elle indique tout simplement à C d&#8217;ouvrir le fichier &laquo;&nbsp;<strong><em>stdio.h</em></strong>&nbsp;&raquo; qui se trouve dans le dossier &laquo;&nbsp;<strong>include</strong>&nbsp;&raquo; ou &laquo;&nbsp;<strong>h</strong>&nbsp;&raquo; de votre compilateur. Ce fichier est en fait une librairie qui contient des définitions de types, de fonctions, et beaucoup d&#8217;autres choses. On peut donc en déduire, que &laquo;&nbsp;<strong><em>stdio.h</em></strong>&nbsp;&raquo; nous permet d&#8217;utiliser la fonction &laquo;&nbsp;<strong><em>printf</em></strong> &laquo;&nbsp;. Sans l&#8217;inclusion de ce fichier, le compilateur ne trouverais pas la définition de la fonction &laquo;&nbsp;<em><strong>printf</strong></em>&laquo;&nbsp;.</p>
<p>Toutes les fonctions de base sont définies dans des fichiers &laquo;&nbsp;<strong>h</strong>&laquo;&nbsp;. Ainsi tout appel à une fonction de base, nécessite d&#8217;indiquer à C où chercher sa définition. Les commandes préprocesseur seront traités dans le chapitre &laquo;&nbsp;Préprocesseur&nbsp;&raquo;.</p>
<span id="Les_commentaires"><h2>Les commentaires</h2></span>
<p>Qu&#8217;est-ce qu&#8217;un commentaire ? Il s&#8217;agit d&#8217;une ou plusieurs ligne où l&#8217;utilisateur pourra saisir tout ce qu&#8217;il lui passe par la tête ! En bref, les commentaires, sont des messages en français qui vont vous aidez dans votre tâche de programmeur. Lorsque vous créez des programmes qui font plus de 10 000 lignes de code, insérer quelques commentaires par-ci, par-là dans le code vous permettra de bien comprendre ce que vous faites. Comment écrire un commentaire ? En C il existe deux facons de déclarer des commentaires. Si votre commentaire doit tenir sur 1 seule ligne, on utilisera alors : &laquo;&nbsp;<strong>//</strong> &laquo;&nbsp;, sinon pour un commentaire sur plusieurs ligne, on utilisera pour marquer le début : &laquo;&nbsp;<strong>/*</strong>&laquo;&nbsp;, et pour marquer la fin : &laquo;&nbsp;<strong>*/</strong> &laquo;&nbsp;.</p>
<p>Voici un exemple dans le programme &laquo;&nbsp;HELLO THE WORLD!&nbsp;&raquo;:</p>
<pre class="brush: cpp; title: ; notranslate">
// ceci est un commentaire sur une ligne
/* ceci est un commentaire sur
plusieurs
lignes
*/

// définition du point d'entrée
void main(void) {
    printf(&quot;Hello the World!\\r\\n&quot;);
}
</pre>
<p>Le compilateur, lorsqu&#8217;il traite votre fichier C ignore ces commentaires, et s&#8217;occupe uniquement de votre code. Les commentaires servent énormement à tous bon programmeur, alors sachez en abuser, car c&#8217;est gratuit !!</p>
<span id="Les_types_de_donnes"><h2>Les types de données</h2></span>
<p>Dans tous langages, lorsque vous programmez, vous devez manipuler des données, afin de traiter des informations. Toutes ces données, doivent être ranger dans des types de données codé sur ce que l&#8217;on appelle &laquo;&nbsp;Octet&nbsp;&raquo;. Voici un schéma sur la codification d&#8217;un octet en mémoire :</p>
<p style="text-align: center;"><a href="http://www.blacksmurf.net/wp-content/uploads/2010/06/binaire00.jpg"><img class="size-full wp-image-101 aligncenter" title="Codage d'un octet" src="http://www.blacksmurf.net/wp-content/uploads/2010/06/binaire00.jpg" alt="" /></a></p>
<p>Un octet équivaut à 8 Bits (0 ou 1). Avec un octet on possède 256 façons de placer des 1 et des 0, on peut donc obtenir alors un nombre compris entre 0 et 255, soit 256 nombres possibles. Si on doit déclarer le type de donnée, c&#8217;est pour que C puisse réserver la mémoire dans une certaine taille, et sa forme de mémorisation. En C, il existe deux types de données : celles qui sont standard (prédéfinis) ou celle que les utilisateurs crée (définis).</p>
<p>En résumé, on trouve :</p>
<p>Type Entier (sans décimales)</p>
<ul>
<li><span style="color: #339966;">type char</span> : défini un type entier occupant 1 octet en mémoire ;</li>
<li><span style="color: #339966;">type short</span> : défini un type entier occupant 2 octets en mémoire ;</li>
<li><span style="color: #339966;">type int</span> : défini un type entier occupant 2 ou 4 octets en mémoire ;</li>
<li><span style="color: #339966;">type long</span> : défini un type entier occupant 4 octets en mémoire.</li>
</ul>
<p>Tous les types peuvent être déclarés soit signed (par défaut) soit alors unsigned. Dans le premier cas, la donnée est signée, c&#8217;est à dire que sa valeur peut être négative. Tandis que dans le deuxième cas, la valeur sera positive. On obtient donc le résultat suivant :</p>
<ul>
<li><span style="color: #ff0000;">type signed char</span> : la valeur de cette donnée sera comprise entre -128 et 127 ;</li>
<li><span style="color: #ff0000;">type signed short </span>: la valeur de cette donnée sera comprise entre -32 768 et 32 767 ;</li>
<li><span style="color: #ff0000;">type signed int</span> : la valeur de cette donnée sera soit de type signed short, soit de type signed long ;</li>
<li><span style="color: #ff0000;">type signed long</span> : la valeur de cette donnée sera comprise entre -2 147 783 648 et 2 147 483 647 ;</li>
<li><span style="color: #3366ff;">type unsigned char</span> : la valeur de cette donnée sera comprise entre 0 et 255 ;</li>
<li><span style="color: #3366ff;">t</span><span style="color: #3366ff;"><span style="color: #3366ff;">ype unsigned shor</span>t</span> : la valeur de cette donnée sera comprise entre 0 et 65535 ;</li>
<li><span style="color: #3366ff;">type unsigned int</span> : la valeur de cette donnée sera soit de type unsigned short, soit de type unsigned long ;</li>
<li><span style="color: #3366ff;">type unsigned long</span> : la valeur de cette donnée sera comprise entre 0 et 4 294 967 295.</li>
</ul>
<p>Mais alors pourquoi selon que le type soit signée ou pas, la fourchette de nombre diffère pour un même type ??? On va prendre le type le plus simple: Le type char.</p>
<p>char occupe en mémoire un et un seul octet, et en binaire il n&#8217;existe pas de nombre négatif. Alors comment peut-on dire que le type signed char existe ? Le type signed, réserve simplement le 8ème bit pour dire si notre type est positif ou négatif. Si le 8ème bit vaut 1 alors notre nombre est négatif, sinon il est positif. Donc si on refais nos calculs pour connaitre le nombre de possibilités d&#8217;un type, le fait qu&#8217;on réserve tout le temps le 8ème bit pour le signe, alors il ne nous reste plus que 7 bits pour notre nombre ! Soit 2^7 = 128 possibilités. On obtient donc pour le type signed char (7 bits) : -128 à +127. Tandis qu&#8217;avec le type unsigned char (8 bits) : 0 à +255. C&#8217;est le même principe pour tous les autres type entiers.</p>
<p>En C, le type par défaut est signed (c&#8217;est à dire sans préciser si il est signed ou unsigned). Bien alors dans la 1ère partie nous avons pu voir de manière général le fonctionnement du C et son histoire. Nous allons un peu récapituler tout cela.</p>
<ul>
<li>Le C est un langage de haut niveau procédural (il s&#8217;exécute ligne par ligne) ;</li>
<li>Pour terminer chaque instructions (autres que logiques) il faut saisir &laquo;&nbsp;;&nbsp;&raquo; ;</li>
<li>C fait la différence entre les minuscules et majuscules ;</li>
<li>Le point d&#8217;entrée de tout programme commence par (définition par défaut) : void main(void) ;</li>
<li>Dans Visual C++ par exemple les mots clés sont écris en <span style="color: #0000ff;">BLEU</span>. Ces mots clé font partie intégrante du noyau même de C ;</li>
<li>On peut placer des commentaires dans le code afin de s&#8217;y réperer plus tard ;</li>
<li>Il existe 4 grand type d&#8217;entier (dans l&#8217;ordre du plus petit en place mémoire au plus grand) char, short, int et long. Toutefois on peut préciser si ils sont signé ou pas (si ils peuvent prendre des valeurs négative ou pas).</li>
</ul>
<span id="La_gnse_du_compilateur"><h2>La génèse du compilateur</h2></span>
<p>Un compilateur c&#8217;est quoi ? Il s&#8217;agit d&#8217;un ensemble de fichiers regroupant des éxecutables et des librairies. Prenons l&#8217;exemple de Visual C++. Ouvrons son dossier d&#8217;installation, puis allons dans le dossier &laquo;&nbsp;VC98&#8243; (dossier ou est installé le compilateur VC++). Vous devriez avoir quelque chose comme l&#8217;écran suivant :</p>
<p style="text-align: center;"><a href="http://www.blacksmurf.net/wp-content/uploads/2010/06/vcppfolder.jpg"><img class="size-full wp-image-187 aligncenter" title="Dossiers Visual C++ 6.0" src="http://www.blacksmurf.net/wp-content/uploads/2010/06/vcppfolder.jpg" alt="" width="509" height="150" /></a></p>
<p>Vous avez trois dossier spécifique au compilateur Visual C++ 6.0 et auxquels l&#8217;on ne va pas s&#8217;interesser il s&#8217;agit de : &laquo;&nbsp;ATL&nbsp;&raquo;, &laquo;&nbsp;CRT&nbsp;&raquo; et &laquo;&nbsp;MFC&nbsp;&raquo;.</p>
<ul>
<li>Le dossier BIN va regrouper tout les exécutables (les programmes) du compilateur, celui qui va compiler, celui qui va faire l&#8217;édition des liens et beaucoup d&#8217;autres. Son nom BIN est tiré de Binaire ;</li>
<li>Le dossier Include va regrouper tous les fichiers <em><strong>h</strong></em> (fichiers d&#8217;en-têtes) qui vont servir de déclarations des fonctions déjà existantes en C (par exemple <em>math.h</em> pour les fonctions mathématique) ;</li>
<li>Le dossier <strong><em>Lib </em></strong>va regrouper tous les fichiers <em><strong>lib</strong></em> (fichiers librairies) qui eux servent de fichier de définitions. Contrairement aux fichiers <strong><em>h</em></strong> les fichiers <em><strong>lib</strong></em>, ne sont pas en texte clair. Ils contiennent toutes les définitions les fonctions elle même.</li>
</ul>
<p>Prenons un exemple pour mieux comprendre : la fonction <em>printf()</em>. Dans le fichier <em>stdio.h</em> on trouvera :</p>
<pre class="brush: c">_CRTIMP int __cdecl printf(const char *, ...);</pre>
<p>Comme on peut le voir il s&#8217;agit juste d&#8217;une déclaration de la fonction <em>printf()</em> on ne voit pas les détails de cette fonction, c&#8217;est-à-dire les instructions saisies dedans pour obtenir l&#8217;affichage à l&#8217;écran. En effet la définition de cette fonction se trouve dans un fichier <em><strong>lib </strong></em>associé. Laquelle ? Avec Visual C++ 6.0 je ne sais pas ! Le logique du C veut que pour un fichier <em><strong>h </strong></em>on ait un fichier <strong><em>lib</em></strong> équivalent avec un même nom. Cependant comme il s&#8217;agit des fichiers prédéfinis par le compilateur, cette logique n&#8217;est pas vraiment respecté.</p>
<span id="Les_variables"><h2>Les variables</h2></span>
<p>Une variable est comme une boîte ou l&#8217;on range une certaine valeur. Cette boite possède un certain &laquo;&nbsp;format&nbsp;&raquo;. Comme on a pu le voir dans la 1ère partie. Ces formats sont en fait le type d&#8217;une variable. Etant codé de 1 à 4 octects on peut y ranger une valeur plus ou moins importante. Par exemple, une variable de type <em>char non signé</em> (codé sur 8 bits avec aucun bit réservé pour le signe +/-) peut prendre une valeur de 0 à 255. Si l&#8217;on souhaite ranger la valeur 257 dans cette variable cela ne marchera pas. La syntaxe pour déclarer une variable est la suivante : <em>&lt;type_de_la_variable&gt; nom_de_la_variable;</em> Cette déclaration est vrai pour toute les formes de déclaration d&#8217;une variables que ce soit comme ca en globale, en locale dans une fonction ou encore en tant que paramètre. En ce qui concerne des types, j&#8217;en ai omis un volontairement car beaucoup plus compliqué pour l&#8217;explication de son codage en mémoire : il s&#8217;agit du nombre réel (avec décimal). Pour ranger des nombres à virgule dans une variable il faut utiliser les types : <em>float</em>,<em> double </em>ou <em>long double</em> selon le nombre de décimal que l&#8217;on souhaite. <em>double</em> étant plus précis et <em>long double</em> encore plus précis. Toutefois c&#8217;est très rare que l&#8217;on utilise le type <em>double</em> et <em>long double </em>(car lent). Exemple :</p>
<pre class="brush: cpp; title: ; notranslate">
float Pi;
Pi = 3.14159
</pre>
<p>Pour attribuer une valeur à une variable il suffit de faire par exemple :</p>
<pre class="brush: cpp; title: ; notranslate">myVar = 10;</pre>
<p>On peut attribuer une valeur par défaut à une variable lors de sa création :</p>
<pre class="brush: cpp; title: ; notranslate">int myVar = 10;</pre>
<p>Les opérations concernant les variables sont :</p>
<ul>
<li>+ (addition)</li>
<li>- (soustraction)</li>
<li>/ (division)</li>
<li>% (modulo : reste d&#8217;une division)</li>
<li>* (multiplication)</li>
</ul>
<p>Exemple :</p>
<pre class="brush: cpp; title: ; notranslate">
char myVar = 0;

myVar = myVar * 5 + 6 - 2;
myVar = myVar + 1;
</pre>
<p>(Les ordres de priorités sont les mêmes qu&#8217;en mathématiques.) Il existe certains &laquo;&nbsp;raccourci&nbsp;&raquo; aussi pour effectuer plus rapidement des opérations. Vous allez comprendre :</p>
<pre class="brush: cpp; title: ; notranslate">
myVar *= 5;  // égal à myVar = myVar * 5;
myVar /= 3;  // égal à myVar = myVar / 5;
myVar -= 10; // égal à myVar = myVar - 10;
myVar += 1;  // égal à myVar = myVar + 1;
myVar++;     // égal à myVar = myVar + 1;
myVar--;     // egal à myVar = myVar - 1;
</pre>
<p>On peut toutefois effectuer des opérations binaires sur les nombres à l&#8217;aide des commandes suivantes :</p>
<ul>
<li>&amp; (ET logique)</li>
<li>| (OU inclusif)</li>
<li>^ (OU exclusif)</li>
</ul>
<span id="Les_tableaux"><h2>Les tableaux</h2></span>
<p>Les tableaux sont identiques aux variables sauf qu&#8217;ils prennent plusieurs &laquo;&nbsp;cases&nbsp;&raquo; mémoire et permettent de ranger plusieurs valeurs dans une même variables à l&#8217;aide d&#8217;un <em>index</em>. Exemple :</p>
<pre class="brush: cpp; title: ; notranslate">char monTablo[10];</pre>
<p>Ici on à déclaré un tableau appellé monTablo de 10 cases de type <em>char</em>. C&#8217;est-à-dire que chaque case du tableau prendra 1 octet mémoire. Pour accéder à une case donné il suffit de lui passer en index (entre crochet) son numéro de case. ATTENTION ! La numérotation des cases se fait TOUJOURS à partir de 0 :</p>
<pre class="brush: cpp; title: ; notranslate">
monTablo[0] = 1; // ok 1ère case mémoire
monTablo[9] = 2; // ok 10ème case mémoire
monTablo[10] = 3; // erreur car la case numéro 10 n'existe pas !
</pre>
<span id="Les_fonctions"><h2>Les fonctions</h2></span>
<p>Qu&#8217;est-ce qu&#8217;une fonction ? Une fonction est un ensemble d&#8217;instructions regroupé dans un sous programme nommé. La facon la plus compréhensible par tous est sans aucun doute celle de faire l&#8217;analogie avec les maths ! En maths on décrit la fonction affine comme ceci : <em>y = f(x) = ax+b</em>. Ici la fonction s&#8217;appelle F. Cette fonction est un peu différente d&#8217;une fonction simple. En effet il s&#8217;agit d&#8217;une fonction paramétrable. A quoi le voit-on ? Il s&#8217;agit du <em>x</em> entre parenthèses. En passant dans <em>x </em>une valeur quelconque la fonction va effectuer un traitement. Ce traitement est : <em>a * x + b</em>. a et b ne sont pas défini mais on pourrait très bien l&#8217;imaginer. Une fois ce traitement fait que ce passe-t-il ? Et bien F (notre fonction) va renvoyer le résultat de ce traitement, et c&#8217;est y qui va la recevoir. Et donc on retombe sur ce que l&#8217;on nous a appris : <em>f(x) = ax + b</em>, permet pour une valeur <em>x</em> d&#8217;obtenir son image <em>y</em>. Il s&#8217;agit des coordonnées <em>x, y</em> dans un plan cartésien. Alors les maths c&#8217;est beau, mais ce n&#8217;est pas tout. Cet exemple nous permet de bien voir que la notion de &laquo;&nbsp;fonction&nbsp;&raquo; ne nous est pas inconnu. Voici la syntaxe d&#8217;une fonction en C :</p>
<pre class="brush: cpp; title: ; notranslate">
void nom_de_la_fonction(void) {
   // instructions
}
</pre>
<p>Il s&#8217;agit d&#8217;une fonction sans paramètres, et cette fonction ne renvoi aucune valeur. On appelle en général ce type de fonction : une procédure. Une procédure est un simple sous programme pour faire des tâches (en lui passant des paramètres ou pas) mais à la différence d&#8217;une fonction elle ne renvoie rien. Alors on peut se demander à quoi ca sert d&#8217;écrire une procédure simple comme celle ci (sans paramètres) ? Et bien imaginez que vous souhaitez afficher par exemple un message et qu&#8217;ensuite vous souhaitez attendre que l&#8217;utilisateur presse une touche. Ceci prendra donc plusieurs lignes d&#8217;instructions. Imaginez ensuite que vous souhaitez faire ce processus à plusieurs reprise dans votre programme (dans <em>void main(void)</em>). Vous allez réecrire toutes les lignes à chaque fois ? Non, le mieux c&#8217;est d&#8217;écrire une fois ce traitement dans une simple procédure et ensuite de l&#8217;appeller à chaque fois que vous en aurez besoin.</p>
<p>Détaillons à présent la syntaxe de la déclaration de cette procédure. Le premier mot que vous voyez est <em>void. &laquo;&nbsp;void&nbsp;&raquo;</em> correspond au type de de la valeur qui sera renvoyé par notre fonction (cf. <em>y = f(x)</em>). Comme il s&#8217;agit d&#8217;une simple procédure (qu&#8217;on ne veux rien renvoyer), on utilise le mot clé : <em>void</em>. Ce mot clé défini le type de valeur <em>VIDE</em>. Si on aurez voulu renvoyer une valeur de type entier codé sur 2 octets, il aurait fallu saisir :</p>
<pre class="brush: cpp; title: ; notranslate">short nom_de_la_fonction(void)</pre>
<p>Ensuite entre parenthèse c&#8217;est ici que l&#8217;on va définir les paramètres que l&#8217;on souhaite avoir pour notre fonction. Ici on en veut pas, on a donc mis une nouvelle fois : <em>void</em>. La syntaxe concernant les paramètres est la suivante : &lt;type&gt; nom_de_la_variable1, &lt;type&gt; nom_de_la_variable2, &#8230;</p>
<p>Pour exemple on peut écrire la fonction CARRE qui va calculer la valeur carré d&#8217;un nombre et la renvoyer :</p>
<pre class="brush: cpp; title: ; notranslate">
int carre(int valeur) {
    return valeur * valeur; // renvoi une valeur de type int, car int * int = int
}
</pre>
<p>Le mot clé return permet de renvoyer un résultat (du même type que la fonction) <span style="text-decoration: underline;"><strong>et</strong></span> de sortir de la fonction aussitôt.</p>
<span id="Le_Prprocesseur"><h2>Le Préprocesseur</h2></span>
<p>Qu&#8217;est-ce que le préprocesseur ? Il s&#8217;agit de commandes bien spécifique qui vont s&#8217;exécuter avant la compilation du code source. Je dirais même que la compilation se détermine en fonction justement des commandes préprocesseur. Sans entrer pour l&#8217;instant dans les détails, je vous explique ici la commande préprocesseur la plus utilisé dans la programmation C : <em>#include</em>. Comme on l&#8217;a vu dans la 1ère partie, <em>#include</em> va servir de référence sur certaine fonctions déjà écrite en C. Par exemple la fonction <em>printf()</em> qui écrit un message texte à l&#8217;écran à besoin du fichier <em>stdio.h</em>. Lorsqu&#8217;on appelle cette fonction dans notre programme, le compilateur ne va pas savoir d&#8217;ou viens cette fonction <em>printf()</em>. Rappellons que le compilateur ne connait que les mots clé, la syntaxe général du C et les commandes préprocesseur. C&#8217;est pourquoi il faut alors préciser dans quelle fichier se trouve ce que l&#8217;on appelle la &laquo;&nbsp;déclaration&nbsp;&raquo; de cette fonction. Pour <em>printf()</em>, celle-ci se trouve dans le fichier <em>STDIO.H</em>. Nous savons ou ce trouve les fichiers .H et nous savons qu&#8217;en regardant dedans on va trouver la déclaration de la fonction <em>printf()</em>. Donc voila la commande à rajouter tout en haut de notre fichier pour utiliser la fonction <em>printf()</em>:</p>
<pre class="brush: cpp; title: ; notranslate">#include &lt;stdio.h&gt; // pour printf</pre>
<p>Mais la commande <em>#include</em> ne s&#8217;arrête pas la. On peut voir que  notre fichier .H se trouve entre &lt; et &gt; et parfois dans notre  programme on pourrait très bien écrire la syntaxe suivante : <em>#include  &laquo;&nbsp;monfichier.h&nbsp;&raquo;</em>. Où est la différence ? La différence est que l&#8217;on  met le nom du fichier d&#8217;en-têtes entre &nbsp;&raquo; et &nbsp;&raquo; lorsque ce fichier se  trouve dans le même dossier du projet que l&#8217;on travaille, et on met le  nom du fichier d&#8217;en-têtes entre &lt; et &gt; lorsque ce fichier se  trouve dans le dossier par défaut du compilateur. Il existe une autre  commande préprocesseur souvent utilisé, il s&#8217;agit de la commande <em>#define</em>.  Cette commande est ce que l&#8217;on appelle une macro en général. Elle  permet entre autres de définir certains mots. Ces mots correpondront à  une valeur.<br />
Par exemple:</p>
<pre class="brush: cpp; title: ; notranslate">
#define MAX_MESH 60

void affiche(void) {
    if (MAX_MESH == 60) printf(&quot;ok&quot;);
}
</pre>
<p>Ici on peut voir la définition d&#8217;un mot clé : MaxMesh qui à pour valeur 60. Cette commande est traité avant la compilation du code (car c&#8217;est une commande préprocesseur). Que va faire alors le compilateur ? Et bien c&#8217;est simple, il va remplacer TOUT les mots MaxMesh du code source par 60.</p>
<p>Donc dans notre exemple ca deviendra :</p>
<pre class="brush: cpp; title: ; notranslate">
void affiche(void) {
   if (60 == 60) printf(&quot;ok&quot;);
}
</pre>
<p>Ce qui est con dans ce cas la je vous l&#8217;accorde mais c&#8217;est à titre d&#8217;exemple.</p>
<p>Les commandes préprocesseurs ne sont pas influencé par la casse (majuscules/minuscules), contrairement au reste du code.</p>
<span id="Les_conditions"><h2>Les conditions</h2></span>
<p>Un programme c&#8217;est quoi ? C&#8217;est des instructions qui s&#8217;exécute&#8230; c&#8217;est des données que l&#8217;on manipule, en résumé c&#8217;est beaucoup de choses. Tout ceci n&#8217;est pas fait sans ordre, mais avec une LOGIQUE. Cette logique c&#8217;est à vous de la définir à l&#8217;aide de différentes opérations et de CONDITIONS. La conditions la plus simple est sans aucun doutes le IF (traduction si). Si ceci alors cela&#8230; sinon si ceci alors cela&#8230; sinon faire ceci&#8230; Voila comment se résume le IF. Comment marche le IF ? Le IF fonctionne selon une table de vérité. Si ceci est vrai&#8230; alors tu fait ca&#8230; sinon tu fait ca&#8230; Comment cette table ce fait-elle ? En comparant. Exemple :</p>
<pre class="brush: cpp; title: ; notranslate">
if (myVar == 3) {
printf(&quot;myVar vaut 3&quot;);
} else {
printf(&quot;myVar est différent de 3&quot;);
}
</pre>
<p>Examinons ce code. &laquo;&nbsp;if (myVar == 3)&nbsp;&raquo; se lie : si myVar est bien égale à 3. La comparaison myVar = 3 renvoi VRAI si c&#8217;est vérifié et FAUX si il y a erreur. Si cette condition est vrai alors le programme va executer ce qui suit ENTRE ACCOLADES. Ces accolades comme pour les fonctions définissent le début et la fin d&#8217;un bloc. Le mot clé suivant : ELSE va traiter TOUS LES AUTRES CAS si la condition précédente est fausse. C utilise une syntaxe particulière en ce qui concerne la comparaison, donc voici l&#8217;énumération :</p>
<ul>
<li>var1 == var2 (égal à) ;</li>
<li>var1 != var2 (différent de) ;</li>
<li>var1 &lt;= var2 (inférieur ou égal à) ;</li>
<li>var1 &lt; var2 (inférieur à) ;</li>
<li>var1 &gt;= var2 (supérieur ou égal à) ;</li>
<li>var1 &gt; var2 (supérieur à).</li>
</ul>
<p>Toutefois les conditions ne dépendent pas forcement que d&#8217;un seul paramètre on peut très bien avoir deux variables de tester. Exemple:</p>
<pre class="brush: cpp; title: ; notranslate">if (var1 == var2 &amp;amp;&amp;amp; var2 == var3) {
}</pre>
<p>On trouve ici un nouveau mot clé. Il s&#8217;agit d&#8217;opérateur de condition. Ici les deux comparaison doivent être VRAI pour entrer dans le if. Il existe plusieurs opérateur logique que j&#8217;énumère ici :</p>
<ul>
<li>&amp;&amp; (ET logique : l&#8217;un doit être VRAI et l&#8217;autre aussi) ;</li>
<li>|| (OU logique : soit l&#8217;un doit être VRAI soit l&#8217;autre ou même les deux) ;</li>
<li>^^ (OU exclusif : soit l&#8217;un doit être VRAI soit l&#8217;autre MAIS PAS LES DEUX).</li>
</ul>
<p>Il existe un mot clé spécial aussi pour définir la négation d&#8217;une condition, il s&#8217;agit de ! Par exemple:</p>
<pre class="brush: cpp; title: ; notranslate">
// rentre dans le if si var1 == var2 est FAUX
// ce qui équivaut à if (var1 != var2)
if ( !(var1 == var2)) {
}
</pre>
<p>Toutes ces notions relève de la logique BOOLEENE. Il faut savoir que chaque comparaison possède un contraire exprimable avec ! ou même sans. IF n&#8217;est pas la seule conditions qu&#8217;il existe en C. Il en existe d&#8217;autres, toutefois elles servent de boucles. Il existes 3 type de boucles: WHILE (TANT QUE), DO WHILE (FAIRE TANT QUE) et le FOR (POUR UNE VALEUR DONNE REPETEE TANT QUE&#8230;) While est peut être la plus simple. La boucle s&#8217;execute TANT que la condition est vérifié. Exemple :</p>
<pre class="brush: cpp; title: ; notranslate">
// ici on donne la valeur 3 à la variable myVar
myVar = 3;

// ici on rentre dans la boucle en faisant un premier test : si myVar = 3 alors on rentre
while ( myVar == 3 ) {
    // on exécute le code qu'on veut faire...

} // et la on remonte à while en haut et on refais un test si myVar est toujours égal à 3 alors on rerentre

// on arrive ici lorsque myVar est devenu différent de 3.
</pre>
<p>La boucle DO WHILE est identique à WHILE sauf qu&#8217;elle rentre au moins une fois dans la boucle sans faire de test Exemple :</p>
<pre class="brush: cpp; title: ; notranslate">
// ici on donne la valeur 3 à la variable myVar
myVar = 3;

do {
} while (myVar == 3); // et on fais un test si myVar est égal à 3 alors on remonte à do et on recommence

// on arrive ici lorsque myVar est devenu différent de 3.
</pre>
<p>La dernière boucle est la boucle FOR. Cette boucle permet de partir d&#8217;un point à un autre. Elle est idéale pour parcourir une tranche d&#8217;un tableau.</p>
<pre class="brush: cpp; title: ; notranslate">
// on initialise au début i à 0, et boucle tant que i est inférieur à 10
// a chaque boucle i s'incrémente de 1
for (i = 0; i &amp;lt; 10; i++) {
}
</pre>
<p>Voila pour ce premier tutorial que j&#8217;ai réédité. J&#8217;espère qu&#8217;il vous aura aidé dans votre démarche sur l&#8217;apprentissage du C.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.blacksmurf.net/2010/06/les-bases-de-la-programmation-c/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ouverture de BlackSmurf’s Diary</title>
		<link>http://www.blacksmurf.net/2010/06/bienvenue/</link>
		<comments>http://www.blacksmurf.net/2010/06/bienvenue/#comments</comments>
		<pubDate>Sun, 27 Jun 2010 23:00:03 +0000</pubDate>
		<dc:creator>BlackSmurf</dc:creator>
				<category><![CDATA[News]]></category>
		<category><![CDATA[blacksmurf]]></category>
		<category><![CDATA[diary]]></category>
		<category><![CDATA[smurf]]></category>

		<guid isPermaLink="false">http://dev.blacksmurf.net/?p=7</guid>
		<description><![CDATA[Bienvenue à tous sur mon blog ! Après pas mal d&#8217;années de réflexion, BlackSmurf.net renait de ses cendres ! Ce n&#8217;est pas sans une certaine émotion que je réouvre blacksmurf.net. En effet, après une très longue traversé du désert remplie de doutes et de remises en question, je m&#8217;efforce aujourd&#8217;hui à m&#8217;impliquer d&#8217;avantage sur la [...]]]></description>
			<content:encoded><![CDATA[<p>Bienvenue à tous sur mon blog !</p>
<p>Après pas mal d&#8217;années de réflexion, BlackSmurf.net renait de ses cendres !</p>
<p><span id="more-7"></span></p>
<p>Ce n&#8217;est pas sans une certaine émotion que je réouvre blacksmurf.net. En effet, après une très longue traversé du désert remplie de doutes et de remises en question, je m&#8217;efforce aujourd&#8217;hui à m&#8217;impliquer d&#8217;avantage sur la toile,  pour atteindre de nouveaux objectifs : réinvestir le web quant à mes projets de développement de jeux vidéo, reprendre confiance en moi, mais aussi travailler mon point faible : la communication. C&#8217;est avec vous, qu&#8217;aujourd&#8217;hui je souhaite relever ce défi et j&#8217;espère y arriver.</p>
<p>En attendant l&#8217;alimentation du contenu de ce site, soyez les bienvenues, vous êtes ici chez moi.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.blacksmurf.net/2010/06/bienvenue/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>La gestion du temps et de ses priorités</title>
		<link>http://www.blacksmurf.net/2010/06/la-gestion-du-temps-et-de-ses-priorites/</link>
		<comments>http://www.blacksmurf.net/2010/06/la-gestion-du-temps-et-de-ses-priorites/#comments</comments>
		<pubDate>Sat, 26 Jun 2010 09:12:13 +0000</pubDate>
		<dc:creator>BlackSmurf</dc:creator>
				<category><![CDATA[Méthodes]]></category>
		<category><![CDATA[gestion du temps]]></category>

		<guid isPermaLink="false">http://www.blacksmurf.net/wordpress/?p=62</guid>
		<description><![CDATA[Si vous êtes comme moi et que vous avez du mal à organiser votre journée de travail, ce document vous sera fort utile ! Rédigé par Mark McGuinness, cet ouvrage tente d&#8217;apporter de la méthode sur une des plus grande problématique dans le monde du travail : l&#8217;organisation de la journée de travail. Cliquez sur [...]]]></description>
			<content:encoded><![CDATA[<p>Si vous êtes comme moi et que vous avez du mal à organiser votre journée de travail, ce document vous sera fort utile !</p>
<p><span id="more-62"></span></p>
<p><a href="http://www.blacksmurf.net/wp-content/uploads/2010/06/teletravail.jpg"><img class="alignleft size-thumbnail wp-image-82" title="Teletravail" src="http://www.blacksmurf.net/wp-content/uploads/2010/06/teletravail-150x150.jpg" alt="" width="150" height="150" /></a>Rédigé par Mark McGuinness, cet ouvrage tente d&#8217;apporter de la <span style="text-decoration: underline;">méthode</span> sur une des plus grande problématique dans le monde du travail : l&#8217;organisation de la journée de travail.</p>
<p>Cliquez sur le lien ci-dessous pour télécharger l&#8217;ebook gratuitement.</p>
<p><a href="http://www.blacksmurf.net/wp-content/uploads/2010/06/TimeManagement.pdf">Time Management for Creative People</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.blacksmurf.net/2010/06/la-gestion-du-temps-et-de-ses-priorites/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

