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

تابع راندوم و زمان در سي

ariaboy

کاربر تازه وارد
تاریخ عضویت
1 جولای 2003
نوشته‌ها
246
لایک‌ها
0
من چند تا برنامه ميخوام

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

2 - يه برنامه كه ساعت رو به ما نشون بده مثل 15 : 55 : 20 ( يه ساعت ميخوام )


راستي همه ي اينا بايد با C باشه نه سي پلاس پلاس

هرجور باشه از خجالتتون در ميام .
 

ariaboy

کاربر تازه وارد
تاریخ عضویت
1 جولای 2003
نوشته‌ها
246
لایک‌ها
0
به نقل از ariaboy :
من چند تا برنامه ميخوام

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

2 - يه برنامه كه ساعت رو به ما نشون بده مثل 15 : 55 : 20 ( يه ساعت ميخوام )


راستي همه ي اينا بايد با C باشه نه سي پلاس پلاس

هرجور باشه از خجالتتون در ميام .




جون مادرتون جواب بدين
 

littlerabbit

مدیر بازنشسته
کاربر فعال
تاریخ عضویت
13 جولای 2003
نوشته‌ها
678
لایک‌ها
6
سن
43
محل سکونت
Iran
1- منظورتون از بدون رندوم چيه؟ مثلا اگه بياد و ساعت فعلي سيستم رو بگيره (و تاريخو) بعد اونا رو قاطي كنه و يه عدد بر اساس اونا بده مشكلتون حل ميشه؟
2-يعني ميخوايد ساعت فعلي سيستم رو بگيريد؟
 

ariaboy

کاربر تازه وارد
تاریخ عضویت
1 جولای 2003
نوشته‌ها
246
لایک‌ها
0
1 - بله

2 - بله
ممنوون ميشم
 

MehdiC#

کاربر تازه وارد
تاریخ عضویت
2 نوامبر 2004
نوشته‌ها
55
لایک‌ها
0
محل سکونت
ابهر
سلام​
1-​
;(printf("%s",__TIME
2-​
;int r
;((srand((unsigned)time(NULL
;()r=rand
حالا این متغیر حاوی یک مقدار رندوم است​
اگر کامپایل نشد در ابتداي فايل time.h را include كنيد​
 

littlerabbit

مدیر بازنشسته
کاربر فعال
تاریخ عضویت
13 جولای 2003
نوشته‌ها
678
لایک‌ها
6
سن
43
محل سکونت
Iran
1- در مورد توابع زمان همه اينها تو ويندوز اعتبار دارن تو لينوکس يه کم فرق ميکنه. (کلا تمام سيستم عامل هاي posix base يه کم متفاوتن)
2- بازم دلفي!!! تابع رندوم رو از دلفي کش رفتم. تا حالا که داره يه عدد ميده و عدد هم حسابي بي معني و پرته يعني يه رندوم عالي!! منتها نميدونم کلا راه درستي رفتم يا اينکه چون غلط جواب ميده درسته!!! (منم يه جواب غلط ميخوام)
3- يه راه سوم که کمي جالبه. چون سي متغير هاي خودشو مفدار اوليه دهي نميکنه بنابراي اگه يه متغير تعريف کني بعد اونو بخوني (بدون اينکه از قبل چيزي توش بنويسي) اينم يه رندوم بايست باشه!!!(بدم نيست ساده هم هست)
4- اون دوست عزيزي که جواب بالايي رو داده اول اينکه __TIME زمان کامپايلو نشون ميده بنابراين هميشه ثابته و فقط در زمان کامپايه که متفاوته پس شرمنده که ميگم غلطه. دوم هم اينکه دوستمون صريحا گفته بود بدون تابع rand

کد Attach شده میتونید بگیریدش با وي سي 6 كامپايل شده. راستی پیغامتونم خوندم : قابلی نداره دوست عزیز به جمع ما خوش اومدی.
فرود - 3:16 دقیقه صبح 17 آبان (چون همش مساله زمان بود و انقدر تو MSDN دنبال توابع زمان گشتم که جو گیر شدم و زمان رو هم نوشتم! البته حقیقتش اینه که میخوام یادم بمونه امشب رو -بنا به دلایل شخصی-.پس لطفا بی خیال)
 

فایل های ضمیمه

  • rand.zip
    6 KB · نمایش ها: 74

saalek

مدیر بازنشسته
تاریخ عضویت
24 می 2005
نوشته‌ها
654
لایک‌ها
53
محل سکونت
در پاي كوهپايه ها
به نقل از Arash_j13 :
قراره یه تعدادی توی یک اینتخابات شرکت کنند فرض کنید کاندیدا ها با اعداد 1 تا 3 مشخص می شوند برنامه ای بنویسید که این انتخابات رو برگزار کنه و برده انتخابات رو مشخص کنید
برنده کسی است که نصف به علاوه یک رای رو اورده باشه و در صورت پیدا نشدن اکثریت مطلق این امر رو گزارش کنه در شمن تعداد رای هر کدوم از نامزد ها رو هم بگه

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

به نقل از Arman_BTC :
کد:
  #include<iostream.h>
#include<stdlib.h>
#include<time.h>
int main (){
int b[3]={0};
const int size=10;
[color=red]srand(time(0));[/color]
for(int j=0;j<size;j++)
[color=red]++b[(rand()%3+1)-1];[/color]
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;
}
در برنامه بالا ، در خط:
کد:
[color=red]++b[(rand()%3+1)-1];[/color]
چون ما اعدادي بين 1 تا 3 مي خواسته ايم، ابتدا باقي مانده عدد تصادفي را بر 3 حساب كرده ايم كه طبعا شامل صفر و يك و دو خواهد بود كه با عدد يك جمع كرده ايم تا تبديل به يك و دو و سه بشه.
نتيجه اجراي برنامه بالا:


c6.gif



يك كم راجع به علت و چگونگي و كلا قلق استفاده از time براي ايجاد اعداد راندم بگيد.

به نقل از Arash_j13 :
تابع rand یه عدد تصادفی بر می گردونه فقط یه مشکلی هست اون هم اینکه این عدد تصادفی همیشه همونیه که بوده یعنی با هر بار اجرای برنامه این عدد تغییر نمی کنه بزارید برای فهم بهتر این جوری شبیه سازی کنم که
کامپیوتر یه دنباله از اعداد تصادفی تولید می کنه و تابع رند هر سری یکی از جملات این دنباله رو بر می گردونه و دفعه بعد جلمه بعدی رو بر می گردونه ه سری که برنامه شروع بشه شما بر می گردید به نقطه شروع و در نتیجه همون عدد قبلی رو بر می گدونه برای اینکه این اتفاق نیفته ما می تونیم به جای شروع از ابتدای دنباله از یه جای دیگه شروع کنیم این وظیفه تابع srand هست که جلمه شروع رو به جای 1 یه عدد دیگه بزاره ولی باز هم یه مشکلی هست اگه این نقطه شروع هر دفعه ثابت باشه مثلا 10 باز هم جملات از جمله ی دهم بر می گرده پس بار هم تکرای می شه برای حل این مشکل ما با تابع time زمان رو بدست می یاریم و به عنوان جمله شروع می دیم به تابع srand در نتیجه چون هر سری زمان فرق می کنه جمله شروع هم متفاوت می شه
با تشكر.
.

در برنامه زير با حذف خط line 1 مي بينيم كه با هر بار اجرا ، اعداد با اجراي قبلي يكسان است.

کد:
#include<iostream.h>
#include<stdlib.h>
#include<time.h>
int main ()
 {
  srand(time(0));  // line 1
for (int i=1 ; i<10 ;i++)
cout<<"random =  "<<rand()<<endl;

return 0;
 }
.
 

saalek

مدیر بازنشسته
تاریخ عضویت
24 می 2005
نوشته‌ها
654
لایک‌ها
53
محل سکونت
در پاي كوهپايه ها
اين يك بازي است كه با تابع راندوم ساخته شده.
برنامه عددي بين 1 تا 100 در نظر مي گيرد و شما پيش بيني مي كنيد كه عدد چي بوده و برنامه مي گويد كه ((عدد من بزرگتر است )) يا (( عدد من كوچكتر است)) و باز عددي مي خواهد تا به جواب برسد . و بعدش ميگه كه شما چند بار تلاش كرده ايد.
مي توانيد عدد 100 را در سورس تغيير دهيد خودتان.

کد:
// *****************************************
//        cplusplus language tutorial
//                section 2.1
//
//            "Guess the number"
// Shows:
//   - do-while
//   - if-else
//
// Briefing:
//  The computer generates a random number
//  between 1 and MAX_RANGE. The user must
//  guess the number. Each time the user
//  makes an attempt the computer tells if
//  the number is greater or less than.
// *****************************************

#include <iostream.h>
#include <stdlib.h>
#include <time.h>

// Define the greatest possible value:
#define MAX_RANGE 100

main ()
{
  int counter=0;
  long value,input;

  srand ( time (NULL) );         // Initialize random generator
  value = rand()%MAX_RANGE+1;    // Get random between 1 and MAX_RANGE

  cout << "\nInsert a value between 1 and " << MAX_RANGE << " : ";

  do {

    cin >> input;                // Get user input
    counter++;                   // increase attempts counter

    if (value>input)             // is value grater than the input?
      cout << "Value is greater than " << input << ". Try again : ";

    else if (value<input)        // if not, is it less?
      cout << "Value is less than " << input << ". Try again : ";

    else {                       // else it is the correct number!
      cout << "That's right! Value was " << input;
      cout << "\nYou have needed " << counter <<" attempts.";
      }

  } while (value!=input);
  return 0;
}
 
بالا