• پایان فعالیت بخشهای انجمن: امکان ایجاد موضوع یا نوشته جدید برای عموم کاربران غیرفعال شده است

تمرينهايي براي سي++ از پايه

Vahid.k

Guest
تاریخ عضویت
15 آگوست 2005
نوشته‌ها
144
لایک‌ها
5
متاسفم . فراموش کردم این شرط را متذکر بشم. راستش خودم هنوز تمرین1 را بدون آرایه ننوشتم . آقا مهدی به نظر شما با کدی که در تاپیک پرش از حلقه ای به حلقه دیگر نوشتم و شما زحمت کشیدید از TRUE برای پرش استفاده کردید این برنامه نوشته نمیشه ؟
تا یه جاهایی نوشتمش ولی درست در نمیاد. ببینید شما نمی تونید کاملش کنید :


کد:
#include"iostream.h"
#include"conio.h"
#include"stdio.h"
void main()
{
clrscr();
int i=1,j=1,b=1,a=1,w;
int TRUE = 1;
for (i=i;i<5 && TRUE ;++i)
{
int TRUE = 1;
if (i==1)
cout<<"3";
if (i==2)
cout<<"5";
if (i==3)
cout<<"7";
if (i==4)
cout<<"8";
for (j=1;j<5 && TRUE ;++j)
{
if (j==1)
cout<<"3";
if (j==2)
cout<<"5";
if (j==3)
cout<<"7";
if (j==4)
cout<<"8";
for (a=1;a<5 && TRUE ;++a)
{
if (a==1)
cout<<"3";
if (a==2)
cout<<"5";
if (a==3)
cout<<"7";
if (a==4)
cout<<"8";
for(b=1;b<5 && TRUE ;++b)
{
if (b==1)
cout<<"3";
if (b==2)
cout<<"5";
if (b==3)
cout<<"7";
if (b==4)
cout<<"8";
cout<<"\n";
TRUE = 0 ;
}
}
}
getch ();
}
}
 

Vahid.k

Guest
تاریخ عضویت
15 آگوست 2005
نوشته‌ها
144
لایک‌ها
5
به نقل از saalek :
با سلام.
من همين را هم با كلي تقلا نوشتم.
نمي دونم شايد بدون آرايه هم بشه. شايدم راحت باشه.ببينيم چي ميشه.
.
=======================
با اشاره گر نوشتم اين بار.
درسته؟
کد:
#include<iostream.h>
#include<conio.h>
main()
{
clrscr();
int a=8,b=7,c=5,d=3;
int* p;
p=&a;

int i,j,k,l;
for( i=0;i<=3;i++ )
for( j=0;j<=3;j++ )
for( k=0;k<=3;k++ )
for( l=0;l<=3;l++ )
{
cout <<*(p-i);
cout <<*(p-j);
cout <<*(p-k);
cout <<*(p-l);
cout<<" ,";
}
getch();
}

برنامه شما خیلی خوبه ولی استاد ما سفارش اکید کرده که برای این برنامه ها فقط از دستورات ابتدایی مثل for / if /while و .. استفاده کنید .
 

saalek

مدیر بازنشسته
تاریخ عضویت
24 می 2005
نوشته‌ها
654
لایک‌ها
53
محل سکونت
در پاي كوهپايه ها
با سلام. اين بار فقط با for و if نوشتم. خوبه؟
کد:
#include<iostream.h>
#include<conio.h>
main()
{
clrscr();

int i,j,k,l;
for( i=3;i<=9;i=i+2 )
for( j=3;j<=9;j=j+2 )
for( k=3;k<=9;k=k+2 )
for( l=3;l<=9;l=l+2 )
{
if (i==9) i=8;
if (j==9) j=8;
if (k==9) k=8;
if (l==9) l=8;
cout <<i;
cout <<j;
cout <<k;
cout <<l;
cout<<" ,";
}
getch();
}
 

Vahid.k

Guest
تاریخ عضویت
15 آگوست 2005
نوشته‌ها
144
لایک‌ها
5
به نقل از saalek :
با سلام. اين بار فقط با for و if نوشتم. خوبه؟
کد:
#include<iostream.h>
#include<conio.h>
main()
{
clrscr();

int i,j,k,l;
for( i=3;i<=9;i=i+2 )
for( j=3;j<=9;j=j+2 )
for( k=3;k<=9;k=k+2 )
for( l=3;l<=9;l=l+2 )
{
if (i==9) i=8;
if (j==9) j=8;
if (k==9) k=8;
if (l==9) l=8;
cout <<i;
cout <<j;
cout <<k;
cout <<l;
cout<<" ,";
}
getch();
}

درود بر شما . به بهترین و ساده ترین راه برنامه را نوشتید .
 

Mehdi.T

کاربر فعال برنامه نویسی
کاربر فعال
تاریخ عضویت
30 سپتامبر 2005
نوشته‌ها
506
لایک‌ها
3
محل سکونت
In Search of Sunrise
به نقل از Vahid.k :
متاسفم . فراموش کردم این شرط را متذکر بشم. راستش خودم هنوز تمرین1 را بدون آرایه ننوشتم . آقا مهدی به نظر شما با کدی که در تاپیک پرش از حلقه ای به حلقه دیگر نوشتم و شما زحمت کشیدید از TRUE برای پرش استفاده کردید این برنامه نوشته نمیشه ؟
تا یه جاهایی نوشتمش ولی درست در نمیاد. ببینید شما نمی تونید کاملش کنید :

وحید جان من چیزی از کد نفهمدم همچنین دلیل استفاده از شرط رو ،
اما از دیدگاه کد نویسی شما شرط رو کاملا درست پیاده سازی کردید .
 

Vahid.k

Guest
تاریخ عضویت
15 آگوست 2005
نوشته‌ها
144
لایک‌ها
5
به نقل از MehdiTeh :
وحید جان من چیزی از کد نفهمدم همچنین دلیل استفاده از شرط رو ،
اما از دیدگاه کد نویسی شما شرط رو کاملا درست پیاده سازی کردید .

تشکر . آقا saalek بهتر و روان تر از من این برنامه را نوشتنش .

بقیه برنامه ها را هم فراموش نکنید .
 

saalek

مدیر بازنشسته
تاریخ عضویت
24 می 2005
نوشته‌ها
654
لایک‌ها
53
محل سکونت
در پاي كوهپايه ها
5) برنامه ای بنویسید که عدد اعشاری را از ورودی خوانده و هر یک از قسمت های صحیح و اعشاری آن را به صورت یک عدد صحیح به خرو جی ببرد.

از تابع استفاده كردم من. براي بقيه تمرينها هم ميشه از تابع استفاده كرد؟
مثل تابع جز صحيح، تابع قدر مطلق.

البته در تمرين زير بايد قسمت اعشاري در عددي ضرب بشه تا كاملا جواب مسئله باشه كه فكر كنم كار ساده اي باشه.

کد:
#include<iostream.h>
#include<conio.h>
#include<math.h>
main()
{
clrscr();
double a,i,f;
cout<<"input a"<<endl;cin>>a;
f=modf(a,&i);
cout<<"sahih="<<i<<endl;
cout<<"ashaar="<<f<<endl;

getch();
}


f1.gif


==========================
تمرين سوئيچ را هم خيلي كار كردم ولي نتوانستم حل كنم.
.
عدد كامل يعني چي؟
.
 

programmer

کاربر تازه وارد
تاریخ عضویت
1 نوامبر 2005
نوشته‌ها
85
لایک‌ها
0
سلام به همگی

میبینم که سخت مشغول حل کردن سوالات آقا وحید هستید !!

من ترجیح میدم حل نکنم تا بقیه دوستان حل کنن.(شایدم بلد نیستم)

سالک جان فکر کنم منظور آقا وحید این بود که قسمت اعشاری رو هم به صورت صحیح بدست بیارید یعنی 0.361 بشه 361

سوال دوم کمی مبهمه ! یعنی صورت سوال مشخص نیست.

عدد کامل هم اگه حافظه ام یاری کنه عددی هست که برابر مجموع تمام مقسوم علیه هایش(غیر از خودش) باشه.
مثلا 6 که برابر 1+2+3
 

Vahid.k

Guest
تاریخ عضویت
15 آگوست 2005
نوشته‌ها
144
لایک‌ها
5
به نقل از saalek :
5) برنامه ای بنویسید که عدد اعشاری را از ورودی خوانده و هر یک از قسمت های صحیح و اعشاری آن را به صورت یک عدد صحیح به خرو جی ببرد.

از تابع استفاده كردم من. براي بقيه تمرينها هم ميشه از تابع استفاده كرد؟
مثل تابع جز صحيح، تابع قدر مطلق.

البته در تمرين زير بايد قسمت اعشاري در عددي ضرب بشه تا كاملا جواب مسئله باشه كه فكر كنم كار ساده اي باشه.

کد:
#include<iostream.h>
#include<conio.h>
#include<math.h>
main()
{
clrscr();
double a,i,f;
cout<<"input a"<<endl;cin>>a;
f=modf(a,&i);
cout<<"sahih="<<i<<endl;
cout<<"ashaar="<<f<<endl;

getch();
}


f1.gif


==========================
تمرين سوئيچ را هم خيلي كار كردم ولي نتوانستم حل كنم.
.
عدد كامل يعني چي؟
.


خسته نباشید . از تابع نباید استفاده کنید . اعدادی که تمرین 5 بر می گرداند باید هر دو صحیح باشند . عدد کامل عددی است که اگر تمام مقسوم علیه هایش را با هم جمع کنیم ( به جز خود عدد ) مساوی خود عدد شود . مثل عدد 6 و عدد 28 ( تمرین 3 تمرین ساده ای است ).
 

saalek

مدیر بازنشسته
تاریخ عضویت
24 می 2005
نوشته‌ها
654
لایک‌ها
53
محل سکونت
در پاي كوهپايه ها
با سلام.
آقا وحيد مي دانستم تابع هم قبول نيست ولي اين تابع را مدتها بود مي خواستم امتحان كنم. بهر حال براي فرستادن بد نبود.
عدد كامل را هم فهميدم.
================
جناب پروگرمر، حرفه اي ها را(فرقه آرشيه) با تمرينات ساده ما چكار؟!!
.درود بر شما
 

Arash_j13

Registered User
تاریخ عضویت
18 فوریه 2005
نوشته‌ها
778
لایک‌ها
2
محل سکونت
مشهد
این فرقه ساختگی چیه به من چسبوندی من هنوز این ترم دارم C++ می خونم
 

Arman_BTC

کاربر تازه وارد
تاریخ عضویت
28 فوریه 2006
نوشته‌ها
138
لایک‌ها
1
سلام دوستان
من برنامه عدد کامل رو نوشتم ولی نمیدونستم که پایان بخش اعداد رو چی بزارم؟برای همین طوری نوشتم که دوباره از کاربر سوال کنه که میخواد عددی وارد کنه یا نه.
امیدوارم درست باشه
کد:
 #include<iostream.h>
int main(){
int m=1,s=0,a;
char ch;
do{
cout<<"Enter an integer number:";
cin>>a;
for(;m<a;m++){
if(a%m==0)
s+=m;}
if(s==a)
cout<<"the number is perfect"<<"\n";
else
cout<<"the number is not perfect"<<"\n";
cout<<"do you want to continue?";
cin>>ch;
}while(ch=='y');
return 0;
}
 

Vahid.k

Guest
تاریخ عضویت
15 آگوست 2005
نوشته‌ها
144
لایک‌ها
5
به نقل از Arman_BTC :
سلام دوستان
من برنامه عدد کامل رو نوشتم ولی نمیدونستم که پایان بخش اعداد رو چی بزارم؟برای همین طوری نوشتم که دوباره از کاربر سوال کنه که میخواد عددی وارد کنه یا نه.
امیدوارم درست باشه
کد:
 #include<iostream.h>
int main(){
int m=1,s=0,a;
char ch;
do{
cout<<"Enter an integer number:";
cin>>a;
for(;m<a;m++){
if(a%m==0)
s+=m;}
if(s==a)
cout<<"the number is perfect"<<"\n";
else
cout<<"the number is not perfect"<<"\n";
cout<<"do you want to continue?";
cin>>ch;
}while(ch=='y');
return 0;
}

خسته نباشید . درست و بی نقص بود .
 

saalek

مدیر بازنشسته
تاریخ عضویت
24 می 2005
نوشته‌ها
654
لایک‌ها
53
محل سکونت
در پاي كوهپايه ها
با سلام.
من دو روزه دارم روي دو تمرين آخري كار مي كنم.
با ريختن دابل داخل لانگ ، سعي كردم تابع جز صحيح بسازم. درست هم جواب مي داد ولي گاهي جواب اصلا عجيب درمي آمد.
آقا تابع و همه چي را از ما گرفتيد مي گيد با يك متغير بريم اين همه كار كنيم. من ديگه نمي دانم چه كار كنم.
البته خيلي چيزا هم اين وسط ياد گرفتم. كه تمرين خيلي خوبي بود.
دوستان اگر كمي راجع به تبديل انواع متغير به هم از بر چيزي بلدند بگن. من به كتاب مراجعه نكردم. نمي خواهم هم كسي وقت بگذاره. اگر همين جوري نكاتي در نظرتان بود بگيد.
.
 

Arash_j13

Registered User
تاریخ عضویت
18 فوریه 2005
نوشته‌ها
778
لایک‌ها
2
محل سکونت
مشهد
در مورد تغییر نوع اعشاری به صحیح همیشه نمی شه به صورت مستقیم عمل کرد چون اعداد اعشاری به روش ممیز شناور (floating point) ذخیره می شن برای همین معلوم نیست که چند رقم صحیح و چند بایت صحیح و چند بایت اعشاری باشن برای همین کپی بیت به بیت (روشی که با تبدیل نوع معمولی انجام می شه) همیشه درست از آب در نمی یاد برای اینکار بهتره از توابع تبدیل نوع استفاده کنید
 

saalek

مدیر بازنشسته
تاریخ عضویت
24 می 2005
نوشته‌ها
654
لایک‌ها
53
محل سکونت
در پاي كوهپايه ها
ممنون آرش جان.
توضيحات خيلي خوبي بود.
فقط اصطلاح مميز شناور را كمي اگه ميشه توضيح بدهيد.
من هم استفاده از توابع تبديل نوع به ذهنم آمد ولي حالا كه شما گفتيد به اهميت اين توابع بيشتر پي بردم.
البته در اين تاپيك هر نوع تابعي ممنوع است و من فكر كنم بي تابع ما خيلي در مضيقه ايم . براي هر كار ساده در مضيقه ايم.
خيلي تاپيك خوبي شد وحيد جان. متغير كلي برايم جا افتاد و اهميت توابع را فهميدم. و قدرت ابزار آرايه و اشاره گر هم برايم معلوم شد.
.
 

saeedsmk

مدیر بازنشسته
تاریخ عضویت
6 سپتامبر 2003
نوشته‌ها
1,518
لایک‌ها
4
سلام
خوب هستيد .با اجازه اقا ارش
سالك جان مميز شناور چيز عجيبي نيست در واقعه بعلت اينكه اعداد اعشاري هر جا ميشه مميز قرار بگيره بهش ميگن مميز شناور . توي كامپيوتر براي محاسبه اعداد اعشاري توابع مختلفي وجود داره و.....

اما در مورد استفاده نكردن از تابع
ببين در اين صورت شما بايد از روش هاي استفاده كنيد كه بيشتر رياضي هستند و اصولي هستند كه كامپيوتر از انها استفاده ميكنن

کد:
#include <conio.h>
#include <iostream.h>

int intPart(float Input_Num );
int floatPart(float Input_Num );

void main()
{
	clrscr();
	float Input_Num;
	float dumm;
	long int tem1;
	long int tem2;
	cout<<"Please Enter number: ";
	cin>>Input_Num;
	tem1=intPart(Input_Num);
	tem2=floatPart(Input_Num);
	tem2=Input_Num*tem2-tem1*tem2;
	       cout<<"The integer Part is "<<tem1<< endl;
	       cout<<"The float part is "<<tem2<< endl;

	cout<<"Press any key ...";
	getch();
}
int intPart(float d)
{
    long int Power_T=10;
    long int tem1;
    long int tem2;
    while ((d/Power_T)>1)
	Power_T*=10;
    tem1=Power_T/2;
    tem2=Power_T;
    while ((d-tem1>1) || (d-tem1<0))
      {
       if (tem1<d)
       tem1+=(tem2-tem1)/2;
       else{
	 tem2=tem1;
	 tem1/=2;
	}
      }
	    return tem1;
}
int floatPart(float d){
    float Power_T=10.0;
    int i=10;
    float dumm;
    dumm=intPart(d*Power_T);
    dumm=d*Power_T-dumm;
    while (dumm>0.001 && dumm<0.99999)
     {
      Power_T=Power_T*10;
      i*=10;
      dumm=intPart(d*Power_T);
      dumm=d*Power_T-dumm;
     }
     return i;
}

البته اين كد يكي از مشخصات كامپيوتر هم به نمايش ميگذاره يعني عدد كسري رو
شما عدد
12.62 رو وارد كنيد تا خودتون ببينيد چرا
 

saalek

مدیر بازنشسته
تاریخ عضویت
24 می 2005
نوشته‌ها
654
لایک‌ها
53
محل سکونت
در پاي كوهپايه ها
با سلام.
چرا چنين است؟ من تابحال فكر مي كردم كه اعداد قسمت اعشاري هم به شكل عدد در خانه هاي Ram ذخيره مي شوند. اين قضيه كسر چيه؟ مگر موقع ذخيره به شكل كسر ذخيره ميشه؟ چيز عجيبيه!!


f7.gif

 

saeedsmk

مدیر بازنشسته
تاریخ عضویت
6 سپتامبر 2003
نوشته‌ها
1,518
لایک‌ها
4
خوب ببينيد
100/3 چي ميشه
اعداد اعشاري بصورت كسري ذخيره ميشوند
چون كامپيوتر فقط اعداد اينتجر رو ميشناسه و حين ذخيره اعداد و تقسيم كردن در مبناها و بر گردوندن به مبنا و يا ضرب اين كسرها مثل 3/100 عمل ميكنند و عدد نهايي چيزي ميشه مثل 3.3333333333333
 

Vahid.k

Guest
تاریخ عضویت
15 آگوست 2005
نوشته‌ها
144
لایک‌ها
5
یک راهی که من ازش استفاده کردم اینه :
تعداد ارقام اعشاری را می شماریم . به همان اندازه در 10 ضرب می کنیم مثلا : 12.344 سه رقم اعشار داره پس 3بار در 10 ضرب می کنیم .
 
بالا