تسجيل الدخول

مشاهدة النسخة كاملة : مساعدة في الباسكال تمرين


you92cef
2012-10-28, 13:53
السلام عليكم عيد مبارك سعيد للجميع تقبل الله منا ومنكم

عندي تمرين في الباسكال للاسف تعبت معاه وبرمجته بكل الاساليب ولكن يبدو انني متاثر بالعيد وعقلي لم يبدا في العمل بعد :1:

نص التمرين *-* ساهل ولكن لا يشتغل جيدا بكل الطرق التي برمجته به :confused:*-*

exrir un program pascal quio saisit des nombres entiers tant que leur somme est inferieur a 1000 puis qui affiche la somme obtenu et le nombre déentier saisis

you92cef
2012-10-28, 17:25
الا تساعدون؟

agm1991
2012-10-28, 18:35
السلام عليكم ورحمة الله وبركاته
1-ممكن محاولتك
2-في اي سنة تدرس اولى او ثانية
بعدها ان شاء الله اساعدك

agm1991
2012-10-28, 21:06
السلام عليكم و رحمة الله وبركاته
الحل من هنا
http://www.mediafire.com/?18jprhuuscj8jyt
صورة السورس كود من هنا
http://www.mediafire.com/view/?0kjmteuesw04n4k#
على ان تضع المحاولتك في المرة المقبلة

you92cef
2012-10-31, 18:07
السلام عليكم

تم حل المشكل بالاعتماد على نفسي
شكرا للجميع بغض النظر على ان بعض المحاولات لم تتطابق مع المضون
-----------
المشكل كان موجود انني كنت اقارن n الرقم الذي ادخله بالنسبة للباقي
بحيث او ادخلت مثلا 200 فالباقي يكون 800 وهذا خاطئ
لانني لو ادخلت مثلا 500 سوف يكون الباقي 500 ولكن 500<500
ففي هذه الحالة سوف يخرج

والحل هو مقارنة المجموع مع 1000
هذا هو الكود
-------------
program ex09;
uses wincrt;
var i,n,s,r,z:integer;
begin
i:=0;
s:=0;
r:=1000;
while s<1000 do begin
readln(n);
s:=s+n;
r:=r-n;
i:=i+1;
end;
if s>1000 then writeln('erreuer');
writeln('la somme est',s-n);
writeln('entree est',i-1);
end.

salemk
2012-11-03, 02:20
اللي فهمتو
1) saisir deux entier a et b
2) afficher la somme a+b, a et b si a+b <1000

programme itératif sans modules
----------------------------------------------------------


Program djelfa1 ;
Uses wincrt ;
Var
A,B : integer ;
Ok:Boolean;
Begin
While ok= false do
begin
Readln(A);
Readln(B);
If A+B<1000 then
Ok:=true;
End;
Writeln(a+b);
Writeln(A);
Writeln(B);
End.





programme récursif avec un module
-----------------------------------------------------------------



Program djelfa2 ;
Uses wincrt ;
Procedure lecture (var x,y :integer);
Begin
Readln(x);
Readln(y);
End;
Var
A,b:integer;
Begin
Lecture(a,b);
If A+B>1000 then
Lecture(a,b);
Writeln(a+b);
Writeln(A);
Writeln(B);
End.

you92cef
2012-11-03, 10:31
اللي فهمتو
1) saisir deux entier a et b
2) afficher la somme a+b, a et b si a+b <1000

programme itératif sans modules
----------------------------------------------------------


Program djelfa1 ;
Uses wincrt ;
Var
A,B : integer ;
Ok:Boolean;
Begin
While ok= false do
begin
Readln(A);
Readln(B);
If A+B<1000 then
Ok:=true;
End;
Writeln(a+b);
Writeln(A);
Writeln(B);
End.





programme récursif avec un module
-----------------------------------------------------------------



Program djelfa2 ;
Uses wincrt ;
Procedure lecture (var x,y :integer);
Begin
Readln(x);
Readln(y);
End;
Var
A,b:integer;
Begin
Lecture(a,b);
If A+B>1000 then
Lecture(a,b);
Writeln(a+b);
Writeln(A);
Writeln(B);
End.




-----------------------
لقد جربت كلا الحلين وللاسف هما خاطئين

التمرين يقول انك تدخل قيمة معينة لn وتستمر في اعطاءها اي قيمة طالما ان مجموع القيم لا يتجاوز 1000

يعني مثلا تخيل انه لديك 1000 دينار
بامكانك شراء عدة اشياء طالما ان مجموعها لا يتجاوز 1000 دينار
هذا هو مبدا البرنامج

وفي الاخير يظهر لك عدد الارقام التي ادخلتها *-* اشترتيها*-* وقيمتها

مثلا لو ادخلت
500
400
200

فانه عليه ان يظهر بان مجموع الاعداد التي ادخلتها هي 900*-* قيمة الاشياء التي اشترتيها*-*
وعدد الاشياء التي اشتريتها هي 2
---------------------
برنامجك الاول فيه خطئ بحيث عند البدا في العمل به مثلا وعند ادخال قيم 500 اكثر من مرتين يستمر في العمل
*-* جرب بالرنامج الاول وادخل قيم 500 *-* يمكنك ادخالها 100 مرة بدون ان يتوقف الربنامج*-*

البرنامج الثاني
اذا ادخلنا مثلا قيم 100 و100 فان الربنامج سوف يتوقف

الحل باستخدام while
راجع الردود السابقة

you92cef
2012-11-03, 10:31
هذا هو الحل

program ex09;
uses wincrt;
var i,n,s,r,z:integer;
begin
i:=0;
s:=0;
r:=1000;
while s<1000 do begin
readln(n);
s:=s+n;
r:=r-n;
i:=i+1;
end;
if s>1000 then writeln('erreuer');
writeln('la somme est',s-n);
writeln('entree est',i-1);
end.

King Soft
2012-11-03, 15:51
السلام عليكم اخوتي


اولا ملاحظة عن نص التمرين :
التمرين يقول اكتب برنامج يطلب اعداد حقيقية مدام مجموع الاعداد اقل من 1000 ف إذا فاق المجموع 1000 يتوقف البرنامج
عن طلب الاعداد ولذالك لسنا بحاجة لعرض رسالة الخطا الي كتبتها لان المجموع اصلا يجب ان يكون اكثر من الالف والا فلن يتوقف البرنامج.

تفضل الحل:

program Project1;

uses wincrt;

var X,S,i:integer;
T:array[1..100] of integer;
begin
S:=0;i:=0;
while s<1000 do
begin
i:=i+1;
read(x);
S:=S+X;
T[i]:=X;
end;
for x := 1 to i do
Writeln('le Numero',x,'est = ',T[x]);
Write('La Somme est = ',S);
readln; readln;
end.

بالتوفيق

you92cef
2012-11-03, 17:08
السلام عليكم اخوتي


اولا ملاحظة عن نص التمرين :
التمرين يقول اكتب برنامج يطلب اعداد حقيقية مدام مجموع الاعداد اقل من 1000 ف إذا فاق المجموع 1000 يتوقف البرنامج
عن طلب الاعداد ولذالك لسنا بحاجة لعرض رسالة الخطا الي كتبتها لان المجموع اصلا يجب ان يكون اكثر من الالف والا فلن يتوقف البرنامج.

تفضل الحل:

program Project1;

uses wincrt;

var X,S,i:integer;
T:array[1..100] of integer;
begin
S:=0;i:=0;
while s<1000 do
begin
i:=i+1;
read(x);
S:=S+X;
T[i]:=X;
end;
for x := 1 to i do
Writeln('le Numero',x,'est = ',T[x]);
Write('La Somme est = ',S);
readln; readln;
end.

بالتوفيق

-------------------
نعم يمكن حذف التعليق

ولكن انت اضفت تعاليق اكثر مني :1:

عموما برنامجك فيه بعض الاخطاء
مثلا اذا ادخلت 500 ثم 500 سوف يكتب المجموع 1000 وهذا خاطئ
لان نص التمرين يقول يجب ان يكون المجموع اقل من 1000*-* ليس اقل او يساوى *-*
يعني اكبر مجموع هو 999*-* في حالة تجاوز المجموع 1000او كان يساوي 1000 لا نحسب العدد الاخير

نفس الشيء اذا ادخلت 500 ثم 6000 سوف يكتب المجموع 1100:confused:
+
نص التمرين الاخر الذي يطلب عدد الاعداد التي ادخلتها لم تجب عليه

King Soft
2012-11-03, 18:02
اخي ااكد لك انك لم تفهم نص التمرين
¤ saisit des nombres entiers tant que leur somme est inferieur ¤
بمعنى البرنامج يواصل في طلب الاعداد مدام مجموع الاعداد اقل من 1000 فان فاق 1000 يتوقف ويعرض المجموع
اي ان شرط توقف حجز الاعداد هو المجموه يفوق 999

salemk
2012-11-03, 20:15
-----------------------
لقد جربت كلا الحلين وللاسف هما خاطئين

التمرين يقول انك تدخل قيمة معينة لn وتستمر في اعطاءها اي قيمة طالما ان مجموع القيم لا يتجاوز 1000

يعني مثلا تخيل انه لديك 1000 دينار
بامكانك شراء عدة اشياء طالما ان مجموعها لا يتجاوز 1000 دينار
هذا هو مبدا البرنامج

وفي الاخير يظهر لك عدد الارقام التي ادخلتها *-* اشترتيها*-* وقيمتها

مثلا لو ادخلت
500
400
200

فانه عليه ان يظهر بان مجموع الاعداد التي ادخلتها هي 900*-* قيمة الاشياء التي اشترتيها*-*
وعدد الاشياء التي اشتريتها هي 2
---------------------
برنامجك الاول فيه خطئ بحيث عند البدا في العمل به مثلا وعند ادخال قيم 500 اكثر من مرتين يستمر في العمل
*-* جرب بالرنامج الاول وادخل قيم 500 *-* يمكنك ادخالها 100 مرة بدون ان يتوقف الربنامج*-*

البرنامج الثاني
اذا ادخلنا مثلا قيم 100 و100 فان الربنامج سوف يتوقف

الحل باستخدام while
راجع الردود السابقة


كلاهما يعمل ولكن لم يستجيبا للطلب
قد حددت ما فهمت ثم اجبت وللأسف لم أستوعب جيدا المطلوب، على كل حال البركة في الاولاد يعطيهم الصحة:19:

you92cef
2012-11-03, 21:21
اخي ااكد لك انك لم تفهم نص التمرين

بمعنى البرنامج يواصل في طلب الاعداد مدام مجموع الاعداد اقل من 1000 فان فاق 1000 يتوقف ويعرض المجموع
اي ان شرط توقف حجز الاعداد هو المجموه يفوق 999


الاستاذ عندما شرح لنا التمرين شرح لنا هذا الشرح

نستمر في ادخال قيم لn مادام مجموعها اصغر او يساوي 999

لا يجب ان يكون المجموع 1000 او اكبر من الف

فاذا ادخلت مثلا 500 ثم 500
وكتبت المجموع 1000 فبحسب الاستاذ هذا خطا :confused:
فاذا ادخلت 500 ثم 500 يكون المجموع 500 وعدد الاعداد التي ادخلتها هي 1

هذا بحسب شرح الاستاذ :o

you92cef
2012-11-03, 22:13
شكرا للجميع