parent
a85a0c705d
commit
91c1bd66a2
Binary file not shown.
@ -0,0 +1,32 @@
|
||||
#include "tp16.h"
|
||||
|
||||
void test(void)
|
||||
{
|
||||
Tour A, B, C;
|
||||
A.p = pilenouv();
|
||||
strcpy(A.nom, "Tour A");
|
||||
B.p = pilenouv();
|
||||
strcpy(B.nom, "Tour B");
|
||||
C.p = pilenouv();
|
||||
strcpy(C.nom, "Tour C");
|
||||
int n, i;
|
||||
printf("Donner le nombre d'objets : \n");
|
||||
scanf("%d", &n);
|
||||
for(i = n; i >= 1; i--)
|
||||
{
|
||||
A.p = empiler(A.p, i);
|
||||
}
|
||||
afficher(A.p);
|
||||
afficher(B.p);
|
||||
afficher(C.p);
|
||||
hanoi(n, &A, &B, &C);
|
||||
afficher(A.p);
|
||||
afficher(B.p);
|
||||
afficher(C.p);
|
||||
}
|
||||
|
||||
int main(void)
|
||||
{
|
||||
test();
|
||||
return 0;
|
||||
}
|
@ -0,0 +1,82 @@
|
||||
#include "tp16.h"
|
||||
|
||||
Pile pilenouv(void)
|
||||
{
|
||||
Pile p = NULL;
|
||||
return p;
|
||||
}
|
||||
|
||||
Pile empiler(Pile p, int x)
|
||||
{
|
||||
Maillon *q;
|
||||
q = (Maillon *)malloc(sizeof(Maillon));
|
||||
if(q == NULL)
|
||||
{
|
||||
printf("Erreur d'allocation\n");
|
||||
exit(1);
|
||||
}
|
||||
q->v = x;
|
||||
q->suiv = p;
|
||||
return q;
|
||||
}
|
||||
|
||||
Pile depiler(Pile p)
|
||||
{
|
||||
Maillon *q;
|
||||
if(p == NULL)
|
||||
{
|
||||
printf("Opération Interdite !!!\n");
|
||||
exit(1);
|
||||
}
|
||||
q = p;
|
||||
p = p->suiv;
|
||||
free(q);
|
||||
return p;
|
||||
}
|
||||
|
||||
int sommet(Pile p)
|
||||
{
|
||||
if(p == NULL)
|
||||
{
|
||||
printf("Opération Interdite !!!\n");
|
||||
exit(1);
|
||||
}
|
||||
return p->v;
|
||||
}
|
||||
|
||||
bool vide(Pile p)
|
||||
{
|
||||
return p == NULL;
|
||||
}
|
||||
|
||||
void afficherX(int p)
|
||||
{
|
||||
printf("%d ", p);
|
||||
}
|
||||
|
||||
void afficher(Pile p)
|
||||
{
|
||||
printf("\n");
|
||||
while (! vide(p))
|
||||
{
|
||||
afficherX(sommet(p));
|
||||
p = p->suiv;
|
||||
}
|
||||
printf("\n");
|
||||
}
|
||||
|
||||
void hanoi(int n, Tour *A, Tour *B, Tour *C)
|
||||
{
|
||||
int s;
|
||||
if(n == 1)
|
||||
{
|
||||
s = sommet(A->p);
|
||||
A->p = depiler(A->p);
|
||||
C->p = empiler(C->p, s);
|
||||
printf("%d passe de la %s vers la %s\n", s, A->nom, C->nom);
|
||||
return;
|
||||
}
|
||||
hanoi(n - 1, A, C, B);
|
||||
hanoi(1, A, B, C);
|
||||
hanoi(n - 1, B, A, C);
|
||||
}
|
@ -0,0 +1,24 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <stdbool.h>
|
||||
|
||||
typedef struct pile {
|
||||
int v;
|
||||
struct pile *suiv;
|
||||
} Maillon, *Pile;
|
||||
|
||||
typedef struct {
|
||||
Pile p;
|
||||
char nom[20];
|
||||
} Tour;
|
||||
|
||||
Pile pilenouv(void);
|
||||
Pile empiler(Pile p, int x);
|
||||
Pile depiler(Pile p);
|
||||
int sommet(Pile p);
|
||||
bool vide(Pile p);
|
||||
void afficherX(int p);
|
||||
void afficher(Pile p);
|
||||
void test(void);
|
||||
void hanoi(int n, Tour *A, Tour *B, Tour *C);
|
Binary file not shown.
@ -0,0 +1,90 @@
|
||||
#!/bin/bash
|
||||
|
||||
doc() {
|
||||
cat << EOF >&2
|
||||
Affiche le nombre de processus de chaque utilisateur possédant au moins
|
||||
1 processus dans le système.
|
||||
|
||||
usage : \'basename $0\' \[ -h \]
|
||||
|
||||
-h : affiche cette aide.
|
||||
EOF
|
||||
#affiche (cat) tout ce qui est entre cat et EOF (End Of File == CTRL + D)
|
||||
}
|
||||
|
||||
usage() {
|
||||
doc
|
||||
exit 1
|
||||
}
|
||||
|
||||
|
||||
# 1. Compte le nombre de processus de l'utilisateur dont le login est passé en argument.
|
||||
# 2. $1 : le login.
|
||||
# 3. stdout : le nombre de processus de l'utilisateur.
|
||||
processOneUser() {
|
||||
# Les remarques indiquées dans la fonction processAllUsers
|
||||
# s'appliquent également à cette fonction
|
||||
ps h -eo user | grep $1 | wc -l
|
||||
}
|
||||
|
||||
# 1. Affiche le tableau (non trié) du nombre de processus par utilisateur.
|
||||
# 2. Pas d'argument.
|
||||
# 3. stdout : le tableau.
|
||||
processAllUsers() {
|
||||
# traitement
|
||||
# ----------
|
||||
# début
|
||||
# L<-liste des utilisateurs possédant un processus en mémoire
|
||||
# pour i élément de L faire
|
||||
# n=nombre de processus de l'utilisateur i dans le système
|
||||
# afficher "i n"
|
||||
# fin pour
|
||||
# fin
|
||||
|
||||
# Remarques :
|
||||
# 1. pour obtenir la liste des propriétaire des processus, utilisez la
|
||||
# commande : ps h -eo user
|
||||
# 2. Pour éliminer les doublons d'une liste filtrez la avec la commande :
|
||||
# sort -u.
|
||||
local L
|
||||
local i
|
||||
local n
|
||||
# ou local L i n=0
|
||||
L=$(ps h -eo user | sort -u)
|
||||
for i in $L; do
|
||||
local n=$(processOneUser $i)
|
||||
echo "$i $n"
|
||||
done
|
||||
|
||||
|
||||
}
|
||||
|
||||
toHTML() {
|
||||
local L R
|
||||
echo "<html>"
|
||||
echo "<body>"
|
||||
echo "<table border=\"1\">"
|
||||
while read L R;do # ou read L
|
||||
echo "<tr><td>$L</td><td>$R</td></tr>"
|
||||
#echo $L | sed -re 's/^⁽[^ ]+) (.*)$/<tr><td>\1<\/td><td>\2<\/td><\/tr>/'
|
||||
done
|
||||
echo "</table>"
|
||||
echo "</body>"
|
||||
echo "</html>"
|
||||
}
|
||||
|
||||
# Début du traitement des arguments.
|
||||
while [ $# -ne 0 ]; do
|
||||
case $1 in
|
||||
-h|--help)
|
||||
doc
|
||||
exit 0
|
||||
;;
|
||||
*) usage
|
||||
;;
|
||||
esac
|
||||
shift
|
||||
done
|
||||
# Fin du traitement des arguments.
|
||||
|
||||
processAllUsers | sort -t" " -k2 -r -n | toHTML > user.html
|
@ -0,0 +1,21 @@
|
||||
<html>
|
||||
<body>
|
||||
<table border="1">
|
||||
<tr><td>root</td><td>183</td></tr>
|
||||
<tr><td>anperederi</td><td>73</td></tr>
|
||||
<tr><td>www-data</td><td>5</td></tr>
|
||||
<tr><td>rwhod</td><td>2</td></tr>
|
||||
<tr><td>_chrony</td><td>2</td></tr>
|
||||
<tr><td>avahi</td><td>2</td></tr>
|
||||
<tr><td>xrdp</td><td>1</td></tr>
|
||||
<tr><td>uml-net</td><td>1</td></tr>
|
||||
<tr><td>rtkit</td><td>1</td></tr>
|
||||
<tr><td>_rpc</td><td>1</td></tr>
|
||||
<tr><td>mysql</td><td>1</td></tr>
|
||||
<tr><td>mongodb</td><td>1</td></tr>
|
||||
<tr><td>messagebus</td><td>1</td></tr>
|
||||
<tr><td>colord</td><td>1</td></tr>
|
||||
<tr><td>clamav</td><td>1</td></tr>
|
||||
</table>
|
||||
</body>
|
||||
</html>
|
@ -0,0 +1,9 @@
|
||||
#!/bin/bash
|
||||
i=0
|
||||
|
||||
while read L; do
|
||||
if [ $
|
||||
echo "$L" | egrep -q "[0-9]{2}"| tr a-z A-Z
|
||||
shift
|
||||
i=$(($i + 1))
|
||||
done
|
@ -0,0 +1,11 @@
|
||||
#!/bin/bash
|
||||
|
||||
L=""
|
||||
|
||||
for i; do
|
||||
if echo $i | egrep -q '^[0-9]+$' ; then
|
||||
L="$i $L"
|
||||
fi
|
||||
done
|
||||
|
||||
echo $L
|
@ -0,0 +1,74 @@
|
||||
# Petits exercices
|
||||
|
||||
## num
|
||||
|
||||
Écrivez le script `num` acceptant une liste d'arguments et qui n'affiche que ceux qui sont numériques et les affiche dans l'ordre inverse.
|
||||
|
||||
## alpha
|
||||
|
||||
Écrivez le script `alpha` lisant son entrée standard et
|
||||
|
||||
- n'affichant que les lignes paires
|
||||
- qui en plus contiennent un nombre d'au moins deux chiffres
|
||||
- en les passant en majuscules (via la commande `tr a-z A-Z`)
|
||||
- en les faisant précéder de leur numéro (d'origine)
|
||||
|
||||
## Classement de photos
|
||||
|
||||
Les vacances sont finies \! et j'ai plein de photos dans mon répertoire *images*.
|
||||
J'aimerais que vous m'écriviez un script qui les classe automatiquement en fonction de leur date de dernière modification dansdes répertoires de noms `AAAA-MM-JJ` (année-mois-jour: exemple : 2010-10-29).
|
||||
Le répertoire devra être créé si nécessaire avant que la photo soit déplacée à l'intérieur.
|
||||
|
||||
Algorithme :
|
||||
|
||||
* __debut__
|
||||
* __pour__ tous les **fichiers** F du répertoire passé en argument __faire__
|
||||
* DIR ← date sous la forme *AAAA-MM-JJ* du fichier F
|
||||
* __si__ le répertoire de DIR n'existe pas __alors__
|
||||
* créer le répertoire DIR
|
||||
* __fin si__
|
||||
* déplacer F dans DIR
|
||||
* __fin pour__
|
||||
* __fin__
|
||||
|
||||
|
||||
- Écrivez le script shell associé.
|
||||
|
||||
<note>
|
||||
|
||||
Indications :
|
||||
|
||||
* la commande `ls -l --time-style +%Y-%m-%d ` permet de lister les fichiers avec leur date sous la forme `AAAA-MM-DD`.
|
||||
* Pour tester avec des photos fictives, vous pouvez utiliser la commande `touch -m -t 200910130000 img-0001.jpg`. Cette commande crée un fichier vide dont la date de dernière modification est fixée au jour du 13 octobre(10) 2009.
|
||||
|
||||
</note>
|
||||
|
||||
## Un petit jeu d'adresse
|
||||
|
||||
Ce petit jeu d'adresse consiste à présenter à l'utilisateur, pendant un
|
||||
temps limité (1.5 secondes), une fenêtre `xeyes` placée aléatoirement à
|
||||
l'écran. Si l'utilisateur réussi à "tuer" la fenêtre en la fermant à
|
||||
l'aide de la croix avant le temps imparti il gagne 1 point. Sinon c'est
|
||||
le programme qui "tue" la fenêtre avant de présenter la suivante. Une
|
||||
partie se joue en 10 coups.
|
||||
|
||||
Écrivez le script shell associé à ce jeu.
|
||||
|
||||
<note>
|
||||
|
||||
Indications :
|
||||
|
||||
* Une fenêtre peut généralement être placée à une position donnée de l'écran via l'option -geometry. Par exemple la commande `xeyes -geometry +500+300` lancera `xeyes` qui placera sa fenêtre à la position (500,300). Remarque : certains gestionnaires de fenêtres, comme `Gnome 3` ou `i3` par exemple, ne tiennent pas toujours compte du placement demandé !
|
||||
* La commande `sleep` est l'une des rares commandes standard acceptant en argument un nombre flottant exprimant le temps en seconde. Ainsi sleep 0.2 fera dormir le processus 200 millisecondes.
|
||||
* La commande `shuf -i 0-100 -n 1` permet d'obtenir un entier aléatoire dans l'intervalle [0-100].
|
||||
|
||||
</note>
|
||||
|
||||
- Modifiez votre programme pour qu'il réponde au synopsis suivant :
|
||||
|
||||
`prog [-n num] [-t delai]`
|
||||
|
||||
où
|
||||
|
||||
* `num` est le nombre de coups de la partie (10 par défaut).
|
||||
* `delai` est le temps imparti pour tuer la fenêtre.
|
Loading…
Reference in new issue