PDA

View Full Version : مشکل در مبنای 16



Gold_cpp
یک شنبه 11 تیر 1391, 20:48 عصر
با سلام

این کد در مبنای 16 کار نمیکنه .
یه پروژه به زبان سی من نتونستم باگش رو بگیرم لطفا کمکم کنید :

#include<stdio.h>
#include<iostream.h>
#include<conio.h>
#include<stdlib.h>
int mabnaye16(int list[10]);
int mabnaye10(int list[10]);
int mabnaye8 (int list[10]);
int mabnaye2 (int list[10]);
int main()
{
int list[10],k=0;
char ch;
FILE *fp;
fp = fopen("C:\\Users\\Masoud\\Desktop\\text.txt", "r");
for (int i=0;i<10;i++)
fscanf(fp,"%d",&list[i]);
fclose(fp);
/* menu chap mishavad */
cout << "mabnaye 16 :(1)" << "\n";
cout << "mabnaye 10 :(2)" << "\n";
cout << "mabnaye 8 :(3)" << "\n";
cout << "mabnaye 2 :(4)" << "\n";
cout << "exit :(5)" << "\n";
cout << "ye character vared konid : ";
while(ch=getch())
{
if (ch=='1')
{
mabnaye16(list);
}else if(ch=='2')
{
mabnaye10(list);
}else if(ch=='3')
{
mabnaye8(list);
}else if(ch=='4')
{
mabnaye2(list);
}else if(ch=='5')
{
exit(1);
}
}
return 0;
}
int mabnaye2(int list[10])
{
int s,number,p,n ;
for (int i=0;i<10;i++)
{
p = 1;
n = 0;
number = list[i];
while (number !=0)
{
s = number % 2;
number = number / 2;
n = n + p * s;
p = p * 10;
}
n = n + number * p;
cout << "\n addade [" << list[i] << "] dar mabnaye 2 mishavad : " << n;
}

return 0;
}
int mabnaye8(int list[10])
{
int s,number,p,n ;
for (int i=0;i<10;i++)
{
p = 1;
n = 0;
number = list[i];
while (number !=0)
{
s = number % 8;
number = number / 8;
n = n + p * s;
p = p * 10;
}
n = n + number * p;
cout << "\n addade [" << list[i] << " ] dar mabnaye 8 mishavad : " << n;
}
return 0;
}
int mabnaye10(int list[10])
{
for (int i=0;i<10;i++){
cout << "\n addade [" << list[i] << " ] dar mabnaye 8 mishavad : " << list[i];
}
return 0;
}
int mabnaye16(int list[10]){
cout << "\n";
int number,index,s;
char arr[10];
for (int i=0;i<10;i++)
{
number = list[i];
for(index=0;number != 0;index++)
{
s = number % 16;
number = number / 16;
if (s==10)
arr[index]='A';
else if (s==11)
arr[index]='B';
else if (s==12)
arr[index]='C';
else if (s==13)
arr[index]='D';
else if (s==14)
arr[index]='E';
else if (s==15)
arr[index]='F';
else
arr[index]=s;//inja erad dare ta jayi ke man fahmidam :((
}
for (int j=index-1;j>=0;j--)
cout <<arr[j];
cout << "\n";
}
return 0;
}

Gold_cpp
دوشنبه 12 تیر 1391, 06:12 صبح
بذارید ساده تر بگم این کد رو میخوام اجرا کنم ولی موقع که میخواد برای مبنای 16 خروجی بگیرم ایراد داره و کدهای اسکی رو چاپ میکنه :

int mabnaye16(int list[10]){
cout << "\n";
int number,index,s;
char arr[10];
for (int i=0;i<10;i++)
{
number = list[i];
for(index=0;number != 0;index++)
{
s = number % 16;
number = number / 16;
if (s==10)
arr[index]='A';
else if (s==11)
arr[index]='B';
else if (s==12)
arr[index]='C';
else if (s==13)
arr[index]='D';
else if (s==14)
arr[index]='E';
else if (s==15)
arr[index]='F';
else
arr[index]=s;//inja erad dare ta jayi ke man fahmidam :((
}
for (int j=index-1;j>=0;j--)
cout <<arr[j];
cout << "\n";
}
return 0;
}

Ananas
دوشنبه 12 تیر 1391, 09:13 صبح
سلام.
کد اسکی اعداد 0 تا 9 از 48 تا 57 هست که شما باید از یک Offset برای تبدیل عدد به رشته استفاده کنی مثلا بنویسی :

arr[index] = s + '0';