PDA

View Full Version : سوال: يافتن بزرگترين و كوچكترين با استفاده از كد اسكي



ميثم طاهري
پنج شنبه 12 دی 1387, 15:30 عصر
سلام.ميشه راهنمايي كنيد با استفاده از كد اسكي در يك رشته بزرگترين و كوچكترين حرف رو چگونه پيدا كنم.يعني از چه تابعي بايد استفاده كنم

SamaPic
جمعه 13 دی 1387, 09:36 صبح
با سلام خدمت دوست عزيز.
شما ابتدا با مساوي قرار دادن مقدار كاراكتر را بدست آوريد و سپس مانند معمول محاسبه نماييد.



char ch;
for (i=32;i<52;i++)
{
ch=x;
cout<<endl<<ch;
}


عدد هاش رو يكم عوض كنيد درست مي شه.(البته در بازه ي 1 تا فكر كنم 120 .ولي كار شما با همين اعداد فكر كنم راه مي افتد.
اميد وارم متوجه شده باشيد اگر متوجه نشديد سوال كنيد.
خدانگهدار.

Saeed_m_Farid
جمعه 13 دی 1387, 14:49 عصر
سلام
در واقع هر عضو رشته شما همين مقدار اسكي رو تو خودش نگه ميداره ولي به شما كاراكتر رو نشون ميده و شما براي ديدن مقدارش كافيه قبلش تبديلش كنين به int :
در اين قطعه كد سعي شده موارد زير رعايت بشه:

1- چند تا از type casting ها رو گذاشتم تا با نحوه كاربردشون بيشتر آشنا بشيد.
2- فقط حروف تو شرط حلقه شركت ميكنن.
3- كوچك و بزرگ بودن حروف دخالت داده شده (case sensivity).
4- ترتيب انجام كارها در خروجي كنسول جهت ديدن روال كاري نمايش داده شده.
5- كاراكتر اصلي و كد اسكي اش تو نتيجه نهايي نمايش داده شدن.

خوشحال ميشم كه دوستان به برنامه دقت كنند و نظر بدن و حتما اگه مشكلي توش پيدا كردن از تذكر دادنش ممنون ميشم


//---------------------------------------------------------------------------

#include <iostream.h>
#include <conio.h>

//---------------------------------------------------------------------------

int main()
{
char *inputStr = (char *) AllocMem(512); // Max Input set to 512
char cMax='\0', cMin='\0';
cout<<"\nEnter STR> ";
cin>>inputStr;
cMin = cMax = inputStr[0];
int iMaxPosition = 1,
iMinPosition = 1,
iASCIIMax = ((int)inputStr[0]<97?(int)inputStr[0]:(int)inputStr[0]-32),
iASCIIMin = iASCIIMax,
iTemp = iASCIIMin;

printf("\n 1) Cur: %c, Min: %c, Max: %c",
static_cast<char>(iTemp),
static_cast<char>(iASCIIMin),
static_cast<char>(iASCIIMax)
);

for (unsigned int i=1; i<strlen(inputStr); i++)
{
iTemp = (int)inputStr[i];
if ( ((iTemp>=65) && (iTemp<=88))
||((iTemp>=97) && (iTemp<=120))) // Check 4 ASCII Code
{
if ((inputStr[i]>=97) && (inputStr[i]<=120)) // Convert to Uppercase
iTemp -= 32;

if (iTemp <= iASCIIMin)
{
iMinPosition = i+1;
cMin = inputStr[i];
iASCIIMin = iTemp;
}

if (iTemp >= iASCIIMax)
{
iMaxPosition = i+1;
cMax = inputStr[i];
iASCIIMax = iTemp;
}
printf("\n%2d) Cur: %c, Min: %c, Max: %c", i+1,
static_cast<char>(iTemp),
static_cast<char>(iASCIIMin),
static_cast<char>(iASCIIMax)
);
}
}
printf("\n================\nMax in [%d] = %c:%d ,Min in [%d] = %c:%d ",
iMaxPosition,
cMax,
(int)cMax,
iMinPosition,
cMin,
(int)cMin);
getch();
free(inputStr);
return 0;
}
//---------------------------------------------------------------------------
با تشكر.

ميثم طاهري
شنبه 14 دی 1387, 21:54 عصر
#include<string.h>
#include<conio.h>
#include<stdlib.h>
#include<stdio.h>
#include<math.h>
int main()
{int i,j,de,min,max,l,lop,jik,a[8],k=0,n;
char s[8];
clrscr();
printf("enter a string:",s);
scanf("%s",&s);
strupr(s);
max=min=s[0];
for(i=0;i<8;i++)
{if(s[i]<min)
min=s[i];
if(s[i]>max)
max=s[i];
}
printf("max=%c,min=%c",max,min);
de=((max-min)+1);
printf("\nmax-min:%d\n",de);
for(l=0;l<=5;l++)
if(pow(2,l)>de)
break;
lop=l;
printf("\ndiffer=%2d",lop);
for(s[i=0];s[i]<=s[8];s[i++])
s[i]-min==jik;
printf("\njik=%d\n",jik);
do
{
a[k]=n%2;
n=n/2;
k=k+1;;
}while(n>=2);
a[k]=n;
for(i=k;i>=0;i--)
{
printf("%d",a[i]);
}
getch();
}

Saeed_m_Farid
یک شنبه 15 دی 1387, 00:14 صبح
آقا ميثم اولين قدم واسه رسيدن به جواب درست بيان كردن سوال به صورت درسته:
من صورت مساله شما رو طور ديگه اي كه قابل فهم باشه كشيدم تا هم خودتون بهتر بتونين تجسم كنين هم دوستاني كه ميخوان كمك كنن ولي تا همين مرحله مشكلات شما :

1- لازم نيست اونهمه متغير بالا تعريف كنيد يه دونه i واسه همه for ها تون كافيه، اينطوري خودتونم گيج ميشين.

2- تا مرحله انتخاب توان مراحل درست رفتين از اين مرحله به بعد شما دو تا آرايه واسه نگهداري فاصله كاراكترها و يكي هم واسه ليست كدشدتون لازم دارين كه انديسهاشون برعكس هم هستن مثلا

bool decs[5][8] = {0}, codes[8][5] = {0};

3- معني اين حلقه چيه يا بهتره بپرسم هدفتون چي بوده؟

for(s[i=0];s[i]<=s[8];s[i++])
s[i]-min==jik;

شما بايد واسه هر كدوم از كاراكترها بيتهاي تفاوت رو محاسبه كنين وبذارينشون تو آرايه اي كه واسه لين منظور تعريف كردين، ضمنا 1)كدتون رو يكمي مرتب بنويسين 2) همه چي رو تو main ننويسين تو يه تابع با اين هدر كد محاسبه آرايه خروجي از int رو بنويسين و بعد خروجي رو بدين به آرايتون :

int* toBin(int iDec)
{
int result[5] = {0};
//...
return result;
}


4- ايننقدر سريع به فكر خروجي نباشين، بايد بعد از انكدينگ؛ روال دكودينگ رو هم بنويسين.

ميثم طاهري
یک شنبه 15 دی 1387, 00:25 صبح
دقيقا همين چيزيو كه توي تصوير ديدم مي خوام انجام بدم.
ضمنا اينم تصحيح شده كد بالا

#include<string.h>
#include<conio.h>
#include<stdlib.h>
#include<stdio.h>
#include<math.h>
int main()
{int i,j,de,min,max,l,lop,jik[20]={0},a[8],k=0,n;
char s[8];
int code[20]={0};
clrscr();
printf("enter a string:",s);
scanf("%s",&s);
strupr(s);
max=min=s[0];
for(i=0;s[i]!='\x0';i++)
{if(s[i]<min)
min=s[i];
if(s[i]>max)
max=s[i];
}
printf("max=%c,min=%c",max,min);
de=((max-min));
printf("\nmax-min:%d\n",de);
for(l=0;l<=5;l++)
if(pow(2,l)>de)
break;
lop=l;
printf("\ndiffer=%2d",lop);
for(s[i=0];s[i]!='\x0';s[i++]){
jik[i]=s[i]-min;
printf("\njik[%d]=%d\n",i,jik[i]);
}
int help=0;
int ehsan=0;
for ( i=0;s[i]!='\x0';i++){
ehsan = jik [i ] ;
k=0;
do
{
help=ehsan%2;
ehsan=ehsan/2;
code[i]=code[i]+help*pow(10,k);
k=k+1;;
}while(ehsan!=0);
}
printf("\n");
for(i=0;s[i]!='\x0';i++)
{
printf("*** %d ***",code[i]);
}
getch();
}

حالا اگه بخوام كدهاي بدست آمده رو به صورت ستوني در نظر بگيرم چه كار بايد انجام بدم؟

Saeed_m_Farid
یک شنبه 15 دی 1387, 00:38 صبح
دقيقا همين چيزيو كه توي تصوير ديدم مي خوام انجام بدم.
ضمنا اينم تصحيح شده كد بالا
دوست عزيز تا كدتون رو مرتب ننويسين و حداقل نيازتون رو با تابع ننويسين نميشه كمكي كرد چون گفتين كه ميخواين خودتون اين كار رو انجام بدين پس اينقدر عجله نكنين و با آرامش و مرتب كد بنويسين و ضمنا يكمي متغيراتون رو با معني و سنجيده تعريف كنيد تا ادامه بديم ...

ميثم طاهري
یک شنبه 15 دی 1387, 00:42 صبح
دوست عزيز تا كدتون رو مرتب ننويسين و حداقل نيازتون رو با تابع ننويسين نميشه كمكي كرد چون گفتين كه ميخواين خودتون اين كار رو انجام بدين پس اينقدر عجله نكنين و با آرامش و مرتب كد بنويسين و ضمنا يكمي متغيراتون رو با معني و سنجيده تعريف كنيد تا ادامه بديم ...
منظور از مرتب كردن كدتون چيه؟يعني چي كار كنم؟كدوم متغير رو براتون توضيح بدم؟

Saeed_m_Farid
یک شنبه 15 دی 1387, 01:52 صبح
منظور از مرتب كردن كدتون چيه؟يعني چي كار كنم؟كدوم متغير رو براتون توضيح بدم؟

نميخواد چيزي رو توضيح بدين فقط تغييرات گفته شده رو اگه مايل بودين تو كدتون اعمال كنيد مثلا يه چيزي شبيه اين:


void toBin(int iDec, bool* dest)
{
for (int idx=4; idx>=0; idx--,iDec>>=1)
dest[idx] = iDec % 2;
}

int main()
{
bool decs[5][8] = {0}, codes[8][5] = {0};
int idx,de,min,max,lop;
char s[8];

// ...

for(idx=0;idx<8;idx++)
{
if (s[idx]!='\0')
{
if(s[idx]<min)
min=s[idx];
if(s[idx]>max)
max=s[idx];
}
}

// ...

for(lop=0;lop<=5;lop++)
if(pow(2,lop)>de)
break;

/* ... calc distance between
characters and min character
and put in array ==> decs[idx][jdx]
*/

for(idx=0; idx<8; idx++)
toBin((int(s[idx]) - int(min)), decs[idx]);

// ... code continue ...

return 0;
}

ميثم طاهري
یک شنبه 15 دی 1387, 02:04 صبح
سعي مي كنم اين تغييرات رو اعمال كنم
ميتونيد بگيد حالا كدها رو چطوري ستوني در بيارم؟
مثل عكسي كه ضميمه كرديد

Saeed_m_Farid
یک شنبه 15 دی 1387, 02:23 صبح
سعي مي كنم اين تغييرات رو اعمال كنم
ميتونيد بگيد حالا كدها رو چطوري ستوني در بيارم؟
مثل عكسي كه ضميمه كرديد
شما سطريش رو درآورديد كه ميخوايد ستونيش رو در بياريد اگه به كد دقت ميكردين من نحوه اين كار رو واستون نوشتم ولي يه جوري كه خودتون هم روش كار كنين:
دوتا آرايه اگه بالاي main رو نگاه كنين گذاشتم، كه يكيش مال افقيهاست و اونيكي مال عمودي ها؛ نحوه تبديل عدد به آرايه رو هم تو يه تابع بالاي main بنام toBin گذاشتم شما فقط بايد يه ارتباط منطقي بين اينا پيدا كنيد و بعد درست شدن آرايه افقي كافيه تو 2 تا for تودرتو جاي سطر و ستونها رو عوض كنيد.
ديگه توضيح بيشتر از اين نميشه اسمشو گذاشت برنامه اي كه خودتون نوشتين.

ميثم طاهري
یک شنبه 15 دی 1387, 16:44 عصر
اگه ميشه در مورد toBinيه كمي بيشتر توضيح بديد

Saeed_m_Farid
دوشنبه 16 دی 1387, 07:24 صبح
اگه ميشه در مورد toBinيه كمي بيشتر توضيح بديد

من اين for رو تو تابع نوشتم واسه اين كه شما هم از توابع استفاده كنين ولي شما همچنان دارين برنامه نويسي خطي ميكنيد.


void toBin(int iDec, bool* dest)
{
for (int idx=4; idx>=0; idx--,iDec>>=1)
dest[idx] = iDec % 2;
}كار اين تابع بردن عدد int شما به يه آرايه بولي هست كه بعدا كه بقول شما ميخواهيم ستوني اش كنيم بتونين از اين آرايه استفاده كنيم، نكاتي كه بايد تو اين آرايه بهش توجه كنين:

اين عملگر (=<<) عدد رو يك به واحد به سمت راست شيفت ميده و درنتيجه عدد نصف ميشه‌ (البته درمورد اعداد بدون علامت كه همين هم موردنظر ماست)،
نكته ديگه اينكه حلقه updown هست يعني از بيشترين به كمترين مياد و هر دفعه باقيمانده رو ميده به يه عضو از آرايه bool كه فقط مقادير درست 1 و غلط 0 رو تو خودش نگه ميداره.

من نه تو پيغامهاي خصوصي كه ميفرستين خبري از همچين آرايه اي ميبينم نه تو اين تاپيك. بالاخره يه جايي بايد يه آرايه دوبعدي واسه اين كار داشته باشين و روش ديگش استفاده محض از عملگرهاي بيتي هست كه من فكر نميكنم واسه اين سطح مناسب باشه چون خيلي پيچيده ميشه ولي اگه خواستين در اون مورد هم بحث ميكنيم به شرطي كه اين بحث به نتيجه برسه!
البته اگه خودتون راه حل ديگه اي دارين بگين؛ اين چيزيه كه به ذهن من ميرسه.

ميثم طاهري
دوشنبه 16 دی 1387, 15:54 عصر
با توجه به راهنمايي هاتون تونستم فقط تا اينجا پي برم


#include<stdio.h>
#include<conio.h>
#include<math.h>
#include<string.h>
#include<stdlib.h>
void toBin(int iDec,bool dest)
{for(int idx=4;idx>=0;idx--,iDec>>=1)
dest[idx]=iDec%2;
}
int main()
{ bool decs[5][8]={0},codes[8][5]={0};
int idx,de,min,max,lop;
char s[8];
clrscr();
printf("enter a string:",s);
scanf("%s",&s);
strupr(s);
for(idx=0;idx<8;idx++)
{if(s[idx]!='\0')
{if(s[idx]<min)
min=s[idx];
if(s[idx]>max)
max=s[idx];
}
}
printf("max=%c,min=%c",max,min);
de=((max-min)+1);
printf("\n(max-min)+1=%d\n",de);
for(lop=0;lop<=5;lop++)
if(pow(2,lop)>de)
break;
printf("\ndiffer=%d",lop);
for(idx=0;idx<8;idx++)
toBin((int(s[idx])-int(min)),decs[idx]);

Saeed_m_Farid
سه شنبه 17 دی 1387, 00:01 صبح
آقا ميثم خواهش ميكنم اينقدر نامرتب كد ننويسين، با عرض معذرت : شما ور ميدارين هر چي من sudo code مينويسم به صورت نامرتب و غلط ميذارين تو كدتون ميگين تغييرات شما رو اعمال كردم خوب حداقل عين انشا ننويسين برين پايين (Tab, Space هاي كدها كجا ميرن؟ خيلي ناجور بنظر مياد) ؛ يه جوري بنويسين كد درست به نظر بياد اسمبلي كه نيست! من مرحله اول رو واستون تكميل كردم يه كمي هم خودتون همت كنين و بقيشو بنويسين.
اين آخرين راهنمايي من به شماست. بقيه رو اگه دوستان وقت داشتن كمك كنن؛ ممنون از توجهتون.


//---------------------------------------------------------------------------

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

//---------------------------------------------------------------------------

void toBin(int iDec,bool *dest)
{
for(int idx=4;idx>=0;idx--,iDec>>=1)
dest[idx]=iDec%2;
}

int main()
{
bool decs[8][5]={0},
codes[5][8]={0};
int idx,jdx,de,min,max,lop;
char s[8];
clrscr();
printf("enter a string:",s);
scanf("%s",&s);
strupr(s);
min=max=s[0];
for(idx=0;idx<8;idx++)
{
if(s[idx]!='\0')
{
if(s[idx]<min)
min=s[idx];
if(s[idx]>max)
max=s[idx];
}
}
printf("max=%c,min=%c",max,min);
de=((max-min)+1);
printf("\n(max-min)+1=%d\n",de);
for(lop=0;lop<=5;lop++)
if(pow(2,lop)>de)
break;

printf("\ndiffer=%d\n",lop);
for(idx=0;idx<8;idx++)
toBin((int(s[idx])-int(min)),decs[idx]);

for (idx=0; idx<8; idx++)
for (jdx=0; jdx<5; jdx++)
codes[jdx][idx]=decs[idx][jdx];

printf("\n\nHorizontals[");
for (idx=0; idx<8; idx++)
{
for (jdx=0; jdx<5; jdx++)
printf("%d", (decs[idx][jdx])?1:0);
printf(",");
}

printf("]\nVerticals [");
for (idx=0; idx<5; idx++)
{
for (jdx=0; jdx<8; jdx++)
printf("%d", (codes[idx][jdx])?1:0);
printf(",");
}
printf("]\n First step complete!");
getch();
return 0;
}
//---------------------------------------------------------------------------

ميثم طاهري
سه شنبه 17 دی 1387, 00:23 صبح
ممنون ببخشيد اگه خستتون كردم.ديگه ما تازه كارا بايد بيشتر كار كنيم تا ياد بگيريم
اميدوارم سماجت من ناراحتتون نكرده باشه اگرم ناراحت شديد عذر ميخوام

ميثم طاهري
سه شنبه 17 دی 1387, 00:55 صبح
#include<string.h>
#include<conio.h>
#include<stdlib.h>
#include<stdio.h>
#include<math.h>
int main(){
int i,j,de,min,max,l,lop,jik[20]={0},a[8],k=0,n;
char s[8];
int code[20]={0};
char list[20][20]={0};
clrscr();
printf("enter a string:",s);
scanf("%s",&s);
strupr(s);
max=min=s[0];
for(i=0;s[i]!='\x0';i++){
if(s[i]<min)
min=s[i];
if(s[i]>max)
max=s[i];
}
printf("max=%c,min=%c",max,min);
de=((max-min));
printf("\nmax-min:%d\n",de);
for(l=0;;l++)
if(pow(2,l)>de)
break;
lop=l;
printf("\ndiffer=%2d",lop);
for(s[i=0];s[i]!='\x0';s[i++]){
jik[i]=s[i]-min;
printf("\njik[%d]=%d\n",i,jik[i]);
}
int help=0;
int ehsan=0;
char temp[20]={0};
for(i=0;s[i]!='\x0';i++){
for(int g=0;g<lop;g++) temp[g]=' ';
ehsan = jik [i ] ;
k=0;
do{
help = ehsan%2;
if ( help == 0 ){
list[i][k]='0';
temp[k]='0';
}
else{
list[i][k]='1';
temp[k]='1';
}
ehsan=ehsan/2;
k=k+1;;
}while(ehsan!=0);
for(j=k;j<lop;j++){
list[i][j]='0';
temp[j]='0';
}
for(j=lop-1,l=0;j>=0;j--,l++){
list[i][l]=temp[j];
}
}
getch();
return 0;
}

ميثم طاهري
سه شنبه 17 دی 1387, 11:16 صبح
والا عليرغم تهديدتون در تاپيك قبلي بايد بگم هر كاري كردم ارور داد.شايد مشكل از كامپايلر منه؟

Saeed_m_Farid
سه شنبه 17 دی 1387, 11:41 صبح
والا عليرغم تهديدتون در تاپيك قبلي بايد بگم هر كاري كردم ارور داد.شايد مشكل از كامپايلر منه؟


ممنون ببخشيد اگه خستتون كردم.ديگه ما تازه كارا بايد بيشتر كار كنيم تا ياد بگيريم
اميدوارم سماجت من ناراحتتون نكرده باشه اگرم ناراحت شديد عذر ميخوام بنده عرض كردم براي هرچيزي تاپيك تكراري ندين : اين كه اسمش تهديد نيست! (احتمالا اگه ايام محرم نبود عوض شما خود آقا نيما حذفش ميكرد! من گوشزد كردم)
ضمنا من نه خسته شدم و نه ناراحت و اين پيگيري و فعاليت هم خيلي خوب و باعث پيشرفته. مطمئن باشين اگه ارزشش رو نداشت اصلا اين تاپيك رو اينقدر ادامه نميداديم و همون اول انگار كه نديدمش! ولي خوب يه چيزايي توش بود كه جذاب به نظر اومدن و نكاتي كه ميتونست مفيد باشه؛ عرض بنده اينه كه خيلي زودتر بايد به نتيجه ميرسيدي...
تو همون تاپيكي كه پاك كردين گفتم كه اگه ميبينين نميتونين از اين تابع toBin استفاده كنيد مستقيم بردارين حلقه داخل تابع رو بذارين داخل main و اصلا تابع toBin رو بيخيال شيد. ميشه دوتا for تودرتو همونطوريكه تو سطرهاي بعدش هم هست؛ اين تابع رو فقط واسه اين گذاشتم كه با شكل كاركرد اشارگرها تو توابع هم آشنا بشيد، اجباري تو استفاده ازش نيست. و ضمنا من واسه تست يه بار ديگه همين برنامه رو كامپايل كردم و مشكلي نبود.

باتشكر.

ميثم طاهري
سه شنبه 17 دی 1387, 11:49 صبح
اگه ميبينين نميتونين از اين تابع toBin استفاده كنيد مستقيم بردارين حلقه داخل تابع رو بذارين داخل main و اصلا تابع toBin رو بيخيال شيد. ميشه دوتا for تودرتو همونطوريكه تو سطرهاي بعدش هم
.
همين ديگه در واقع نميدونم چطوري و كجا بنويسمش چون حقيقتا برام گنگه!اگه راهنمايي كنيد ممنون ميشم.يه چيز ديگه اينكه از چه كامپايلري استفاده مي كنيد؟

Saeed_m_Farid
سه شنبه 17 دی 1387, 12:11 عصر
همين ديگه در واقع نميدونم چطوري و كجا بنويسمش چون حقيقتا برام گنگه!اگه راهنمايي كنيد ممنون ميشم
ديدي داري اذيت ميكني‌ (يه دونه حلقه FOR‌رو نمياري تو بدنه برنامه)، ضمنا من از bcb++6 دارم استفاده ميكنم كه هر دفعه واسه اينكه با tc شما قابل كامپايل بشه برنامه رو تغيير ميدم و ميذارمش تو تاپيك، اين هم ازحلقه داخل بدنه برنامه:

int iDec = 0;
for(idx=0;idx<8;idx++)
{
iDec = int(s[idx])-int(min);
for(jdx=4;jdx>=0;jdx--,iDec>>=1)
decs[idx][jdx]=iDec%2;
}

ميثم طاهري
پنج شنبه 19 دی 1387, 00:53 صبح
#include<stdio.h>
#include<conio.h>
#include<math.h>
#include<string.h>
#include<stdlib.h>
//---------------------------------------------------------------------------
int ToDec(int [][8],int col,int len);
int main()
{
int i,idx,jdx,de,lens,lop,decs[8][5],codes[5][8];
char s[8],max,min;
clrscr();
printf("enter a string:");
gets(s);
lens=strlen(s);
strupr(s);
min=max=s[0];
for(idx=0;idx<lens;idx++)
{
if(s[idx]<min)
min=s[idx];
if(s[idx]>max)
max=s[idx];
}
printf("max=%c,min=%c",max,min);
de=((max-min)+1);
printf("\n(max-min)+1=%d\n",de);
for(lop=0;lop<=5;lop++)
if(pow(2,lop)>de)
break;
printf("\ndiffer=%d\n",lop);
int iDec=0;
for(idx=0;idx<lens;idx++)
{
iDec=int(s[idx])-int(min);
for(jdx=(lop-1);jdx>=0;jdx--,iDec>>=1)
decs[idx][jdx]=iDec%2;
}
for (idx=0; idx<lens; idx++)
for (jdx=0; jdx<lop; jdx++)
codes[jdx][idx]=decs[idx][jdx];
printf("\n\nHorizontals[");
for (idx=0; idx<lens; idx++)
{
for (jdx=0; jdx<lop; jdx++)
printf("%d", (decs[idx][jdx])?1:0);
printf(",");
}
printf("]\nVerticals [");
for (idx=(lop-1); idx>=0; idx--)
{
for (jdx=0; jdx<lens; jdx++)
printf("%d", (codes[idx][jdx])?1:0);
printf(",");
}
for (idx=(lop-1);idx>=0;idx--)
{
printf("%c",ToDec(codes,idx,lens));
}
getch();
return 0;
}
int ToDec(int s[][8],int col,int len){
int b=0,i;
for(i=(len-1);i>=0;i--){
b+=s[col][i]*pow(2,(len-1)-i);
}
return b;
}//end of function

پس از روزها تلاش بالاخره بخش كدينگ تمام شد.به خودم و شما تبريك ميگم.الان بايد بريم سراغ ديكدينگ
پس همه با هم پيش به سوي ديكدينگ.ححمممملهههههههههه ههههههههههههههه:شیطان:

ميثم طاهري
پنج شنبه 19 دی 1387, 12:01 عصر
براي راحتي كار حرف اول رشته ورودي رو براي ديكدينگ وارد مي كنيم.اين كار رو چطوري بايد انجام بدم؟

ميثم طاهري
شنبه 28 دی 1387, 18:22 عصر
فكر كنم نبايد شيفت مي كرديم؟نه؟به نظرم دليلي نداره

ميثم طاهري
چهارشنبه 02 بهمن 1387, 21:11 عصر
#include<stdio.h>
#include<conio.h>
#include<math.h>
#include<string.h>
#include<stdlib.h>
//---------------------------------------------------------------------------
int ToDec(int [5][8],int col,int len);
void code(void);
void decode(void);
void margin(void);
char menu(void);
int main()
{
char choose_main;
textmode(C80);
for(;;){
textbackground(8);
_setcursortype(_NOCURSOR);
choose_main=menu();
switch(choose_main){
case 'c':
case 'C':
code();
break;
case 'd':
case 'D':
decode();
break;
case 'e':
case 'E':
exit (0);
}
}
}
void margin(void){
int i;
clrscr();
textmode(C80);
textcolor(7);
highvideo();
cprintf("\xB2");
for(i=1;i<25;i++){
gotoxy(1,i);
cprintf("\xB2\xB2");
gotoxy(79,i);
cprintf("\xB2\xB2");
}
gotoxy(1,1);
insline();
for(i=0;i<80;i++)cprintf("\xB2");
gotoxy(1,25);
for(i=0;i<79;i++)cprintf("\xB2");
}
char menu(void){
char choose;
textmode(C80);
clrscr();
margin();
gotoxy(12,6);
textcolor(2);
highvideo();
cprintf("MAIN MENU");
gotoxy(9,7);
cprintf("...............");
gotoxy(9,9);
textcolor(2);
highvideo();
cprintf("Code");
gotoxy(9,9);
textcolor(3);
highvideo();
cprintf("C");
gotoxy(9,10);
textcolor(2);
highvideo();
cprintf("Decode");
gotoxy(9,10);
textcolor(3);
highvideo();
cprintf("D");
textcolor(2);
gotoxy(9,11);
highvideo();
cprintf("Exit");
gotoxy(9,11);
textcolor(3);
highvideo();
cprintf("E");
while(1){
choose=getch();
if(choose=='c'||choose=='C'||choose=='D'||choose== 'd'||choose=='e'||choose=='E')
break;
}
return choose;
}
void code(){
int i=0,idx=0,jdx=0,de=0,lens=0,lop=0,decs[8][8]={0},codes[8][8]={0};
char s[8]={0},max=0,min=0;
clrscr();
textmode(C80);
margin();
_setcursortype(_NORMALCURSOR);
gotoxy(6,5);
printf("Enter a string:");
gets(s);
lens=strlen(s);
strupr(s);
min=max=s[0];
for(idx=0;idx<lens;idx++)
{
if(s[idx]<min)
min=s[idx];
if(s[idx]>max)
max=s[idx];
}
//printf("max=%c,min=%c",max,min);
de=((max-min)+1);
//printf(" (max-min)+1=%d",de);
for(lop=0;lop<=5;lop++){
i=pow(2,lop);
if(pow(2,lop)>de)
break;
}
//printf(" differ=%d\n",lop);
int iDec=0;
for(idx=0;idx<lens;idx++)
{
iDec=int(s[idx])-int(min);
for(jdx=(lop-1);jdx>=0;jdx--,iDec>>=1)
decs[idx][jdx]=iDec%2;
}
for (idx=0; idx<lens; idx++)
for (jdx=0; jdx<lop; jdx++)
codes[jdx][idx]=decs[idx][jdx];
//printf("\n\nHorizontals[");
/*for (idx=0; idx<lens; idx++)
{
for (jdx=0; jdx<lop; jdx++)
printf("%d", (decs[idx][jdx]));
if(idx!=lens-1) printf(",");
} */
//printf("]");
//printf("\nVerticals[");
//for (idx=(lop-1); idx>=0; idx--) // code meisam
/*for (idx=0;idx<lop;idx++) // code MH
{
for (jdx=0; jdx<lens; jdx++)
printf("%d",codes[idx][jdx]);
if(idx!=lop-1)
printf(",");
}
printf("]\n");*/
gotoxy(6,7);
printf("Coded String : ");
for (idx=0/*(lop-1)*/;idx<lop/*>=0*/;idx++)
{
// printf("\n%c",ToDec(codes,idx,lens)+32);// code meisam
//code MH
//int b=0,i;
int b=0;
for(i=(lens-1);i>=0;i--){
b+=codes[idx][i]*pow(2,(lens-1)-i);
}
gotoxy(21+idx,7);
printf("%c",b+33);
}
getch();
}
void decode(){
int i=0,idx=0,jdx=0,lens=0,lop=0,decs[8][8]={0},codes[8][8]={0};
char s[8]={0},min=0;
clrscr();
textmode(C80);
margin();
_setcursortype(_NORMALCURSOR);
gotoxy(6,5);
printf("Enter the coded String: ");
gotoxy(30,5);
gets(s);
gotoxy(6,7);
printf("Enter the Minimum character of Main String: ");
gotoxy(50,7);
min = getchar();
gotoxy(6,9);
printf("Enter the length of the Main String: ");
gotoxy(43,9);
scanf("%d",&lop);
lens=strlen(s);
int iDec=0;
//*************
//baraye taEn kardane meghdar lop
//*************
for(idx=0;idx<8;idx++)
for(jdx=0;jdx<8;jdx++)
decs[idx][jdx]=0;
for(idx=0;idx<lens;idx++)
{
iDec=int(s[idx])-33;
for(jdx=lop-1;jdx>=0;jdx--,iDec>>=1){
decs[idx][jdx]=iDec%2;
}
}
for (idx=0; idx<lens; idx++)
for (jdx=0; jdx<lop; jdx++)
codes[jdx][idx]=decs[idx][jdx];
gotoxy(6,13);
printf("The main String is : ");
for (idx=0/*(lop-1)*/;idx<lop/*>=0*/;idx++)
{
// printf("\n%c",ToDec(codes,idx,lens)+32);// code meisam
//code MH
//int b=0,i;
int b=0;
for(i=(lens-1);i>=0;i--){
b+=codes[idx][i]*pow(2,(lens-1)-i);
}
gotoxy(29+idx,13);
printf("%c",b+min);
}
getch();
}

lpln2009
شنبه 05 بهمن 1387, 21:15 عصر
با سلام
به نظرم برنامه زیر هم جواب بده







#include <conio.h>

#include <iostream>

#include <iomanip>

using std::cout;
using std::cin;




void t(int a[],int c[],int);

int main()

{
int c[1000]={0};
int b[1000];
char f[1000];
int size=0;




cout<<"enter reshte : ";

cin>>f;

for (int q=0;f[q] != '\0';q++)
size++;
for(int w=0;w<size;w++)
b[w]=f[w];




t(b,c,size);
getch();

return 0;

}
void t(int a[],int c[],int size)
{
for(int j=0; j<size;j++)
c[a[j]]++;
for(int z=97;z<123;z++)
cout<<static_cast <char>(z)<<" "<<c[z]<<"\n";


}

ميثم طاهري
شنبه 05 بهمن 1387, 23:38 عصر
اينكه كلي eror داره

obscure
یک شنبه 06 بهمن 1387, 05:37 صبح
با VC کامپایل کن.

ميثم طاهري
یک شنبه 06 بهمن 1387, 12:06 عصر
آقا يه برنامه نوشتم در حد تيم ملي

#include<stdio.h>
#include<conio.h>
#include<math.h>
#include<string.h>
#include<stdlib.h>
//---------------------------------------------------------------------------
int ToDec(int [5][8],int col,int len);
void code(void);
void decode(void);
void margin(void);
char menu(void);
int main()
{
char choose_main;
textmode(C80);
for(;;){
textbackground(8);
_setcursortype(_NOCURSOR);
choose_main=menu();
switch(choose_main){
case 'c':
case 'C':
code();
break;
case 'd':
case 'D':
decode();
break;
case 'e':
case 'E':
exit (0);
}
}
}
void margin(void){
int i;
clrscr();
textmode(C80);
textcolor(7);
highvideo();
cprintf("\xB2");
for(i=1;i<25;i++){
gotoxy(1,i);
cprintf("\xB2\xB2");
gotoxy(79,i);
cprintf("\xB2\xB2");
}
gotoxy(1,1);
insline();
for(i=0;i<80;i++)cprintf("\xB2");
gotoxy(1,25);
for(i=0;i<79;i++)cprintf("\xB2");
}
char menu(void){
char choose;
textmode(C80);
clrscr();
margin();
gotoxy(12,6);
textcolor(2);
highvideo();
cprintf("MAIN MENU");
gotoxy(9,7);
cprintf("...............");
gotoxy(9,9);
textcolor(2);
highvideo();
cprintf("Code");
gotoxy(9,9);
textcolor(3);
highvideo();
cprintf("C");
gotoxy(9,10);
textcolor(2);
highvideo();
cprintf("Decode");
gotoxy(9,10);
textcolor(3);
highvideo();
cprintf("D");
textcolor(2);
gotoxy(9,11);
highvideo();
cprintf("Exit");
gotoxy(9,11);
textcolor(3);
highvideo();
cprintf("E");
while(1){
choose=getch();
if(choose=='c'||choose=='C'||choose=='D'||choose== 'd'||choose=='e'||choose=='E')
break;
}
return choose;
}
void code(){
int i=0,idx=0,jdx=0,de=0,lens=0,lop=0,decs[8][8]={0},codes[8][8]={0};
char s[8]={0},max=0,min=0;
clrscr();
textmode(C80);
margin();
_setcursortype(_NORMALCURSOR);
gotoxy(6,5);
printf("Enter a string:");
gets(s);
lens=strlen(s);
strupr(s);
min=max=s[0];
for(idx=0;idx<lens;idx++)
{
if(s[idx]<min)
min=s[idx];
if(s[idx]>max)
max=s[idx];
}
//printf("max=%c,min=%c",max,min);
de=((max-min)+1);
//printf(" (max-min)+1=%d",de);
for(lop=0;lop<=5;lop++){
i=pow(2,lop);
if(pow(2,lop)>de)
break;
}
//printf(" differ=%d\n",lop);
int iDec=0;
for(idx=0;idx<lens;idx++)
{
iDec=int(s[idx])-int(min);
for(jdx=(lop-1);jdx>=0;jdx--,iDec>>=1)
decs[idx][jdx]=iDec%2;
}
for (idx=0; idx<lens; idx++)
for (jdx=0; jdx<lop; jdx++)
codes[jdx][idx]=decs[idx][jdx];
//printf("\n\nHorizontals[");
/*for (idx=0; idx<lens; idx++)
{
for (jdx=0; jdx<lop; jdx++)
printf("%d", (decs[idx][jdx]));
if(idx!=lens-1) printf(",");
} */
//printf("]");
//printf("\nVerticals[");
//for (idx=(lop-1); idx>=0; idx--) // code meisam
/*for (idx=0;idx<lop;idx++) // code MH
{
for (jdx=0; jdx<lens; jdx++)
printf("%d",codes[idx][jdx]);
if(idx!=lop-1)
printf(",");
}
printf("]\n");*/
gotoxy(6,7);
printf("Coded String : ");
for (idx=0/*(lop-1)*/;idx<lop/*>=0*/;idx++)
{
// printf("\n%c",ToDec(codes,idx,lens)+32);// code meisam
//code MH
//int b=0,i;
int b=0;
for(i=(lens-1);i>=0;i--){
b+=codes[idx][i]*pow(2,(lens-1)-i);
}
gotoxy(21+idx,7);
printf("%c",b+33);
}
getch();
}
void decode(){
int i=0,idx=0,jdx=0,lens=0,lop=0,decs[8][8]={0},codes[8][8]={0};
char s[8]={0},min=0;
clrscr();
textmode(C80);
margin();
_setcursortype(_NORMALCURSOR);
gotoxy(6,5);
printf("Enter the coded String: ");
gotoxy(30,5);
gets(s);
gotoxy(6,7);
printf("Enter the Minimum character of Main String: ");
gotoxy(50,7);
min = getchar();
gotoxy(6,9);
printf("Enter the length of the Main String: ");
gotoxy(43,9);
scanf("%d",&lop);
lens=strlen(s);
int iDec=0;
//*************
//baraye taEn kardane meghdar lop
//*************
for(idx=0;idx<8;idx++)
for(jdx=0;jdx<8;jdx++)
decs[idx][jdx]=0;
for(idx=0;idx<lens;idx++)
{
iDec=int(s[idx])-33;
for(jdx=lop-1;jdx>=0;jdx--,iDec>>=1){
decs[idx][jdx]=iDec%2;
}
}
for (idx=0; idx<lens; idx++)
for (jdx=0; jdx<lop; jdx++)
codes[jdx][idx]=decs[idx][jdx];
gotoxy(6,13);
printf("The main String is : ");
for (idx=0/*(lop-1)*/;idx<lop/*>=0*/;idx++)
{
// printf("\n%c",ToDec(codes,idx,lens)+32);// code meisam
//code MH
//int b=0,i;
int b=0;
for(i=(lens-1);i>=0;i--){
b+=codes[idx][i]*pow(2,(lens-1)-i);
}
gotoxy(29+idx,13);
printf("%c",b+min);
}
getch();
}