DUT Info année spéciale

dimanche 18 novembre 2007

Le blog devient wiki

Le blog DUT info spéciale déménage sur un serveur dédié : https://info-as.tililoublou.net/index.php/Accueil

Dorénavant vous pouvez tous vous transformer en contributeur puisqu'il s'agit d'un wiki. Donc si vous pensez exceller dans une matière, n'hésitez pas à partager vos connaissances. Ce blog reste en accessible mais les mises à jour se feront en priorité sur le wiki.

lundi 12 novembre 2007

Unités d'enseignement et coefficients

Voici les unités d'enseignement ainsi que les coefficients des différentes matières valables pour le DUT Informatique Année spéciale. Ces informations concernant l'année universitaire 2006-2007, certains éléments sont susceptibles d'avoir changé cette année.


Coefficient

UE 1 : BASES DE L'INFORMATIQUE 12


Initiation à l'informatique 3.8
Bases de la programmation 2
Langage C 1.8

Algorithmique, Structures de données, Cobol 4.2
Bases de données 4

UE 2 : INFORMATIQUE AVANCEE 12

Algorithmique avancée 3.8
Algo. avancée 1.8
Programmation objet 2

Analyse et Conception des Systèmes d'Information 2.2
Système 3
Réseau 3

UE 3 : CONNAISSANCES ET
COMPETENCES GENERALES
12


Mathématiques 4

Economie et gestion des organisations 4
Economie 2
Système d'information comptable et
financier 2

Langues, Expression, Communication 4
Expression, Communication 2
Anglais 2

PROJETS TUTEURES ET STAGES 12

Projets tuteurés 5
Projet Cobol 1.5
Projet Java 2.5
Jeu d'entreprise 1

Stage 7

samedi 10 novembre 2007

Memento du langage csh

#!/bin/csh

switch ( $#argv )

case '1' :
if ( toi vouloir memento csh 1 ) then
clique ici : http://pushstart5.free.fr/java/csh.jpg
endif
end
breaksw

case '2' :
if ( toi vouloir memento csh 2 ) then
clique ici : http://pushstart5.free.fr/java/csh2.jpg
endif
end
breaksw

default :
echo "Erreur: nb arg"
breaksw
endsw

jeudi 1 novembre 2007

6 Variables composites

Exercice 1
Ecrire l'agorithme de la fonction qui permet de calculer l'âge en années d'une personne, connaissant sa date de naissance et la date courante. Les dates sont représentées sous la forme de variables composites de 3 entiers.

fonction calculerAge (datenaiss : Date, dateauj : Date) : entier
début
si dateauj.mois > datenaiss.mois alors
age <- dateauj.annee - datenaiss.annee
sinon
si dateauj.mois < datenaiss.mois alors
age <- dateauj.annee - datenaiss.annee - 1
sinon si dateauj.jour => datenaiss.jour alors
age <- dateauj.annee - datenaiss.annee
sinon
age <- dateauj.annee - datenaiss.annee -1
fsi
fsi
fsi
retourne age
fin

Exercice 2

Question1
Ecrire l'algorithme de la fonction qui, à partir d'une date donnée, donne la date du lendemain. Les dates sont représentées sous la forme de variables composites de 3 entiers.
Rappel : Le mois de février a 28 ou 29 jours selon que l'année est bissextile ou non. Une année est bissextile si elle est divisible par 4. Toutefois, les années séculaires ne sont pas bissextiles, sauf celles dont les deux premiers chiffres sont divisibles par 4, comme 1600, 2000, 2400.

fonction calculerDateLendemain (dj.date) : Date
début
si dj.annee mod 100 = 0 alors
bissextile <- (dj.annee mod 400 = 0)
sinon bissextile <- (dj annee mod 4 = 0)
fsi
finmois <- (dj.jour = 30) et ((dj.mois = 4) ou (dj.mois = 6) ou (dj.mois = 9) ou (dj.mois = 11)) ou (dj.jour = 31) ou ((dj.mois = 2) et (dj.jou r= 29)) ou ((dj.mois = 2) et (dj.jour = 28) et non bissextile)
si finmois alors
si dj.mois = 12 alors
dl <- (1,1, dj.annee + 1)
sinon dl <- (1, dj.mois + 1, dj.annee)
fsi
sinon
dl <- (dj.jour + 1, dj.mois, dj.annee)
fsi
retourne dl
fin

Lexique :
Date = / jour : entier, mois : entier, annee : entier \
dj : Date
dl : Date

Question2
Même question en définissant et en utilisant un tableau, qui, à chaque mois, associe le nombre de jours de ce mois.

fonction calculerDateLendemain (dj.date) : Date
début
si dj.annee mod 100 = 0 alors
bissextile <- (dj.annee mod 400 = 0)
sinon bissextile <- (dj annee mod 4 = 0)
fsi
si bissextile alors
tabfinmois <- [31, 29, 31, 30, 31, 31, 30, 31, 30, 31]
sinon tabfinmois <- [31, 28, 31, 30, 31, 31, 30, 31, 30, 31]
fsi
finmois <- (dj.jour = tabfinmois[dj.mois])
si finmois alors
si dj.mois = 12 alors
dl <- (1,1, dj.annee + 1)
sinon dl <- (1, dj.mois + 1, dj.annee)
fsi
sinon
dl <- (dj.jour + 1, dj.mois, dj.annee)
fsi
retourne dl
fin

Lexique :
tabfinmois : tableau entier [1..12]
Date = / jour : entier, mois : entier, annee : entier \
dj : Date
dl : Date

Exercice 3
Soit un tableau de type Tabnaiss associant à chaque étudiant ses nom, prénom et date de naissance.
Tabnaiss = tableau Etudiant[1..nbétudiants]
Etudiant = / nom : chaîne, prénom : chaîne, datenaiss : Date \
Date = / jour : entier, mois : entier, année : entier \

Question 1
Ecrire l'agorithme de la fonction qui permet d'imprimer les noms et prénoms des étudiants ayant leur anniversaire à un jour et un mois donnés.

fonction anniversaire (nbétudiants : entier, t : tabnaiss, jourch : entier, moisch : entier)
début
pour i de 1 à nbétudiants faire
si t[i].datenaiss.jour = jourch et t[i].datenaiss.mois = moisch alors
écrire (t[i].nom, t[i].prénom)
fsi
fpour
fin

Question 2
Ecrire l'algorithme de la fonction qui permet de calculer le nombre d'étudiants ayant plus d'un âge donné (en nombre d'années, aged), à une date donnée (datecourante).

fonction nbEtudiantAge (nbEtudiant entier, t : tabnaiss, aged : entier, datecourante = Date) : entier
début
compteur <- 0
pour i de 1 à nbEtudiant faire
si calculerAge (datecourante, t[i].datenaiss) => aged alors
compteur <- compteur + 1
fsi
fpour
retourne compteur
fin

5 Tableaux

Exercice 1
Décrire une fonction qui calcule la somme des éléments d'un tableau.

fonction sommeElements (n : entier, t : tableau entier [0..n-1]) : entier
début
somme <- 0
pour i de 0 à n-1 faire
somme <- somme + t[i]
fpour
retourne somme
fin

Exercice 2
Décrire une fonction qui calcule l'élément maximal d'un tableau.

fonction maxTab (n : entier, t : tableau entier [O..n-1] : entier
début
max <- t[0]
pour i de 1 à n-1 faire
si max < t[i] alors
max <- t[i]
fsi
fpour
retourne max
fin

Exercice 3
Décrire une fonction qui indique si un élément est dans un tableau.

fonction chercheElement (n : entier, element : entier, t : tableau entier [O.. n-1] : booléen
début
presenceElement <- faux
i <- 0
tant que (presenceElement = faux) et (i < n) faire
si element = t[i] alors
presenceElement <- vrai
fsi
i <- i + 1
ftant
retourne presenceElement
fin

Exercice 4
Décrire une fonction qui donne l'indice du premier élément d'un tableau qui dépasse un seuil donné (-1 si aucun élément ne dépasse ce seuil).

fonction indicePremierSupSeuil (n : entier, t : tableau entier [O..n-1], seuil : entier) : entier
début
i <- 0
indice <- -1
trouver <- faux
tant que (trouver = faux) et (i < n) faire
si t[i] > seuil alors
trouver <- vrai
indice <- i
fsi
i <- i + 1
ftant
retourne indice
fin

Exercice 5 : tri par sélection du minimum
Décrire une fonction qui trie par ordre croissant les éléments d'un tableau selon le principe suivant : on parcourt le tableau pour repérer le minimum puis on l'échange avec la première valeur non encore triée. On répète ce processus (n-1) fois pour un tableau de n éléments.

fonction trie (n : entier, t InOut : tableau entier [O..n-1}
début
pour i de 0 à n-2 faire
min <- t[i]
indice <- i
pour j de i+1 à n-1 faire
si t[j] < min alors
min <- t[j]
indice <- j
fsi
fpour
si indice # i alors
t[indice] <- t[i]
t[i] <- min
fsi
fpour
fin

Exercice 6
Décrire une fonction qui calcule l'élément maximal d'un tableau à 2 dimensions.

fonction maxTab2D (li : entier, co : entier, t : tableau entier [O..li-1, 0..co-1]) : entier
début
max <- t[O,O]
pour i de 0 à li-1 faire
pour j de 0 à co-1 faire
si t[i,j] > max alors
max <- t[i,j]
fpour
fpour
retourne max
fin

Exercice 7
Dans la série de questions qui suit, un certain nombre d'algorithmes et de fonctions seront décrits de façon à permettre la gestion statistique du nombre de connexions à un serveur web. De façon générale, la donnée principale fournie sera un tableau de n entiers contenant le nombre de connexions enregistrée lors des n derniers mois écoulés.

Question 7.1
Ecrire un algorithme qui saisit le nombre n de mois d'étude et les n nombres de connexions mensuelles, les stocke dans un tableau, puis affiche le nombre minimum, maximum et moyen de connexions mensuelles.

Algorithme
début
n <- lire ()
nbrCnx [O] <- lire ()
min <- nbrCnx [O]
max <- nbrCnx [O]
tot <- nbrCnx [O]
pour i de 1 à n-1 faire
nbrCnx [i] <- lire ()
si min > nbrCnx [i]
si max < nbrCnx [i]
tot <- tot + nbrCnx [i]
fpour
moy <- tot / n
écrire (min, max, moy)
fin

Question 7.2
Ecrire une fonction qui permet de corriger nbr éléments successifs d'un tableau de nombres de connexions mensuelles (en cas de saisie erronée). Les nouvelles valeurs sont stockées dans un tableau.

fonction corrigerRelevé (n : entier, nbrCnx InOut : tableau entier [O..n-1], début : entier, nouv : tableau entier [O..nbr-1])
début
fin <- début + nbr-1
si fin > n-1 alors
fin <- n-1
fsi
pour i de début à fin faire
nbrCnx [i] <- nouv [i - début]
fpour
fin

Question 7.3
Ecrire une fonction qui permet d'inverser l'ordre des valeurs stockées dans un tableau de nombres de connexions mensuelles.

fonction inverse (n : entier, nbrCnx : InOut tableau entier [O..n-1])
début
i <- 0
j <- n-1
tant que (i < j) faire
tmp <- nbrCnx[i]
nbrCnx[i] <- nbrCnx[j]
nbrCnx[j] <- tmp
i <- i + 1
j <- j - 1
ftant
fin

Question 7.4
Ecrire une fonction qui permet de rentrer une nouvelle valeur (le nombre de connexions du dernier mois écoulé) dans le tableau, et met à jour le nombre minimum, maximum et moyen de connexions. On supposera que la case i contient toujours le nombre de connexions mensuelles enregistré i mois auparavant. On utilisera des fonctions qui calculent le nombre minimum (resp. maximum) de connexions mensuelles.

fonction ajouterValeur (n : entier, nbrCnx InOut : tableau entier [O..n-1], nouvelle : entier, min InOut entier, max InOut entier, moy InOut réel)
début
ancienne <- nbrCnx[n-1]
pour i décroissant de n-1 à 1 faire
nbrCnx[i] <- nbrCnx[i-1]
fpour
nbrCnx[0] <- nouvelle
total <- moy x n
total <- total + nouvelle - ancienne
moy <- total / n
si nouvelle <= min alors
min <- nouvelle
sinon si ancienne = min alors
min <- calculMin (n, nbrCnx)
fsi
fsi
si nouvelle => max alors
max <- nouvelle
sinon si ancienne = max alors
max <- calculMax (n, nbrCnx)
fsi
fsi
fin

Question 7.5
Un autre outil de traitement des connexions au site web stocke les nombres de connexions quotidiennes dans un tableau à 3 dimensions de taille n x 12 x 31 : la case [i,j,k] correspond au k-ième jour du j-ième mois de l'année 2007-i (si un jour n'existe pas, ou si le relevé n'est pas disponible, la case contient 0). Ecrire une fonction qui permet de transformer ce mode de stockage en un simple tableau de nombres de connexions mensuelles.

fonction transfert (na : entier, nbrCnx3 : tableau entier [0..na-1, 0..11, 0..30]) : tableau entier [0..na*12-1]
début
pour i de 0 à na-1 faire
pour j de 0 à 11 faire
nbrCnx[12*i + 11-j] <- 0
pour k de 0 à 30 faire
nbrCnx [12*i + 11-j] <- nbrCnx[12*i + 11-j] + nbrCnx3[i,j,k]
fpour
fpour
fpour
retourne nbrCnx
fin

Exercice 8 : Tri par sélection croisée
Décrire la fonction triCroissantSelectionCroisée qui réalise le tri du tableau par sélection du minimum et du maximum. On parcourt le tableau pour repérer à la fois son maximum et son minimum, puis on échange ces 2 valeurs avec respectivement la première et la dernière non encore triées. En itérant ce procédé (n-1)/2 fois pour un tableau de dimension n, on obtient un tableau trié. Attention : si l'élément maximum courant se trouve dans la première case encore non triée, et si cette case est d'abord permutée avec cell qui contient l'élément minimal courant, alors l'élément maximal se retrouve dans la case qui contenait l'élément minimal !

fonction triCroissantCroisé (n : entier, t InOut : tableau entier [O..n-1])
début
pour i de 0 à n÷2 -1 faire
min <- t[i]
indicemin <- i
max <- t[i]
indicemax <- i
pour j de i+1 à n-1-i
si t[j] < min alors
min <- t[j]
indicemin <- j
fsi
si t[j] > max alors
max <- t[j]
indicemax <- j
fsi
fpour
permuter t[i], t[indicemin]
si i = indicemax alors permuter t[n-1-i], t[indicemin]
sinon
permuter t[n-1-i], t[indicemax]
fsi
fpour
fin

Exercice 9 : tri bulle
Décrire la fonction triCroissantBulle. On parcourt le tableau en échangeant 2 cases consécutives mal ordonnées. On répète ce procédé tant que le tableau n'est pas trié.

fonction triCroissantBulle (n : entier, t InOut : tableau entier [O.. n-1])
début
i <- 0
changement <- vrai
tant que changement faire
changement <- faux
pour j de 1 à n-1-i faire
si t[j-1] > t[j] alors
tmp <- t[j]
t[j] <- t[j-1]
t[j-1] <- tmp
changement <- vrai
fsi
fpour
i <- i + 1
ftant
fin

Exercice 10 : fusion de tableaux triés
Décrire la fonction fusionTabTriésCroissant qui réalise la fusion de deux tableaux déjà triés par ordre croissant et retourne le tableau résultat.

fonction fusionTriésCroissant (n1 : entier, t1 : tableau entier [0..n1-1], n2 : entier, t2 : tableau entier [0..n2-1]) : tableau entier [0..n1+n2 - 1]
début
i <- 0
j <- 0
k <- 0
tant que i < n1 et j < n2 faire
si t1[i] < t2[j] alors
res[k] <- t1[i]
i <- i + 1
sinon
res[k] <- t2[j]
j <- j + 1
fsi
k <- k + 1
ftant
pour r de i à n1 - 1 faire
res[k] <- t1[r]
k <- k + 1
fpour
pour r de j à n2-1 faire
res[k] <- t2[r]
k <- k + 1
fpour
retourne res
fin

4 Chaînes de caractères

Exercice 1
On donne une chaîne de caractères. On demande de vérifier si la sous-chaîne comprise entre les indices a et b est un palindrome (chaîne de caractères qui se lit dans les 2 sens). Ecrire l'algorithme de la fonction permettant de résoudre ce problème.

fonction palindrome (a,b : entier, mot : chaîne) : booléen
début
palindrome <- vrai
tantque (a < b et palindrome) faire
caract1 <- ieme (mot, compt1)
caract2 <- ieme (mot, compt2)
si caract1=caract2 alors
a <- a+1
b <- b-1
sinon
palindrome <- faux
fsi
ftant
retourne palindrome
fin

Exercice 2
Ecrire une fonction donnant la représentation binaire d'un entier strictement positif sous la forme d'une chaîne de caractères.

fonction binaire (nb : entier) : chaîne
début
reste <- nb
ch <- ' '
tantque reste # 0 faire
si (reste mod 2) = 0 alors
x <- "0"
sinon x <- "1"
fsi
ch <- concat (x,ch)
reste <- reste ÷ 2
ftant
retourne (ch)
fin

Exercice 3
Ecrire une fonction qui calcule le nombre d'occurences d'un caractère dans une chaîne de caractères.

fonction occurence (a : caractère, mot : chaîne) : entier
début
b <- longueur (mot)
compt <- 0
pour i de 1 à b faire
c <- ieme (mot, i)
si c = a alors
compt <- compt +1
fsi
fpour
retourne (compt)
fin

Exercice 4
Ecrire une fonction qui permet d'inverser une chaîne de caractères.

fonction inverser (mot InOut : chaîne)
début
lg <- longueur (mot)
i <- 1
j <- lg
tantque i < j faire
caradeb <- ieme (mot, i)
carafin <- ieme (mot, j)
remplace (mot, i, carafin)
remplace (mot, j, caradeb)
i <- i + 1
j <- j - 1
ftant
fin

dimanche 28 octobre 2007

Itérations

(Les propositions aux exercices qui suivent ont été compilées et testées mais comportent certainement des erreurs. Elles sont donc amenées à être modifiées dans les jours qui viennent.)

Pour chacune des classes à concevoir dans les exercices ci-dessous, vous écrirez un programme de test indépendant. Il sera peut-être nécessaire de prévoir des constructeurs et/ou des méthodes supplémentaires pour les affichages.

Exercice 1

On souhaite établir des statistiques à partir de relevés de températures mensuels. On choisit de définir une classe ReleveTemperatures avec les attributs min, max, moy et mois qui indiquent respectivement la température minimale, maximale, moyenne du relevé et le mois durant lequel ce relevé a été effectué.

Question 1 : Programmer la méthode de saisie d'un mois. cette méthode demande à l'utilisateur de saisir un numéro de mois et le prévient si le nombre est inférieur à 1 ou supérieur à 12 et lui demande alors d'entrer à nouveau une valeur. Cette demande est répétée tant que l'entrée est incorrecte.

Question 2 : Programmer la méthode de saisie du relevé. Elle lit le mois, le nombre de températures relevées puis les différentes valeurs du relevé pour en déduire le minimum, le maximum et la moyenne.

Proposition au format txt

Exercice 2

Considérons la classe NombreEntier ayant comme attribut un entier valeur. Programmer les méthodes permettant de répondre à chacune des questions suivantes.

Question 1 : Donner la représentation binaire d'un nombre de la classe NombreEntier sous la forme d'une chaîne de caractères.

Question 2 : Calculer le produit de deux nombres de la classe NombreEntier de valeur positive, sans faire appel à l'opérateur de multiplication.

Question 3 : Calculer le quotient q de la division euclidienne de a par b, où a et b sont deux nombres de la classe NombreEntier strictement positifs, en utilisant uniquement les opérateurs d'addition et de soustraction.

Question 4 : L'algorithme de multiplication utilisé dans la question 2 procède par sommes successives. Le produit x*y consiste à sommer y fois la valeur de x. Toutefois, on peut améliorer cet algorithme rudimentaire en multipliant x par deux et en divisant y par deux chaque fois que la valeur de y est paire. Les opérations de multiplication et de division par deux sont des opérations très efficaces puisqu'elles consistent à décaler un bit vers la gauche ou vers la droite. Réaliser ce calcul rapide de produit.

Proposition au format txt

Remarque

Tous les algorithmes permettant de répondre à ces questions ont été écrits dans le module d'"algo". Il s'agit ici simplement de les traduire. Voir ici.