![]() |
|
|
#76 |
|
مدیر بازنشسته
Join Date: May 2005
Location: در پاي كوهپايه ها
Posts: 654
|
Code:
#include <conio.h>
#include <iostream.h>
void main()
{
clrscr();char c;
menu:
// ----------- shoroe ghaaleb -------------
char ca[10];
ca[0] = 'H';
ca[1] = 'e';
ca[2] = 'l';
ca[3] = 'l';
ca[4] = 'o';
ca[5] = 0;
cout<<"ca="<<ca<<endl;
// ----------- entehaye ghaaleb -----------
cout<<"x=> exit anykey=> repeat"<<endl;
c=getch();if(c != 'x') goto menu;
}
![]() آرايه يعني مجموعه اي اعضا. و بايد به هر يك جدا توجه شود. در اينجا ما ، يكي – يكي اعضاي آرايه را مقدار دهي كرده ايم. در موقع چاپ اين آرايه ، يعني ca ، سي اتوماتيك عمل كرده ، يعني با وجودي كه 10 عضو داشته آرايه ما ، همه را چاپ نكرده ، و وقتي به آرايه حاوي صفر رسيده كار را متوقف كرده. .
__________________
estefa va khoroj az forum. dostare hameye shoma.bye. Last edited by saalek; 02-14-2006 at 12:00 AM.. |
|
|
|
|
|
#77 |
|
Registered User
Join Date: Nov 2005
Location: Esf
Posts: 15
|
سلام
یه سوال در مورد مبنا داشتم. در مبنای 16 شما گفتید اعداد به صورت 0123456789abcdef در می اید.در قسمت اشاره گر ها شما ادرس یک متغیر رو چاپ کردید که 0x8f9ffff4 بود.و ادرس متغیر هم در مبنای 16 است.سوالم اینه این x چیه؟این منظور حرف x یا یه علامت خاصه؟ |
|
|
|
|
|
#78 |
|
مدیر بازنشسته
Join Date: Sep 2003
Posts: 1,523
|
در سي اعداد در چند مبنا بيان ميشن
دسيمال . هگزادسيمال . اكتال( مبنا 8) اگه اعداد علامت مشخصه اي نداشته باشه يعني عدد ده دهي يا دسيمال اگه علامت داشته باشه بسته به علامت عدد در مبنا مورد نظر بيان شده مثلا 0x ( نه x) يعني عدد در مبناي 16 داره بيان ميشه . اگه اول عدد 0 باشه يعني اين عدد در مبناي 8 مثلا 010 Last edited by saeedsmk; 12-19-2005 at 01:24 PM.. |
|
|
|
|
|
#79 |
|
مدیر بازنشسته
Join Date: May 2005
Location: در پاي كوهپايه ها
Posts: 654
|
با تشكر از كمكهاي تمامي دوستان كه ما را تنها نمي گذارند.
----------------------------------- آرايه و اشاره گر و string در سي كمي پيچيده است و بايستي با مثال و تمرين ، بر اين مباحث مسلط شويم. در پستهاي بعدي سعي مي كنيم با مثالهاي متعدد ،بر اين مباحث مسلط شويم. . |
|
|
|
|
|
#80 |
|
مدیر بازنشسته
Join Date: May 2005
Location: در پاي كوهپايه ها
Posts: 654
|
به برنامه اي كه با اجازه k750i و programmer نقل مي كنم توجه كنيد:
تمريني براي حلقه و آرايه: Code:
#include <iostream.h>
#include <conio.h>
int x,i,b[20]={0};
int main()
{
clrscr();
i=0;//counter
cout<<"Enter number decimal format : ";
cin>>x;
while(x!=0)
{
b[i]=x % 2 ;
x=x / 2;
i++;
}//end of while
cout<<"number in binary format : ";
for(int j=i-1;j>=0;j--)
cout<<b[j];
cout<<endl;
getch();
return 0;
}
آنجا char ها كاروان تشكيل مي دادند و اينجا int ها. هدف برنامه: برنامه يك عدد در مبناي 10 مي گيره و عدد به مبناي 2 بازمي گرداند. روش كار برنامه: در پست قبل از روش تقسيم هاي متوالي بر 2 براي (( تبديل از مبناي 10 به 2 )) استفاده كرديم. اين برنامه هم همين كار را مي كند. عدد را از كاربر مي گيره و در x قرار مي دهد و بعد در يك حلقه while تقسيم ها را انجام مي دهد و با دستور باقيمانده % ، باقيمانده تقسيم ها را دريافت مي كند و در اعضاي آرايه قرار مي دهد. در حلقه بعدي كه از نوع for است ، اعضاي آرايه را چاپ مي كند. اعضاي آرايه كه يا صفرند يا يك ، كنار هم كه چاپ مي شوند ، باعث ميشه عدد در مبناي 2 ساخته بشه. به دستور b[20]={0} دقت كنيد. اين دستور همه 20 عضو آرايه را صفر مي كند. و مي بينيد كه از علامت مجموعه استفاده شده، شايد ه اين دليل كه اعضاي هر آرايه ، هر يك به تنهايي يك متغير محسوب مي شوند و ما با مجموعه اي از متغير ها روبرو هستيم. فوايد كار با برنامه: درك خوبي از تبديل به مبناي 2 ، تمرين با دو نوع حلقه ، تمرين آرايه. . اگر مي توانيد به عنوان تمرين كاري كنيد كه مبناي 16 خروجي برنامه باشد. من خودم هنوز كار نكردم ولي فكر كنم بشه. . |
|
|
|
|
|
#81 |
|
مدیر بازنشسته
Join Date: May 2005
Location: در پاي كوهپايه ها
Posts: 654
|
باز هم از اين دوستان يك برنامه نقل مي كنيم:
Code:
#include <conio.h>
#include <iostream.h>
void main()
{
clrscr();char c ;
menu:
// ----------- shoroe ghaaleb -------------
char* str;
cout<<"Enter string: ";
cin>>str;
for(int i=0;str[i]!='\0';i++)
if(str[i]>=97)
str[i]=str[i]-32;
cout<<"Uppercase : "<<str<<endl;
// ----------- entehaye ghaaleb -----------
cout<<"x=> exit anykey=> repeat"<<endl;
c=getch();if(c != 'x') goto menu;
}
هدف برنامه: كاربر هر كلمه اي وارد كند(مثلا اسم خودش را ) ، برنامه اگر حروف كوچكي در تايپش باشد ، آنها را تبديل به حروف بزرگ مي كند. . در مورد کد های اسکی لازم نیست اون ها را حفظ کنید میتونید از شرط های زیر داخل حلقه استفاده کنید: Code:
if((str[i]>='a')&&(str[i])<='z') str[i]=str[i]-32; if((str[i]>='A')&&(str[i])<='Z') str[i]=str[i]+32; Last edited by saalek; 12-20-2005 at 02:10 PM.. |
|
|
|
|
|
#82 |
|
Registered User
Join Date: Nov 2005
Location: Esf
Posts: 15
|
یه برنامه جالب دیدم .البته خودم نتونستم درست حلش کنم.نمی دونم کجاش اشکال داره.
برنامه ای که نام و نام خانوادگی کاربر رو بگیره ویک پسورد براش بسازه به صورت زیر: حروف پسورد یکی در میون از حروف نام و نام خانوادگی کاربر درست شده باشه مثلا اگه کاربر masih ahmadi کند پسورد بشه maahsmiahdi . include<iostream.h> #include<stdio.h> int main (){ char name [5]; char fam[5]; char pass [10]; int i,j; gets(name); gets(fam); for(i=0;(name[i] && fam[i]);i++){ pass[i]=name[i]; pass[i+1]=fam[i];} for(j=0;j<10;j++){ cout<<pass[j];} return 0; } |
|
|
|
|
|
#83 |
|
مدیر بازنشسته
Join Date: May 2005
Location: در پاي كوهپايه ها
Posts: 654
|
من الان داشتم مي رفتم سايت پلانت و سايتهاي ديگر براي سورس.
ولي حالا كه اين سورس را گذاشتيد ، روي همين كار مي كنم. دوستان ديگه هم برنامه هاي مناسب را اينجا بگذارند.تا همه استفاده كنند. . ===================================== Code:
#include <conio.h>
#include <iostream.h>
#include<stdio.h>
void main()
{
clrscr();char c ;
menu:
// ----------- shoroe ghaaleb -------------
char name [20]={0};
char fam[20]={0};
char pass [100]={0};
cout<<"what is your name?"<<endl ;
gets(name);
cout<<"what is yourfamily?"<<endl ;
gets(fam);
for(int i=0;(name[i] && fam[i]);i++){
pass[2*i]=name[i];
pass[2*i+1]=fam[i];}
cout<<"name="<<name<<" family="<<fam<<endl;
cout<<"password= "<<pass<<endl;
// ----------- entehaye ghaaleb -----------
cout<<"x=> exit anykey=> repeat"<<endl;
c=getch();if(c != 'x') goto menu;
}
شرح برنامه: ابتدا از كاربر با تابع gets(..) ، اسم و فاميل را مي گيريم. اين تابع در stdio است. و بايد اين header را بالاي برنامه include كنيم. قبلا آرايه هايي از نوع char ساخته ايم و اسم و فاميل را 20 كاراكتر اجازه بزرگ شدن داده ايم. و پسورد را هم من فكر كنم بايد 40 تا باشه كه من همين طوري 100 گرفتم. بعد حلقه اي تشكيل مي دهيم: شرط حلقه: شرط حلقه اين است كه هيچ يك از آرايه هاي اسم و فاميل به كاراكتر صفر نرسيده باشد. && همان ((و)) منطقي است. يعني هر وقت يكي هم صفر بشود ، شرط برقرار نيست. نكته: اعداد صحيح ، وقتي از لحاظ منطقي true محسوب مي شود كه غير صفر باشد. راجع به كاراكترها هم وقتي كدشان غير صفر باشد true محسوب مي شود. چون مي خواهيم يكي درميان از كاراكترهاي اسم و فاميل استفاده كنيم ، من 2*I و 2*I+1 را نوشتم. نكات جديد برنامه: ما قبلا يك برنامه نوشتيم ( همان كه hello مي نويسه) كه مثل برنامه فعلي آرايه char داشت. در آنجا اجزاي آرايه را يكي يكي داديم. اينجا از دو string موجود كه كاربر مي دهد بوسيله يك حلقه به طور اتوماتيك اجزاي آرايه (آرايه pass ) مقدار دهي مي شود . دستور جديد: gets كه مي تواند رشته را از كاربر بگيرد و در يك آرايه از نوع char قرار دهد. من فقط برنامه را دوباره نويسي كردم و gets را نمي شناختم . خيلي جالب بود. . ![]() Last edited by saalek; 02-14-2006 at 12:29 AM.. |
|
|
|
|
|
#84 |
|
Registered User
Join Date: Nov 2005
Posts: 84
|
تبدیل اعداد دسیمال به هگزادسیمال
تبدیل اعداد دسیمال(مبنای 10) به هگزادسیمال(مبنای 16)
Code:
/* decimal to hex */
#include<iostream.h>
#include<conio.h>
const int MAX_SIZE=20;
int main()
{
long int x;
int i,h[MAX_SIZE];
clrscr();
cout<<"Enter a Decimal integer : ";
cin>>x;
i=0;
while (x != 0)
{
h[i] = x % 16;
x = x / 16;
i++;
}//end of while
cout<<"Number in Hex format : 0x";
for(int j=i-1;j>=0;j--)
{
if(h[j]<=9)
cout<<h[j];
else
switch (h[j])
{
case 10:cout<<'A';
break;
case 11:cout<<'B';
break;
case 12:cout<<'C';
break;
case 13:cout<<'D';
break;
case 14:cout<<'E';
break;
case 15:cout<<'F';
break;
default:cout<<"<Error>";
}//end of Switch
}//end of for
cout<<"\nPress any key to exit...";
getch();
return 0;
}
|
|
|
|
|
|
#85 |
|
Registered User
Join Date: Nov 2005
Posts: 84
|
روش کوتاهتر تبدیل Dec به Hex بدون استفاده از سوئیچ !
اینم یه روش کوتاهتر و خلاقانه تر بدون استفاده از دستور سوئیچ :
Code:
/* decimal to hex */
#include<iostream.h>
#include<conio.h>
const int MAX_SIZE=20;
int main()
{
long int x;
int i,h[MAX_SIZE];
clrscr();
cout<<"Enter a Decimal integer : ";
cin>>x;
i=0;
while (x != 0)
{
h[i] = x % 16;
x = x / 16;
i++;
}//end of while
cout<<"Number in Hex format : 0x";
for(int j=i-1;j>=0;j--)
{
if(h[j]<=9)
cout<<h[j];
else
cout<<char(55+h[j]);
}//end of for
cout<<"\nPress any key to exit...";
getch();
return 0;
}
گفتم شاید براتون جالب باشه از این راه هم حلش کردم. |
|
|
|
|
|
#86 |
|
مدیر بازنشسته
Join Date: May 2005
Location: در پاي كوهپايه ها
Posts: 654
|
به پست شماره 106 نگاه كنيد : ( دو پست قبل از اين پست)
با تشكر از دوست عزيز programmer كه زحمت نوشتن اين برنامه را كشيدند. هدف برنامه : تبديل از 10 به 16 فوايد برنامه: تمرين با دستور switch case و كار با مبناي 16 . استفاده از constant ثوابت. شرح برنامه: برنامه كاملا واضح و نمايان است. اگر هنوز در switch case مشكل داريد، اين بهترين مثاله براي يادگيري اين دستور. اين دستور مثلا وقتي استفاده ميشه كه براي هر وردي خاص ، ما خروجي خاص داشته باشيم. مثل اينجا كه براي 10 و 11 و 12 و 13 و 14 و 15 ، ما خروجي هاي a و b و c و d و e و f را داريم. نكته مهم اين برنامه هم كامنت گذاري است. با كامنت گذاري به موقع شما باعث مي شويد كه هم خودتان بعدا بفهميد برنامه چطور كار مي كند و هم فرد ديگر بهتر مي تواند بفهمد . يكي از دوستان عزيز مي گفت (( كامنت ها از خود كدها مهم ترند ، چون اگر كامنت نباشه ، هيچ كس (شامل خودتان) نمي توانيد از برنامه بعدها استفاده كند. )) دوست خوبمان هم به موقع از كامنت استفاده كرده. كاري كه من تابحال رعايت نمي كردم. و اشتباه بود. ![]() Last edited by saalek; 02-14-2006 at 12:30 AM.. |
|
|
|
|
|
#87 |
|
مدیر بازنشسته
Join Date: May 2005
Location: در پاي كوهپايه ها
Posts: 654
|
من در شرح برنامه پست 107(دو پست قبل) ، برنامه زير را ساختم .
اول خواستم تمامي 256 حالت كاراكترها را نمايش بدهم ولي قبل شماره 27 كاراكترهايي بود كه اجازه اين كار را نداد و من مجبور شدم از 27 شروع كنم. در شكل زير الفباي انگليسي ، اعداد و الفباي فارسي را مي بينيد. Code:
#include<iostream.h>
#include<conio.h>
int main()
{
clrscr();
for(int i=27;i<255;i++)
{
cout<<char(i);
}//end of for
cout<<"\nPress any key to exit...";
getch();
return 0;
}
![]() Last edited by saalek; 02-14-2006 at 12:31 AM.. |
|
|
|
|
|
#88 |
|
مدیر بازنشسته
Join Date: May 2005
Location: در پاي كوهپايه ها
Posts: 654
|
شايد زود باشه كه سراغ توابع رشته اي برويم . كمي نظم كم ميشه.
برنامه زير از دو تابع استفاده مي كنه كه در header ئي به نام string.h قرار دارد و بالاي برنامه include شده. تابع اول كه strlen است ، طول يك رشته را حساب مي كند. توجه كنيد كه متغير name كه اين تابع داره روي آن كار مي كند ، 50 خانه اي تعريف شده ولي وقتي كاربر اسم خودشو وارد اين متغير مي كنه ، سي يك صفر به آخر اسم اضافه مي كنه و تابع strlen هم قبل ((صفر)) را مي شمارد و با كل كه 50 است كاري ندارد. تابع بعدي strcat است و كارش اينه كه يك رشته را به اضافه مي كند به رشته ديگر. و اين كار را بعد اولين صفري كه پيدا مي كند انجام مي دهد. در خطيكه رنگ قرمز زديم ، ما مي آئيم اولين خانه متغير fullname را صفر مي كنيم تا تابع strcat از اولين خانه شروع به پر كدن خانه هاي fullname بكند. بعد اول name را سرايز مي كنيم درونش ، بعد يك فاصله را بعد name مي گذاريم و بعد lastname را درون آن مي ريزيم. بعد چاپ fullname مي بينيد كه حاوي name و lastname (با يك فاصله بين آنها) است. Code:
#include <conio.h>
#include <iostream.h>
#include <string.h>
void main()
{
clrscr();char c ;
menu:
// ----------- shoroe ghaaleb -------------
char name[50];
char lastname[50];
char fullname[100]; // Big enough to hold both name and lastname
cout<<"Please enter your name: ";
cin.getline ( name, 50 );
// Find the length of your name
cout<<"Your name is "<< strlen ( name ) <<" letters long\n"<<endl;
cout<<"Enter your last name: ";
cin.getline ( lastname, 50 );
fullname[0] = '\0'; // strcat searches for '\0' to cat after
strcat ( fullname, name ); // Copy name into full name
strcat ( fullname, " " ); // We want to separate the names by a space
strcat ( fullname, lastname ); // Copy lastname onto the end of fullname
cout<<"Your full name is "<< fullname <<"\n";
// ----------- entehaye ghaaleb -----------
cout<<"----------------------new run"<<endl;
c=getch();if(c != 'x') goto menu;
}
![]() Last edited by saalek; 02-14-2006 at 12:32 AM.. |
|
|
|
|
|
#89 |
|
کاربر فعال برق و الکترونیک
Join Date: Jul 2005
Posts: 1,385
|
سالك جان ممنون از وقتي كه براي اين تايپيك ميذارين
خسته نباشي عزيز ادامه بده كه مشتاق يادگيري هستيم ![]()
__________________
![]() |
|
|
|
|
|
#90 |
|
مدیر بازنشسته
Join Date: May 2005
Location: در پاي كوهپايه ها
Posts: 654
|
پاسخ به:
Electronics Art ممنون. من خيلي به برنامه نويسي علاقه مندم. مخصوصا سي كه خيلي حساب كتابش دقيقه و همچنين سريع و قوي است. كاش مي شد ويژوال سي ياد بگيرم. . ================== PHP Code:
((بلوكهاي for و do و while و switch ،،، با اين دستور شكسته مي شوند و ...)) منظور من از بلوك ، مجموعه كدي است كه با ((كروشه)) {} محصور شده. . ===== تذكر اينكه استفاده از اين دستور در سوئيچ كيس ، رايج است. استفاده از آن در بلوكهاي ديگه را تمرين كنيد. من خودم هنوز تمرين نكردم تا نتيجه را بگم. . سئوال : سي چند كلمه كليدي دارد؟ اين دستور جزو كلمات كليدي است. . Last edited by saalek; 02-13-2006 at 02:59 PM.. |
|
|
|
![]() |
| امکانات بيشتر | |
|
|