Inf1105

12/05/2005

Série d'exercices 2

Analysez les deux programmes suivants :

pointeur.cpp

pointeur2.cpp

11/30/2005

Date de remise du TP2

Vous avez une semaine supplémentaire pour faire le tp2 :
-remise éléctronique (rendre_tp du .cpp et exécutable) avant 23h59 le samedi 10 décembre.
-remise papier lundi le 12 décembre.

Le changement devrait être fait sous peu sur le site du cours...

11/28/2005

Série d'exercices 1

Voici une série d'exercices destinée à vous aider pour votre tp2 (pas de solutions disponibles) :

exercices.txt

11/22/2005

Corrections du TP1b

Critères d'évaluation

11/19/2005

Demo10

Enonce de la demo 10 : demo10.txt

Solution : demo_c_5_8.cpp

11/13/2005

Demo9

Enonce de la demo 9 : demo9.txt

Solution : demo_c_5_6.cpp, demo_c_5_7.cpp

11/08/2005

Alignement en colonne avec "cout"

Voici un exemple pour faciliter l'alignement en colonne des donnees produites par votre tp1b :

alignement.cpp

Pour un peu plus de détails et d'autres fonctions de cout, voici deux documents :

http://www.cs.hku.hk/~kpchan/CSIS1117C/notes/formatting.pdf

http://130.70.82.204/fdd/cpp_pdf/chap03.pdf


11/07/2005

Demo8

Enonce de la demo 8 : demo8.txt

Solution : demo_c_5_5.cpp

10/23/2005

Demo7

Enonce de la demo 7

Solution : demo_c_3_4.cpp, demo_c_4_1.cpp, demo_c_4_2.cpp

10/15/2005

Demo6

Enonce de la demo 6.

Solution : demo_c_2_5.cpp, demo_c_2_6.cpp, demo_c_3_1.cpp, demo_c_3_2.cpp, demo_c_3_3.cpp

10/12/2005

Pour Votre Information

-Le TP1a est à remmetre électroniquement (rendre_tp) avant le samedi 22 octobre à 23h59, et la copie papier avant le lundi 24 octobre 9h00 AM.

-Un ou des anciens examens devraient être rendus disponibles sur le sîte officiel du cours.

-Il y aura un TP1b et un TP2, qui seront tous deux des exercices de programmations en langage C.

10/10/2005

Demo5

Enonce de la demo 5.

Solution : demo_c_1.cpp, demo_c_2_1.cpp, demo_c_2_2.cpp, demo_c_2_3.cpp, demo_c_2_4.cpp

10/03/2005

Demo4

SCRIPT : Suite et fin...

Après avoir revu le script "script_comp" (de la demo3 partie 3), essayez d'ajouter une confirmation avant de quitter... C'est-à-dire que lorsqu'on choisi l'option 5, le programme demande : "Etes-vous certains de vouloir quitter (o/n) : ", et dépendant si l'utilisateur entre 'o' le programme s'interrompt, s'il entre 'n' ou n'importe quoi d'autre le programme continu...

solution : script_comp2 (disponible le 8 octobre)

COMPILATION

-compiler avec g++ de la ligne de commande (l'option -o pour
renommer l'executable).

exemple :
% g++ test.cpp
% g++ test.cpp -o test.exe

Exercice de cette semaine :
telecharger, compiler et executer le programme suivant : test.cpp

9/26/2005

Demo3 (partie 3)

-----------------------------------------------
-------------- HUITIEME PARTIE ----------------
-----------------------------------------------

Script : suite d'instructions exécutés de façon sérielle.

Il y a plusieurs langage de script dans Unix, ils sont associés à différents shell (Bourne Shell, C shell et Korn shell). Nous nous contenterons dans les labos de voir quelques éléments de scripting du Bourne Shell (le plus simple des trois). Pour spécifier qu'un script est écrit, et doit être interprété par la machine dans le langage du Bourne shell, on débute tout script par :

#!/bin/sh

*** Pour exécuter un script, on a qu'à se donner les droits d'exécution (% chmod 700 chemin/nom_du_script), puis à l'appeler à la ligne de commande (% chemin/nom_du_script).

Dans un script, on peut inclure n'importe quel instruction pouvant être interprété par le shell. Voici un exemple de script affichant un message à l'aide de la commande echo : script1.

Dans un autre exemple, voyons maintenant comment on peut "mettre en forme" la sortie d'une commande : script2.

Remarquez que dans le dernier script on utilise le '`'(accent grave) pour borner(entourer) une commande qui doit être exécutée plutôt que d'afficher simplement son nom.

On peut rendre l'exécution de certaines commandes conditionnelles, autrement dit, les commandes s'exécuteront seulement si une, ou des conditions sont respectées. Pour faire cela on utilise un "if". La structure classique d'un "if" (si) est : si "conditions" alors "instructions" sinon "instructions alternatives" fin du si. Ce qui se traduit par : si = if, alors = then, sinon = else et fin du si = fi.

if [ condition ] ; then
instructions
else
instructions alternatives
fi

voici un exemple de script utilisant un if : script3

On peut également répéter une, ou des instructions un certain nombre de fois. Pour faire une répétition on utilise une boucle "while". La structure classique d'un while (tant que) est : tant que "conditions" faire "instructions" fin du tant que. La traduction de c'est instructions est : tant que = while, faire = do et fin du tant que = done.

while [ condition ]
do
instructions
done

Voici un exemple de script utilisant une boucle while : script4

Notez dans le script l'utilisation de l'instruction read qui permet de lire une donnée entrée au clavier.

Avec ces quelques instructions de base, il n'y a que votre imagination pour limiter ce que vous pouvez faire... voici un exemple de script combinant les instructions que nous venons de voir : script_comp


Demo3 (partie 2)

-----------------------------------------------
-------------- SEPTIEME PARTIE ----------------
-----------------------------------------------

Variables :
-----------

1. Pour afficher a l'ecran une chaine de caracteres ou le contenu d'une variable :

% echo chaine_de_caractere
ou
% echo $nom_de_variables

exemple :
% echo Hello!
% echo $PATH
% echo $HOME
% echo $USER


2. Pour afficher l'ensemble des variables d'environnement et leurs contenu :

% env


3. Pour creer une variable d'environnement ou en modifier le contenu :

% setenv nom_variable contenu

exemple :
% setenv TEST inf1105
% env (pour verifier que TEST est la)


4. Pour supprimer une variable d'environnement :

% unsetenv nom_variable

exemple :
% unsetenv TEST
% env (pour vérifier que TEST n'est pas la)


5. Pour afficher l'ensemble des variables d'usager et leurs contenu :

% set


6. Pour creer une variable d'usager ou en modifier le contenu :

% set nom_variable=contenu

exemple :
% set test=demo3
% env (pour verifier que test n'est pas la)
% set (pour verifier que test est la)


7. Pour supprimer une variable d'usager :

% unset nom_variable

exemple :
% unset test
% set (pour verifier que test n'est plus la)


8. Exemple d'ajout au contenu deja present dans une variable :

% setenv PATH ${PATH}:. (ajoute ./ a PATH)


9. Certaines variables n'ont pas besoin de contenu :

exemple : pour que ^d ne "quitte" plus : % set ignoreeof

Demo3 (partie 1)

-----------------------------------------------
-------------- SIXIEME PARTIE -----------------
-----------------------------------------------

Processus et jobs :
-------------------

1. Pour afficher la liste des processus actifs dans le systeme :

% ps [-fle]

exemple :
% ps
% ps -f (full)
% ps -l (long)
% ps -e (tout les processus)


2. Pour arreter un processus :

^z suspend le processus
^c detruit le processus


3. Pour demarrer un processus en arriere plan (jobs) :

% commande&

exemple :
% top&


4. Pour afficher la liste des jobs :

% jobs


5. Pour ramener la derniere job cree a l'avant plan :

% fg


6. Pour detruire un processus ou un job :

% kill #process (tentative de destruct. processus)
% kill -9 #process (destruction du processus)
% kill %#jobs (tentative de destruction job)
% kill -9 %#jobs (destruction du job)

9/25/2005

Précision sur la commande "wc"

Il y a une précision à apporter au sujet de la commande "wc"

-c : print the byte counts (affiche le nombre d'octet)

-m : print the character counts (affiche le nombre de caractères)

c'est vrai qu'un caractère est normalement codé sur un octet, mais y a des systèmes qui codent un caractère en 7 bits, on n'aura alors pas un wc -c égale à wc -m. Par contre, l'option -m n'est pas disponible dans toutes les versions de "wc"...

Merci à Romdhane pour la précision,

Eric

9/20/2005

Demo2 (partie 2)

-----------------------------------------------
------------ CINQUIEME PARTIE -----------------
-----------------------------------------------

Dans cette partie, pour exécuter les exemples de commandes, il vous faut copier le fichier /etc/passwd dans le répertoire courant.


SED et AWK
----------

sed : un EDITEUR de fichier texte NON-interactif.

awk : un LANGAGE pour le traitement de "motifs" (pattern).


SED
---

sed reçoit ses entrées d'un fichier ou du clavier (stdin) et affiche ses résultats à l'écran (stdout). sed, tout comme grep, traite les données en entrées une ligne à la fois. Par contre, contrairement à grep, sed permet de modifier le contenu recu en entree.

Voici les commandes de sed que nous verront :
s = substitute (remplacer)
d = delete (supprimer)
p = print (afficher)

Le format général de la commande sed est :

sed -e 'command1' [-e 'command2'] [...] fichier


Substitution :
--------------

Commande : 's/motif_a_remplacer/nouveau_motif/g'

(Le 'g' à la fin est optionnel. S'il est présent, toutes les occurences du motif_a_remplacer seront modifiées et non seulement la première occurence de chaque ligne)

Exemple : remplace la premiere occurence de "comptoir" de chaque ligne par "allo" :
% sed s/comptoir/allo/ passwd

remplace toutes les occurences de "comptoir" par "allo" :
% sed s/comptoir/allo/g passwd

substitution multiples, "comptoir" devient "allo" et "Usager" devient "user", partout dans le texte :
% sed -e s/comptoir/allo/g -e s/Usager/user/g passwd


Suppression :
-------------

Commande : '#ligne_debut[, #ligne_fin]d'

(c'est le 'd' à la fin qui indique qu'il faut supprimer les lignes spécifiées)

Exemple :

supprimer la premiere ligne :
% sed 1d passwd

supprimer les dix première lignes :
% sed 1,10d passwd

supprimer toutes les lignes :
% sed -n '' passwd


Afficher :
----------

Commande : '/motif/p' ou '#ligne_debut[, #ligne_fin]p'
(c'est le 'p' à la fin qui indique qu'il faut afficher les lignes spécifiées)

Exemple :

afficher la ligne qui contient "comptoir" :
% sed -n '/comptoir/p' passwd

afficher les dix premières lignes :
% sed -n '1,10p' passwd


AWK
---

awk est un langage de programmation très complet. Sa syntaxe est fortement inspirée du langage C. awk permet de manipuler les champs.

Le format général de la commande awk est :

awk [-F"séparateur_de_champs"] '{commande}' fichier



Exemples d'utilisation :
------------------------

affichage de champs particuliers :
% awk '{ print $0 }' passwd
% awk '{ print $1 }' passwd
% awk '{ print $2 }' passwd
% awk '{ print $1 $2} passwd
% awk -F":" '{ print $1 $3 }' passwd

affichage de texte statique :
% awk '{ print "" }' passwd
% awk '{ print "allo" }' passwd

affichage combiné de texte tiré du fichier et de texte statique :
% awk -F":" '{ print $1 " " $3 }' passwd
% awk -F":" '{print "login id is : ", $1}' passwd

9/19/2005

Demo2 (partie 1)

-------------------------------------------
----------- QUATRIEME PARTIE --------------
-------------------------------------------


Fichiers texte :
----------------

Avant de continuer : telecharger le fichier : textedemo2.txt


1. Pour afficher le contenu d'un fichier texte :

% more chemin/fichier = affichage du contenu page par page
% less chemin/fichier = comme more mais possibilite de reculer
% head chemin/fichier = affiche les 10 premieres lignes
% tail chemin/fichier = affiche les 10 dernieres lignes
% cat chemin/fichier = cat a beaucoup d'autres fonctions !

exemple :
% cat textedemo2.txt
% more textedemo2.txt (' ' ou enter pour defil.)
% less textedemo2.txt (fleche = defil, q = exit)
% head textedemo2.txt
% tail textedemo2.txt


2. Pour comparer le contenu de deux fichiers texte :

% cmp chemin/fichier1 chemin/fichier2
- affiche l'endroit de la premiere difference (s'il y en a une).

% diff chemin/fichier1 chemin/fichier2
- affiche les lignes qui different.

exemple :
% cp textedemo2.txt textedemo.txt
% pico textedemo.txt
- changer UN caractere du texte
- faite : ^o --> y --> enter
% cmp textedemo2.txt textedemo.txt
% diff textedemo2.txt textedemo.txt
% rm textedemo.txt


3. Pour compter les mots, les caracteres et les lignes contenu dans un fichier texte :

% wc [-lwc] chemin/fichier = commande qui compte les :
- caracteres (-c)
- mots (-w)
- lignes (-l)

exemple :
% wc textedemo2.txt
% wc -c textedemo2.txt
% wc -w textedemo2.txt
% wc -l textedemo2.txt
% wc -lw textedemo2.txt


4. Pour chercher les lignes d'un fichier contenant un motifs :

% grep [-wicvn] "motif[s]" chemin/fichier
% egrep [-wicvn] "motif[s]" chemin/fichier

Options :
- w = chercher le motifs comme mot.
- i = ignore majuscule/minuscule.
- c = affiche seulement le nombre de lignes correspondantes
- v = cherche les ligne qui ne repondent pas au motif
- n = affiche le numero de la ligne avant

Motifs :
- ^ = debut de ligne
- $ = fin de ligne
- \ = annule l'effet du caractere suivant
- \< = debut de mot - \> = fin de mot
- | = ou
- . = un caractere quelconque
- * = n'importe quel chaine de caracteres (chaine vide inclus)

- (), [], ' '= regroupe

exemple :

grep


5. Pour trier les lignes d'un fichier :

% sort [-urk] [debut[,fin]] chemin/fichier

exemple :
% sort textedemo2.txt
% sort -u textedemo2.txt (-u pas de doublons)
% sort -r textedemo2.txt (-r inverse l'ordre)
% sort -k 2 textedemo2.txt (-k debut)
% sort -k 2,4 textedemo2.txt (-k debut et fin)


Contrôle des entrées / sorties :
--------------------------------

6. Pour combiner plusieurs commandes DEPENDANTES : '|'

commande1 | commande2 [ | ... ] = La commande1 s'execute et donne son resultat a commande2 qui le prend pour entree.

exemple :
% ls -l | wc -l (A quoi sert cette commande ?)


7. Pour rediriger l'entree (remplacer le clavier pour les interactivites avec le systeme) ou la sortie (envoyer le resultat d'une commande dans un fichier plustot qu'a l'ecran) :

... > chemin/fichier = envoie le resultat de la commande qui precede dans "fichier" en ecrasant le contenu deja present.

... >> chemin/fichier = envoie le resultat de la commande qui precede dans "fichier" a la suite du contenu deja present.

...| tee [-a] chemin/fichier = envoie le resultat de la commande qui precede dans "fichier" en ecrasant le contenu deja present ou en ajoutant a la suite du contenu present(option -a) ET affiche le resultat a l'ecran.

% ls -l | tee -a fichierTemp
% more fichierTemp

9/12/2005

Demo1 (partie 3)

-------------------------------------------
--------- TROISIEME PARTIE ----------------
-------------------------------------------

L'arborescence des fichier Unix et les chemins (relatifs ou absolus).

. = repertoire courant
.. = repertoire parent
~ = repertoire d'utilisateur (ou de login, aussi = HOME)


Repertoires :
-------------

Dans un terminal arabica...


1. Pour connaitre le chemin absolu du repertoire courant : % pwd


2. Pour connaitre le contenu d'un repertoire : % ls chemin/repertoire

% ls (liste les fichier du repertoire courant)
% ls -a (pour visualiser les fichiers caches)
% ls -l (affichage detaille)
% ls -al


3. Pour creer un repertoire : % mkdir chemin/nouveau_repertoire

% mkdir Inf1105
% mkdir ./Inf1105/Rep_test


4. Pour changer le repertoire courant : % cd chemin/nouv_rep_courant

% cd Inf1105
% cd ..
% cd ./Inf1105/Rep_test
% cd ~


5. Pour effacer un repertoire vide : % rmdir chemin/rep_a_effacer

% rmdir Inf1105/Rep_test
% ls Inf1105 (verifier que Rep_test n'y est plus)


Fichiers :
----------

6. Pour copier un fichier : % cp chemin/fic_source chemin/fic_dest

% touch fichier2 (cree fichier2)
% cp fichier2 Inf1105/fichier2


7. Pour deplacer un fichier : % mv chemin/fic_source chemin/fic_dest

% mv ~/fichier2 Inf1105/fichier


8. Pour supprimer un fichier : % rm chemin/fic_a_suppr

% cd Inf1105
% rm fichier (confirmation demande = -i)
% cd ..
% rmdir Inf1105 (fonct. pas pcq pas vide)
% rm -r Inf1105 (efface un répertoire non vide)


9. Pour changer les permissions d'un fichier : % chmod XXX chemin/fic

% touch testchmod (cree le fichier testchmod)
% ls -l (pour verifier permissions de testchmod)
% chmod 755 testchmod
% ls -l (pour verifier permissions de testchmod)
% chmod 400 testchmod
% ls -l (pour verifier permissions de testchmod)
% chmod 700 testchmod
% ls -l (pour verifier permissions de testchmod)
% rm testchmod

---

Demo1 (partie 2)

-------------------------------------------------
-------------- DEUXIEME PARTIE ------------------
-------------------------------------------------

Browser :
---------

Ouvrir Mozilla, a l'adresse www.labunix.uqam.ca/~m261440/Inf1105, telechager le fichier "un.txt" en cliquant sur le lien
un.txt avec le bouton de droite, et choisissez "Save Link As...". Vous pouvez alors choisir l'endroit et le nom du fichier sauvegarde.


SSH :
-----

D'un terminal du poste ou vous vous trouvez (menu "Outils de systeme") :

% ssh arabica.labunix.uqam.ca (et se loguer...)
% w
% exit


Editeurs de texte :
-------------------

Graphique : gedit recommande.
Texte : pico est le plus simple.

% pico test.txt
(^o pour sauvegarder, ^x pour quitter, ...)


Archivage et compression :
--------------------------

Dans un terminal du poste ou vous vous trouvez :

% tar cf un.tar un.txt
% tar czf un.tgz un.txt
% tar xzf un.tgz


* Les fleches et tab pour l'auto-complete.


Clavardage :
------------

Dans un terminal arabica :

% talk ? [identifiant d'un usager]

---

Demo1 (partie 1)

------------------------------------------------
------------- PREMIERE PARTIE ------------------
------------------------------------------------

Avant-Propos :
--------------

- Linux est case sensitive.
- Faite attention aux accents.
- Sous Windows ouvrez les fichiers Linux avec Wordpad.
- Les differents terminaux : arabica, amalthee et les postes eXX ou fXX.


Identification :
----------------

Allez-y, identifiez-vous au système !

Les commandes d'identification :

Dans un terminal Arabica :
% passwd (Sous pour changer le mot de passe)

De n'importe quel terminal :
% whoami (qui suis-je?)
% w, who et finger (qui est connecte au systeme en ce moment)
% id (pour connaitre mon uid et gid)


Aide :
------

Les commandes d'aide :

Dans un terminal Arabica :
% man nomCommande (pour visualiser le manuel de la commande)
% apropos motCle (affiche la liste des commandes qui ont le
le motCle dans leur manuel)
% xman (navigateur graphique pour man et apropos)


*Le defilement (scrolling) avec les 3 boutons.

---

9/11/2005

Bienvenue sur le sîte des démos d'Inf1105 !

Bonjour,
Le contenu de la scéance de laboratoire de la semaine sera diffusée hebdomadairement sur ce sîte. De plus, il sera possible à tout les démonstrateurs d'INF1105 de publier des remarques, suggestions et trucs pour les TPs.

Les différentes rubriques diffusées sur ce sîte, peuvent toutes être commentées. Je vous invites à communiquer vos questions et commentaires par le biais du mécanisme de commentaires. En réponse à votre commentaire, il sera possible à tous le monde d'ajouter des réponses et/ou des éclaicissements à votre commentaire. Les commentaires peuvent être émis de façon complétement anonyme ou être signés. Pour poster un commentaire sur le sîte, cliquez sur comments sous une rubrique, puis sur Post a Comment dans le bas de la page...

Bonne session !

Eric

PS : SVP, essayer de mettre vos commentaires à la suite de la rubrique la plus appropriée... autrement dit, ne posez pas une question au sujet de la démo 5 en commentaire à la rubrique de la démo 2. Merci !