# Exercices d'Algorithmie
## 1 - Suivre un algo
Soit A = 5
A = A * 4
A = A * 3
A = A * 2
1 - Combien vaut A ?
A = 3
B = 4
Temp = A
A = B
B = Temp
2 - Combien vaut A et B ?
A = 0
A = Cos(A)
B = Sin(A)
A = A + B
3 - Combien vaut A
VARIABLE = 16
VARIABLE = VARIABLE * 2
B = VARIABLE % 2
4 - Combien vaut B ?
A = 2
B = 4
si B < A
B = B * A
sinon
A = B / A
5 - Combien valent A et B ?
A = 2
Tant que A<10
A = A * 2
6 - Combien vaut A ?
A = 0
Pour I allant de 0 a 5 (inclus)
A = A + I
7 - Combien vaut A ?
## 2 - Si/if
1 - Imaginez un algo qui permette d'obtenir le maximum entre trois valeurs réelles A, B et C.
2 - Imaginer un algo qui donnerait la valeur abolue d'un réel A.
## 3 - Boucles
1 - Imaginer un algo qui permette d'obtenir une valeur V à la puissance P (entier).
2 - Imaginer un algo qui permette d'obtenir le PGCD de deux entiers A et B.
3 - Imaginer un algo qui permette de calculer la factorielle d'un entier C.
## 4 - Fonctions
1 - Créer une fonction prenant en entrée 3 variables entiéres et qui retourne le résultat de l'addition de ces 3 variables. Utiliser cette fonction pour additionner 3, 45, 12 et afficher le resultat.
2 - Créer une fonction qui prenne en entrée les longueurs réels du petit et du grand coté d'un rectangle. Elle doit retourner l'aire (réel).
3 - Créer une fonction prenant en entrée un entier et retourne la factiorelle de cet entier.
4 - Créer une fonction prenant en entrée deux entiers. Elle doit afficher la valeur des deux entiers puis retourner le maximum.
## 5 - Tableaux
1 - Créer une fonction qui prenne en entrée un tableau d'entiers et retourne le maximum (le plus grand) des éléments du tableau.
2 - Créer une fonction qui prenne en entrée un tableau d'entiers et inverse les positions des élements du tableau (le premier élément devient le dernier, le second vant dernier etc.).
3 - Créer une fonction qui prenne en entrée un tableau de n'importe quelle taille et qui retourne le tableau trié dans l'ordre croissant.
4 - Ecrire une fonction Moyenne qui calcule la moyenne des valeurs contenue dans un tableau passé en entrée.
5 - Ecrire une fonction Contient qui prenne en entrée un tableau de réel et un réel A et qui retourne vrai si le tableau contient la valeur A, et faux autrement.
## 6 - Terminaison
1 - La fonction suivante respecte elle la terminaison ? Si non pour quelles valeurs ?
Réel MaFonction(Entier X)
Retourner A/X
2 - La fonction suivante respecte elle la terminaison ? Si non pour quelles valeurs ?
Entier MaFonction(Entier X, Entier Y)
Tant que X > 0
X+=Y
Retourner X
3 - La fonction suivante respecte elle la terminaison ? Si non pour quelles valeurs ?
Réel MaFonction(Entier X)
Réel SORTIE = 0
Pour I de 0 à X (exclu) avec un pas de 1
SORTIE += I / (1 - 3/X)
Retourner SORTIE
## 7 - Complexité
1 - Donnez la compléxité de la fonction suivante.
Entier[] MaFonction(Entier[] T)
Entier COMPTEUR = 0
Tant que COMPTEUR < nombre d'éléments de T
COMPTEUR++
T[COMPTEUR] = COMPTEUR
Retourner T
2 - Donnez la compléxité de la fonction suivante.
Entier MaFonction(Entier X)
Entier COMPTEUR = 0
Tant que COMPTEUR < 2*X
COMPTEUR++
Retourner COMPTEUR
3 - Donnez la compléxité de la fonction suivante.
Void AffichageDeMatrice(Entier X)
Entier I = 0
Pour I Allant de 0 à X
Pour J Allant de 0 à X
Afficher I*X+J
## 8 - Récursivité
1 - Donner un algo récursif permettant d'effectuer la factorielle d'un entier.
2 - Donner un algo récursif trouvant la valeur d'un élément du triangle de Pascal déterminé par sa ligne et sa colonne.
## 9 - Code
1 - Ecrire en code une fonction qui prenne en entrée un tableau de n'importe quelle taille et qui retourne le tableau trié dans l'ordre croissant.
2 - Ecrire une fonction qui calcule et retourne un réel en entrée à la puissance d'un entier également en entrée.
3 - Ecrire en code une fonction qui retourne la factorielle d'un entier récursivement.
4 - Ecrire en code une fonction qui retourne la moyenne des valeurs d'un tableau en entrée.
## 10 - Structure de données
1 - Créer une classe liste qui contient une valeur réelle et une référence à une autre liste.
2 -Créer une fonction AddElement(réel élément), qui permet d'ajouter un élément à la suite de cet élément.
3 - Créer une fonction AddElementAtTheEnd(réel élément), qui permet d'ajouter un élément à la fin de la liste (même si on l'appelle sur le premier élément).
4 - Créer une fonction Get(entier id), qui permet de lire la valeur de l'élément à la position donnée en paramètre.
5 - Créer une fonction Remove(entier id), qui permet de supprimer l'élément à la position donnée en paramètre.
# Corrections
## 1 - Suivre un algo
1 - 1 :
>A = 120
1 - 2 :
>A = 4 et B = 3
1 - 3 :
>A = 1
1 - 4 :
>B = 0
1 - 5 :
>A = 2 et B = 4
1 - 6 :
>A = 16
1 - 7 :
>A = 15
## 2 - Si/if
2 - 1 :
Réel A
Réel B
Réel C
Réel MAX
si A>B ET A>C
MAX = A
sinon si B>C
MAX = B
sinon
MAX = C
2 - 2 :
Réel A
si A<0
A = -A
## 3 - Boucles
3 - 1 :
Réel V
Entier p
Réel RESULTAT
RESULTAT = 1
Pour I allant de 1 jusqu'a P (inclus) avec un pas de 1
RESULTAT = RESULTAT * V
Afficher RESULTAT
3 - 2 :
Entier A
Entier B
Entier RESTE = 1
Tant que RESTE > 0
RESTE = A%B
A = B
B = RESTE
Afficher A
3 - 3 :
Réel RESULTAT = 1
Pour I allant de 1 jusqu'a C (inclus) avec un pas de 1
RESULTAT = RESULTAT * I
## 4 - Fonctions
4 - 1 :
Entier Addition(Entier A, Entier B, Entier C)
Retourner A+B+C
Entier Resultat = Addition(3, 45, 12)
Afficher Resultat
4 - 2 :
Réel Aire(Réel PetitCote, Réel GrandCote)
Réel AireDuRectangle = PetitCote * GrandCote
Retourner AireDuRectangle
4 - 3 :
Entier Factorielle(Entier A)
Entier Resultat = 0
Pour I de A à 0 (exclus) avec un pas de -1
Resultat = Resultat * I
Retourner Resultat
4 - 4 :
Entier Maximum(Entier A, Entier B)
Afficher A
Afficher B
Si A>B
Retourner A
Sinon
Retourner B
## 5 - Tableaux
4 - 1 :
Entier MaxTableau(Entier[] T)
Entier Max = -10000
Pour I de 0 à nb élements de T (exclus)
Si T[I]>Max
Max = T[I]
Retourner Max
4 - 2 :
Entier[] InverseTableau(Entier[] T)
Entier TCOUNT = nombre d'éléments de T
Pour I de 0 à TCOUNT/2 (non inclu)
Entier OTHERI = TCOUNT-1-I
Entier TEMP = T[I]
T[I] = T[OTHERI]
T[OTHERI] = TEMP
Retourne T
T = [5]{3,5,1,4,2}
InverseTableau(T)
4 - 3 :
Réel[] TriCroissant1(Réel[] T)
Entier TCOUNT = nombre d'éléments de T
Pour J de 0 à TCOUT-1(non inclus)
Pour I de 0 à TCOUNT-1 (non inclus)
Si T[I] > T[I+1]
Réel TEMP = T[I]
T[I] = T[I+1]
T[I+1] = TEMP
Retourner T
Réel[] TriCroissant2(Réel[] T)
Entier TCOUNT = nombre d'éléments de T
Pour I de 0 à TCOUNT (non inclus)
//Chercher si il y a une plus petite valeur dans les restantes
Pour J de I+1 à TCOUNT (non inclus)
Si T[I] > T[J]
//Inverse les valeurs
Réel TEMP = T[I]
T[I] = T[J]
T[J] = TEMP
Retourner T
4 - 4 :
Réel[] Moyenne(Réel[] T)
Réel total = 0
Pour I de 0 à nombre d'éléments de T(non inclus)
total += T[I]
Retourner total / nombre d'éléments de T
4 - 5 :
Booléen Contient(Réel[] T, Réel A)
Pour I de 0 à nombre d'éléments de T (non inclus) avec un pas de 1
Si T[I]==A
Retourner Vrai
Retourner Faux
## 6 - Terminaison
5 - 1 :
>Non pour X = 0, car on ne peut pas diviser par 0.
5 - 2 :
>Non pour X>0 et Y>=0, car la boucle ne fini jamais.
3 - La fonction suivante respecte elle la terminaison ? Si non pour quelles valeurs ?
>Non pour X = 3, car on aurait une division par 0.
## 7 - Complexité
6 - 1 :
>O(n)
6 - 2 :
>O(n)
6 - 3 :
>O(n²)
## 8 - Récursivité
7 - 1 :
Entier Factorielle(Entier X)
Si X = 1
retourner 1
Sinon
retourner Factorielle(X-1) * X
7 - 2 :
Entier Pascal(Entier X, Entier Y)
//Quand j'arrive en (0,0), j'ai le 1 original.
si X==0 ET Y==0
retourner 1
sinon si X<0 OU Y<0
retourner 0
sinon
retourner Pascal(X-1, Y-1) + Pascal(X, Y-1)
## 9 - Code
8 - 1 :
```cs=
static float[] TriCroissant1(float[] t)
{
int tCount = t.Length;
//Pour J de 0; à TCOUNT-1(non inclus);avec un pas de 1
for(int j = 0; j < tCount - 1; j++)
{
for(int i=0; i < tCount - 1; i++)
{
//Si T[I] > T[I+1]
if (t[i]>t[i+1])
{
//Permutation
float temp = t[i];
t[i] = t[i + 1];
t[i + 1] = temp;
}
}
}
return t;
}
```
8 - 2 :
```cs=
static float Puissance(float valeur, int exposant)
{
float puissance = 1;
for (int i = 0; i < exposant; i++)
{
puissance *= valeur;
}
return puissance;
}
```
8 - 3 :
```cs=
static int Factorielle(int x)
{
//Condition d'arret
if(x==1)
{
return 1;
}
//Récursivité
else
{
Console.WriteLine("X vaut : "+x);
return Factorielle(x - 1) * x;
}
}
```
8 - 4 :
```cs=
static float Moyenne(float[] t)
{
float moyenne = 0;
for (int i = 0; i < t.Length; i++)
{
moyenne += t[i];
}
return moyenne / t.Length;
}
```
## 10 - Structures de données
```cs=
//9 - 1
class LinkedList
{
public float value;
public LinkedList nextCell = null;
//9 - 2
public void AddElement(float valueToAdd)
{
//Créer une nouvelle liste
LinkedList newList = new LinkedList();
//Donner la valeur à la nouvelle liste
newList.value = valueToAdd;
//Relier a nous même
nextCell = newList;
}
//9 - 3
public void AddAtTheEnd(float valueToAdd)
{
//La liste sur laquelle je travail actuelement.
//Je démarre sur moi même
LinkedList currentList = this;
//Parcourir la liste tant qu'il y a quelque chose dans nextCell.
while(currentList.nextCell != null)
{
//Je passe à la liste suivante, donc je travail sur la suivante.
currentList = currentList.nextCell;
}
//Lorsque ce n'est plus le cas, on ajoute un élément à cette list (à la dernière).
//On peut le faire grace a AddElement(). La question sur quelle liste l'appeler ?
currentList.AddElement(valueToAdd);
}
}
```