ورود

View Full Version : تبدیل عدد مبنای ۲ به مبنای ۱۰ بدون استفاده از توابع و با استفاده از دستورات اولیه



mobtadi1
سه شنبه 01 تیر 1395, 18:19 عصر
سلام
کد زیر رو برای تبدیل عدد مبنای ۲ به ۱۰ نوشتم، اما جواب گاهی درست و گاهی غلط هست، بسته به عدد.
آیا می‌شه فقط با استفاده از for, while, if و عملگرهای اولیه، و بدون استفاده از تابع pow یا توابع دیگه و یا مقدارهایی که از طریق return بازگشت داده می‌شه، تبدیل رو انجام داد؟ چون هنوز چیزی در مورد توابع و مقدار بازگشتی نمی‌دونم.

int yes=1,i=0,j=0,r=0,step1=0,x,b;
scanf("%d",&x);
while(yes){
step1=x%10;
for(j=i,b=i;j>0;j--)
r=r+(step1*b);
if(i==0&&step1==1)
r=1;
x=x/10;
if(x==0)
yes=0;
i++;
}
printf("%d\n",r);
return 0;

ASM6502
چهارشنبه 02 تیر 1395, 18:27 عصر
ببین خوبه :

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

int main ()
{
int n;
scanf("%d", &n);

int* a = (int*) malloc (n); /* araye be tedade argham */

int temp=n;
int len=0;
while (temp!=0)
{
a[len] = temp % 10; /* joda sazi argham */
temp = temp / 10;
len++; /* tedade argham */
}

int sum=0;
for (int i=0 ; i<len ; i++)
{
int tavan = 1;
for (int j=0 ; j<i ; j++)
tavan = tavan * 2; /* vazne argham */

sum = sum + (a[i]*tavan); /* adade dah dahi */
}

printf("%d \n", sum);
return 0;
}

mobtadi1
چهارشنبه 02 تیر 1395, 23:47 عصر
مرسی؛ من هنوز آرایه نمیدونم چیه و *i هم! به همین دلیل کد بالا رو متوجه نمی‌شم.
منظورم از این سوال، فقط با استفاده از عملگرها و دستورات while, for و if هست.

ASM6502
پنج شنبه 03 تیر 1395, 08:57 صبح
دیگه فکر نمیکنم بشه از این ساده تر نوشت :


#include <stdio.h>

void main ()
{
int bin, i, dig, vazn, tavan, dec=0;
scanf("%d", &bin); /* daryaft adade binary*/

for (i=0 ; 0<bin ; i++)
{
dig = bin % 10; /* joda sazi ragham */
bin = bin / 10;

vazn = 1;
for (tavan=0 ; tavan<i ; tavan++)
vazn = vazn * 2; /* vazne ragham */

dec = dec + (dig*vazn); /* adade decimal */
}

printf("%d \n", dec); /* chape adade decimal*/
}

mobtadi1
پنج شنبه 03 تیر 1395, 09:52 صبح
عالی بود. منظورم همین بود.

1-9-7-2
پنج شنبه 03 تیر 1395, 14:49 عصر
#include <stdlib.h>
#include <stdio.h>

#define MAXBUF (64+1)

int isbin (char*); /* (OPTIONAL) */

int main () {
char bin[MAXBUF]="11111111111111111111111111111111";
long int i; unsigned long int p, dec=0;

while (bin[++i] != '\0');

for (p=1; bin[--i] != '\0'; p*=2)
if (bin[i] == '1')
dec+=p;
printf ("Decimal value of [%s] is (%lu)\n", bin, dec);
return (EXIT_SUCCESS);
}

int isbin (char *bin) { /*binary check function*/
for (; *bin; *bin++)
if (*bin != '1' && *bin != '0')
return (0);
return (1);
}