PDA

View Full Version : راهنمایی در مورد ضرب دو آرایه



lockii
یک شنبه 26 خرداد 1392, 23:06 عصر
سلام.
دوستان من دو تا آرایه با طول m و n دارم قصد جمع و ضرب این دو آرایه رو دارم
مثلا 508 و 28425 واسه جمع این دو عدد باید عناصر آخر آرایه ها رو نظیر به نظیر جمع کنم اما مشکلم جمع این اعداد هست
من از دو حلقه for استفاده کردم اما نتیجه نداد
for(i=n;i<=0;i--)
for(j=m;j<=0;j--)
}
sum=num1[i]+num2[j];
if(sum>10)
}
num1[i-1]=num1[i-1]+1;
}
مشکل اینجاست خروجی صفر میشه!

(آرایه ها رشته نیستند)

77777778
دوشنبه 27 خرداد 1392, 09:42 صبح
اگه می خوای نظیر به نظیر عناصر آرایه ها جمع بشن باید حاصل جمع های عناصر رو داخل یه آرایه ذخیره کنی نه یک متغیر، (در صورتی می تونی روی یه متغیر ذخیره کنی که داخل همون حلقه ازش استفاده کنی درغیر اینصورت موقع اجرای بعدی حلقه مقدارش از بین می ره)

developing
دوشنبه 27 خرداد 1392, 09:57 صبح
با سلام

شما این دو تا عدد رو چه طوری از ورودی می خونی و چطوری در آرایه ذخیره می کنی؟
اگر عدد ها رو یک دفعه می خونی باید به روش زیر بریزیش توی آرایه.

i1 = i2 = 9;
for (; n1 > 0; n1 /= 10){
num1[i1] = n1 % 10;
i1--;
}
for (; n2 > 0; n2 /= 10){
num2[i2] = n2 % 10;
i2--;
}

و در کل برنامه به شکل زیر باید نوشته بشه.


int num1[10] = {0}, num2[10] = {0}, n, m;
int n1, n2, i1, i2;
int sum[10] = {0};
cout << "please enter two number" << endl;
cin >> n1 >> n2;
i1 = i2 = 9;
for (; n1 > 0; n1 /= 10){
num1[i1] = n1 % 10;
i1--;
}
for (; n2 > 0; n2 /= 10){
num2[i2] = n2 % 10;
i2--;
}
for (int i = 9; i > i1; i--) {
sum[i] += ((num1[i]+num2[i]) % 10);
sum[i-1] = ((num1[i]+num2[i]) / 10);
}
for (int i = 0; i < 10; i++) {
cout << sum[i];
}

lockii
دوشنبه 27 خرداد 1392, 10:20 صبح
با سلام

شما این دو تا عدد رو چه طوری از ورودی می خونی و چطوری در آرایه ذخیره می کنی؟
اگر عدد ها رو یک دفعه می خونی باید به روش زیر بریزیش توی آرایه.

i1 = i2 = 9;
for (; n1 > 0; n1 /= 10){
num1[i1] = n1 % 10;
i1--;
}
for (; n2 > 0; n2 /= 10){
num2[i2] = n2 % 10;
i2--;
}

و در کل برنامه به شکل زیر باید نوشته بشه.


int num1[10] = {0}, num2[10] = {0}, n, m;
int n1, n2, i1, i2;
int sum[10] = {0};
cout << "please enter two number" << endl;
cin >> n1 >> n2;
i1 = i2 = 9;
for (; n1 > 0; n1 /= 10){
num1[i1] = n1 % 10;
i1--;
}
for (; n2 > 0; n2 /= 10){
num2[i2] = n2 % 10;
i2--;
}
for (int i = 9; i > i1; i--) {
sum[i] += ((num1[i]+num2[i]) % 10);
sum[i-1] = ((num1[i]+num2[i]) / 10);
}
for (int i = 0; i < 10; i++) {
cout << sum[i];
}
سلام.
ممنون از پاسختون من دو عدد رو به این صورت می خونم :
http://up.vbiran.ir/uploads/137145042220331_0137141291921890_0c+.png
توی نوشتن حلقه های تکرار مشکل دارم

lockii
دوشنبه 27 خرداد 1392, 13:11 عصر
با سلام

شما این دو تا عدد رو چه طوری از ورودی می خونی و چطوری در آرایه ذخیره می کنی؟
اگر عدد ها رو یک دفعه می خونی باید به روش زیر بریزیش توی آرایه.

i1 = i2 = 9;
for (; n1 > 0; n1 /= 10){
num1[i1] = n1 % 10;
i1--;
}
for (; n2 > 0; n2 /= 10){
num2[i2] = n2 % 10;
i2--;
}

و در کل برنامه به شکل زیر باید نوشته بشه.


int num1[10] = {0}, num2[10] = {0}, n, m;
int n1, n2, i1, i2;
int sum[10] = {0};
cout << "please enter two number" << endl;
cin >> n1 >> n2;
i1 = i2 = 9;
for (; n1 > 0; n1 /= 10){
num1[i1] = n1 % 10;
i1--;
}
for (; n2 > 0; n2 /= 10){
num2[i2] = n2 % 10;
i2--;
}
for (int i = 9; i > i1; i--) {
sum[i] += ((num1[i]+num2[i]) % 10);
sum[i-1] = ((num1[i]+num2[i]) / 10);
}
for (int i = 0; i < 10; i++) {
cout << sum[i];
}
سلام.
الگو برداری از برنامه شما برنامه مورد نظر خودم رو نوشتم یک راهنمایی دیگه می خواستم برای اینکه بتونم ضرب رو هم بنویسم از همین حلقه ها الگو برداری کنم ؟
من حلقه for رو می نویسم اما متاسفانه فقط عدد اول رقم دوم رو در اعداد عدد اول ضرب می کنه و رقم آخر اگر بیشتر 10 باشه رو فقط یکانش رو نشون میده
این جمعی هست که من نوشتم:با این فرض که عدد اول برزگ و دوم کوچک باشد
http://up.vbiran.ir/uploads/137146196419398_0nn.png

developing
سه شنبه 28 خرداد 1392, 09:22 صبح
با سلام

ضرب هم همین هست با این تفاوت که ...
در ضرب دو حلقه به کار می رود. اولی برای پیمایش عدد پایینی و دومی برای پیمایش عدد بالایی. درست مثل ضرب کردن در کلاس پنجم
123
32*
-----
246
3690+
----
3916

اول 2 در تمام ارقام 123 ضرب می شود.
بعد 3 در تمام ارقام ضرب می گردد و ...

lockii
سه شنبه 28 خرداد 1392, 09:26 صبح
با سلام

ضرب هم همین هست با این تفاوت که ...
در ضرب دو حلقه به کار می رود. اولی برای پیمایش عدد پایینی و دومی برای پیمایش عدد بالایی. درست مثل ضرب کردن در کلاس پنجم
123
32*
-----
246
3690+
----
3916

اول 2 در تمام ارقام 123 ضرب می شود.
بعد 3 در تمام ارقام ضرب می گردد و ...

سلام.
یعنی 2 حلقه for رو اضافه می کنیم با روشی که شما گفتید و این دو دستور پایین به همین شکل اما فقط بین آنها ضرب تغییر کند درسته ؟
sum[i] += ((num1[i]+num2[i]) % 10)
sum[i-1] = ((num1[i]+num2[i]) / 10)

developing
سه شنبه 28 خرداد 1392, 09:32 صبح
باز هم سلام

چقدر سریع:متعجب:

تقریبا همین هست به غیر از اینکه در هر بار حرکت ارقام عدد پایینی به سمت چپ باید یک صفر سمت راست جمع بذاری
مثلا
1111
2222*
---
2222
22220
222200
2222000


می بینی رقم اول عدد پایینی هیچ صفری جلوش نداره
دومی یک صفر داره
سومی دو صفر و ...

lockii
سه شنبه 28 خرداد 1392, 09:38 صبح
باز هم سلام

چقدر سریع:متعجب:

تقریبا همین هست به غیر از اینکه در هر بار حرکت ارقام عدد پایینی به سمت چپ باید یک صفر سمت راست جمع بذاری
مثلا
1111
2222*
---
2222
22220
222200
2222000
22220000


می بینی رقم اول عدد پایینی هیچ صفری جلوش نداره
دومی یک صفر داره
سومی دو صفر و ...
:لبخندساده: والا سر این موضوع دو روزه خواب ندارم
ممنون از پاسختون انشالا بتونم بنویسمش
در مورد صفرا باید وقتی رفت رقم دوم یک صفر به خانه قبل جواب جمع حاصل جدید اضافه بشه و بعد حاصل در آرایه ذخیره سازی