30 0 329KB
Série III Exercice 1.
Soit T un tableau de N chaines de caractères non vides et dont la taille maximale est 5. On se propose d’écrire un programme Pascal permettant de réaliser le traitement suivant : Remplir le tableau T par N chaines (n entre 2 et 20) Eliminer de chaque chaine tous les caractères non alphabétiques Convertir toutes les chaines non vides en majuscules Afficher toutes les chaines dont la taille est strictement supérieur à 2 Exemple : Pour N=4, soit le tableau suivant aB*+y 23 ?uy 879 ! YHga 1
2
3
ABY
YHGA
Alors le programme affiche : program ex1; uses wincrt; type tab=array[1..20]of string[6]; var t:tab; n:integer; procedure saisie(var n:integer); begin repeat writeln('Donner n entre 2 et 20'); readln(n); until n in [2..20]; end; procedure remplir(var t:tab; n:integer); var i:integer; begin for i:=1 to n do repeat writeln('Donner t[',i,']='); readln(t[i]); until length(t[i]) in [1..5]; end; procedure elimine(var t:tab;n:integer); var ch,chx:string; i,j:integer; begin for i:=1 to n do begin ch:=t[i]; chx:=''; for j:=1 to length(ch) do if upcase(ch[j]) in ['A'..'Z'] then chx:=chx+ch[j]; t[i]:=chx;
4
Série III end; end; procedure convertir (var t:tab; n:integer); var i,j:integer; ch:string; begin for i:=1 to n do begin ch:=t[i]; for j:=1 to length(ch) do ch[j]:=upcase(ch[j]); t[i]:=ch; end; end; procedure affiche(t:tab;n:integer); var i:integer; begin for i:=1 to n do if length(t[i])>2 then write(t[i],' | '); end; begin saisie(n); remplir(t,n); elimine(t,n); convertir(t,n); affiche(t,n); end.
Exercice 2.
Ecrire un programme qui détermine la position de la 2ème voyelle d’un tableau T de N lettres Majuscules (N entre 10 et 20). S’il y a moins que 2 voyelles, le programme affichera –1 program ex2; uses wincrt; type tab=array[1..20]of char; var t:tab; n:integer; procedure remplissage(var t:tab;var n:integer); var i:integer; begin repeat writeln('Donner n entre 10 et 20'); readln(n);
Série III until n in [7..20]; for i:=1 to n do repeat writeln('Donner T[',i,']='); readln(t[i]); until t[i] in ['A'..'Z']; end; function nbvoy(t:tab;n:integer):integer; var i,x:integer; begin x:=0; for i:=1 to n do if t[i] in ['A','E','Y','U','I','O'] then x:=x+1; nbvoy:=x; end; function posvoy(t:tab;n:integer):integer; var pp,i:integer; begin pp:=0; i:=1; repeat if t[i] in ['A','E','Y','U','I','O'] then pp:=i else i:=i+1; until (pp0); i:=pp+1; pp:=0; repeat if t[i] in ['A','E','Y','U','I','O'] then pp:=i else i:=i+1; until (pp0); posvoy:=pp; end; begin remplissage(t,n); if nbvoy(t,n)=50); if (s>=50) then writeln ('Bravo gagnant avec un score de ',s,' points') else if (double=true) then writeln ('Bravo gagnant avec DEUX DOUBLées successifs') else writeln ('Echec'); end; begin jeu; end.
Série III Exercice 4.
Ecrire la traduction Pascal d’un programme qui permet de remplir un tableau T par N entiers (n dans 5..10) sans doublons (l’élément doit exister une seul fois dans le tableau) puis insérer un élément donné X (sachant que x n’existe pas dans le tableau) dans une position donnée ix. Enfin afficher Le tableau Exemple : Pour n =7, soit T : 1 55 7 99 22 33 54 Si x=10 et ix=5 alors le tableau devient : 1 55 7 99 10 22 33 54 program ex4; uses wincrt; type tab=array[1..11]of integer; var t:tab; n:integer; procedure saisie(var n:integer); begin repeat writeln('Donner n entre 5 et 10'); readln(n); until n in [5..10]; end; function existe(x:integer;t:tab;ind:integer):boolean; var j:integer; test:boolean; begin j:=1; repeat test:=t[j]=x; j:=j+1; until (test) or (j>ind); existe:=test; end; procedure remplir(var t:tab; n:integer); var i:integer; begin writeln('Donner T[1]='); readln(t[1]); for i:=2 to n do repeat writeln('Donner t[',i,']='); readln(t[i]); until existe(t[i],t,i-1)=false; end;
Série III procedure decalage(var t:tab;n:integer;ind:integer); var i:integer; begin for i:=n downto ind+1 do t[i]:=t[i-1]; end; procedure inser(var t:tab;var n:integer); var x,ix:integer; begin repeat writeln('Donner l''entier '); readln(x); writeln('Donner la position d''insertion'); readln(ix); until (ix in [1..n]) and (not(existe(x,t,n))); n:=n+1; decalage(t,n,ix); t[ix]:=x; end; procedure affiche(t:tab;n:integer); var i:integer; begin for i:=1 to n do write(t[i],' | '); end; begin saisie(n); remplir(t,n); inser(t,n); affiche(t,n); end.
Exercice 5.
On se On se propose d'écrire un programme permettant de remplir deux tableaux V1 et V2 respectivement par N et M entiers (avec N et M deux entiers de l'intervalle [2..20] et les éléments de V1 et V2 sont saisis dans un ordre strictement croissant), puis de fusionner les éléments de ces deux tableaux dans un tableau V3 en éliminant les redondances et en gardant l'ordre croissant des éléments. Enfin, le programme affichera les éléments du tableau V3. Exemple : Si N =5, M = 7 et les éléments des deux tableaux V1 et V2 sont:
Alors le tableau V3 contiendra les éléments suivants:
Série III program fusion_tab; uses wincrt; type tabd= array[1..20] of integer; tabr= array[1..20] of integer; var k,n,m:integer; v1,v2:tabd; v3:tabr; procedure saisie (Var Nb : integer ; Var T :Tabd); var i:integer; begin repeat writeln('Donner La taille du tableau :'); readln(nb); until nb in [2..20]; writeln('Donner Elément° 1'); readln(t[1]); for i:=2 to nb do repeat writeln('Donner Elément° ',i); readln(t[i]); until t[i]>t[i-1]; end; procedure fusion (n,m:integer;v1,v2:tabd;var k:integer;var v3:tabr); var i,j,c:integer; begin i:=1; j:=1; k:=0; repeat k:=k+1; if v1[i]n) or (j>m); if j>m then for c:=i to n do begin k:=k+1; v3[k]:=v1[c]; end else for c:=j to m do begin k:=k+1; v3[k]:=v2[c]; end; end; procedure affiche(nb:integer;t:tabr); var i:integer; begin for i:=1 to nb do write(t[i],' | '); end; begin Saisie (N, V1); Saisie (M, V2); Fusion (N, M, V1, V2, K, V3); Affiche (K, V3); end.
Exercice 6. On se propose de saisir N entiers différents entre 1 et 100 (N étant un entier naturel compris entre 10 et 50) puis afficher la plus longue séquence croissante tout en précisant la position du premier nombre de cette séquence. Exemple : Pour N=15 1 2 3 1 2 3 4 5 6 7 8 2 3 4 5 Le programme affiche : La plus longue séquence est 1 * 2 * 3 * 4 * 5 * 6 * 7 * 8 * qui débute à la position 4 et elle est de longueur 7 program long_seq; uses wincrt; type tab=array[1..50]of integer; var lpls,ppls,n,h:integer; t:tab; procedure saisie ( var n:integer ;var t:tab); var i:integer; begin
Série III repeat write('Donner le nombre d''elements '); readln(n); until n in [10..50]; for i :=1 to n do repeat write('Entrer élément n° ',i,' '); readln(t[i]); until t[i] in [1..100]; end; procedure position (n:integer;t:tab; var lpls,ppls:integer); var i: integer; ls:integer; db:integer; begin db:=1; ls:=1; ppls:=1; lpls:=1; for i :=2 to n do if t[i]>t[i-1] then ls:=ls+1 else begin if ls >lpls then begin ppls:=db; lpls:=ls; end; ls:=1; db:=i; end; end; begin saisie(n,t); position (n,t, lpls,ppls); writeln('Longueur de la séquence croissante la plus longue= ', lpls); writeln('Position de la séquence croissante la plus longue= ', ppls); for h:=ppls to ppls+lpls-1 do write(t[h],' * '); end.