PDA

View Full Version : چند برنامه در یک برنامه



ReCoLoR
چهارشنبه 01 آذر 1385, 14:15 عصر
سلام دوستان
من در روزهای اولیه ی برنامه نویسی به سر میبرم. یک سوال دارم
من چند تا برنامه پیدا کردم که هرکدوم یک عمل روی دو ورودی انجام میدن مثلا یک برنامه برای محاسبه ی توان - یکی فاکتوریل و ...
حالا من میخوام این برنامه ها رو همشونو در یک برنامه قرار بدم بطوریکه وقتی دو عدد بهش میدیم تمام عملیات رو روی اون اعداد انجام بده و نتایجو چاپ کنه.

میشه راهنماییم کنین که چجوری این کارو انجام بدم؟


ممنون

sh_roohani
چهارشنبه 01 آذر 1385, 14:21 عصر
سلام،
شما سورس اون برنامه ها رو دارین یا باینریشونو؟ و آیا اون برنامه ها پارامتر خط دستور می گیرن یا نه؟

powerboy2988
چهارشنبه 01 آذر 1385, 21:06 عصر
شما اگه می خواین همچین کاری کنید همه اون کارایی رو که گفتین رو در یک class تعریف می کنید و هر کدومو هم به عنوان یه تابع در همون class تعریف می کنید و بعد تابع ها رو در برنامه فراخوانی می کنید

ReCoLoR
پنج شنبه 02 آذر 1385, 09:06 صبح
سلام
دوستان واقعا ممنونم از اینکه جواب دادین.

sh_roohani دوست عزیزم من سورس این برنامه ها رو از یه سایت پیدا کردم.
powerboy2988 جان متاسفانه من هنوز در سطحی نیستم که بتونم کلاس تعریف کنم.

بنابراین دوستان سورساشو اینجا قرار میدم و اگر میشه شما بزرگی کنین و زحمت برنامه ی اصلی رو بکشین.



#include <fstream.h>void main () {ifstream f1;ofstream f2;f1.open("scores.96");f2.open("final.96");int s1, s2, s3;float w1, w2, w3;f1 >> s1 >> w1;f1 >> s2 >> w2;f1 >> s3 >> w3;f2 << (s1*w1+s2*w2+s3*w3);}

ضرب :


#include <iostream.h>// Idea of the Russian Peasant Method (as old as 1700 B.C.)// x * n = 2x * (n/2) if n even// = x + x * (n-1) if n oddint fastmult (int x, int y) { int result; result = 0; while (y != 0) { if (y % 2 == 0) { x = 2*x; y = y/2; } else { result = result + x; y = y-1; } } return(result);}int main () { int x, y; cout << "Enter two natural numbers: "; cin >> x >> y; cout << x << " * " << y << " = " << fastmult(x,y) << endl; return(0);} فاکتوریل :
#include <iostream.h>int fact (int i) { int result = 1; while (i > 0) { result = result * i; i = i-1; } return(result);}int main () { int n; cout << "Enter a natural number: "; cin >> n; while (n < 0) { cout << "Please re-enter: "; cin >> n; } cout << n << "! = " << fact(n) << endl; return(0);}توان :


#include <iostream.h>int exp (int b, int e) { int result; result = 1; while (e != 0) { result = result * b; e = e - 1; } return(result);}int main () { int b, e; cout << "Enter base and exponent: "; cin >> b >> e; cout << b << " to the " << e << " = " << exp(b,e) << endl; return(0);}

چند تابع :


#include <iostream.h>typedef int Bool;const Bool TRUE = 1;const Bool FALSE = 0;Bool even (int);Bool odd (int);int readPosNum();void testOneNum();void panic();void main () { int i; char c; Bool more = TRUE; while (cin && more) { testOneNum(); cout << "More? [y = Yes, anything else No]: "; cin >> c; if (cin) more = (c == 'y'); }}void testOneNum () { int i; i = readPosNum(); if (even(i)) cout << "The number " << i << " is even." << endl; else cout << "The number " << i << " is odd." << endl;}int readPosNum () { int j; cout << "Enter a number >= 0: "; cin >> j; while (cin && j < 0) { cout << "Unacceptable, reenter: "; cin >> j; } if (cin) return(j); else panic();}Bool even (int i) { if (i == 0) return(TRUE); else return(odd(i-1));}Bool odd (int i) { if (i == 0) return(FALSE); else return(even(i-1));}void panic() { cout << "Disaster! Exiting ..." << endl; exit(-1);}

از لطف شما سپاسگذارم.

powerboy2988
پنج شنبه 02 آذر 1385, 09:15 صبح
دوست دارین برنامه شو بنویسم بزارم براتون؟

sh_roohani
پنج شنبه 02 آذر 1385, 09:30 صبح
سلام،

کار کردن با ورودی/خروجی رو که بلدین. نمونه ش هم تو همه این کدهایی که اینجا گذاشتین هست.
یه منوی ساده روی صفحه چاپ کنین که برای هر انتخاب یه شماره بذارین. بعد بسته به انتخاب کاربر یکی از توابع این برنامه ها رو صدا بزنین.

ReCoLoR
پنج شنبه 02 آذر 1385, 09:40 صبح
دوست دارین برنامه شو بنویسم بزارم براتون؟

اگه این کارو انجام بدی بعلاوه ی چهار عمل اصلی واقعا خیلی کمکم کردی و خیلی دعات میکنم چون کارم واقعا عجله ایه و نمیدونم چیکار باید بکنم.



سلام،

کار کردن با ورودی/خروجی رو که بلدین. نمونه ش هم تو همه این کدهایی که اینجا گذاشتین هست.
یه منوی ساده روی صفحه چاپ کنین که برای هر انتخاب یه شماره بذارین. بعد بسته به انتخاب کاربر یکی از توابع این برنامه ها رو صدا بزنین.

بهتره کمی بیشتر توضیح بدم. من تازه به این زبان علاقه مند شدم و فوق العاده تازه کارم. بله. کمی بلدم اما فکر نمیکنم در حد تعریف منو.


از هردوی شما دوستان که وقت میذارین ممنونم. ایشالا بتونم تو زمینه های دیگه جبران کنم.

arshia_
پنج شنبه 02 آذر 1385, 10:10 صبح
یه راه ساده تر از کلاس اینه که هر کدوم از مثالهایی رو که داری به عنوان یه تابع در نظر بگیری و از طریق تابع main مقدار دهی کنی و صدا بزنی
مثلا


fact(float a,b)
{
}
pow(float a,b)
.
.
.
int main
{
float x,y;
//read data
//call functions
pow(x,y);
fact(x,y);
.
.
.
return 0;
}

powerboy2988
پنج شنبه 02 آذر 1385, 10:49 صبح
در مورد ضرب ، توان و چند جمله ای توضیح بدین که چه کاری می خواین انجام بدین و کلا کاره برنامه تونو یه توضیح بدین ممنون می شم تا برنامه رو راحت تر بهتون بدم

ReCoLoR
شنبه 04 آذر 1385, 07:47 صبح
_arshia جان ممنون. جزئیات بیشتری میشه بگی؟ شرمنده داداش
powerboy2988 عزیز شرمنده من پنجشنبه و جمعه نمیتونم بیام. در مورد ضرب که دو عدد بگیره و در هم ضرب کنه و برای توان هم دو عدد بگیره و اولی رو به توان دومی برسونه.
کار برنامه هم به اینصورته که کلا ورودی ما 2 تا عدد صحیحه. اول چهار عمل اصلیو روی این دو عدد انجام بده و بعد اعمالی مثل توان مانند بالا که توضیح دادم و برای فاکتوریل هم هر دو عددی که بهش میدیم فاکتوریلشونو چاپ کنه و ...
اگر نوشتنش طول میکشه اگر لطف کنی و به روشی که دوستمون arshia_ (http://barnamenevis.org/forum/member.php?u=3024) vbmenu_register("postmenu_284533", true); فرمودن زحمتشو بکشی واقع ممنونت میشم. ایشالا بتونم به نحوی جبران کنم.


یاعلی

hasina
شنبه 04 آذر 1385, 08:16 صبح
اگه استفاده از تابع رو بلد نیستی می تونی تو یک حلقه تکرار از یک switch , case استفاده کنی. ساختارش هم به این صورته:


switch(Conditions)
{
case value1:
.
.
.
break;
case value2:
.
.
.
break;
}

ReCoLoR
شنبه 04 آذر 1385, 08:42 صبح
سلام ممنون
یعنی هرکدوم از برنامه هایی که تو پستم آوردمو بعد از case قرار بدم و بعد برنامه که تموم شد break ؟
میشه مثالی با یکی از اون برنامه ها بزنی؟

hasina
شنبه 04 آذر 1385, 09:52 صبح
سلام ممنون
یعنی هرکدوم از برنامه هایی که تو پستم آوردمو بعد از case قرار بدم و بعد برنامه که تموم شد break ؟
میشه مثالی با یکی از اون برنامه ها بزنی؟

البته استفاده از توابع منطقی تره. اما اگه مثالی برای switch case بخوای:



switch i
}
case 1:
zarb(a,b);
break;
case 2:
fac(a);
break;
}


دقت کن! در قسمتی که نوشتم zarb یا fac باید دستورات مربوط به ضرب یا فاکتوریل رو بنویسی. i هم انتخاب کاربر است که قبلا ازش گرفتی.

ReCoLoR
شنبه 04 آذر 1385, 10:19 صبح
خانم خیر دو دنیا ببینی.
امتحان کنم ببینم چی میشه.
در مورد تابع هم من اونجاییشو مشکل دارم که بعد int main() کدوم قسمت تابع رو بنویسم و بعد آکولادو ببندم و بعد کجاش میشه بدنه ش؟!

ReCoLoR
شنبه 04 آذر 1385, 10:42 صبح
ای بابا
دوستان ما اینجا جز دردسر برای شما هیچی نداریم.
خب یه تیکه هاییش یعنی ترکیبی از دو تابع فاکتوریل و ضربو نوشتم. یه مروتی کنین و چک کنین ببینین درسته که ادامه بدم و اونای دیگرم وارد کنم یا ... :





#include <iostream.h>

#include <conio.h>
unsigned long fact (int m, int n) ;
int product (int m , int n);
int main()
{
int m,n ;
clrscr() ;
count << "\n enter two positive integers number:";
cin >> m,n ;
count << "\n number=" << m << , << n <<, fact=" << fact(m,n) ;
getch() ;
return 0 ;
}
//*************
unsigned long fact(int)
{
if(x! = 0)
return(x * faxt(x-1)) ;
return 1 ;
}
int m , n ;
clrscr() ;
cout << "Enter two positive integer numbers:";
cin >> m >> n ;
cout << Their Product is : " << product(m,n) ;
getch() ;
return 0 ;
}
//*************
int product (int m, int n)
{
if(y == 1)
return x ;
return (x + product (x + product (x, y-1)) ;
}

hasina
شنبه 04 آذر 1385, 10:44 صبح
در مورد تابع هم من اونجاییشو مشکل دارم که بعد int main() کدوم قسمت تابع رو بنویسم و بعد آکولادو ببندم و بعد کجاش میشه بدنه ش؟!

قالب کلی:



تعریف هدر فایل ها
معرفی توابع
تعریف ساختارها و متغییر های سراسری
type main()
{
بدنه برنامه اصلی)فراخوانی توابع(
}
تعریف توابع


برای تعریف توابع هم درست مثل شروع برنامه اصلی عمل می کنی. یعنی اول نوعی که تابع برگشت می ده بعد اسم تابع و بعد پارامترهای ورودی ( نوع و نام) رو می نویسی. امید وارم موفق باشی.

ReCoLoR
شنبه 04 آذر 1385, 10:52 صبح
سلام

مگه بعد از اون ستاره ها اسم تابع رو ننوشتم؟ پس چجوری اصلاحش کنم؟

hasina
شنبه 04 آذر 1385, 10:55 صبح
تعریف تابع fac مشکل داره! تعداد پارامترهات با موقع فراخوانی یکی نیست. در ضمن باید علاوه بر نوع یک نام محلی هم براش تعریف کنی

ReCoLoR
شنبه 04 آذر 1385, 10:58 صبح
به چه صورتی اصلاح میشه؟ زحمتشو میکشین؟
بچه های پرتوان برسین به داد این ناتوان

hasina
شنبه 04 آذر 1385, 11:00 صبح
تابع فاکتوریل باید یک ورودی داشته باشه. پس قسمت فراخوانی را اصلاح کن و در هنگام تعریف بعد از int یک نام برای متغییر در نظر بگیر. در ضمن بعد از تابع فاکتوریل اون تیکه که نوشتی واسه چیه؟ بعد از اتمام تابع اگه می خوای تابع دیگه ای بنویسی باید نام و نوعش رو تعریف کنی.
--------------------
به نظر میاد تیکه بعد از تابع فاکتوریل مربوط به برنامه اصلیه. اون قسمت رو ببر توی تابع main البته فقط قسمت
cout << "Enter two positive integer numbers:";
cin >> m >> n ;
cout << Their Product is : " << product(m,n) ;
وبقیشو پاک کن
منظورم
int m , n ;
clrscr() ;
و
getch() ;
return 0 ;
بود

ReCoLoR
شنبه 04 آذر 1385, 11:06 صبح
فکر کنم اصلاحش کردم و n رو حذفش کردم. ضمنا اون که بعد از تابع فاکتوریل اومده مثلا تابع ضربه دیگه. یعنی اونم باز ایراد داره؟:افسرده:
شاید بهتر باشه بیخیال این جریان تابع شم!

hasina
شنبه 04 آذر 1385, 11:07 صبح
اول برنامه که توابعتو معرفی کردی فقط نوع پارامتر ها رو بنویس. اسم ها شون نیاز نیست
--------------------
اونی که بعد از فاکتوریله فراخوانی ضربه. تابعش بعد از ستاره های دومه
--------------------

شاید بهتر باشه بیخیال این جریان تابع شم!

با تابع راحتر می تونی کار کنی. اصلا نگران نباش. کار سختی نیست.

ReCoLoR
شنبه 04 آذر 1385, 11:20 صبح
درسته
ولی مشکل من فقط زمانه.
اصلا وقت ندارم.

به هر جهت ممنون از راهنماییات.
خیلی چیزا دستگیرم شد.


یاعلی

hasina
شنبه 04 آذر 1385, 11:49 صبح
#include <iostream.h>


#include <conio.h>
unsigned long fact (int,int);
int product (int,int);
int main()
{
int m,n ;
clrscr() ;
count << "\n enter two positive integers number:";
cin >> m,n ;
count << "\n number=" << m << , << n <<, fact=" << fact(m);
cout << "Enter two positive integer numbers:";
cin >> m >> n ;
cout << Their Product is : " << product(m,n) ;
getch() ;
return 0 ;
}
//*************
unsigned long fact(int x)
{
if(x! = 0)
return(x * faxt(x-1)) ;
return 1 ;
}
//*************
int product (int x, int y)
{
if(y == 1)
return x ;
return (x + product (x + product (x, y-1)) ;
}

ReCoLoR
شنبه 04 آذر 1385, 11:58 صبح
رفیق عالیه. دمت گرم.
نمیدونم چجوری باید زحمات شما و سایر دوستانو جبران کنم.

hasina
شنبه 04 آذر 1385, 12:20 عصر
#include <iostream.h>


#include <conio.h>
unsigned long fact (int,int);
int product (int,int);
int exp (int, int)
int main()
{
int m,n ;
clrscr() ;
count << "\n enter two positive integers number:";
cin >> m,n ;
count << "\n number=" << m << , << n <<, fact=" << fact(m);
cout << "Enter two positive integer numbers:";
cin >> m >> n ;
cout << Their Product is : " << product(m,n) ;
int b, e;
cout << "Enter base and exponent: ";
cin >> b >> e; cout << b << " to the " << e << " = " << exp(b,e) <<
getch() ;
return 0 ;
}
//*************
unsigned long fact(int x)
{
if(x! = 0)
return(x * faxt(x-1)) ;
return 1 ;
}
//*************
int product (int x, int y)
{
if(y == 1)
return x ;
return (x + product (x + product (x, y-1)) ;
}
//********************
int exp (int b, int e)
{
int result;
result = 1;
while (e != 0)
{
result = result * b; e = e - 1;
}
return(result);
}
//********************

--------------------
من اصلا منطق برنامه رو نگاه نکردم و چون وقت نداری به سرعت فقط ساختارشو یک کم اصلاح کردم. امید وارم به دردت بخوره

ReCoLoR
شنبه 04 آذر 1385, 12:37 عصر
حتما به درد میخوره

کاش دکمه ی سپاس هوشمند بود و به میزان علاقه ی ما قابل فشردن بود.
ممنون از شما. ایشالا نوبت منم بشه.


یاعلی

powerboy2988
شنبه 04 آذر 1385, 20:21 عصر
من فقط چند تابع رو ننوشتم بگید اون چی هستش؟

powerboy2988
شنبه 04 آذر 1385, 20:52 عصر
این همون چیزیه که می خوای ؟
اگه کمو کسری داره بگو ....


#include <iostream.h>
#include <conio.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
class all
{
public:
int fact (int i);
int zarb (int d,int s);
int tagsim (int d1,int s1);
int jam (int d2,int s2);
int menha (int d3,int s3);
};
//////////////////menha
int all::menha (int d3,int s3)
{
return s3-d3;
}

//////////////////jam
int all::jam (int d2,int s2)
{
return s2+d2;
}
//////////////////tagsim
int all::tagsim (int d1,int s1)
{
if (s1==0) cout<<"can`t divide in Zero!!!";
return (d1/s1);
}

//////////////////fact
int all::fact (int i)
{
int result = 1;
while (i > 0)
{
result = result * i;
i = i-1;
}
return(result);
}

/////////////////zarb
int all::zarb (int d,int s)
{
return (d*s);
}
main()
{
all p;
int num1,num2;
cout<<"enter number number 1 :=>";
cin>>num1;
cout<<"enter number number 2 :=>";
cin>>num2;

cout<<"the fact of"<< num1 << " is " <<p.fact(num1)<<endl;
cout<<"the zarb "<<num1<<" and "<< num2 <<" is "<< p.zarb(num1,num2)<<endl;
cout<<"the tagsim "<<num1<<" bar "<< num2 <<" is "<< p.tagsim(num1,num2)<<endl;
cout<<"the jam "<<num1<<" and "<< num2 <<" is "<< p.jam(num1,num2)<<endl;
cout<<"the menha "<<num1<<" bar "<< num2 <<" is "<< p.menha(num1,num2)<<endl;

getch();
return 0;
}

arshia_
یک شنبه 05 آذر 1385, 08:21 صبح
من امروز دوباره به این پست مراجعه کردم و دیدم خدا رو شکر دوستان پاسخ ای مفیدی ارسال کردن
کافیه یه فایل بسازی و متن کد برنامه رو توی اون ذخیره کنی و بعد کامپایل کنی
من اینکار رو واست انجام دادم و کد آقای powerboy2988 (http://barnamenevis.org/forum/member.php?u=22490) vbmenu_register("postmenu_285169", true);
رو با اجازه ایشون واست کامپایل کردم
البته چون اعداد ممکنه بزرگ باشن من به جای int از long int استفاده کردم شما می تونی از double هم استفاد کنی

shervin_agh67
پنج شنبه 23 آذر 1385, 10:41 صبح
دوست عزیز اینجور که من وضعیت شما رو دیدم ظاهرا شما اطلاعات پایه ایتون در زمینه سی کمه پیشنهاد می کنم که مفاهیم پایه ای سی رو بیشتر مطالعه کنید . بحث فقط بر سر این برنامه نیست. کلا سی رو خوبه بیشتر مطالعه کنید . دوستان لطف کنن کمکشون در یک حدی باشه که فرد خودش به حرکت وا داشته بشه و برنامه نویسی رو خودش یاد بگیره . البته منم در سی مبتدی هستم .

shervin_agh67
پنج شنبه 23 آذر 1385, 10:43 صبح
کتاب برنامه نویسی به زبان سی نوشته عین الله جعفر نژاد قمی برای شروع کتاب خوبیه . بعدا می تونید کتاب سی ++ ایشون رو هم بخونید .
البته شاید من اشتباه می کنم و شما رو دست کم گرفتم در هر صورت ببخشید.

powerboy2988
پنج شنبه 23 آذر 1385, 22:01 عصر
حالا شما که میگید مبتدی هستید اصلا تو زمینه برنامه نویسی دنبال کتاب فارسی نباشید، همین آقای قمی مگه برنامه نویس هستش که میاد کتاب برنامه نویسی تالیف می کنه؟؟

shervin_agh67
شنبه 25 آذر 1385, 16:26 عصر
به عنوان شروع بهتره که از کتابهای فارسی موجود استفاده کرد کتاب آقای قمی کتابی هست که مورد تائید بیشتر استادان دانشگاه هست در این کتاب سی به زبان آسان تری شرح داده شده و اصول در این کتاب زیاد مورد توجه نیست به همین دلیل خیلی ها این کتاب رو رد می کنن . خوب اگر از ساختار این کتاب خوشتون نمی یاد کتاب کاف من هم کتاب خوبیه توصیه میشه ابتدا کتابهای ترجمه شده را مطالعه بفرمائید سپس در صورت اشکال و نبود منابع کتب خارجی منابع خوبی هستند.

shervin_agh67
شنبه 25 آذر 1385, 16:27 عصر
بابا این ایرانی ها رو اینقدر دست کم نگیرید .