fr    pandunia    en    de    it

Introduction à la programmation

1998 - 1999 © Jean-Marc Lienher


Programmation Dos


Introduction

Ce document n'a pas pour but de vous donner tous les secrets de la programmation informatique.

Il s'agit d'un tour rapide des langages de programmations les plus courants et d'un apprentissage par l'exemple sans théorie.

Pour chaque langage, un court exemple est donné.
Je vous propose de l'essayer et de tenter d'en comprendre le fonctionnement.
Ensuite, modifiez le pour mieux visualiser le comportement de toutes les fonctions.
Et enfin, créez un programme qui vous est propre en utilisant les fonctions présentées dans l'exemple.
Si ces fonctions ne suffisent pas à créer votre programme, consultez la documentation ou procurez vous un ouvrage qui traite le langage que vous avez choisi.

Le langage qui comporte le plus d'exemples dans ce document est Perl, car c'est le plus utilisé pour la création de scripts CGI sur les serveurs WEB.

Après avoir lu ce document vous décidez de vous lancer réellement dans la programmation, procurez vous un ou des ouvrages traitant du sujet de votre programme. En effet , il n'est pas rare de perdre des heures à essayer de trouver comment exécuter une tâche, alors qu'en quelques minutes il aurait été possible de trouver la solution dans un ouvrage de référence.

Dans tous les cas, si vous débutez en programmation, restez raisonnable, ne vous attaquez pas à des projets trop conséquent, vous seriez vite dégoûté.
 


Généralités

Avant de commencer, un mot sur CGI.
CGI n'est pas un langage de programmation, c'est juste une norme.
Cette norme nous dit simplement qu'un programme CGI doit afficher par la sortie standard le texte
"Content-type: text/html" suivit de 2 retours à la ligne avant d'afficher le code source HTML.
Un programme CGI peut être écrit dans n'importe quel langage qui est capable d'afficher du texte et de lire les variables d'environnement.

Remarque : le serveur http de la machine où doit être exécuté le CGI doit être configuré pour accepter les programmes avec l'extension .cgi.

Allons-y :
Il existe deux catégories principales de programmes, les scripts et les programmes compilés.

Les scripts sont des programmes dont le code source et le fichier exécutable ne font qu'un. Pour qu'ils s'exécutent il faut que l'interpréteur correspondant au langage dans lequel ils ont été écrit soit installé sur la machine. Si vous voulez être certain qu'un scripts s'exécute sur toutes les machine UNIX, il vous faudra utiliser le Bourne Shell ("#!/bin/sh"), c'est le seul interpréteur qui se trouve sur tous les systèmes UNIX.

Les programmes compilés ne fonctionnent que sur le système d'exploitation pour lequel ils ont étés compilé.
Un programme compilé pour LINUX ne fonctionnera pas sur FreeBSD . Il faudra le recompiler sur FreeBSD pour l'utiliser, si il est bien écrit il n'y aura pas besoin de modifier le code source. Les programmes compilés sont plus rapides à l'exécution que les scripts car après la compilation ils ne contiennent plus que des instructions en langage machine directement exécutable par le processeur.

Tous les codes sources des programmes d'exemples sont sauvés sur ce serveur avec l'extension .txt. Pour qu'ils soient utilisables, il faudra les renommer avec l'extension correcte après les avoir sauvé sur votre disque dur.

Structure générale d'un programme :

  • inclusion de fichiers source externes
  • définition de macro et constantes
  • définition des variables globales
  • définition des sous-fonctions
    • boucle
    • acquisition des données
    • affichage des données
    • tests sur les données
    • modification des données
    • ...
  • définition de la fonction principale (qui sera appelée en premier)
    • appel des sous-fonctions
    • boucle principale


Style :

Style de codage d'après Kernighan and Ritchie (K&R),  les prophètes du langage C.
Résumé par Linus Torvalds pour Linux (et traduit par moi-même;-).

Le code à l'intérieur d'une fonction est tabulé à 8 caractères.
Le nombre maximum de tabulation est de 3, si il doit être dépassé
c'est qui faut définir une sous-fonction.

Les parenthèses '{' sont placées sur la même ligne que les instructions
et sous les définitions de fonctions. Les parenthèses '}' sont placées
seules sur une ligne. Exemple :

        if (x is true) {
                we do y
        }

        int function(int x)
        {
                body of function
        }

        do {
                body of do-loop
        } while (condition);

        if (x == y) {
                ..
        } else if (x > y) {
                ...
        } else {
                ....
        }

Les noms de variables et de fonctions 'GLOBAL' doivent être significatif.
Exemple pour une fonction qui compte le nombre d'utilisateurs actifs:
        count_active_users()
et pas :
        cntusr()

Les noms de variables 'LOCAL' doivent être courts. Exemple :
        i
et pas :
        loop_counter

Les fonctions doivent être courtes, elles ne doivent pas dépasser
48 lignes et 80 caractères par lignes. Elles peuvent être plus
longues si elles sont simples. Si elles sont compliquées définissez
des sous-fonctions 'inline'.

Les variables locales ne doivent pas être plus nombreuses que 10.

Ajoutez des commentaires pour expliquer ce que fait votre code et pas
comment il le fait. Évitez de mettre des commentaires dans le corps des
fonctions. Si vous le faites soyez bref. Placez les commentaire au dessus
de la fonction.
 
 



 
 

Programmation Unix

Pour qu'un programme puisse être exécuté sous UNIX, il faut toujours le rendre exécutable à l'aide de la commande suivante :
    chmod a+x mon_programme
N'oubliez jamais de consulter les pages de manuel, en général elles sont extrêmement bien faites.
 

Scripts Shell

Tous les scripts shell commencent par une ligne qui indique le chemin absolu du shell pour lequel ils ont été écrits (exemple pour sh : "#!/bin/sh").


 

    sh

Sh est un shell simple qui est standard et obligatoirement présent sur tous les systèmes Unix.
Sous Linux il n'est pas réellement présent, il est directement linké à bash qui est un sh amélioré.
 
      echo -n "Quel est ton nom ? "
      read nom
      echo "Hello $nom, sh te salue"
    Exemple 2:
      #!/bin/sh

      txt="<H1>Affichage des variables d'environnement pour script cgi</H1>"
      echo -ne "Content-type: text/html\n\n"
      echo $txt
      echo  "<PRE>"
      printenv
      echo "</PRE>"

Documentation :  pages du manuel , UNIX ...


    csh/tcsh

    Un shell qui reprend la syntaxe du langage C ???
    Vous trouvez? C'est en tout cas ce qui est écrit sur tous les ouvrages parlant de UNIX.

    Exemple :

      #!/bin/csh

      set txt="Content-type: text/html"
      echo $txt
      echo
      echo "<H2>Il est "`date '+ %H heure %M minute'`".</H2>"
       
       


    ksh

    Un shell puissant pour la programmation.

    Exemple :

      #!/bin/ksh

      html_head () {
              echo -ne "Content-type: text/html\n\n"
      }

      html_head

      i=0
      while (test $i -lt  1) {
              i=`expr $i + 1`
              echo "Ceci est le mot magique pour créer un script CGI :"
              echo "<PRE>"
              html_head
              echo "</PRE>"
      }
      echo "Hé oui, c'est tout ..."


Scripts awk

Un langage pour le traitement de fichier texte. L'ancêtre de  Perl.

Exemple 1:

    #!/bin/awk -f
    BEGIN {printf "Quel est ton nom? "}
    {
            print "hello " $1 ", awk te salue"
            exit
    }
    END {print "bye bye"}


Exemple 2:
    #!/bin/awk -f

    BEGIN {
            printf "Quel est ton login ? "
            FS=":"
    }

    {
            login = $0
            # print FNR
            print login, "\b, je recherche to acompte."
            system( "cat /etc/passwd

    /usr/tmp/recherche.tmp" )


            status = getline $0 < "/usr/tmp/recherche.tmp"
            i = 1
            while ( status > 0 ) {
                    print "+", i,"  acompte :",$1
                    if ( $1 == login ) {
                            rep = $6
                    }
                    if (( $1 ~ login ) && ( $1 != login )) {
                            print $1, "a un login très proche du tien"
                    }
                    status = getline $0 < "/usr/tmp/recherche.tmp"
                    i++
            }
            system( "rm /usr/tmp/recherche.tmp" )
            exit
    }

    END {
            if (rep != "") {
                    print login, "\b, ton répertoire est", rep
                    exit 0
            } else {
                    print "je n'ai pas trouve ton acompte"
                    exit 1
            }
    }
     


Scripts Perl

Le TOP des langages scripts pour le traitement du texte et le reste...

Exemple 1:

    #!/usr/bin/perl5

    print "Quel est ton nom ? ";
    $nom = <STDIN>;
    chomp($nom);
    print "Hello $nom, Perl te salue\n";



Exemple 2:
    #!/usr/bin/perl5
    # Script CGI universel
    # - Support la méthode de communication POST ou GET
    # - Prend en charge la conversion de caractères spéciaux

    sub getHtmlData() {
            local(%in,$buffer,$i, $index, $key, $val, @in );
            if ($ENV{'REQUEST_METHOD'} eq "POST") {
                    read (STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
            }
            if ($ENV{'REQUEST_METHOD'} eq "GET") {
                    $buffer = $ENV{'QUERY_STRING'};
            }
            @in = split(/&/,$buffer);
            $i=0;
            while ($i <= $#in)  {
                    $in[$i] =~ s/+/ /g;
                    $in[$i] =~ s/%(..)/pack("c",hex($1))/ge;
                    $index = index($in[$i],"=");
                    $key = substr($in[$i],0,$index);
                    $val = substr($in[$i],$index+1);
                    if (defined($in{$key})) { $in{$key} .= "\0" };
                    $in{$key} .= $val;
                    $i++;
            }
            return %in;
    }
    my %data = getHtmlData();
    print "Content-type: text/html\n\n<HTML>\n";
    print "<PRE>\n";
    my $vari;
    foreach $vari (keys(%data)) {
            print "la variable $vari contient  $data{$vari}\n";
    }
    print "</PRE>\n";
    print "</HTML>\n";
    exit;



Exemple 3:
#!/usr/bin/perl5

print "Content-type: text/plain\n\n";
 # - Affiche du texte sur la sortie standard
 # \n représente un retour a la ligne
 # \t représente une tabulation

open(FILE1, ">/usr/tmp/tst_$$.txt");
print FILE1 "Hello\n ... \n";
close(FILE1);
 # - Ouvre un fichier (avec un nome unique) pour y écrire
 #   (avec >> a la place de

si le fichier existe les donnes


 #   sont mises a la suite des anciennes)
 # - Écrit dans le fichier
 # - Ferme le fichier

open(FILE2, "</usr/tmp/tst_$$.txt");
$i=0;
while(<FILE2>) {
        print "ligne $i $_\n";
        $i++;
}
close(FILE2);
qx{rm /usr/tmp/tst_$$.txt};
 # - Ouvre un fichier pour y lire des donnes
 # - Initialise la variable $i a 0
 # - Lit ligne par ligne le fichier tant que la fin n'est pas atteinte
 # - Affiche le numéro de la ligne suivit du contenu de cette ligne
 # - Ajoute 1 a la variable $i
 # - Fin de la boucle de lecture
 # - Ferme le fichier
 # - Efface le fichier

$date=qx{date '+%d.%m.%Y'};
chomp($date);
print "Nous sommes le $date ...\n";
 # - Initialise la variable $date avec le texte qui est retourne par
 #   la commande date exécutée dans un shell
 # - Supprime le retour a la ligne a la fin du la variable date
 # - Affiche le résultat

@table = ("zero", "un", "deux", "trois");
@table = (@table, "quatre");
for ($i=0; $i <= $#table; $i++) {
        print "$i --- $table[$i]\n";
}
 # - Initialise  un tableau contenant 4 cases (ou variables)
 # - Ajoute une cinquième case au tableau
 # - Boucle pour chaque valeur de $i tant que $i est plus petit ou
 #   égale au nombre de cases contenues dans le tableau.
 # - Affiche la valeur de $i et le contenu de la case du tableau
 #   correspondant
 # - Fin de la boucle

%hash = ("key", "val", "nom", "jml");
foreach $clef (keys(%hash)) {
        print "$clef contient $hash{$clef}\n";
}
$hash{'perl'} = "top";
delete $hash{'nom'};
foreach $val (values(%hash)) {
        print "$val est dans hash\n";
}
 # - Initialise un hachage contenant 2 clefs initialisées.
 # - Boucle pour chaque clefs contenue dans le hachage
 # - Affiche le nom de la clef et sa valeur
 # - Fin de la boucle
 # - Ajoute un clef au hachage;
 # - Supprime un clef
 # - Boucle pour chaque valeur contenue dans le hachage
 # - Affiche cette valeur.
 # - Fin de la boucle

$i=3;
if ($i<2) {
 print "i est plus petit que 2\n";
} elsif ($i==3) {
 print "i egal 3\n";
} else {
 print "i n'est pas égal a 3 et n'est pas plus petit que 2\n";
}
 # - Initialise la variable $i a 3
 # - Si $i est plus petit que 2 :
 #   - Affiche "i est plus petit que 2"
 # - Sinon si $i est égal a 3 :
 #   - Affiche "i égal 3"
 # - Sinon :
 #   - Affiche "i n'est pas ..."

$txt="yes or no";
if ($txt eq "yes or no") {
 print "txt égal yes or no\n";
}
if ($txt =~ m/OR NO/ig ) {
 print "txt contient OR NO en majuscule ou en minuscule \n";
}
 # - Initialise la variable $txt
 # - Si $txt égal "yes or no" :
 #   - Affiche "txt .."
 # - Si $txt contient "OR NO" en majuscule ou en minuscule :
 #   - Affiche ...

$txt="hello world\n";
print $txt;
$txt =~ tr/a-z/A-Z/;
print $txt;
$txt=~ s/WORLD/earth/g;
print $txt;
 # - Initialise la variable $txt
 # - Affiche la variable $txt
 # - Transforme toutes le minuscules contenues dans $txt en majuscules
 # - Affiche la variable $txt
 # - Remplace tous les mots WORLD contenus dans $txt par earth
 # - Affiche la variable $txt

$vrai=1;
$faux=0;
if ($vrai) { print "ok 1\n" };
if (!$faux) { print "ok 2\n" };
if ($vrai || $faux) { print "ok 3\n" };
if ($vrai && $faux) { print "ok 4\n" };
# - Initialise les variables $vrai et $faux
# - Si $vrai est différent de 0 : Affiche "ok 1"
# - Si $faux égal 0 : Affiche "ok 2"
# - Si $vrai est différent de 0 ou si $faux est différent de 0 : Affiche "ok 3"
# - Si $vrai est différent de 0 et si $faux est différent de 0 : Affiche "ok 4"

sub ma_fonction
{
      print "$_[0] plus $_[1] égal ";
      return ($_[0] + $_[1]);
}
print ma_fonction(2,3) . "\n";
 # - Déclare une sous fonction de nom "ma_fonction"
 #   - Affiche "1er argument de la sous fonction" "plus" " 2ème argument" "égal"
 #   - Retourne la somme de 2 arguments
 # - Fin de la sous fonction
 # - Appel la sous fonction avec les arguments 2 et 3 et Affiche le résultat
 #   retourne par la sous fonction

$txt="nom\tLienher\tprenom\tJean-Marc\tentreprise\tNickasil Production.\n";
@donnes=split('\t',$txt);
$i=0;
foreach $data (@donnes) {
 if ($i) {
  print "$data\n";
  $i=0;
 } else {
  print "$data == ";
  $i=1;
 }
}
 # - Initialise la variable $txt
 # - Initialise le tableau @donnes en créant une case par phrase séparée par une
 #   tabulation dans la variable $txt
 # - Initialise $i
 # - Boucle pour chaque case contenue dans @donne :
 #   - Si est différent de 0 :
 #     - Affiche le contenu de la case
 #     - Met $i a 0
 #   - Sinon :
 #     - Affiche le contenu de la case et " == "
 #     -Met $i a 1
 #   - Fin de Si
 #  - Fin de boucle

$txt="0123456789012345";
$ind1 = index($txt,'23',0);
$ind2 = index($txt,'23',$ind1+1);
print "$txt\n";
print substr($txt,$ind1,10) . "  index1=$ind1\n";
print substr($txt,$ind2), "  index2=$ind2\n";
 # - Initialise la variable $txt
 # - Initialise $ind1 avec le nombre de caractères trouves dans
 #   $txt avant de trouver la chaîne de caractère '12'
 # - Initialise $ind2 comme $ind1 mais en cherchant après $ind1
 # - Affiche $txt
 # - Affiche les 10 caractères de $txt qui suivent l'emplacement de $ind1
 # - Affiche la fin de $txt depuis l'emplacement de $ind2

print pack("c",0x41) . "\n";
print unpack("H","A") . unpack("h","A") . "\n";
print hex("0x41");
 # - Affiche le caractère ASCII correspondant 0x41 en hexadécimal (base 16)
 # - Affiche la partie haute et la partie basse de la hexadécimale
 #   correspondant a la lettre A
 # - Affiche la valeur en décimal de 0x41 en hexadécimal

@list = ("ABAAAA", "AAAAAA", "BBBBBB", "CCCCCC");
while (<@list>) { print "$_\n" };
print "tri\n";
@list = sort {uc($a) cmp uc($b)} @list;
while (<@list>) { print "$_\n" };
@list = (3, 2, 5, 8, 1 ,7, 2);
while (<@list>) { print "$_\n" };
print "tri\n";
@list = sort {$a <=> $b} @list;
while (<@list>) { print "$_\n" };
 # - Initialise le tableau @list
 # - Affiche toutes les cases de @list avec un retour a la ligne
 # - Affiche "tri"
 # - Trie @list par ordre alphabétique sans tenir compte de majuscules et des minuscules
 # - Affiche la liste triée
 # - Initialise @list avec des nombres
 # - Imprime @list ligne par ligne
 # - Affiche "tri"
 # - Trie @list dans l'ordre croissant
 # - Imprime @list

print "8 / 3 = " . (8 / 3) . "\n";
print "int(8 / 3) = " . int(8 / 3) . "\n";
print "8 % 3 = " . (8 % 3) . "\n";
print "8 - 3 = " . (8 - 3) . "\n";
print "8 + 3 = " . (8 + 3) . "\n";
print "sqrt(8) = " . sqrt(8) . "\n";
print "8 2 = " . (8 2) . "\n";
 # - Affiche une division a virgule
 # - Affiche une division entière
 # - Affiche le reste d'une division entière
 # - Affiche une soustraction
 # - Affiche une addition
 # - Affiche une racine carrée
 # - Affiche une puissance
 # - (Tous les chiffre peuvent être remplace par des variables

print sprintf ("un nombre %.5f\n",2.89);
 # - Affichage formate d'un nombre

use IO::Socket;
$host="localhost";
$port="80";
$page="/";
$remote = IO::Socket::INET->new(Proto => "tcp",
                              PeerAddr => $host,
                              PeerPort => $port, );

$remote->autoflush(1);
print $remote "GET $page\n";
while (<$remote>) {
      print $_;
}
close($remote);
 # - Inclus le module IO:Socket pour l'utilisation du réseau
 # - Initialise les 3 variables
 # - Crée un objet $remote représentant une connexion réseau avec
 #   le serveur $host sur le port 80 (http)
 # - Met la connexion en mode de vidage du buffer automatique
 # - Demande au serveur de renvoyer la page $page
 # - Boucle tant que le serveur envoie des données
 #   - Affiche ces données
 # - Fin de boucle
 # - Ferme la connexion réseau
 # - ATTENTION : pour utiliser IO::Socket, il faut au minimum la
 #               version 5.004 de perl

Un autre exemple

Documentation :

  • pages man  :
    • perl
    • perldata
    • perlfunc
    • perlipc
    • perlmod
    • perlvar
    • ...



Scripts Tcl

Langage de base pour Tk.
Exemple 1:
    #!/usr/bin/tclsh

    puts  -nonewline "Quel est ton nom? "
    flush stdout
    set nom [gets stdin]
    puts "Hello $nom, Tcl te salue"

Exemple 2 :
#!/usr/bin/tclsh
set variable 0

for {set i 0} {$i < 5} {incr i} {
       puts "i = $i"
}

set i 0
while {$i < 5} {
       puts "sortie prématurée"
       incr i
       if {$i == 2} { break }
}

set i 0
if {$i == 0} then {
       puts "zéro"
} elseif {$i < 0} then {
       puts "négatif"
} else {
       puts "positif"
}

proc ajoute_2_a num {
       return [expr $num + 2]
}
set i 1
puts "[ajoute_2_a $i]"

puts "$env(PATH)"

set tableau(0) "oui"
set tableau(1) "non"
set tableau(2) "bof"
for {set i 0} {$i != 3} {incr i} {
       puts "$tableau($i)"
}

puts -nonewline stdout "tapez quelque chose > ? "
flush stdout
set entree [gets stdin]
set file_handler [open "test.tmp" {RDWR CREAT APPEND}]
puts $file_handler $entree
seek $file_handler 0 start
while {[gets $file_handler line] != -1} {
       puts "$line"
}
close $file_handler



Scripts Tcl/Tk

Le standard pour créer des applications graphiques sous X-Window avec un langage script.
La création d'une interface graphique est un jeu d'enfant avec Tcl/Tk.

 Exemple 1:

    #!/usr/bin/wish

    label .quest -texte "Quel est ton nom ? "
    entry .nom
    label .rep -texte ""
    button .quit -texte "Quitter" -command { exit}
    button .ok -texte "OK" -command {
        set nom [.nom get ]
        .rep config -texte "Hello $nom, Tcl/Tk te salue"
    }
    pack .quest .nom .rep .ok .quit


C

LE LANGAGE. Presque tous les programmes sont  écrits en C sous UNIX.

Pour debugger votre programme C ou C++ utilisez "gdb" :

gdb mon_prog
(gdb) run
Starting program: /usr/src/mon_prog
Program received signal SIGSEGV, Segmentation fault.
(gdb) where
#0  0x4029a373 in gtk_entry_set_text (entry=0x82f5c68,
    text=0x4 <Address 0x4 out of bounds>) at gtkentry.c:395
(gdb) list gtkentry.c:394

394       tmp_pos = 0;
395       gtk_editable_insert_text (editable, text, strlen (text), &tmp_pos);
396       editable->current_pos = tmp_pos;
(gdb) quit


Exemple 1:

    #include <stdio.h>

    char nom[255];

    void main(int argc, char *argv[])
    {
            printf("Quel est ton nom? ");
            fscanf(stdin,"%255s",nom);
            printf("Hello %s, C te salue\n",nom);
    }

Compilation : gcc -g -o mon_prog mon_prog.c
Exemple 2:
// Exemple de programmation X-Window utilisant les

// widgets athena Xaw (les plus moches)
// compilation : gcc -o x x.c  -lXaw

#include <X11/Xlib.h>
#include <X11/Intrinsic.h>
#include <X11/StringDefs.h>
#include <X11/Shell.h>
#include <X11/Xaw/Label.h>
#include <X11/Xaw/Box.h>
#include <X11/Xaw/AsciiText.h>

static Widget top, box, label1, label2, texte;

static void callback (Widget w, XtPointer client_data, XEvent *event)
{
        int n;
        Arg args[20];
        String str;

        if (client_data == NULL) exit(0);
        n=0;
        XtSetArg(args[n],"string",&str);n++;
        XtGetValues(text,args,n);
        printf("X-Window te salue, %s... \n",str);
}

void main(int argc, char *argv)
{
        int n;
        Arg args[20];
        XtAppContext context;

        top = XtVaAppInitialize(&context, "exemple", NULL, 0,
                                &argc, argv, NULL, XtNallowShellResize,
                                TRUE,NULL);
        box = XtCreateManagedWidget("box", boxWidgetClass, top, NULL, 0);
        texte = XtVaCreateManagedWidget("text",
                                        asciiTextWidgetClass, box, NULL);
        label1 = XtVaCreateManagedWidget("Hello",
                                         labelWidgetClass, box, NULL);
        label2 =  XtVaCreateManagedWidget("FIN",
                                        labelWidgetClass, box,NULL);
        XtAddEventHandler(label1,ButtonPressMask,False,
                                (XtEventHandler)callback,"hello");
        XtAddEventHandler(label2,ButtonPressMask,False,
                                (XtEventHandler)callback,NULL);
        n=0;
        XtSetArg(args[n],"string","mon nom");n++;
        XtSetArg(args[n],"editType",XawtextEdit);n++;
        XtSetValues(text,args,n);
        XtRealizeWidget(top);
        XtAppMainLoop(context);
}

Compilation : gcc -o x x.c  -lXaw
(les headers .h Xaw et la librairie Xaw doivent être installés pour compiler ce programme).

C++

Extension orientée objet au langage C. Très utilisé sous X-Window et Windows9X. KDE est écrit en C++.
Exemple 1:
    #include <iostream.h>

    class name
    {
            char nom[255];

            public:
            void demande_nom();
            void affiche_hello();
    };

    void main(int argc, char *argv[])
    {
            name class_hello;
            class_hello.demande_nom();
            class_hello.affiche_hello();
    }

    void name::demande_nom()
    {
            cout << "Quel est ton nom? ";
            cin.getline(nom,255);
    }

    void name::affiche_hello()
    {
            cout << "Hello " << nom << ", C++ te salue\n";
    }

Compilation : g++ mon_prog.cc -o mon_prog
Exemple 2 :
// Programmation C++ avec wxWindows

// g++ t.cc -I/usr/include/wxwin/x -I/usr/include/wxwin/base -I/usr/openwin/include/

  • Dwx_xview -L/usr/openwin/lib/ -lwx_ol -lxview -lX11 -lolgx -lXpm

#include "wxwin/base/wx.h"
class TheApp: public wxApp
{
        public:
                TheApp(void);
                wxFrame* OnInit(void);
                static wxFrame* frame;
                static wxPanel* panel;
                static wxMultiText* texte;
                static wxButton* button;
                static wxButton* quit;
                void ButtonProc(wxButton& but, wxCommandEvent& event);
                void QuitProc(wxButton& but, wxCommandEvent& event);
};

TheApp theApp;

wxFrame* TheApp::frame = NULL;
wxPanel* TheApp::panel = NULL;
wxMultiText* TheApp::text = NULL;
wxButton* TheApp::button = NULL;
wxButton* TheApp::quit = NULL;

TheApp::TheApp()
{

}

wxFrame* TheApp::OnInit(void)
{
        frame = new wxFrame(NULL,"exemple",0,0,300,300);
        frame->Show(TRUE);
        panel = new wxPanel(frame,0, 0, 300, 300, 0, "TheMainFrame");
        texte = new wxMultiText(panel, (wxFunction)NULL, "", "mon nom",
                                1, 1, 150, 100);
        button = new wxButton(panel, (wxFunction)&ButtonProc, "hello");
        quit = new wxButton(panel, (wxFunction)&QuitProc, "fin");
        return((wxFrame*) frame);
}

void TheApp::ButtonProc(wxButton& but, wxCommandEvent& event)
{
        cout << text->GetValue()  << "\n";
}

void TheApp::QuitProc(wxButton& but, wxCommandEvent& event)
{
        frame->Show(False);
        exit(0);
}
 


Fortran

Un ancien langage encore utilisé sur les super calculateurs.
Exemple :
            PROGRAM exemple

            CHARACTER*10 str
    10      WRITE (,) '\bQuel est ton nom? '
            READ (,)  str
            WRITE (,) '\bHello ', str, ', Fortran te salue'
    20      DO 30 i=1,6
            WRITE (,) 'Boucle ', i
    30      CONTINUE
            END

Compilation : f77 mon_prog.f

Pascal

Très utilisés dans les années 80 a été complètement remplacé par le C.

Exemple 1:

    program exemple;
    Var
       Nom:String[256];
    Begin
       write('Quel est ton nom? ');
       readln(Nom);
       writeln('Hello ',Nom,', Pascal te salue');
    End.
Compilation : p2c mon_prog.pas; gcc -lp2c mon_prog.c; mv a.out mon_prog 

Java

Ressemble au C++ et permet d'intégrer des applications dans une page HTML.

Exemple 1 :

Fichier mon_applet.html :

    <applet code="mon_applet.class">
    </applet>
Fichier mon_applet.java :
    import java.awt.*;

    public class mon_applet extends java.applet.Applet
    {
            Label Quest = new Label ("Quel est ton nom? ");
            TextField Nom = new TextField("",15);

            public void init()
            {
                    add(Quest);
                    add(Nom);
            }

            public boolean action(Event evt, Object arg)
            {
                    if (evt.target instanceof TextField)
                    {
                            repaint();
                    }
                    return true;
            }

            public void paint (Graphics g)
            {
                    String Hello;

                    Hello = "Hello " + Nom.getText();
                    Hello += ", Java te salue";
                    if ( Nom.getText().length() != 0) {
                            g.drawString(Hello,100,50);
                    }
            }
    }

Compilation : javac mon_applet.java
Exécution  : ouvrir le fichier HTML à l'aide d'un navigateur Web compatible Java.



Exemple 2 :
    public class mon_prog
    {
            public static void main ( String args[]) throws java.io.IOException
            {
                    String nom = "";
                    System.out.println("Quel est ton nom? ");
                    nom = lit();
                    System.out.println("Hello " + nom + ", Java tu salue");
            }

            public static String lit() throws java.io.IOException
            {
                    char Caractere;
                    String Chaine = "";
                    while ((Caractere=(char)System.in.read()) != '\n')
                    {
                            Chaine = Chaine + Caractere;
                    }
                    return Chaine;
            }
    }

Compilation : javac mon_prog.java

Exécution : kaffe mon_prog           ou        java mon_prog

Scripts JavaScript

A ne pas confondre avec Java !!!
Très utile pour rendre interactif vos pages HTML. Le mélange de HTML et JavaScript dans le même fichier rend les pages WEB très vivantes. Attention, JavaScript a des comportements differents selon les navigateurs, n'utilisez pas des fonctions avancĂ©es.

Exemple 1 :

    <HTML>
    <HEAD>
    <SCRIPT LANGUAGE="JavaScript">
    <!--
    function update() {
            document.forms[0].reponse.value = "Hello " + document.forms[0].nom.value + ", JavaScript te salue"
    }
    // -->
    </SCRIPT>
    </HEAD>

    <BODY>
    <SCRIPT LANGUAGE="JavaScript">
    <!--
    document.write("<FORM>\n")
    document.write("Quel est ton nom? ")
    document.write("<INPUT TYPE=\"text\" NAME=\"nom\" SIZE=\"25\" OnChange=\"update()\">\n")
    document.write("<INPUT TYPE=\"text\" NAME=\"reponse\" SIZE=\"60\">\n")
    document.write("</FORM>\n")
    document.forms[0].nom.focus()
    // -->
    </SCRIPT>
    </BODY>
    </HTML>


(Scripts) HTML

LE Langage de mise en forme de texte du WEB.

Exemple 1 :

    <HTML>

    <HEAD>
    <TITLE>Hyper Text Markup Language</TITLE>
    </HEAD>

    <BODY BGCOLOR=#8fffff>

    <U><CENTER><H1>
    H&nbsp; T&nbsp; M&nbsp; L
    </H1></CENTER></U>

    <I>HTML est un langage de mise en forme de documents</I>
    <BR>
    <B>Ce n'est pas un langage de programmation !!!</B>
    <BR><A HREF="prog.html">un lien </A><BR>
    <IMG SRC="prog.gif">une image
    <FONT SIZE="+2"><PRE>Les caractères spéciaux :</PRE></FONT>
    &eacute;
    &egrave;
    &ecirc;
    &euml;
    &icirc;
    &iuml;
    &ouml;
    &uuml;
    &ugrave;
    &agrave;
    &acirc;
    &amp;
    &nbsp;
    &lt;
    <HR>
    <BR>
    Un tableau :
    <TABLE BORDER=0 CELLSPACING=1 CELLPADDING=0 COLS=2 WIDTH="20%" BGCOLOR="#66FF8F" >
    <TR>
        <TD>1</TD>
        <TD>3</TD>
    </TR><TR>
        <TD>2</TD>
        <TD>4</TD>
    </TR>
    </TABLE>

    <UL>
    <LI>aa</LI>
    <LI>bb</LI>
    <LI>cc</LI>
    </UL>
    <OL>
    <LI>aaa</LI>
    <LI>bbb</LI>
    <LI>ccc</LI>
    </OL>

    <FORM ACTION="mailto:root@localhost" METHOD="post">
    nom:<INPUT TYPE="text" NAME="nom" SIZE=30>
    <BR>oui<INPUT TYPE="radio" NAME="rad1" VALUE="oui">
     non<INPUT TYPE="radio" NAME="rad1" VALUE="non" CHECKED>
    <BR><INPUT TYPE="checkbox" NAME="chk1" VALUE="oui" CHECKED>
    <INPUT TYPE="checkbox" NAME="chk2" VALUE="non" >
    <BR><INPUT TYPE="file" NAME="fichier" >
    <INPUT TYPE="hidden" NAME="cache" VALUE="XxX" >
    <BR><SELECT NAME="sel" SIZE=2>
    <OPTION VALUE="un">premier
    <OPTION VALUE="deux">deuxieme
    <OPTION VALUE="trois">troisieme
    </SELECT>
    <BR>
    <TEXTAREA NAME="text" ROWS=6 COLS=60 WARP="HARD">
     H T M L
    </TEXTAREA><BR>
    <INPUT TYPE="submit" value="envoi">
    <INPUT TYPE="reset" value="effacer">

    </FORM>

    <A HREF="mailto:nickasil@linuxbox.com">nickasil@linuxbox.com</A>

    </BODY>

    </HTML>

H  T  M  L

HTML est un langage de mise en forme de documents
Ce n'est pas un langage de programmation !!!
un lien
une image
Les caractères spéciaux :
é è ê ë î ï ö ü ù à â &   < 

Un tableau :
1 3
2 4
  • aa
  • bb
  • cc
  1. aaa
  2. bbb
  3. ccc
nom:
oui non




nickasil@linuxbox.com
Exécution : ouvrir le document mon_fichier.html avec un navigateur Web. 

Programmation Dos

Pour qu'un programme soit exécutable sous DOS (ou Windows 95-98) son nom doit avoir l'extension .exe, .com ou.bat suivant le type du programme.


Scripts Batch (.BAT)

Qui ne connaît pas autoexec.bat ?
    @echo off
    choice "As-tu un nom? "
    if ERRORLEVEL 2 goto non
    if ERRORLEVEL 1 goto oui
    goto fin
    :oui
    echo Hello, MS-DOS te salue
    goto fin
    :non
    echo Tu n'as pas de nom? Tu m'étonnes.
    goto fin
    :fin
Nom du fichier : mon_prog.bat

Exécution : MON_PROG

Scripts QBasic

Le langage standard livré avec DOS, est remplacé par VisualBasic sous Windows9X.
Mais VisualBasic n'est pas livré en standard. QBasic se trouve dans c:\windows\command\ avec Windows9X.
    INPUT "Quel est ton nom? ", nom$
    PRINT "Hello "; nom$; ", QBasic te salue"
    SYSTEM
Exécution : qbasic /run mon_prog.bas 

Assembleur

DOS est livré avec le programme "debug", il servait à configuré les disques durs dans au temps où placer 10MB sur un disque dur 5 1/4 était une prouesse technologique. Maintenant, il ne sert à rien sauf à ceux qui ont envie de parcourir les secteurs d'une disquette byte par byte ou qui veulent modifier la table de partition manuellement (fortement déconseillé). Il peut aussi servir à assembler des petits programmes .COM ou à les désassembler (par ici les crackers :-).
    A 0100
    ORG 200
    DB "Quel est ton nom? $"
    ORG 230
    DB 0A,0D,"Hello "
    ORG 100
    MOV AH,09
    MOV DX,200
    INT 21
    MOV DI,238
    CLD
    MOV AH,01
    INT 21
    STOSB
    CMP AL,0D
    JNE 010B
    MOV AL,24
    STOSB
    MOV AH,09
    MOV DX,230
    INT 21
    MOV AX,4C00
    INT 21
     

    RCX
    140
    N MON_PROG.COM
    W 0100
    Q

Compilation : debug < MON_PROG.TXT
Exécution : MON_PROG