PDA

View Full Version : مشکل با char



sa1378
پنج شنبه 08 آبان 1393, 09:19 صبح
سلام
یه سوالی داشتم
آیا میشه خروجی یه تابع char[] باشه؟
نمیخوام char* باشه چون از اونور نمیشه تبدیلش کرد به char[]
اگه میشه تبدیل کرد چجوری؟
کد من الان اینه که توش تابع mabna یه char* برمیگردونه ولی توی تابع calc نمیشه کستش کرد:
#include <iostream>
#include <stdlib.h>

using namespace std;


int tool(char xt[])//CORRECT
{
int p=0;
while(xt[p]!=0)
p++;
return p;
}

void prt(char xt[])//CORRECT
{
int p=0;
while(xt[p]!=0)
{
cout<<xt[p];
p++;
}
}

char* mabna(int a,int mab)//CORRECT
{
char xt[10];
itoa(a,xt,mab);
return xt;
}

bool mirror(char* xt)//CORRECT
{
int p=0;
int n=tool(xt);
for(int i=0;i<(n/2);i++)
if(xt[i]==xt[n-i-1])
p++;
if(p==(n/2))
return true;
return false;
}

void calc(int mab)
{
for(int i=1;i<=300;i++)
{
char p[10]={0},p2[10]={0};
p=char(mabna(i*i,mab));
p2=char(mabna(i*i,mab));
if( mirror(p2)==true )
{
prt(p);
cout<<" ";
prt(p2);
cout<<"\n";
}
}
}

int main() {
int mab;
char x[10];

cin>>mab;
calc(mab);


return 0;
}
راستی مسئله هم اینه که از اعداد 1 تا 300 عدد های که توان دومشون در مبنایی که داده شده آینه ای هست(از هر ور بخونی فرق نداره) رو چاپ کنه

rahnema1
پنج شنبه 08 آبان 1393, 12:17 عصر
سلام
نمی شه یک متغیر محلی را برگردوند
لازم نیست تابع چیزی برگردونه کافیه آرایه را به تابع بدید در ضمن وقتی itoa این کار را می کنه تابع mabna واسه چیه؟ همچنین itoa جزو استاندارد نیست ممکنه یک کامپایلر ازش پشتیبانی نکنه

void mabna(int a, int mab, char * xt)
{
itoa(a, xt, mab);
}

int main()
{
char mychar[18];
mabna(300 * 300 , 2, mychar)
puts(mychar);
}

sa1378
پنج شنبه 08 آبان 1393, 14:23 عصر
ممنون
کد درست شد ولی همونطور که گفتین سایت itoa رو قبول نکرد
خودم باید بشینم دستی کدشو بزنم

sa1378
پنج شنبه 08 آبان 1393, 14:41 عصر
خب کدم رو عوض کردم
ولی یجاش لازمه که باقیمانده تقسیم عدد بر مبنا رو توی کاراکتر بریزم
خب الان چجوری اینکارو انجام بدم؟؟
منظورم تبدیل عدد به کاراکتر هست

rahnema1
پنج شنبه 08 آبان 1393, 16:35 عصر
خب کدم رو عوض کردم
ولی یجاش لازمه که باقیمانده تقسیم عدد بر مبنا رو توی کاراکتر بریزم
خب الان چجوری اینکارو انجام بدم؟؟
منظورم تبدیل عدد به کاراکتر هست

با sprintf تبدیل می شه کرد

sa1378
پنج شنبه 08 آبان 1393, 17:45 عصر
با sprintf تبدیل می شه کرد
رفتم طرز کار این تابع رو دیدم ...چیز جالبی هست
ولی این تابع مقدار رو توی یه رشته میریزه
من میخوام یه عدد یه رقمی رو توی یه کاراکتر بریزم...
کدم هم این پایین گذاشتم...کاری که میخوام انجام بدم توی خط 53 هست:
/*
ID: sa.13781
PROG: palsquare
LANG: C++‎‎‎
*/
#include <iostream>
#include <fstream>
using namespace std;

ifstream fin("palsquare.in");
ofstream fout("palsquare.out");

int tool(char xt[])//CORRECT
{
int p=0;
while(xt[p]!=0)
p++;
return p;
}

void prt(char xt[])//CORRECT
{
int p=0;
while(xt[p]!=0)
{
cout<<xt[p];
p++;
}
}

void mabna(int a,char xt[],int mab)
{
int ex=1,tavan=0,rmn,n;
for(;ex<=a;ex*=mab)
tavan++;

for(int i=tavan-1;a!=0;i--,a/=mab)
{
rmn=a%mab;

switch(rmn)
{
case 0:
case 1:
case 2:
case 3:
case 4:
case 5:
case 6:
case 7:
case 8:
case 9:
n= sprintf(xt[i],"%d",rmn); //ERROR
break;
case 10:
xt[i]='A';
break;
case 11:
xt[i]='B';
break;
case 12:
xt[i]='C';
break;
case 13:
xt[i]='D';
break;
case 14:
xt[i]='E';
break;
case 15:
xt[i]='F';
break;
case 16:
xt[i]='G';
break;
case 17:
xt[i]='H';
break;
case 18:
xt[i]='I';
break;
case 19:
xt[i]='J';
break;
}
}
}

bool mirror(char* xt)//CORRECT
{
int p=0;
int n=tool(xt);
for(int i=0;i<(n/2);i++)
if(xt[i]==xt[n-i-1])
p++;
if(p==(n/2))
return true;
return false;
}

void calc(int mab) //CORRECT
{
for(int i=1;i<=300;i++)
{

char p[10]={0},p2[10]={0};
mabna(i*i,p2,mab);
if( mirror(p2)==true )
{
mabna(i,p,mab);
prt(p);
cout<<" ";
prt(p2);
cout<<"\n";
}
}
}

int main() {
int mab;
char x[10];
//mabna(31,x,16);
//cin>>mab;
//prt(x);
//calc(mab);


return 0;
}

a.r.khoshghalb
پنج شنبه 08 آبان 1393, 18:09 عصر
امیدوارم درست فهمیده باشم میخوای چکار کنی!
این رو امتحان کن :

int n = 4;
char c = n + '0'; //Be jaye '0' mituni az 48 ham estefade koni

sa1378
پنج شنبه 08 آبان 1393, 18:22 عصر
امیدوارم درست فهمیده باشم میخوای چکار کنی!
این رو امتحان کن :

int n = 4;
char c = n + '0'; //Be jaye '0' mituni az 48 ham estefade koni

خیلی ایده جالبی بود
منظورم همین بود
دست شما و دوست عزیز rahnema درد نکنه:تشویق:

sa1378
جمعه 09 آبان 1393, 15:24 عصر
من تازه رفتم تو سایت ثبتش کنم این ارور رو داده:
125133
من با همین ورودی 2 تست کردم جواب درست داده ارور هم نداده
کد هم اینه:
/*
ID: sa.13781
PROG: palsquare
LANG: C++‎‎‎
*/
#include <iostream>
#include <fstream>
using namespace std;

ifstream fin("palsquare.in");
ofstream fout("palsquare.out");

int tool(char xt[])//CORRECT
{
int p=0;
while(xt[p]!=0)
p++;
return p;
}

void prt(char xt[])//CORRECT
{
int p=0;
while(xt[p]!=0)
{
fout<<xt[p];
p++;
}
}

void mabna(int a,char xt[],int mab)
{
int ex=1,tavan=0,rmn,n;
for(;ex<=a;ex*=mab)
tavan++;

for(int i=tavan-1;a!=0;i--,a/=mab)
{
rmn=a%mab;

switch(rmn)
{
case 0:
case 1:
case 2:
case 3:
case 4:
case 5:
case 6:
case 7:
case 8:
case 9:
xt[i]= rmn+'0';
break;
case 10:
xt[i]='A';
break;
case 11:
xt[i]='B';
break;
case 12:
xt[i]='C';
break;
case 13:
xt[i]='D';
break;
case 14:
xt[i]='E';
break;
case 15:
xt[i]='F';
break;
case 16:
xt[i]='G';
break;
case 17:
xt[i]='H';
break;
case 18:
xt[i]='I';
break;
case 19:
xt[i]='J';
break;
}
}
}

bool mirror(char* xt)//CORRECT
{
int p=0;
int n=tool(xt);
for(int i=0;i<(n/2);i++)
if(xt[i]==xt[n-i-1])
p++;
if(p==(n/2))
return true;
return false;
}

void calc(int mab) //CORRECT
{
for(int i=1;i<=300;i++)
{

char p[10]={0},p2[10]={0};
mabna(i*i,p2,mab);
if( mirror(p2)==true )
{
mabna(i,p,mab);
prt(p);
fout<<" ";
prt(p2);
fout<<"\n";
}
}
}

int main() {
int mab;
char x[10];
//mabna(31,x,16);
fin>>mab;
//prt(x);
calc(mab);


return 0;
}

a.r.khoshghalb
جمعه 09 آبان 1393, 21:47 عصر
اروری که داده اینه که فایل اشتباهی رو باز کردی و ازش میخونی.
یه بار دیگه چک کن تو سوال همین فایلی که داری میخونی رو گفته ازش بخونی؟

sa1378
جمعه 09 آبان 1393, 22:06 عصر
اروری که داده اینه که فایل اشتباهی رو باز کردی و ازش میخونی.
یه بار دیگه چک کن تو سوال همین فایلی که داری میخونی رو گفته ازش بخونی؟

نه درسته
تازه اگرم اشتباه بود تست اول چجوری رد شده؟

sa1378
جمعه 09 آبان 1393, 22:36 عصر
اروری که داده اینه که فایل اشتباهی رو باز کردی و ازش میخونی.
یه بار دیگه چک کن تو سوال همین فایلی که داری میخونی رو گفته ازش بخونی؟

اینجا این ارور رو دیدم:
http://stackoverflow.com/questions/24898972/illegal-file-cannot-open-dev-tty-usaco-error
احتمالا باید در مورد همون کاراکتر باشه