PDA

View Full Version : Type Casting



__mahdi__
دوشنبه 12 دی 1390, 16:46 عصر
سلام
میخواستم 2تا عدد رو با استفاده از آرایه ها تو هم ضرب کنم..
وسطاش گیر کردم..
نمیدونم چرا و یا چطور cast باید کنم..
توی خط 34 تا 37..
a[] و b[] از جنس کاراکترند ولی میخوام محتویاتشو تو هم ضرب کنم..
تو این حالت اگه اشتباه نکنم * عملگر بایتی محسوب میشه..
ممنون میشم راهنماییم کنین ..
زبانش هم که C هست ...

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>

char a[20],b[20],s[100],t[100];
long int fs=0;
/*--------------------------------*/
int larr(char A[]){
int i=0;
do{
i++;
}while(A[i] != '\0');
return i - 1;
}
/*--------------------------------*/
int main()
{
long int i=0,j=0;
int la=0,lb=0;

printf("Enter Number1: ");
scanf("%s", &a);
la = larr(a); // Ubound Of Array will save into la variable
printf("Enter Number2: ");
scanf("%s", &b);
lb = larr(b); // Ubound Of Array will save into lb variable


int m=0,n=0,p=0;
for(i=lb;i != -1;i--){
for(j=la;j != -1;j--){
n = (int)b[i];
p = (int)a[j];
m = (int)n * (int)p;
printf("%c * %c = %d\n",b[i],a[j],m);
}
}

getch();
return 0;
}

خروجی :


Enter Number1: 9999
Enter Number2: 54
4 * 9 = 2964
4 * 9 = 2964
4 * 9 = 2964
4 * 9 = 2964
5 * 9 = 3021
5 * 9 = 3021
5 * 9 = 3021
5 * 9 = 3021

__mahdi__
دوشنبه 12 دی 1390, 18:27 عصر
مرسی ممنون از جوابت..

با استفاده از آرایه ها میخوام آخه..

استادمونمو این unsigned رو نگفته بود :D

اولین بار بود %u میدیدم..
ممنون بابتش :D

میتونی کمکم کنی روش ؟

چطوری محتویات مثلا b[0] رو ضرب در a[2] کنم ؟
a , b دوتا آرایه از جنس کاراکترند..

همم؟ :متفکر:

shahmohammadi
دوشنبه 12 دی 1390, 20:05 عصر
سلام.

هر وقت خواستی عددی رو که به صورت رشته ذخیره شده رو به Integer تبدیل کنی ، از تابع atoi میتونی استفاده کنی.
تابع شما عدد رو توی یه متغیر ذخیره می کنه.
وقتی که آرایه مون 20 کاراکتر داره، یعنی حداکثر با اعداد 20 رقمی کار می کنیم. این اعداد رو هم که نمی تونیم تو هیچ متغیری ذخیره کنیم.
بنابر این باید ضرب رو رقم به رقم انجام بدیم، (یعنی همون طوری که توی کاغذ ضرب می کنیم).

__mahdi__
دوشنبه 12 دی 1390, 20:16 عصر
این تابع رو پیدا کرده بودم ولی نمیتونستم استفاده کنم ازش توی آرایه , دیدم شما هم این 2تا متغیر رو به صورت آرایه تعریف کردینا..
ولی نتونستم مثلا اینجوری استفاده کنم ازش :

atoi(numberOne[i])*atoi(numberTwo[j])


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

int aa=0,bb=0;
for(i=lb;i != -1;i--){
for(j=la;j != -1;j--){
aa=(int)b[i] - 48;
bb=(int)a[j] - 48;
printf("%c * %c = %d\n",b[i],a[j],aa * bb);
}
}

مهم اینه که aa و bb از جنس int باشن..

ممنون از -7 عزیز @};-

__mahdi__
سه شنبه 13 دی 1390, 13:39 عصر
بازم سلام
دو تا آرایه به اسم های t و s داریم...به این صورت :


+---+---+---+---+---+---+---+---+
t = | 1 | 8 | 6 | 4 | 2 |\0 | 0 |...|
+---+---+---+---+---+---+---+---+
+---+---+---+---+---+---+---+---+---+---+---+---+
s = |...|...|...| 0 | 0 | 0 |\0 | 1 | 8 | 6 | 4 | 2 |
+---+---+---+---+---+---+---+---+---+---+---+---+


اولش s همش صفر بود...

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

s[rlen - 1] = s[rlen - 1] + t[lt - 1] + dahgan;
s[rlen - 2] = s[rlen - 2] + t[lt - 1] + dahgan;
s[rlen - 3] = s[rlen - 3] + t[lt - 2] + dahgan;
s[rlen - 4] = s[rlen - 4] + t[lt - 3] + dahgan;
.
.
.


rlen طول s
lt طول t
dahgan هم دهگان مجموع مقدار قبلی
s + t[lt - x]
هست.
توابعی به این صورت نوشتم :

char regt(char A[],int lt,int k){
if(A[lt - k] == '\0') return 0;
return A[lt - k];
}

void SumTtoS(){
int k=0,ps=0,lt=0;
lt=larr(t);
printf("lt=%d\n", lt);
do{
printf("s[%d] = (s[%d]{%d} + regt(t,%d,%d){%d} + %d) mod 10;\n", rlen - k - 1,rlen - k - 1,s[rlen - k - 1],lt,k,regt(t,lt,k),ps);
printf(" ps = (s[%d]{%d} + regt(t,%d,%d){%d} + %d) / 10;\n",rlen - k - 1,s[rlen - k - 1],lt,k,regt(t,lt,k),ps);
printf("--------------------------------------\n");
s[rlen - k - 1] = (s[rlen - k - 1] + regt(t,lt,k) + ps) % 10;
ps = (s[rlen - k - 1] + regt(t,lt,k) + ps) / 10;
k++;
}while(t[k] != '\0');
if(ps != 0) s[rlen - k - 1] = ps;

}

برای مثال عدد های 9321 و 92 برای ضرب توی هم در برنامه وارد شده اند:


Enter Number1: 9321
Enter Number2: 92

lt=4
s[99] = (s[99]{0} + regt(t,4,0){1} + 0) mod 10;
ps = (s[99]{0} + regt(t,4,0){1} + 0) / 10;
--------------------------------------
s[98] = (s[98]{0} + regt(t,4,1){8} + 0) mod 10;
ps = (s[98]{0} + regt(t,4,1){8} + 0) / 10;
--------------------------------------
s[97] = (s[97]{0} + regt(t,4,2){6} + 1) mod 10;
ps = (s[97]{0} + regt(t,4,2){6} + 1) / 10;
--------------------------------------
s[96] = (s[96]{0} + regt(t,4,3){4} + 1) mod 10;
ps = (s[96]{0} + regt(t,4,3){4} + 1) / 10;
--------------------------------------
s[95] = (s[95]{0} + regt(t,4,4){2} + 1) mod 10;
ps = (s[95]{0} + regt(t,4,4){2} + 1) / 10;
--------------------------------------
t[0]=2 - s[99]=1
t[1]=4 - s[98]=8
t[2]=6 - s[97]=7
t[3]=8 - s[96]=5
t[4]=1 - s[95]=3
t[5]=0 - s[94]=0
t[6]=0 - s[93]=0
t[7]=0 - s[92]=0
t[8]=0 - s[91]=0
t[9]=0 - s[90]=0

lt=5
s[99] = (s[99]{1} + regt(t,5,0){8} + 0) mod 10;
ps = (s[99]{1} + regt(t,5,0){8} + 0) / 10;
--------------------------------------
s[98] = (s[98]{8} + regt(t,5,1){3} + 1) mod 10;
ps = (s[98]{8} + regt(t,5,1){3} + 1) / 10;
--------------------------------------
s[97] = (s[97]{7} + regt(t,5,2){8} + 0) mod 10;
ps = (s[97]{7} + regt(t,5,2){8} + 0) / 10;
--------------------------------------
s[96] = (s[96]{5} + regt(t,5,3){8} + 1) mod 10;
ps = (s[96]{5} + regt(t,5,3){8} + 1) / 10;
--------------------------------------
s[95] = (s[95]{3} + regt(t,5,4){9} + 1) mod 10;
ps = (s[95]{3} + regt(t,5,4){9} + 1) / 10;
--------------------------------------
s[94] = (s[94]{0} + regt(t,5,5){0} + 1) mod 10;
ps = (s[94]{0} + regt(t,5,5){0} + 1) / 10;
--------------------------------------
t[0]=0 - s[99]=9
t[1]=9 - s[98]=2
t[2]=8 - s[97]=5
t[3]=8 - s[96]=4
t[4]=3 - s[95]=3
t[5]=8 - s[94]=1
t[6]=0 - s[93]=0
t[7]=0 - s[92]=0
t[8]=0 - s[91]=0
t[9]=0 - s[90]=0

خب قاعدتا توی خروجی..s[99,98,97,96,95] به ترتیب باید 1,8,6,4,2 بشه دیگه !؟
چرا 1,8,7,5,3 میشه !؟


s[98] = (s[98]{0} + regt(t,4,1){8} + 0) mod 10
ps = (s[98]{0} + regt(t,4,1){8} + 0) / 10;
--------------------------------------
s[97] = (s[97]{0} + regt(t,4,2){6} + 1) mod 10
ps = (s[97]{0} + regt(t,4,2){6} + 1) / 10;
--------------------------------------


مگه (s[98]{0} + regt(t,4,1){8} + 0) / 10; مقدارش یک میشه آخه !؟
(0 + 8 + 0) / 10 = 0 مگه نمیشه !؟ :D

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