مشاهدة النسخة كاملة : اريد حل تمرين في الالغوريتم
Exercice :
Soit à gérer la table de matière du domaine Math et Informatique, le nombre de matières à gérer (18), répartir sur 2 semestre les champs de la table sont les informations concernent semestre (un champ) « 1 où 2 » des informations concernent la matière (Code matière – Libelle de la matière – Unité qui peut être Fondamentale, Méthodologique-… - Transversale- Découverte) (1 champ) – Coefficient – Les crédits.
* Travail demander :
Ecrire l’algorithme qui permettant de :
1- créer la table matière.
2- Consulter une matière donnée.
3- Afficher toute les matières d’un semestre
4- Modifier une matière.
5- Supprimer une matière quelconque.
Ces actions sont formulées à travers de procédures appelées via un menu.
ساعدوني فيه أرجوكم يا إخوتي هو إجباري و شكرا مسبقا
you92cef
2013-02-07, 17:46
جاري برمجته
you92cef
2013-02-07, 18:51
program ex;
uses wincrt;
type sem=array[1..2]of string;
type uu=array[1..2,1..9]of string;
type matt =record
cod:integer;
nom:string;
uni:string;
cre:integer;
coe:integer;
lib:string;
end;
type tab=array[1..9]of matt;
var i:integer;
t:tab;
ch:string;
u:uu;
semm,chch,j:integer;
procedure lire;
begin
writeln('Entrez semestre');
readln(semm);
for j:=1 to 2 do
for i:=1 to 9 do begin
writeln('code');
readln(t[i].cod);
writeln('nom matiere');
readln(t[i].nom);
writeln('unite');
readln(t[i].uni);
writeln('credit');
readln(t[i].cre);
writeln('coefficient');
readln(t[i].coe);
writeln('libele');
readln(t[i].lib);
end;
for j:=1 to 2 do
for i:=1 to 9 do
u[j,i]:=t[i].nom;
end;
procedure seme;
begin
for i:=1 to 9 do
writeln(u[j,i]);
end;
procedure mati;
begin
writeln('Entrez la matier');
readln(ch);
while (ch<>t[i].nom) and (i<=9) do
i:=i+1;
if ch=t[i].nom then begin
writeln('code:',t[i].cod);
writeln('unité:',t[i].uni);
writeln('credit:',t[i].cre);
writeln('coefficient:',t[i].coe);
writeln('libelle:',t[i].lib);
end;
end;
procedure aff;
begin
writeln('Entrez le semestre que vous voulez afficher');
readln(chch);
if chch=1 then
for i:=1 to 9 do
writeln(u[1,i]);
if chch=2 then
for i:=1 to 9 do
writeln(u[2,i]);
end;
begin
lire;
seme;
aff;
end.
بقي فقط تجريب اذا كان يشتغل جيدا وبعض التعديلات فقط في القراءة
you92cef
2013-02-07, 19:59
البرنامج الكامل لاجابة عن الاسئلة الثلاث الاولى
program ex;
uses wincrt;
type sem=array[1..2]of string;
type uu=array[1..2,1..9]of string;
type matt =record
cod:integer;
nom:string;
uni:string;
cre:integer;
coe:integer;
lib:string;
end;
type tab=array[1..9]of matt;
var i,z:integer;
t:tab;
ch:string;
u:uu;
semm,chch,j:integer;
procedure lire;
begin
writeln('Entrez les matiere de semestre 1');
j:=1;
for i:=1 to 9 do begin
writeln('code');
readln(t[i].cod);
writeln('nom matiere');
readln(t[i].nom);
writeln('unite');
readln(t[i].uni);
writeln('credit');
readln(t[i].cre);
writeln('coefficient');
readln(t[i].coe);
writeln('libele');
readln(t[i].lib);
end;
for i:=1 to 9 do
u[1,i]:=t[i].nom;
writeln('Entrez les matiere de semestre 2');
j:=2;
for i:=10 to 18 do begin
writeln('code');
readln(t[i].cod);
writeln('nom matiere');
readln(t[i].nom);
writeln('unite');
readln(t[i].uni);
writeln('credit');
readln(t[i].cre);
writeln('coefficient');
readln(t[i].coe);
writeln('libele');
readln(t[i].lib);
end;
for i:=1 to 9 do
u[2,i]:=t[i].nom;
end;
procedure mati;
begin
writeln('Entrez la matier');
readln(ch);
for i:=1 to 18 do
if ch=t[i].nom then begin
writeln('code:',t[i].cod);
writeln('unité:',t[i].uni);
writeln('credit:',t[i].cre);
writeln('coefficient:',t[i].coe);
writeln('libelle:',t[i].lib);
end;
end;
procedure aff;
begin
writeln('Entrez le semestre que vous voulez afficher');
readln(chch);
i:=1;
if chch=1 then
repeat
writeln(u[1,i]);
i:=i+1;
until i>9;
if chch=2 then
repeat
writeln(u[2,i]);
i:=i+1;
until i>9;
end;
begin
writeln('1-> lire ,2->semestre ,3->matiere ,4->stop');
repeat
readln(ch);
if ch='1' then lire;
if ch='2' then aff;
if ch='3' then mati;
until ch='4';
end.
you92cef
2013-02-07, 21:11
تم برمجة البرنامج ولكن ينقص بعض الامور فيه
بخصوص الحذف
فهل نحتاج الى تعقيد الامور ام تبسيطها؟
يعني هل نريد فقط الا تظهر المادة وامورها التي حذفناها عند العرض ام اننا نحذفها كليا
++
أولا شكرا جزيلا لك أخي يوسف بارك الله فيك وجعلها في ميزان حسناتك إن شاء الله
أما بالنسبة لحذف المواد فالمطلوب هو عدم إظهار الأمور المتعلقة بها فقظ للتمكن من استعادة هذه المعلومات عند الحاجة إليها ومشكور مرة أخرى
ahmedchourar
2013-02-08, 00:22
اي سنة هذا التمرين الوجريتم سنة ثانية اعلام الالي ؟
you92cef
2013-02-08, 09:30
أولا شكرا جزيلا لك أخي يوسف بارك الله فيك وجعلها في ميزان حسناتك إن شاء الله
أما بالنسبة لحذف المواد فالمطلوب هو عدم إظهار الأمور المتعلقة بها فقظ للتمكن من استعادة هذه المعلومات عند الحاجة إليها ومشكور مرة أخرى
حسنا اذا كان الامر هكذا فهو سهل مقارنة بالحذف
سيتم تعديل البرنامج
you92cef
2013-02-08, 10:33
اي سنة هذا التمرين الوجريتم سنة ثانية اعلام الالي ؟
للسنة الاولى اعلام الي ولكن المفروض تدرسونه في الفصل الثاني
you92cef
2013-02-08, 10:52
أولا شكرا جزيلا لك أخي يوسف بارك الله فيك وجعلها في ميزان حسناتك إن شاء الله
أما بالنسبة لحذف المواد فالمطلوب هو عدم إظهار الأمور المتعلقة بها فقظ للتمكن من استعادة هذه المعلومات عند الحاجة إليها ومشكور مرة أخرى
في هذه الحالة لدينا خيار
اننا نقوم بقراءة رمز المادة التي اردنا حذفها
مثلا
الفصل الاول
مواده تاخذ الرمز من 1 الى 9
فتصير هكذا
1
2
3
4
5
6
7
8
9
في هذه الحالة مثلا اردنا حذف المادة 3فنقوم بقراءة مثلا
y
نرجع الى بروسيدور اظهار مواد الفصل ونقوم باضافة السطر التالي في الدالة فور
if i<>y do
writeln(...);
نقوم بتشغيل الجالة
في الحالة 1
لدينا ايي ياخذ القيمة1 التي تختلف عن 3 يقوم باظهار المادة
ثنيا لدينا 2 يختلف عن 3 يقوم بالاظهار
اثلثا لدينا 3 يساوي 3 لا يقوم بالاظهار
رابعا لدينا 4 يختلف عن 3 يقوم بالاظهار
وهكذا
رغم بساطة الامر الا انه لم يشتغل عندما برمجته :confused:
لذلك اما ان تحاولي برمجته بهذه الطريقة فقد اكون نسيت بعض الامور او تكتبه على شكل الغوريتم فهو صحيح
ولكن في هذه الحالة يجب ان تكون رموز المواد
code matier
تنتمي الى نفس مجال
i
يعني المواد تكون مرمزة ما بين 1 الى 18
المادة الاولى رمزها 1
الثانية 2 وهكذا
--------------------
الحالة الثانية وهي معقدة نوعا ما
وهي ان نقوم بعمل تعديل
بحيث تصير المواد 17
n-1
اذا كانت لدينا مثلا هذا التريتيب
1-analyse
2-algeber
3-info
4-mec
5-ele
6-beru
7-chimie
8-tec
9-ang
اردت ان احذف
ele
فيصير التريتب التالي
1-analyse
2-algeber
3-info
4-mec
5-beru
6-chimie
7-tec
8-ang
واظن ان الالغوريتم لهذه الحالة لديكم
ولكن لا ننسى ان لدينا ايضا مواد الفصل الثاني والتي عوض ما يكون ترميزها من 10 الى 18
تصبح مرمزة من 9 الى 17
فيصبح لدينا هكذا
procedure supp;
begin
writeln('Entrez le code matier que vouler supprimer');
readln(cc);
for i := cc + 1 to n do begin
t[i-1].nom:=t[i].nom;
t[i-1].cod:=t[i].cod;
t[i-1].uni:=t[i].uni;
t[i-1].cre:=t[i].cre;
t[i-1].coe:=t[i].coe;
t[i-1].lib:=t[i].lib;
end;
n:=n-1;
end;
الان نلاحظ ان في البرنامج النهائي البروسيدور الاول يشتغل والبقية لا تشتغل
رغم انها كانت تشغل جيدا قبل اضافة بروسيدور الحذف:confused:
فعند اضافة بروسيدور الحذف لم تعد تشتغل جيدا وهذا اظن يعود لاخطاء في البرنامج *-* رغم انني اعتقد انه صحيح *-* او لحجم البرنامج الكبير
البرنامج النهائي مكتوب بشكل جيد *-* الالغوريتم صحيح ولكن البرنامج ليس شغال:confused:*-*
program ex;
uses wincrt;
type sem=array[1..2]of string;
type uu=array[1..2,1..9]of string;
type matt =record
cod:integer;
nom:string;
uni:string;
cre:integer;
coe:integer;
lib:string;
end;
type tab=array[1..9]of matt;
var i,z,n:integer;
t:tab;
ch,p,chh,m,u1,l,chc:string;
u:uu;
semm,chch,j,p1,c,e,o,m1,mm1,m3,mm3,m4,mm4,cc:integ er;
procedure lire;
begin
writeln('Entrez les matiere de semestre 1');
j:=1;
for i:=1 to 9 do begin
writeln('code');
readln(t[i].cod);
writeln('nom matiere');
readln(t[i].nom);
writeln('unite');
readln(t[i].uni);
writeln('credit');
readln(t[i].cre);
writeln('coefficient');
readln(t[i].coe);
writeln('libele');
readln(t[i].lib);
end;
for i:=1 to 9 do
u[1,i]:=t[i].nom;
writeln('Entrez les matiere de semestre 2');
j:=2;
for i:=10 to 18 do begin
writeln('code');
readln(t[i].cod);
writeln('nom matiere');
readln(t[i].nom);
writeln('unite');
readln(t[i].uni);
writeln('credit');
readln(t[i].cre);
writeln('coefficient');
readln(t[i].coe);
writeln('libele');
readln(t[i].lib);
end;
for i:=10 to 18 do
u[2,i]:=t[i].nom;
end;
procedure mati;
begin
writeln('Entrez la matier');
readln(ch);
for i:=1 to 18 do
if ch=t[i].nom then begin
writeln('code:',t[i].cod);
writeln('unité:',t[i].uni);
writeln('credit:',t[i].cre);
writeln('coefficient:',t[i].coe);
writeln('libelle:',t[i].lib);
end;
end;
procedure aff;
begin
i:=1;
writeln('Entrez le semestre que vous voulez afficher');
readln(chch);
if chch=1 then
for i:=1 to 9 do
writeln(u[1,i]);
if chch=2 then
for i:=10 to 18 do
writeln(u[2,i]);
end;
procedure mode;
begin
writeln('Entrez le semestre dans laquelle vous aime modifier un matiere ');
readln(p1);
writeln('Entrez la matiere que vous aime modifier');
readln(chh);
for i:=1 to n do
if chh=t[i].nom then begin
writeln('nouvelle nom');
readln(m);
t[i].nom:=m;
u[p1,i]:=t[i].nom;
writeln(' nouvelle code:');
readln(c);
t[i].cod:=c;
u[p1,i]:=t[i].nom;
writeln('nouvelle unité:');
readln(u1);
t[i].uni:=u1;
u[p1,i]:=t[i].nom;
writeln('nouvelle credit:');
readln(e);
t[i].cre:=e;
u[p1,i]:=t[i].nom;
writeln('nouvelle coefficient:');
readln(o);
t[i].coe:=o;
u[p1,i]:=t[i].nom;
writeln('nouvelle libelle:');
readln(l);
t[i].lib:=l;
u[p1,i]:=t[i].nom;
end;
end;
procedure supp;
begin
writeln('Entrez le code matier que vouler supprimer');
readln(cc);
for i := cc + 1 to n do begin
t[i-1].nom:=t[i].nom;
t[i-1].cod:=t[i].cod;
t[i-1].uni:=t[i].uni;
t[i-1].cre:=t[i].cre;
t[i-1].coe:=t[i].coe;
t[i-1].lib:=t[i].lib;
end;
n:=n-1;
end;
begin
n:=18;
writeln('1-> lire ,2->semestre ,3->matiere ,4->mode, 5->supp');
repeat
readln(ch);
if ch='1' then lire;
if ch='2' then aff;
if ch='3' then mati;
if ch='4' then mode;
if ch='5' then supp;
until ch='6';
end.
شاحاول تعديله من جديد ان كان لدي بعض الوقت لانه لدي امتحجانات
مشكور أخي الآن الهدف هو حل هذا التمرين المعقد حاولت بالطرق التي ذكرتها لكن بلا جدوى لأنه كما قلت بروسيدور الحذف عطل لي بروسيدور الأخرى وأنا آسفة إذا عطلتك
أنت تدرس سنة ثانية إعلام آلي؟ وبأي جامعة؟
you92cef
2013-02-15, 11:32
مشكور أخي الآن الهدف هو حل هذا التمرين المعقد حاولت بالطرق التي ذكرتها لكن بلا جدوى لأنه كما قلت بروسيدور الحذف عطل لي بروسيدور الأخرى وأنا آسفة إذا عطلتك
أنت تدرس سنة ثانية إعلام آلي؟ وبأي جامعة؟
نعم السنة الثانية اعلام الي
جامعة تلمسان
vBulletin® v3.8.10 Release Candidate 2, Copyright ©2000-2025, TranZ by Almuhajir