PersianTools Forums

Go Back   PersianTools Forums > برنامه نویسی و طراحی وب، سیستمهای مدیریت سایت > برنامه نویسی > خانواده C++ , C

Reply
 
امکانات بيشتر
Old 12-19-2005, 03:42 AM   #76
saalek
مدیر بازنشسته
 
saalek's Avatar
 

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..
saalek is offline   Reply With Quote
Old 12-19-2005, 01:05 PM   #77
لیلی
Registered User
 

Join Date: Nov 2005
Location: Esf
Posts: 15
سلام
یه سوال در مورد مبنا داشتم.
در مبنای 16 شما گفتید اعداد به صورت 0123456789abcdef در می اید.در قسمت اشاره گر ها شما ادرس یک متغیر رو چاپ کردید که 0x8f9ffff4 بود.و ادرس متغیر هم در مبنای 16 است.سوالم اینه این x چیه؟این منظور حرف x
یا یه علامت خاصه؟
لیلی is offline   Reply With Quote
Old 12-19-2005, 01:19 PM   #78
saeedsmk
مدیر بازنشسته
 
saeedsmk's Avatar
 

Join Date: Sep 2003
Posts: 1,523
در سي اعداد در چند مبنا بيان ميشن
دسيمال . هگزادسيمال . اكتال( مبنا 8)
اگه اعداد علامت مشخصه اي نداشته باشه يعني عدد ده دهي يا دسيمال
اگه علامت داشته باشه بسته به علامت عدد در مبنا مورد نظر بيان شده مثلا 0x ( نه x) يعني عدد در مبناي 16 داره بيان ميشه .
اگه اول عدد 0 باشه يعني اين عدد در مبناي 8 مثلا 010
__________________
در دنيايي كه مرگ شكارچي آن است بايد شكارچي بود.
300 the movie

Last edited by saeedsmk; 12-19-2005 at 01:24 PM..
saeedsmk is offline   Reply With Quote
Old 12-19-2005, 06:22 PM   #79
saalek
مدیر بازنشسته
 
saalek's Avatar
 

Join Date: May 2005
Location: در پاي كوهپايه ها
Posts: 654
با تشكر از كمكهاي تمامي دوستان كه ما را تنها نمي گذارند.

-----------------------------------
آرايه و اشاره گر و string در سي كمي پيچيده است و بايستي با مثال و تمرين ، بر اين مباحث مسلط شويم.
در پستهاي بعدي سعي مي كنيم با مثالهاي متعدد ،بر اين مباحث مسلط شويم.
.
saalek is offline   Reply With Quote
Old 12-19-2005, 11:46 PM   #80
saalek
مدیر بازنشسته
 
saalek's Avatar
 

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;
}
شرح برنامه : 3 متغير از نوع int تعريف شده. كه سومي آرايه است. يعني آرايه اي كه اجزايش int است و 20 عضو دارد. پس با برنامه پست قبلي ما كه آرايه اي از char بود فرق مي كند.
آنجا char ها كاروان تشكيل مي دادند و اينجا int ها.

هدف برنامه: برنامه يك عدد در مبناي 10 مي گيره و عدد به مبناي 2 بازمي گرداند.

روش كار برنامه: در پست قبل از روش تقسيم هاي متوالي بر 2 براي (( تبديل از مبناي 10 به 2 )) استفاده كرديم. اين برنامه هم همين كار را مي كند.
عدد را از كاربر مي گيره و در x قرار مي دهد و بعد در يك حلقه while تقسيم ها را انجام مي دهد و با دستور باقيمانده % ، باقيمانده تقسيم ها را دريافت مي كند و در اعضاي آرايه قرار مي دهد.
در حلقه بعدي كه از نوع for است ، اعضاي آرايه را چاپ مي كند. اعضاي آرايه كه يا صفرند يا يك ، كنار هم كه چاپ مي شوند ، باعث ميشه عدد در مبناي 2 ساخته بشه.

به دستور b[20]={0} دقت كنيد. اين دستور همه 20 عضو آرايه را صفر مي كند.
و مي بينيد كه از علامت مجموعه استفاده شده، شايد ه اين دليل كه اعضاي هر آرايه ، هر يك به تنهايي يك متغير محسوب مي شوند و ما با مجموعه اي از متغير ها روبرو هستيم.

فوايد كار با برنامه: درك خوبي از تبديل به مبناي 2 ، تمرين با دو نوع حلقه ، تمرين آرايه.
.
اگر مي توانيد به عنوان تمرين كاري كنيد كه مبناي 16 خروجي برنامه باشد. من خودم هنوز كار نكردم ولي فكر كنم بشه.
.
saalek is offline   Reply With Quote
Old 12-20-2005, 12:12 AM   #81
saalek
مدیر بازنشسته
 
saalek's Avatar
 

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..
saalek is offline   Reply With Quote
Old 12-20-2005, 01:15 AM   #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;
}
لیلی is offline   Reply With Quote
Old 12-20-2005, 02:56 AM   #83
saalek
مدیر بازنشسته
 
saalek's Avatar
 

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..
saalek is offline   Reply With Quote
Old 12-20-2005, 12:14 PM   #84
programmer
Registered User
 
programmer's Avatar
 

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;
}
programmer is offline   Reply With Quote
Old 12-20-2005, 01:21 PM   #85
programmer
Registered User
 
programmer's Avatar
 

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;
}
البته ادعا نمیکنم خلاقم !
گفتم شاید براتون جالب باشه از این راه هم حلش کردم.
programmer is offline   Reply With Quote
Old 12-20-2005, 02:06 PM   #86
saalek
مدیر بازنشسته
 
saalek's Avatar
 

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..
saalek is offline   Reply With Quote
Old 12-20-2005, 03:23 PM   #87
saalek
مدیر بازنشسته
 
saalek's Avatar
 

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..
saalek is offline   Reply With Quote
Old 12-20-2005, 06:26 PM   #88
saalek
مدیر بازنشسته
 
saalek's Avatar
 

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..
saalek is offline   Reply With Quote
Old 12-21-2005, 01:13 AM   #89
Trusted Member
Electronics Art
کاربر فعال برق و الکترونیک
 
Electronics Art's Avatar
 

Join Date: Jul 2005
Posts: 1,385
سالك جان ممنون از وقتي كه براي اين تايپيك ميذارين
خسته نباشي عزيز
ادامه بده كه مشتاق يادگيري هستيم
__________________
Electronics Art is offline   Reply With Quote
Old 12-21-2005, 04:31 PM   #90
saalek
مدیر بازنشسته
 
saalek's Avatar
 

Join Date: May 2005
Location: در پاي كوهپايه ها
Posts: 654
پاسخ به:
Electronics Art

ممنون. من خيلي به برنامه نويسي علاقه مندم. مخصوصا سي كه خيلي حساب كتابش دقيقه و همچنين سريع و قوي است. كاش مي شد ويژوال سي ياد بگيرم.
.
==================
PHP Code:

  
break (keyword)
 =================
 
Passes control

 Syntax
:  break ;

The break statement causes control to pass to the statement following the
innermost enclosing 
while, do, for, or switch statement
من كنجكاو بودم كه break چه كاري انجام مي دهد. متن بالا را از help توربو سي آوردم. استنباط من از متن بالا اينه كه :

((بلوكهاي for و do و while و switch ،،، با اين دستور شكسته مي شوند و ...))

منظور من از بلوك ، مجموعه كدي است كه با ((كروشه)) {} محصور شده.
.

=====
تذكر اينكه استفاده از اين دستور در سوئيچ كيس ، رايج است. استفاده از آن در بلوكهاي ديگه را تمرين كنيد. من خودم هنوز تمرين نكردم تا نتيجه را بگم.
.
سئوال : سي چند كلمه كليدي دارد؟ اين دستور جزو كلمات كليدي است.
.

Last edited by saalek; 02-13-2006 at 02:59 PM..
saalek is offline   Reply With Quote
Reply

امکانات بيشتر

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT +4.5. The time now is 07:37 PM.

PersianTools RSS Feeds


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2010, Jelsoft Enterprises Ltd.