Chargement en cours...
Connexion au forum informatique de Sur-la-Toile
La discussion « Exercice de programmation: ensembles en Pascal » se trouve dans le forum « Programmation »
Statut de la discussion » Exercice de programmation: ensembles en Pascal « ( normale)

Exercice de programmation: ensembles en Pascal

» Liste des Forums » Programmation » Discussion

Le 15-01-2007 à 11:48 #

bonjour, SVP aidez moi à la résolution de cet exercice:Exercice :
Soit E un ensemble. Une partie de E est un sous-ensemble de E.
1)Quelles sont les opérations binaires usuelles qu’on pourra définir sur les parties de E ?
2)En Pascal, comment est défini un ensemble et comment sont notés les opérateurs binaires sur les ensembles ?
3)On suppose que E est un ensemble d’entiers et T un tableau de n ensembles d’entiers. Développer un algorithme qui permet de déterminer si les éléments de T forment une partition de E.
On rappelle qu ‘une partition de E est un ensemble de parties de E qui sont non vides, disjointes deux à deux et leur réunion forme tout l’ensemble E.
4)Implémenter en Pascal, l’algorithme obtenu en 3).
MARCI D'AVANCE

Modérateur: le titre de votre discussion a été modifié. Merci de prendre soin de choisir des titres explicites et bien orthographiés, cela permet aux autres utilisateurs de savoir si votre sujet les intéresse ou s'ils peuvent vous aider.

[ Ce message a été modifié par : : ben le 16-01-2007 05:03 ]

Le 15-02-2007 à 23:14 #

bonjour Narmin suite à votre question voici une réponse à la première question (le reste sera dans la suite)
les opérations binaires usuelles qu’on pourra définir sur deux ensembles A et B :
- Inter : intersection (A inter B donne l’intersection de A et B)
- Union : réunion (A Union B donne la réunion de A et B )
- / : donne le complément : (A/ B donne le complément de B dans A et vis versa)
- Inclus dans : inclusion (A inclus dans veut dire A est inclus dans B A+B = B)
- Contient ou inclus : contenance (A contient B veut dire A contient B : A + B = A)
En manuscrit on peut remplacer les texte(inter , inclus ,…) par les symbole mathématiques

les opérations binaires usuelles qu’on pourra définir sur deux ensembles A et B en pascal :
- * : intersection (A * B donne l’intersection de A et B)
- + : réunion (A + B donne la réunion de A et B )
- - : donne le complément : (A – B donne le complément de B dans A et vis versa)
- <= : inclusion (A <= veut dire A est inclus dans B A+B = B)
- >= : contenance (A >= B veut dire A contient B : A + B = A)

Le 16-02-2007 à 00:35 #

voici une implémentation en pascal

unit partition_ensemble;
interface
uses wincrt;

type
Ensemble = set of byte;
Tab= array[1..10] of ensemble;
var
t:tab;
p:ensemble;

function partition(T:tab;n:integer):boolean;

implémentation

function partition(T:tab;n:integer):boolean;
var
part:boolean;
i,c:integer;
begin
part:=true;
for c:=1 to 5 do
for i:=c+1 to 5 do
if T[c]*T[i]<>[]
then part:= false;
partition:=part;
end;

end.

Le 16-02-2007 à 21:02 #

voici le programme après une petite rectification (l'imlémentation est la fonction).

program exemple;
uses wincrt;

type
Ensemble = set of byte;
Tab= array[1..10] of ensemble;
var
t:tab;
p:ensemble;
function partition(T:tab;n:integer):boolean;
var
part:boolean;
i,c:integer;
begin
part:=true;
T[1]:=[1,5,3];
T[2]:=[4,2,6];
T[3]:=[7,9];
T[4]:=[8,15,13];
T[5]:=[12,14];
c:=0;
repeat
c:=c+1 ;
for i:=c+1 to 5 do
if (T[c]*T[i]<>[]) or (T[c]=[])
then part:= false;
until (c=5) or not(part);
partition:=part;
end;
begin
writeln('ce tableau présente une partion de l''ensemble E',partition(t,5));
end.


essayes de voir ce lien. http://fr.wikipedia.org/wiki/Op%C3%A9rations_sur_les_ensembles

Le 19-02-2007 à 08:15 #

oh, trés gentil Monsieur l'inspecteur, tu es formidable et comprhénsif, merçi pour la solution.
Narmin

Le 19-02-2007 à 08:45 #

une question, Mr
comment on peut lir un tableau d'ensemble en pascal?, TP, affiche un mesaage can't read or write variables of this type.

Le 19-02-2007 à 09:21 #

c'est comme pour les types utilisteur (enumiré) la plupart des version de TP ne peuvent pas lire des élément de type ensemble mais on peut les construire par affectation, c'est pour cela que j'ai crée un tableau avec affectation.
en tout cas on vous a demandé une implementation pour la fonction qui vérifie si le tableau contuient des partition disjointe deux a deux ou nom.
je reste à votre écoute

Le 19-02-2007 à 19:41 #

Pour plus d'intérêt à tout le monde qui est en train de suivre cette discussion, j'ai vu important de publier une demande d'aide de la part de l'étudiante narmin(Amelnarmine) :
vous savez à quel point cet exercice m'a embêté, alors que c simple losqu'on réfléchi que chaque élément du tableau est un ensemble donc on utilise les opérateurs usuelles sur les ensembles. Si t[1]*T[2] <> [] (exemple)
merci, je suis tellement contente.
mais Mr j'ai un autre exercice, qui m'embête, puis je suis sure que vous allez m'aider puisque vous êtes bien basé en programmation numérique.
voila l'exercice:
On se propose d'écrire un programme qui saisit une série de 2n pairs d'entiers. Chaque paire représente le numérateur et dénominateur d'une fraction. Le programme devra afficher la somme de ces fractions sous forme d'une paire d'entiers représentant aussi le numérateur et dénominateur. Ce dernier devra être le plus petit possible.
Travail à faire :
1)Analyser ce problème en le décomposant en modules.
2)Analyser et déduire un algorithme solution à chacun des modules proposés
3)Proposer une solution récursive à ce problème.
est ce qu'on va utiliser un tableau t[1..2 , 1..n] puis la somme est = somnumérateur/somdénominateur, ce dernier devra être le plus petit possible, c pour le dénominateur mais comment, c pas clair, enfin pour moi
merçi Sir

mon essai pour la solution est dans le message suivant


Le 19-02-2007 à 22:48 #

voici une solution pascal aqui utilise 6 modules
je vous passerais une solution recursive ou il suffit à chaque fois de trouve la somme de deux fraction(les deux premiers couples seront remplacés par un nouveau couple qu'on lui ajoute le numéro trois et ainsi de suite...)

program fraction;
uses wincrt;

type
Tab=array[1..20] of integer;
var
num,den:tab;
vnum,vden,n,d:integer;
procedure saisie (var n:integer);
begin
writeln('saisie du nombre de fractions');
repeat
readln(n);
until n in [2..20];
end;
procedure remplir (var t1,t2:tab; n:integer);
var
c:integer;
begin
for c:= 1 to n do
begin
writeln('fraction N° : ', c:3);
writeln ('donnez le numérateur');
readln(T1[c]);
writeln ('donnez le dénominateur');
readln(T2[c])
end;
end;
function pgcd (a , b : integer ) : integer;
var
int:integer;
begin
repeat
if b=0
then pgcd:= a
else
begin
int := b;
b := a mod b;
a:= int;
pgcd:=pgcd(a,b);
end;
until b=0;
end;

procedure calcul (t1,t2:tab;n:integer;var vnum,vden:integer);
var c,int:integer;
begin
vden:=1;

for c:=1 to n do
vden := vden * T2[c] ;
vnum:=0;
for c:=1 to n do
vnum:=vnum + ((T1[c] * vden) div T2[c]);
int:=vnum;
vnum:=vnum div pgcd(vnum,vden);
vden:=vden div pgcd(int,vden);
end;
procedure affichage (a,b:integer);
begin
writeln('la fraction resultante est : ', vnum:3 , '/', vden)
end;
begin
saisie(n);
remplir (num,den, n);
calcul (num,den,n,vnum,vden);

affichage (vnum,vden);
end.


» Liste des Forums » Programmation

Navigation


Publicité

Connectés

Il y a actuellement 105 visiteurs et 1 toilien en ligne.

Recherche


Sauf mention contraire, le contenu du blog et du forum est sous licence Creative Commons By-Sa. Vous avez le droit de le reproduire à condition de citer l'auteur, de faire un lien vers la page d'origine, et de partager vos travaux dérivés selon les mêmes conditions.

Conditions d'utilisation -

Partenaires: [Informatique Multimédia] [Portail du Maroc] [Actualité High Tech]
[Tutoriaux Photoshop] [éligibilité ADSL] [Astuces Windows]

Page générée en 185 millisecondes sur WWW1.