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);
}
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.