PDA

نسخه کامل مشاهده نسخه کامل : چه جوری می شه تو زبان ++c متغیرس مثلا 1000 رقمی تعریف کرد



mostafa_aa
02-03-2006, 15:33
با سلام
می خواستم یه کمکی به من بکنید
چه جوری می شه تو زبان ++c متغیرس بسیار بزرگ مثلا 1000 رقمی تعریف کرد و با یه عدد بزرگ دیگه جمع کرد ،تفریق کرد و ازهمه مهمتر ضرب وتقسیم کرد
ممنون

Bad.Sector
05-03-2006, 01:27
با آرايه ها فكر ميكنم بشه يه كارايي كرد. دو رشته با طول 1001 و يه آرايه هم براي نتيجه (طول آرايه سه بايد نسبي خودت حساب كني)
براي جمع و تفريق و غيره هم بايد براي هر عملگر يه الگوريتم مثل اونايي كه دبستان ياد گرفتيم درست بشه
مثلا جمع كردن ايجوري بود. :biggrin:


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

mostafa_aa
05-03-2006, 11:22
سلام جناب بد سکتور

آخه قربون تو برم اگه به همین راحتیا بود که وقت انجمن را نمی گرفتم

مگه نمی دونی آرایه هارو نمی تونیم با هم جمع کنیم پس باید دونه دونه اعدادو بکشیم بیرون جمع کنیم تازه باید آرایه سوم رو جوری تعریف کنیم که اگه یه رقم آخر کار بیشتر شد قبول کنه از طرفی طول آرایه باید معلوم باشه ....

فک کنم تا همینجا قانع شده باشی که به همین راحتیا هم نیست
خوشحال می شم اگه نظر دیگه ای هم داری به من بگی

مرسی

Bad.Sector
05-03-2006, 15:11
سلام جناب بد سکتور

آخه قربون تو برم اگه به همین راحتیا بود که وقت انجمن را نمی گرفتم

مگه نمی دونی آرایه هارو نمی تونیم با هم جمع کنیم پس باید دونه دونه اعدادو بکشیم بیرون جمع کنیم تازه باید آرایه سوم رو جوری تعریف کنیم که اگه یه رقم آخر کار بیشتر شد قبول کنه از طرفی طول آرایه باید معلوم باشه ....

فک کنم تا همینجا قانع شده باشی که به همین راحتیا هم نیست
خوشحال می شم اگه نظر دیگه ای هم داری به من بگی

مرسی

بله ميدونم كار مشكلي هست.و چون خودم زياد به c مسلط نيستم فقط يه پيشنهاد حد خودم دادم. ولي شدنيه



مگه نمی دونی آرایه هارو نمی تونیم با هم جمع کنیم پس باید دونه دونه اعدادو بکشیم بیرون جمع کنیم

منظورم هم دقيقا همينه يعني دونه دونه رقم ها رو بيرون بكشيم و اعمال رو نسبت به هر عمرگرد جمع و تفريق و ...
محاسبه كنيم و نتيجه رو مستقيم در آرايه سوم قرار بديم. و بعد بريم سراق رقم بعد. آرايه سوم هم مثلا 10 هزار تا بگيرد.
چون شما داري برنامه رو مي نويسي نه ماشين پس بايد حدس بزني رقم تا چه حد ممكنه بزرگ بشه.



فک کنم تا همینجا قانع شده باشی که به همین راحتیا هم نیست

به نظر من برنامه‌اي كه ساختنش راحته و بشه حتي ذهني ساختش اصلا صرف نمي كنه روش وقت بزاري و بنويسيش

hamidreza_buddy
05-03-2006, 15:13
سلام
ببینید همونجوری که دوستمون گفتند باید از آرایه استفاده کنی.
بااید همونجوری که خودت جمع رو رو کاغذ انجام می دی الگوریتمشو پیاده سازی کنی.

مثلا واسه جمع کردن باید ابتدا دو رقم اول اعداد رو با هم جمع کنیم. اگر بزرگتر از 10 بود به جمع ارقام بعدی یک یک اضافه کنی.

1256
4379

9+6 پانزده می شود . پس یکان عدد حاصل 5 است. حال به جمع در رقم بعدی( 5 و 6) یک اضافه می کنیم. که 12 می شود. صدگان را 2 می گذاریم و به مجموع دو رقم بعدی یک اضافه می کنیم.....

بقیه اپراتورها ( - * / ) هم مانند این پیاده سازی می شوند. دقیقا همونجوری که خودت این کار رو انجام می دی.

mostafa_aa
06-03-2006, 16:49
سلام بچه ها

ممنون از شما دوستانی که کمک کردید

حالا اگه می شه بگید که چه جوری یه آرایه 1000000 رقمی تعریف کرد ؟

بازم ممنون می شم

مخلص .

Bad.Sector
06-03-2006, 18:43
اينجوري


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

كه string هم هر اسمي بجز اسمهاي كليدي مي تونه باشه.

هدیه
06-03-2006, 20:26
اينجوري


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

كه string هم هر اسمي بجز اسمهاي كليدي مي تونه باشه.

سلام من فكر مي كنم اينجوري كامپايلر error مي ده چون نميشه آرايه بزرگتر از 255 تعريف كرد من فكر مي كنم بايد يا آرايه اي از آرايه ها تعريف كنيد يا آرايه چند بعدي باشه.
منظورم از آرايه اي از آرايه ها اينه كه مثلا بنويسيم
typedef int reshteh[255];
داخل برنامه آرايه اي از اين نوع مي نويسيم تازه نمي دونم بشه براي اين عدد خيلي بزرگ كه شما گفتين اين كار رو كرد اما دوبعدي فكر كنم بهتر باشه.

mostafa_aa
06-03-2006, 20:36
سلام
ممنونم ، مشکل حل شد

man_of_ice_city
16-11-2006, 02:47
بهتره كه چنين مبحث هايي, در مكانهايي كه مربوط به "ساختمان داده ها" باشه مطرح بشه. فكر نكنم چنين مشكلاتي به زبان برنامه نويسي برگرده.

mehdidll
26-12-2006, 01:12
سلام دوستان
اه امکانش هست سورس جمع و ضرب دو عدد 20 رقمی رو بزارین
بهش خیلی نیاز دارم
ممنونم.

mohammad reza r
31-12-2006, 20:09
سلام.خوبي.
اگه اون جواب 10000 رقمي رو بدست اوردي.
يه كپي به ميلم بفرست.چون خيلي احتياج دارم.
ممنون
pooria_mrr@yahoo.com

گلبن مستور
10-02-2007, 13:15
سلام
اگر دانشجوي كامپيوتر باشيد به ياد داري كه در طراحي الگوريتم ها براي اعداد بسيار بزرگي كه در موقع جمع كردن سرريز مي شوند و يا اعدادي كه بسيار بزرگند متغيير هايي تعريف مي كرديم واعداد شكسته شده را در آن مي ريختيم و اين كار شكستن را انقدر ادامه مي داديم كه ديگر نيازي به شكستن نباشد وبعد مرتبا انها را باهم جمع مي كنيم و در يكي از متغيير ها مي ريزيم تا نهايتا عدد نهايي ساخته شود

اميدوارم فهميده باشيد

MXBABAK
09-03-2007, 21:53
سلام به همگي
اين سوال رو من نوشتم البته ضربشو و با آرايه ولي متاسفانه تا 20 رقم

MXBABAK
09-03-2007, 21:55
#include<iostream.h>
#include<conio.h>
void main(void)
{
l:
int a[10],b[10],c[20],i,j,k,temp=0,bagi=0,temp1=0,sefr=0,key=0;
char ch;
cout<<"----------------------------------START------------------------------------------";
cout<<endl;
for (i=0;i<10;i++)
{
cout<<"Please Enter The Frist Number "<<i<<"=";
cin>>a[i];
}
for (i=0;i<10;i++)
{
cout<<"Please Enter The Second Number "<<i<<"=";
cin>>b[i];
}
for (i=0;i<20;i++)
c[i]=0;

for (i=9;i>=0;--i)
{
temp=0;
bagi=0;
temp1=0;
for (j=9;j>=0;--j)
{
k=b[i]*a[j]+temp;
temp=k / 10;
bagi=k % 10;
c[(j-sefr)+10]=c[(j-sefr)+10]+bagi+temp1;
temp1=c[(j-sefr+10)]/10;
c[(j-sefr)+10]=c[(j-sefr)+10]%10;
if (j==0)
{
c[(j-sefr)+9]=temp;
c[(j-sefr)+9]=c[(j-sefr)+9]+temp1;
}

}
++sefr;
}
cout<<endl;
cout<<endl;
cout<<endl;
cout<<"Result: ";
for (i=0;i<10;i++)
{
cout<<a[i];
}
cout<<" * ";
for (i=0;i<10;i++)
{
cout<<b[i];
}
cout<<" = ";
for (i=0;i<20;i++)
{
cout<<c[i];
}
cout<<endl;
cout<<endl;
cout<<endl;
cout<<endl;
cout<<endl;
cout<<"Press 1 & Enter To Cuntinue Press Any Key & Enter For Exit...";
cin>>key;
if (key==1)
goto l;
}

MXBABAK
09-03-2007, 21:57
يه الگوريتم ساده
كه ابتدا دو تا عدد ده رقمي رو مي گيره وداخل آرايه قرار مي ده و سپس از آخر به همان روش ضرب ابتدايي با هم ضرب مي كنه و اگر عدد بزرگتر از 10 شد با قي مونده اونو حساب كرده و سپس خارج قسمت رو بدست آورده و به خانه ي بعدي اضافه مي كنه به همين سادگي
عمرا اگه فهميده باشي

bad_boy_2007
11-03-2007, 10:47
سلام
واسه این کار از پشته پیوندی باید استفاده کنی (البته همونطور که دوستان هم گفتن از آرایه میتونی استفاده کنی ولی این کار بهیچ وجه توصیه نمیشه و از لحاظ مهندسی نرم افزار هم یک کار اشتباهه)

برای شروع کافیه 2 تا پشته ایجاد کنی (اعضای پشته byte ) توابع حذف و اضافه node رو بنویسی (بصورت پیوندی) و در نهایت در زمان اجرا با فشردن هر کاراکتر یکی به پشته ات اضافه کنه(در صورتی که ورودی قابل قبول باشه) و با فشرن هربار کلید بک اسپیس (کاراکتر 8 ) یک گره حذف کنه ، در نهایت یه پشته پر داری ولی یه مشکل هست اگه بخوای نمایشش بدی رشته رو معکوس نمایش میده اگه نخوای خیلی وقتت گرفته بشه کافیه STACK رو معکوس کنی و نمایشش بدی ولی اگه هدفت جمع یا تفریقه پیش از اینکه پشته رو معکوس کنی عمل جمع یا تفریق رو به راحتی میتونی انجام بدی و در نهایت پشته رو معکوس کنی .

چند ترم پیش یه برنامه عدد 60 رقمی واسه یکی از بچه ها نوشته بودم اگه پیداش کردم واست میزارم کمکت میکنه

sia0368
29-12-2008, 17:51
کسی الگوریتم تفریق را با استفاده از رقم نقلی و آرایه بلده؟
من یه برنامه ای نوشتم ولی درست کار نمیکنه؟اگه با تصحیح همین برنامه الگوریتم تفریق درست کار کنه ممنون میشم چون میتونم راحت بفهمم چی به چیه؟
#include <conio.h>
#include <stdio.h>
#include <string.h>
main()
{
char num1[50],num2[50],javab[50],help[50];
int i,j,carry=0,r,x11,x22,k=0,sw=0,sz=1;
clrscr();
gets(num1);
gets(num2);
if (strlen(num1)<strlen(num2))
{
strcpy(help,num1);
strcpy(num1,num2);
strcpy(num2,help);
sz=-1;
}
else if (strlen(num1)==strlen(num2))
{
if (num1[0]<num2[0])
{
strcpy(help,num1);
strcpy(num1,num2);
strcpy(num2,help);
sz=-1;
}
}
i=strlen(num1)-1;
j=strlen(num2)-1;
for(;i>=0||j>=0;i--,j--)
{
if(i>=0)
{
x11=num1[i]-48;
if(sw==1)
{
x11=num1[i]-49;
sw=0;
}
}
else
x11=0;
if(j>=0)
x22=num2[i]-48;
else
x22=0;
if (x11<x22)
{
x11=x11+10;
r=x11-x22+carry;
sw=1;
}
else
r=x11-x22+carry;
javab[k++]=(r%10)+48;
carry=r/10;
}//end for
javab[k]='\0';
strrev(javab);
if (sz==-1)
printf ("result is:-%s",javab);
else
printf("result is:%s",javab);
getch();
}//end main

mahdi7s
29-12-2008, 18:09
كد زيرو ببين
مشكلي داشتي بپرس

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

sia0368
04-01-2009, 19:51
بالاخره برنامه تفریق دو رشته رو تقریبا کامل نوشتم
#include <conio.h>
#include <stdio.h>
#include <string.h>
main()
{
char num1[50],num2[50],javab[50],help[50];
int i,j,carry=0,r,x11,x22,sw=0,k=0,sz=1;
clrscr();
gets(num1);
gets(num2);
if (strlen(num1)<strlen(num2))
{
strcpy(help,num1);
strcpy(num1,num2);
strcpy(num2,help);
sz=-1;
}
i=strlen(num1)-1;
j=strlen(num2)-1;
for(;i>=0||j>=0;i--,j--)
{
if(i>=0)
x11=num1[i]-48;
else
x11=0;
if(j>=0)
x22=num2[j]-48;
else
x22=0;
if (sw==1)
if (x11<x22)
{
x11=x11+9;
r=x11-x22+carry;
}
else if (x11>x22)
{
x11=x11-1;
r=x11-x22+carry;
sw=0;
}
else //x11==x22
{
x11=x11+9;
r=x11-x22+carry;
}
if (sw==0)
if (x11<x22)
{
x11=x11+10;
r=x11-x22+carry;
sw=1;
}
else //x11>x22
r=x11-x22+carry;
javab[k++]=(r%10)+48;
carry=r/10;
}//end for
javab[k]='\0';
strrev(javab);
if (sz==-1)
printf ("-%s",javab);
else
printf("%s",javab);
getch();
}//end main