PDA

View Full Version : سوال: کسی میتونه این کدها رو واسه من توضیح بده ببینم جریان چیه؟



DELTANG_Programmer
جمعه 15 دی 1391, 07:52 صبح
سلام دوستان ... اگه کسی میتونه از قسمت while واسه من توضیح بده که ببینم این دستورات چیکار میکنه؟
#include "stdafx.h"
#include<iostream>
using namespace std;
const int n=10;
int _tmain(int argc, _TCHAR* argv[])
{
int a[n][n],i,j,k=0,l=0,z=0;
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
a[i][j]=rand()%2;
a[0][0]=5;
a[9][9]=6;
for(int i=0;i<10;i++)
{
for(int j=0;j<10;j++)
cout<<a[i][j]<<" ";
cout<<endl;
}
while(z<=(2*n)-1)
{
if(a[l][k])
k++;
else
l++;
if((l>=n-l)||(k>=n-l))
break;
z++;
}
if(l==n-l&&k==n-l)
cout<<"Moosh Be Laneh Resid.";
else
cout<<"Masir Basteh Ast.";
cin.get();

return 0;
}

DELTANG_Programmer
جمعه 15 دی 1391, 07:54 صبح
راستی چرا همیشه یه ماتریس بیرون میده مگه رند نیست؟

hd2010hd
جمعه 15 دی 1391, 12:04 عصر
این یه ماتریس هست که عدد راندوم میده و اگه به اون عدد مورد نظر برسه پیغام میده

DELTANG_Programmer
جمعه 15 دی 1391, 12:19 عصر
مشکل اینجاست که همیشه عدداش ثابته و رندمی در کار نیست!

lexical_error
جمعه 15 دی 1391, 13:15 عصر
مشکل اینجاست که همیشه عدداش ثابته و رندمی در کار نیست!
برای اینکه شما هربار که برنامه رو اجرا میکنید نتیجه متفاوت داشته باشید باید از تابع srand() قبل از rand() استفاده کنید،srand یه پارامتر از نوع unsigned int میگیره و باعث میشه که برنامه در هر بار اجرا سلسله مراتب متفاوتی از اعداد تصادفی ایجاد کنه.
اما اگر میخواین که این آرگومان رو هم به تابع نفرستید میتونید از تابع Time() به عنوان پارامتر srand استفاده کنید که به صورت اتوماتیک به srand مقدار میفرسته.

مثال:

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

/* function main begins program execution */
int main(void) {
int i; /* counter */

srand(time(NULL)); /* seed random number generator */
/* loop 10 times */
for (i = 1; i <= 10; i++) {

/* pick a random number from 1 to 6 and output it */
printf("%10d", 1 + (rand() % 6));

/* if counter is divisible by 5, begin a new line of output */
if (i % 5 == 0) {
printf("\n");
} /* end if */
} /* end for */

return 0; /* indicates successful termination */
} /* end main */

DELTANG_Programmer
جمعه 15 دی 1391, 14:00 عصر
[QUOTE=lexical_error;1667716]برای اینکه شما هربار که برنامه رو اجرا میکنید نتیجه متفاوت داشته باشید باید از تابع srand() قبل از rand() استفاده کنید،srand یه پارامتر از نوع unsigned int میگیره و باعث میشه که برنامه در هر بار اجرا سلسله مراتب متفاوتی از اعداد تصادفی ایجاد کنه.
اما اگر میخواین که این آرگومان رو هم به تابع نفرستید میتونید از تابع Time() به عنوان پارامتر srand استفاده کنید که به صورت اتوماتیک به srand مقدار میفرسته.

دوست عزیز ممنونم از پاسختون ولی اگه ممکنه روی کدهای نوشته شده خودم توضیح بدید یعنی من کجای کدهام srand() اضافه کنم ... یعنی اون خط قبل رند ... (اگه ممکنه برای محیط ویژوال سی پلاس پلاس بنویسید)

من srand(time(null)) رو قبل رند وارد کردم ولی باز ارور داد.

lexical_error
جمعه 15 دی 1391, 15:37 عصر
شما اول هدر time.h رو به برنامه include کن
بعد از اولین آکولاد که برای تابع main هست این رو اضافه کن

srand(time(NULL));