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

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

saalek

مدیر بازنشسته
تاریخ عضویت
24 می 2005
نوشته‌ها
654
لایک‌ها
53
محل سکونت
در پاي كوهپايه ها
جناب پروگرمر در تالار برنامه نويسي همين دو روز پيش در تاپيك زير:
http://forum.persiantools.com/showthread.php?t=41836
يك برنامه مشابه را در
qbasic
حل كرده اند. ولي اينجا اعشار مزاحمه.
آقا وحيد اگر شما روش شمارش تعداد اعشار را بگيد ديگه فكر كنم قضيه كلا حله.
البته من هم تمام تلاشم در اين راه بود. يعني شمارش تعداد ارقام اعشار و تعداد ارقام صحيح. ولي بدون تابع جز صحيح مشكل داشتم.
.
 

saeedsmk

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

اميدوارم كمك كنه
 

saalek

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

Vahid.k

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

Vahid.k

Guest
تاریخ عضویت
15 آگوست 2005
نوشته‌ها
144
لایک‌ها
5
تمرین شماره 4 :

کد:
#include"iostream.h"
#include"conio.h"
#include"stdio.h"
void main()
{
clrscr();
double d,n,m;
float b=10;
int cnt,cnt2,r;
long int c,h;
cout<<"plz enter a float number : ";
cin>>n;
m=n;
cnt=0;
d=1;
while(d!=0)
{
m*=10;
c=m/b;
d=c*b;
d=m-d;
++cnt;
}
--cnt;
m/=10;
cnt2=0;
h=m;
while (h!=0)
{
r=h%10;
++cnt2;
cout<<r;
if (cnt2==cnt)
cout<<".";
h=h/10;
}
getch();
}

تمرین شماره 5 :


کد:
#include"iostream.h"
#include"conio.h"
#include"stdio.h"
void main()
{
clrscr();
double n,q,e;
int cntn,cnt2,i;
long int m,r,d;
cout<<"plz enter a float number : ";
cin>>n;
m=n;
cntn=0;
d=1;
while(d!=0)
{
d=m%10;
m=m*0.1;
++cntn;
}
--cntn;
float b=10;
int cnt4;
long int c;
q=n;
cnt4=0;
e=1;
while(e!=0)
{
q*=10;
c=q/b;
e=c*b;
e=q-e;
}
q/=10;
//start print
int j,cnt=1;
long int p,a,s;
m=q;
while(m>=10)
{
m/=10;
cnt++;
}
p=q;
for(i=cnt;i>=1;i--,cntn--)
{
a=1;
for(j=i;j>1;j--)
a*=10;
s=p/a;
cout<<s;
if (cntn==1)
cout<<"\n";
p%=a;
}
getch();
}
 

saalek

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

Arash_j13

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

برنامه بنویسید که یه رشته رو از کاربر دریافت که و معکوس اون رشته رو چاپ کنه (بدون استفاده از آرایه و تخصیص حافظه ی پویا)
 

Vahid.k

Guest
تاریخ عضویت
15 آگوست 2005
نوشته‌ها
144
لایک‌ها
5
برای تاخیرم متاسفم !

بزودی چند تا تمرین جالب میذارم . متاسفانه درس برنامه سازی پیشرفته من هنوز به رشته ها نرسیده و نمی تونم تمرین آقا آرش را بنویسم .
جناب saalek خان باید خودشون زحمتشو بکشن :happy:
 

saalek

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

Arash_j13

Registered User
تاریخ عضویت
18 فوریه 2005
نوشته‌ها
778
لایک‌ها
2
محل سکونت
مشهد
درس برنامه سازی ما هم زیاد جلو نیست ما تا فصل سوم (انتهای توابع) از کتاب C++ How To Program خوندیم
طرز نوشتن این خیلی ساده بیشتر از اونکه رشته بخواد تابع می خواد رشته رو به صورت کارکتر کارکتر با getch بخونید
نه اشاره گر می خواد نه رشته یه الگوریتم ساده داره
 

saalek

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

Arman_BTC

کاربر تازه وارد
تاریخ عضویت
28 فوریه 2006
نوشته‌ها
138
لایک‌ها
1
بله اقا سالک هستم تمرین ها رو هم دنبال میکنم
ولی نمی دونم چرا اقا ارش این قدر از ارایه بدش میاد :( تمرین هایی که میدن بدونه ارایه است
 

saalek

مدیر بازنشسته
تاریخ عضویت
24 می 2005
نوشته‌ها
654
لایک‌ها
53
محل سکونت
در پاي كوهپايه ها
سلام آرمان جان. آخه با آرايه همه كارها ساده ميشه.
من دارم مي فرستم به پشته كاراكترهايي را كه كاربر ميده. ولي فقط عدد ميشه به پشته فرستاد.
char
قبول نمي كنه.
يه چيزي بود كه عدد آن كاراكتر را بيرون مي داد. چي بود؟
ascii?!!
--------------
please help.
.
جوابم را جناب پروگرمر در تاپيك ((سئوالات كوچك سي)) گفتند.

http://forum.persiantools.com/showthread.php?p=631562#post631562
به نقل از programmer :
از (int) برای تبدیل نوع استفاده میکنن.

به این کد نگاه کن:

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

int main()
{
 int x=0;
 char c='a';
 x=(int)c;
 clrscr();
 cout<<c<<"=>"<<x<<endl;

 getch();
 return 0;
}

c یک کاراکتر است و x یک عدد صحیح .

همونطور که میدونید هر کاراکتر یک کد اسکی داره.

وقتی (int) رو قبل از c قرار میدیم کامپایلر معادل عددی c را در x قرار میدهد.
 

Arash_j13

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

منظور شما از پشته همون استک سیستم هست یا ساختمان داده معروف به پشته ولی در هر دو صورت می شه هر چیزی رو بر روی پشته push کرد و مشکلی نداره اگه اولی منظورتونه کارکتر ها رو درون ah بزارید بعد ah رو push کنید
 

saalek

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

با ريختن در
ah
فكر كنم ديگه قضيه حله.
ممنون.
.

کد:
#include <iostream.h>
#include <conio.h>
int main()
{
  int i=0; char c,e;
  clrscr();
  cout<<"print your name and press ((q))"<<endl;
    do
      {
  c=getche();
  i++ ;
  asm{ mov ah,c;   push ax;}

    }     while (c!='q')  ;

   asm {  pop dx;}
   cout<<endl;

   for (int k=i;k>1;k--)
     {
      asm{ pop bx; mov e,bh ; }
  cout<<e;
      }

  getch();
  return 0;
}
سعي مي كنم به راههاي بهتري حل كنم. اين را تفنني فرستادم.
.

ee.gif

 

Arash_j13

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

Arash_j13

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

قراره یه تعدادی توی یک اینتخابات شرکت کنند فرض کنید کاندیدا ها با اعداد 1 تا 3 مشخص می شوند برنامه ای بنویسید که این انتخابات رو برگزار کنه و برده انتخابات رو مشخص کنید
برنده کسی است که نصف به علاوه یک رای رو اورده باشه و در صورت پیدا نشدن اکثریت مطلق این امر رو گزارش کنه در شمن تعداد رای هر کدوم از نامزد ها رو هم بگه

برای تعداد شرکت کننده ها از یه ثابت استفاده کنید
 

Arman_BTC

کاربر تازه وارد
تاریخ عضویت
28 فوریه 2006
نوشته‌ها
138
لایک‌ها
1
سلام
این برنامه رو نوشتم ولی قسمت اخرش که برای تعیین برنده است از دوتا حلقه forاستفاده کردم که به نظرم خیلی ابتدایی شده ممنون میشم راهنمایی کنید
کد:
  #include<iostream.h>
#include<stdlib.h>
#include<time.h>
int main (){
int b[3]={0};
const int size=10;
srand(time(0));
for(int j=0;j<size;j++)
++b[(rand()%3+1)-1];
for(int i=0;i<3;i++)
cout<<"number"<<i+1<<"  "<<b[i]<<endl;
int flag=0;
for(j=0;j<3;j++){
if(b[j]>=size/2+1){
cout<<"number "<<j+1<<" wins";
flag=1;}}
for(j=0;j<3;j++){
if(b[j]!=size/2+1 && flag==0){
cout<<"nobody wins";
break;}}

return 0;
}
 

saalek

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


a1.gif

.
 
بالا