|
Avril 1998 - Février
1999
Jean-Marc Lienher
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 :
-
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 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"
Documentation : pages du manuel , UNIX ...
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 T M 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>
é
è
ê
ë
î
ï
ö
ü
ù
à
â
&
<
<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 :
-
aaa
-
bbb
-
ccc
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.
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
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
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 :-).
Compilation : debug < MON_PROG.TXT
Exécution : MON_PROG
|