همفکری برای نوشتن یک حلقه

parsiteam

Member
سلام دوستان . راستش یک حلقه میخوام بنویسم که مثلا از aaaaaa تا zzzzzz تمام حالات ممکن رو برام چاپ کنه . کسی فکری به ذهنش میرسه ؟

یک روشی که به ذهن خودم رسید این بود که اول حروف الفبا رو داخل یک آرایه تعریف کنم بعد داخل آرایه حرکت کنم . البته باز نوشتن این حلقه رو بلد نیستم . کسی از دوستان اگر اطلاعاتی داره ممنون میشم یک مددی برسونه .


در پناه حق
 

dl_manager

New Member
ج

سلام
شما اول a تا z توی یک آرایه وارد کن. اگر 6 تایی می خوای (aaaaaa) باید 6 حلقه تو در تو بنویسی
داخل آخرن حلقه 6 تا آرایه بنویس که داخل آدرس آنها به ترتیب از اندیس اولین حلقت باشه تا آخری
arayearaye[j]......araye[n
اینرا هر دفه چاپ کنه​
 

datasun

Member
سلام دوستان . راستش یک حلقه میخوام بنویسم که مثلا از aaaaaa تا zzzzzz تمام حالات ممکن رو برام چاپ کنه . کسی فکری به ذهنش میرسه ؟

یک روشی که به ذهن خودم رسید این بود که اول حروف الفبا رو داخل یک آرایه تعریف کنم بعد داخل آرایه حرکت کنم . البته باز نوشتن این حلقه رو بلد نیستم . کسی از دوستان اگر اطلاعاتی داره ممنون میشم یک مددی برسونه .

یک سوال شما چجوری پس parsiphp رو نوشتی

یک سوال دیگر یک سیستم هست که همچیش مثل parsiphp از این خبردارین

http://parsibox.com

قصد فقط سوال است:rose:
 

hba

Active Member
نوشتن اين چيز ها كه كاري نداره فقط بايد بيشتر فكر كرد از نظر فشار براي مقادير بالا كم كار باشه

PHP:
$a=array('a','b','c');
foreach ($a as $v1){
		foreach ($a as $v2){
			foreach ($a as $v3){
				foreach ($a as $v4){
					foreach ($a as $v5){
							echo $v1.$v2.$v3.$v4.$v5."<br>";
	}	
	}	
	}	
	}
	}
 

parsiteam

Member
ممنون . ولی این راه هایی که حلقه توی تو در تو داره خیلی فشار میاره به سرور + این راه به فکر خودم هم میرسید . مسلما وقتی چنین تاپیکی میزنم انتظار دارم یک راه ساده تر پیدا کنم . در هر صورت از دوستان که وقت گذاشتند ممنون .



یک سوال شما چجوری پس parsiphp رو نوشتی
به سختی هر هرچه تمامتر . میدونی مشکل ما آدما چیه ؟ فکر میکنیم یک نفر باید همه چیز رو بلد باشه . در صورتی که حاظرم شرط ببندم خود Bilgates هم فول ویندوز رو بلد نیست . درضمن من سوال کردن رو آر نمیدونم . بلکه شهامت میدونم . هر چند شده سوال پیش پا افتاده ای باشه .

راستی منتظر نسخه 3 پارسی پی اچ پی باش که اگر بیاد کولاک میکنه . تا چند روز آینده یک فایل فلش به صورت فیلم ازش میدم بیرون .
 

dl_manager

New Member
یا علی

سلام
راستش راه حل دیگه ای هست که نوشتن به صورت بازگشتیه که از راه حل حلقه های تو در تو سریعتره اما نحوه بازگشتیش یکم پیچیده که باید فکر کنیم اساسی:idea:
اگر راهی به ذهنم رسید می گم
در کل وسع ما همین بود داداش
http://pcsoheil.blogspot.com/
 

hba

Active Member
يه راه ديگه هم هست ولي حال نوشتنش رو ندارم
حروف رو كد اسكي كني و هر بار يكي بهشون اضافه كني
چون حروف كد اسكيشون پشت سر هم هست
دونه دونه به بخش هاش اضافه كني ميشه فشارش هم بايد كمتر باشه
مثلا a فكر كنم 65 بود
 

datasun

Member
به سختی هر هرچه تمامتر . میدونی مشکل ما آدما چیه ؟ فکر میکنیم یک نفر باید همه چیز رو بلد باشه . در صورتی که حاظرم شرط ببندم خود Bilgates هم فول ویندوز رو بلد نیست . درضمن من سوال کردن رو آر نمیدونم . بلکه شهامت میدونم . هر چند شده سوال پیش پا افتاده ای باشه .

راستی منتظر نسخه 3 پارسی پی اچ پی باش که اگر بیاد کولاک میکنه . تا چند روز آینده یک فایل فلش به صورت فیلم ازش میدم بیرون .
من بی احترامی نکردم و میدونم هر آدمی میتونه همه کاره بشه ولی این دو تا صفت رو باید داشته باشه
پشتکار و علاقه
بعد اگه سوالمم بد بود عذر خواهی مکنم ولی من از شما یک سوال پرسیدم شما جوری گفتی چرا تو تاپیک نمیزنی که فکر کردم خیلی سوال بده :shock:
همین
راستی من هنوز که هنوزه نتنستم پارسی php رو نصب کنم نمیدونم چشه میگه نمیتونه به سرور وصل شه
 
آخرین ویرایش:

the_king

مدیرکل انجمن
سلام دوستان . راستش یک حلقه میخوام بنویسم که مثلا از aaaaaa تا zzzzzz تمام حالات ممکن رو برام چاپ کنه . کسی فکری به ذهنش میرسه ؟

یک روشی که به ذهن خودم رسید این بود که اول حروف الفبا رو داخل یک آرایه تعریف کنم بعد داخل آرایه حرکت کنم . البته باز نوشتن این حلقه رو بلد نیستم . کسی از دوستان اگر اطلاعاتی داره ممنون میشم یک مددی برسونه .


در پناه حق

ببخشید، من بیسوادم و php بلد نیستم. با ++C و Visual Basic و #C پیاده سازی کردم.
صرفا نیاز به یک حلقه while و یک حلقه داخلی for دارید. یک حلقه اولیه for هم برای مقدار دهی اولیه رشته
مورد نیاز است. این الگوریتم برای رشته های 100 رقمی هم بدون جواب می دهد.

کد به زبان ++C :

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

void main()
{
	int i, n = 6;
	char *s = new char[n + 1];
	for (i = 0; i < n; i++)
		s[i] = 'a';
	s[i] = 0;
	do
	{
		puts (s);
		for (i = 0; i < n; i++)
		{
			s[i]++;
			if (s[i] <= 'z')
				break;
			s[i] = 'a';
		}
	} while (i < n);
	delete[] s;
}

شرح کد ++C :

ابتدا با متغیر n طول رشته را مشخص می کنیم، متغیر i برای حلقه کاربرد خواهد داشت :
کد:
	int i, n = 6;

یک رشته string به طول لازم ایجاد می کنیم (n + 1 چون انتهای رشته های ++C نیاز به یک کاراکتر 0 (null) دارد).
کد:
	char *s = new char[n + 1];

یک حلقه می سازیم که تمامی کاراکتر های رشته (به طول n) را برابر a قرار دهد، مثلا aaaaaa :
کد:
	for (i = 0; i < n; i++)
		s[i] = 'a';

انتهای رشته را با کاراکتر 0 (null) مشخص می کنیم، برای چاپ رشته ها در ++C این عمل مورد نیاز است :
کد:
	s[i] = 0;

حلقه do ای می سازیم که اول رشته را چاپ می کند :
کد:
	do
	{
		puts (s);

حلقه ای می سازیم که رشته را از کاراکتر اول تا آخر پیمایش کند (فرض کردم که تغییر کاراکتر ها از چپ به راست انجام شود) :
کد:
		for (i = 0; i < n; i++)
		{

کاراکتر اندیس i را یک واحد افزایش می دهیم، مثلا کاراکتر f تبدیل به g می شود :
کد:
			s[i]++;

اگر کاراکتر مورد نظر z یا کوچکتر از آن باشد، رشته آماده است، پس از حلقه با break خارج می شویم :
کد:
			if (s[i] <= 'z')
				break;

وگرنه کاراکتری که از z گذشته را به a برمی گردانیم و حلقه برای تغییر کاراکتر بعدی ادامه می یابد :
کد:
			s[i] = 'a';
		}

حلقه while تا زمانی ادامه پیدا می کند که آخرین کاراکتر رشته هم تمامی حالاتش را پیمایش نکرده باشد :
کد:
	} while (i < n);

کار تمام شده، پس رشته s را از حافظه حذف می کنیم (رشته با new ایجاد شده، پس با delete حذف می شود) :
کد:
	delete[] s;
}

به زبان ویژوال بیسیک :

کد:
Private Sub Form_Load()
    Dim i As Long, n As Long
    Dim s() As Byte
    n = 6
    s = StrConv(String(n, "a"), vbFromUnicode)
    Do
        Debug.Print StrConv(s, vbUnicode)
        For i = 0 To n - 1
            s(i) = s(i) + 1
            If s(i) <= Asc("z") Then Exit For
            s(i) = Asc("a")
        Next
    Loop While i < n
End Sub

به زبان #C :

کد:
using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            int i, n = 6;
            char[] s = new char[n + 1];
            for (i = 0; i < n; i++)
                s[i] = 'a';
            s[i] = '\0';
            do
            {
                Console.WriteLine(s);
                for (i = 0; i < n; i++)
                {
                    s[i]++;
                    if (s[i] <= 'z')
                        break;
                    s[i] = 'a';
                }
            } while (i < n);
        }
    }
}
 
آخرین ویرایش توسط مدیر:

جدیدترین ارسال ها

بالا