پاسکال: جمع دو عدد 20 رقمی
سلام دوستان
یه برنامه نوشتم که توش مشکل دارم
برنامه ای که دو عدد 20 رقمی رو در پاسکال با هم جمع کنه
همونطور که می دونید در پاسکال بزرگترین بازه رو اعداد longint تشکیل می دن که اونام 10 رقمن.
یه برنامه با کمک آرایه ها نوشتم اما مشکل اینجاست که بیت تک تک رقم ها باید space زد .
اگه بتونیم طوری تعریف کنیم که تمامی ارایه های ورودی تک رقمی هستن مشکل حله.
اینم سورس برنامه:
{Written By SAJJAD RAD}
program gold_digit;
uses crt;
var
a,b,c:array[1..100]of integer;
i,n,temp:integer;
begin
clrscr;
writeln('This Program Is Written By SAJJAD RAD');
writeln('(c) 2009 Radtech Corporation.All Right Reserved.');
writeln;
textcolor(red);
writeln('Guide:');
writeln('For enter numbers seprate the digit by space key!');
textcolor(white);
writeln;
writeln('Enter 20 digit number #1:');
for i:=1 to 20 do
read (a[i]);
readln;
writeln('Enter 20 digit number #2:');
for i:=1 to 20 do
read (b[i]);
readln;
for i:=20 downto 1 do
begin
temp:=0;
temp:=a[i]+b[i];
if i=1 then
begin
c[i]:=temp;
break;
end;
if temp>9 then
begin
n:=temp mod 10;
c[i]:=n;
a[i-1]:=1+a[i-1];
end;
if temp<=9 then
c[i]:=temp;
end;
writeln;
write('Sum of two 20 digit numbers is= ');
for i:=1 to 20 do
write(c[i]);
writeln('Press Any Key To Exit...');
writeln;
readln;
end.
لطفا هر چه زودتر برام جواب پست کنید ممنون:قلب::بوس:
نقل قول: درخواست کمک در برنامه نویسی پاسکال
نقل قول:
یه برنامه با کمک آرایه ها نوشتم اما مشکل اینجاست که بیت تک تک رقم ها باید space زد .
براي اينكه از Space استفاده نكني به جاي اين كد :
writeln('Enter 20 digit number #1:');
for i:=1 to 20 do
read (a[i]);
از كد زير استفاده كن :
writeln('Enter 20 digit number #1:');
for i:=1 to 20 do
a[i]:= ReadKey;
نقل قول:جواب دوست عزیز دلفی
نقل قول:
از كد زير استفاده كن :
کد:
writeln('Enter 20 digit number #1:');
for i:=1 to 20 do
a[i]:= ReadKey;
دوست عزیز ممنون که به سوالم اهمیت دادی
اما وقتی این دستور رو در برنامه می نویسم خطا تایپ میده:
http://uploadsajjad.persiangig.com/i...r_type_mis.JPG
ممنون....کمکم کن اطفا
نقل قول: درخواست کمک در برنامه نویسی پاسکال
راستی مکان نما هم موقع خطا روی دستور readkey هستش.
بازم ممنون
منتظرم
نقل قول: جواب دوست عزیز دلفی
نقل قول:
نوشته شده توسط
sajjadrad
دوست عزیز ممنون که به سوالم اهمیت دادی
اما وقتی این دستور رو در برنامه می نویسم خطا تایپ میده:
ممنون....کمکم کن اطفا
خروجي تابع Readkey از نوع Char ميباشد پس شما بايد آرايه a رو از نوع Char تعريف كنيد .
نقل قول: درخواست کمک در برنامه نویسی پاسکال
نقل قول:
خروجي تابع Readkey از نوع Char ميباشد پس شما بايد آرايه a رو از نوع Char تعريف كنيد .
درسته اما مشکل اینجاست که char قابل جمع کردن نیست.
کد زیر رو ببینید:
for i:=20 downto 1 do
begin
temp:=0;
temp:=a[i]+b[i];
if i=1 then
begin
c[i]:=temp;
break;
end;
if temp>9 then
begin
n:=temp mod 10;
c[i]:=n;
a[i-1]:=1+a[i-1];
end;
if temp<=9 then
c[i]:=temp;
end;
بعد از خوندن آرایه ها باید اونا رو جمع کرد..
بازم ممنون..
منتظر جوابتون هستم
نقل قول: پاسکال: جمع دو عدد 20 رقمی
سلام؛
فكر نكنم تبديل كاراكتر به عدد كار سختي باشه. كافيه از ORD(CH) - 48 استفاده كني.
يا علي... موفق باشي...
نقل قول: پاسکال: جمع دو عدد 20 رقمی
نقل قول:
فكر نكنم تبديل كاراكتر به عدد كار سختي باشه. كافيه از ORD(CH) - 48 استفاده كني.
درسته دوست عزیز میشه کداسکی رو بدست آورد و 48 واحد کم کرد..اما این برای موقعیه که بخوایم char ما فقط عدد باشه...اما برنامه نمیفهمه که ما char رو به عدد تبدیل کردیم...بازم سر جمع خطا کامپایلری میده چون متغیر های char با هم جمع شدن که این غیر عادیه...اما اگه بتونیم کاری کنیم که ورودی ارایه های integer تک رقمی فرض بشن مشکل حله.من تو یجا دیده بودم که واسه Read طول میدان تعریف کرده بود امابازم جواب نمدیده...از نظراتتون ممنون..
کمکم کنییییید
لطفااااااااااااا
نقل قول: پاسکال: جمع دو عدد 20 رقمی
نقل قول:
نوشته شده توسط
sajjadrad
درسته دوست عزیز میشه کداسکی رو بدست آورد و 48 واحد کم کرد..اما این برای موقعیه که بخوایم char ما فقط عدد باشه...اما برنامه نمیفهمه که ما char رو به عدد تبدیل کردیم...بازم سر جمع خطا کامپایلری میده چون متغیر های char با هم جمع شدن که این غیر عادیه...اما اگه بتونیم کاری کنیم که ورودی ارایه های integer تک رقمی فرض بشن مشکل حله.من تو یجا دیده بودم که واسه Read طول میدان تعریف کرده بود امابازم جواب نمدیده...از نظراتتون ممنون..
کمکم کنییییید
لطفااااااااااااا
دوست عزيز شما چرا مساله رو پيچيده ترش ميكنيد ، براي اينكه برنامتون كار بكنه كافيه در كد برنامه هر جا از a[i]
و امثال اون استفاده كرديد بجاش Ord(a[i])-48
و هر جا هم از temp
و امثال اون استفاده شده به جاش از Chr(temp)
استفاده كنيد !
نقل قول: پاسکال: جمع دو عدد 20 رقمی
دوستان ممنون که بهم اهمیت میدین
فقط بهم بگین مشکل کجاست و راه حل شما چه کمکی میکنه..اینجوری گیج میشم.چون هدفم نوشتن برنامه نیست..هدف اینه که یه چیز یاد بگیرم...
ممنون از دوست عزیز دلفی..واقعا مزاحمت ایجاد کردم...
راستی کدی که گفتید رو اجرا کردم...بازم متاسفانه کار نمیکنه
http://myprograms.persiangig.com/image/error_.JPG
نقل قول:
وست عزيز شما چرا مساله رو پيچيده ترش ميكنيد ، براي اينكه برنامتون كار بكنه كافيه در كد برنامه هر جا از کد:
a[i]
و امثال اون استفاده كرديد بجاش کد:
Ord(a[i])-48
و هر جا هم از کد:
temp
و امثال اون استفاده شده به جاش از کد:
Chr(temp)
استفاده كنيد !
واقعا شرمنده شمام
نقل قول: پاسکال: جمع دو عدد 20 رقمی
نقل قول:
نوشته شده توسط
sajjadrad
دوستان ممنون که بهم اهمیت میدین
فقط بهم بگین مشکل کجاست و راه حل شما چه کمکی میکنه..اینجوری گیج میشم.چون هدفم نوشتن برنامه نیست..هدف اینه که یه چیز یاد بگیرم...
ممنون از دوست عزیز دلفی..واقعا مزاحمت ایجاد کردم...
راستی کدی که گفتید رو اجرا کردم...بازم متاسفانه کار نمیکنه
واقعا شرمنده شمام
دوست عزيز به اين صورت بنويس :
البته من اين كد رو تو NotePad تايپ كردم اگه غلط دستوري داشت خودت اصلاحش كن .
program gold_digit;
uses crt;
var
a,b,c:array[1..100]of Char;
i,n,temp:integer;
begin
clrscr;
writeln;
textcolor(red);
writeln('Guide:');
textcolor(white);
writeln;
writeln('Enter 20 digit number #1:');
for i:=1 to 20 do
a[i]:= ReadKey;
readln;
writeln('Enter 20 digit number #2:');
for i:=1 to 20 do
b[i]:= ReadKey;
readln;
for i:=20 downto 1 do
begin
temp:=0;
temp:=(Ord(a[i])-48)+(Ord(b[i])-48);
if i=1 then
begin
c[i]:=Chr(temp);
break;
end;
if temp>9 then
begin
n:=temp mod 10;
c[i]:=Chr(n);
a[i-1]:=1+(Ord(a[i-1])-48);
end;
if temp<=9 then
c[i]:=Chr(temp);
end;
writeln;
write('Sum of two 20 digit numbers is= ');
for i:=1 to 20 do
write(c[i]);
writeln('Press Any Key To Exit...');
writeln;
readln;
end.
نقل قول: پاسکال: جمع دو عدد 20 رقمی
چرا اینجوری ننوشتید؟
C:Char;
c:=ReadKey;
a[i]:= Ord(C)-48;
دیگه لازم نیست تعریف آرایه رو بصورت Char بنویسید
نقل قول: پاسکال: جمع دو عدد 20 رقمی
سلام دوستان
واقعا ممنونم که کمکم کردید مخصوصا دوست عزیزم دلفی
نقل قول:
دوست عزيز به اين صورت بنويس :
البته من اين كد رو تو NotePad تايپ كردم اگه غلط دستوري داشت خودت اصلاحش كن .
واقعا ممنون چون رویه کارت باعث شد بتونم مساله رو حل کنم
برنامه شما در این قسمت:
نقل قول:
c[i]:=Chr(temp);
اضافی بود یعنی برای ریختن مقدار توی c[i] نیازی به تبدیل اون به کاراکتر نیست.و این کار برنامه رو فغلط میکنه.
در ضمن در قسمت:
نقل قول:
a[i-1]:=1+(Ord(a[i-1])-48);
بعد از اینکه یک واحد اضافه شد دوباره باید chr اون رو توی a[i-1] بریزیم.
در هر صورت کد کامل برنامه رو که دوستان عزیزم بهم کمک کردن بنویسم رو میزارم:
{Written By SAJJAD RAD}
program gold_digit_com2;
uses crt;
var
a,b:array[1..256]of char;
c:array[1..256]of integer;
i,n,temp,p:integer;
flog:boolean;
begin
clrscr;
textcolor(13);
writeln('This Program Is Written By SAJJAD RAD sajjad.273@gmail.com');
writeln('(c) 2009 Radtech Corporation.All Right Reserved.');
writeln('Sum Of Two X Digit(s) Numbers:Complete version');
textcolor(white);
writeln;
writeln;
textcolor(white);
writeln;
writeln('How Many Digits To Sum? Range 1~255');
readln(p);
writeln('Enter ',p,' digit(s) number #1:');
flog:=true;
for i:=1 to p do
begin
if flog=false then
break
else
a[i]:= ReadKey;
if ord(a[i])>57 then
flog:=false;
write(a[i]);
end;
writeln;
if flog=true then
writeln('Enter ',p,' digit(s) number #2:');
for i:=1 to p do
begin
if flog=false then
break
else
b[i]:= ReadKey;
write(b[i]);
end;
writeln;
for i:=p downto 1 do
begin
if flog=false then
break
else
temp:=0;
temp:=(ord(a[i])-48)+(ord(b[i])-48);
if i=1 then
begin
c[i]:=temp;
break;
end
else if temp>9 then
begin
n:=temp mod 10;
c[i]:=n;
a[i-1]:=chr(ord(a[i-1])-47);
end
else if temp<=9 then
c[i]:=temp;
end;
writeln;
if flog=false then
begin
textcolor(red);
writeln('Error! You didn''t enter digit of number');
textcolor(white);
end
else
begin
write('Sum of two ',p,' digit(s) numbers is= ');
for i:=1 to p do
write(c[i]);
end;
writeln;
writeln;
writeln('Press Any Key To Exit...');
writeln;
readln;
end.
این برنامه بجای 20 رقم قادر به جمع دو عدد n رقمی هست اما برای کمتر استفاده شدن حافظه نهایتا 255 رقم در نظر گرفتم.که به راحتی قابل تغییره
بازم از دلفی عزیز ممنونم
واقعا اگر راهنمایی های ایشون نبود این مساله حل نمیشد.
:بوس::بوس::بوس::بوس::بوس::بوس:: وس::بوس::بوس::بوس::بوس::بوس::ب س::بوس::بوس::بوس::بوس::بوس:
نقل قول: پاسکال: جمع دو عدد 20 رقمی
نقل قول: پاسکال: جمع دو عدد 20 رقمی
نقل قول:
نوشته شده توسط
sajjadrad
سلام دوستان
واقعا ممنونم که کمکم کردید مخصوصا دوست عزیزم دلفی
واقعا ممنون چون رویه کارت باعث شد بتونم مساله رو حل کنم
برنامه شما در این قسمت:
اضافی بود یعنی برای ریختن مقدار توی c[i] نیازی به تبدیل اون به کاراکتر نیست.و این کار برنامه رو فغلط میکنه.
در ضمن در قسمت:
بعد از اینکه یک واحد اضافه شد دوباره باید chr اون رو توی a[i-1] بریزیم.
در هر صورت کد کامل برنامه رو که دوستان عزیزم بهم کمک کردن بنویسم رو میزارم:
{Written By SAJJAD RAD}
program gold_digit_com2;
uses crt;
var
a,b:array[1..256]of char;
c:array[1..256]of integer;
i,n,temp,p:integer;
flog:boolean;
begin
clrscr;
textcolor(13);
writeln('This Program Is Written By SAJJAD RAD sajjad.273@gmail.com');
writeln('(c) 2009 Radtech Corporation.All Right Reserved.');
writeln('Sum Of Two X Digit(s) Numbers:Complete version');
textcolor(white);
writeln;
writeln;
textcolor(white);
writeln;
writeln('How Many Digits To Sum? Range 1~255');
readln(p);
writeln('Enter ',p,' digit(s) number #1:');
flog:=true;
for i:=1 to p do
begin
if flog=false then
break
else
a[i]:= ReadKey;
if ord(a[i])>57 then
flog:=false;
write(a[i]);
end;
writeln;
if flog=true then
writeln('Enter ',p,' digit(s) number #2:');
for i:=1 to p do
begin
if flog=false then
break
else
b[i]:= ReadKey;
write(b[i]);
end;
writeln;
for i:=p downto 1 do
begin
if flog=false then
break
else
temp:=0;
temp:=(ord(a[i])-48)+(ord(b[i])-48);
if i=1 then
begin
c[i]:=temp;
break;
end
else if temp>9 then
begin
n:=temp mod 10;
c[i]:=n;
a[i-1]:=chr(ord(a[i-1])-47);
end
else if temp<=9 then
c[i]:=temp;
end;
writeln;
if flog=false then
begin
textcolor(red);
writeln('Error! You didn''t enter digit of number');
textcolor(white);
end
else
begin
write('Sum of two ',p,' digit(s) numbers is= ');
for i:=1 to p do
write(c[i]);
end;
writeln;
writeln;
writeln('Press Any Key To Exit...');
writeln;
readln;
end.
این برنامه بجای 20 رقم قادر به جمع دو عدد n رقمی هست اما برای کمتر استفاده شدن حافظه نهایتا 255 رقم در نظر گرفتم.که به راحتی قابل تغییره
بازم از
دلفی عزیز ممنونم
واقعا اگر راهنمایی های ایشون نبود این مساله حل نمیشد.
:بوس::بوس::بوس::بوس::بوس::بوس:: وس::بوس::بوس::بوس::بوس::بوس::ب س::بوس::بوس::بوس::بوس::بوس:
دوست عزيز موقع كامپايل در ست كامپايل ميشه ولي موقع اجر ا خطاي زير رو مگيره
(خطاي تقسيم بر صفر)
ERROR 200 : Division by Zero
مشكل كجاست لطفا بررسي نماييد
با تشكر