Soit une liste L quelconque.
Ecrire un algorithme permettant de trouver le nombre d'occurences d'un élément var (entré au clavier) dans la liste L, et l'affichant.
> L:=[4,5,4,4,7,2];
>
var:=readstat("entrez un élément");
compteur:=0;
for i from 1 to nops(L) do
compteur:=`if`(L[i]=var,compteur+1,compteur);
od:
print(compteur);
entrez un élément 4;
>
>
Soit une liste de listes LL quelconque.
Ecrire un algorithme permettant de connaître le nombre total d'éléments de cette liste de listes LL (par exemple, si LL contient 3 sous-listes de respectivement 3,7 et 1 éléments, le nombre total d'éléments est $3+7+1=12$).
> LL:=[[4,3,5,4,4,3],[5,4,6],[1,4,76,234]];
>
compteur:=0;
for i from 1 to nops(LL) do
compteur:=compteur+nops(LL[i]);
od:
print(compteur);
>
>
>
Soit une liste triée L.
Ecrire un algorithme permettant d'insérer un élément n au bon endroit dans la liste triée L (par exemple, si L:=[1,4,12] et n:=7, on doit insérer n en 3ème position).
> L:=[1,4,12,127,436];
>
var:=readstat("entrez un élément ");
#on va étudier d'abord les cas "limites", i.e. qui ne setraitent pas dans le cas général: Si la liste est vide [], si on doit insérer en premier ou en dernier.
if L=[] then L:=[var];
elif var < L[1] then
L:=[var,op(L)];
elif var > L[nops(L)] then
L:=[op(L),var];
else #cas general, on insère dans une position à l'intérieur de la liste
i:=1;
while var > L[i] do
i:=i+1;
od;
L:=[op(L[1..i-1]),var,op(L[i..nops(L)])];
fi;
>
entrez un élément 45;
>
Soit une liste L quelconque.
--Ecrire un algorithme permettant de retirer toutes les occurences d'un élément var(entré au clavier) dans la liste L.
> L:=[4,5,4,4,7,2];
>
var:=readstat("entrez un élément");
i:=1;
while i<=nops(L) do
if L[i]=var then
L:=subsop(i=NULL,L);
else
i:=i+1;
fi;
od;
print(L):
entrez un élément 4;
>
#autre solution:
L:=[4,5,4,4,7,2];
var:=readstat("entrez un élément");
for i from nops(L) to 1 by -1 do
L:=`if`(L[i]=var,subsop(i=NULL,L),L);
od;
print(L);
>
entrez un élément 4;
>
# rappel: la boucle for dans l'autre sens (1 à nops) ne marche pas.
>
#autre solution: utiliser member
L:=[4,5,4,4,7,2];
var:=readstat("entrez un élément");
while member(var, L, 'pos') do
L:=subsop(pos=NULL,L);
od;
print(L);
entrez un élément 4;
>
>
--Même exercice, mais pour une liste de liste.
>
#on utilise la même boucle que précédemment (n'importe laquelle des solutions) pour chacune des listes contenues dans la liste de listes.
LL:=[[4,3,5,4,4,3],[5,4,6],[1,4,76,234]];
var:=readstat("entrez un élément");
for j from 1 to nops(LL) do
i:=1:
while i<=nops(LL[j]) do
if LL[j][i]=var then
LL[j]:=subsop(i=NULL,LL[j]);
else
i:=i+1;
fi;
od:
od:
print(LL):
>
entrez un élément 4;
>
On considère des dépense effectuées dans différents postes
budgétaires. A chaque dépense est associée le nom du fournisseur, sous
forme de liste, par exemple [``Dupont'', 877]. Nous considérons alors
la liste de ces dépenses, donc une liste de listes LL de deux
éléments. Un même fournisseur pourra apparaître plusieurs fois.
Par exemple: [["Dupont", 87],["Ets Moulin", 233],["Martin", 877],["Durand", 82],["Dupont", 4269],["Dupont", 321],["Martin", 921]]
Donner l'algorithme permettant de construire la liste récapitulative
contenant les dépenses totales faites auprès de chaque fournisseur, et
de l'afficher.
Dans l'exemple, cela doit donner:[["Dupont", 4677],["Ets Moulin", 233],["Martin", 1798],["Durand", 82]]
>
#indice: créer une seconde liste récapitulative que l'on remplit au fur et à mesure du parcours de LL.
Il s'agit de vérifier si on possède déjà dans la liste récapitulative le fournisseur. Si non, on le rajoute dans la liste, si oui on ajoute juste la dépense à la somme déjà calculée.
>
>