|
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
|