PDA

نسخه کامل مشاهده نسخه کامل : سوال : پيدا كردن اعدادي كه بين يك سري اعداد پشت سر هم نيستند



hp1361
08-09-2006, 19:03
سلام

من يه سري عدد پشت سر هم دارم مثلا 1 تا 100 اما بين اين اعداد چند تا عدد نيستند مثلا 25 و 46 و 78 حالا چطور بفهمم كه اين اعداد در اين سري پشت سر هم قرار ندارن.

نكته : اعداد ورودي حتما پشت سر هم هستند

ممنون و منتظرم

Mahmood_N
08-09-2006, 19:06
اشتباه شد :blush:

soldier
08-09-2006, 19:48
سلام
بر چه اثاثي اين عدد ها توي اين سري قرار نمي گيرن؟

مرد مباح
08-09-2006, 21:04
يك كمي بيشتر توضيح بده
اين سري اصلا از كجا اومده و اگه فرمولي داره اونو بنويس.
ممنون

amin a.^2
08-09-2006, 21:23
لطفاً توضیح بده ککه چجوری هستند ای عددا
و چرا چند تا عدد میانشان نیستند

Bayazee
08-09-2006, 21:35
از کوچکترین عضو شروع کن و تا آخرین عضو رو بصورت پشت سر هم بشمار و هر بار یک واد اضافه کن !
بررسی کن هر کدوم در مجمعهاولی نبود رو یکی یکی یه یک لیست یا آرایه دیگه اضافه کن
خیلی راحته ...
با پایتون می نویسم برات :


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

خروجی :


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

hp1361
08-09-2006, 21:39
سلام

ببينين دوستان اطلاعات يه فرم (منظورم فرم برنامه نيست فرم مثلا كارنامه يه همچين چيزي)شامل شماره فرم و تاريخ صدور فرم و ... از طرف كاربر وارد ميشه . در اين ميان بعضي از شماره فرم ها بدليل باطل شدن وارد نميشه . اما مي دانيم كه اين شماره ها پشت سر هم هستند . ما ميخواهيم از اين فرم ها گزارش بگيريم . خوب در صفحه گزارش ميگيم كه تمام ركورد هاي بانك اطلاعاتي رو نشون بده . خوب تا اينجا مشكلي نداريم .

حالا من مي خواهم در آخر صفحه گزارش بنويسم تعداد ايكس عدد فرم باطل شده است (شماره اونها وارد بانك نشده )
با توجه به اينكه شماره فرم ها رو محدود به ماه مورد نظر مي كنيم ( از طرف كاربر انتخاب ميشه ) و از اونا گزارش ميگيريم چطور مشخص كنيم كه چه شماره هايي در اين محدوده زماني وارد نشده ؟

ممنون

soldier
08-09-2006, 22:34
سلام
يك فيلد بزار براي اينكه باطل شده يا نه!
اونهايي كه باطل ميشن حرف N بگیره! و اونهایی که باطن نشدن حرف Y بگیره!
بعد با یه حلقه به اندازه تعداد رکوردها از دستور nextfind بده! (قبلش حرف N رو فیلتر کن)
بعد توی این حلقه مشخص میشه که کدوم ها باطل شدن!

این روش رو خودم همین حالا ابدا کردم
و روش دیگه ای پیدا نکردم! ببین اگر بدرد خورد خبر بده!(می دونم که اگر کار کرد ضد حال می زنی و خبر نمیدی)

hp1361
08-09-2006, 22:43
سلام

سولجر عزيز همون جور كه گفتم كاربر شماره فرم رو وارد ميكنه و من شماره ها رو ندارم حالا چطور فيلدي رو كه شما ميگين پر كنم
مثل اينكه كاربر شماره فرم رو وارد كنه و بعد بگه اين باطله (اينطوري كه نميشه )

bayazee عزيز دست شما هم درد نكنه با اين روش موافقم (چون به فكر خودم هم رسيد ) حالا منتظر راهنمايي ديگر دوستان هستم .(از قديم ميگن چند تا فكر بهتر از يك فكره )

ممنون

soldier
09-09-2006, 00:50
سلام
می تونید بگید که چطوری شماره ها وارد دیتابیس میشه!
در ضمن این روش رو امتحان کن!
s:=0;
for I := 1 to 100 do
if I+S <> adodataset1.fieldvalue['esme field'] then begin
ShowMessage(IntToStr(I);
Inc(S);
end;

باید خودت به میل خودت کاملش کنی
چون من از 1 تا 100 رو چک می کنه!
در مورد من اطلاعات بیشتری در مورد برنامه ات نداشتم که کمک بیشتری کنم!
هر جا مشکل داشتی بگو!
این کد هر عددی که وجود نداشت مشخص می کنه!
خوب اگر مشکل حل شد خبر بده

hp1361
09-09-2006, 18:35
سولجر عزيز ميشه يه جورايي برنامه شما رو شبيه چيزي كه bayazee گفتن فرض كرد

ممنون و منتظر پيشنهاد ديگر دوستان هستم

soldier
10-09-2006, 10:22
سلام
خوب این تا حدودی کامل تر بود! یعنی باز هم بدرد نخورد؟
خوب وقتی که دیگه کامل فکر کردن بر روی انتخاب الگوریتم تموم شد
و می خواستید از پست10# استفاده کنید! سوالی داشتید ! در خدمتم!

مرد مباح
10-09-2006, 13:43
مقدار وردي كابر رو ----- كن و كل مقادير فيلد ابطال رو توي يك While چك كن.
مقاديري كه ميخواي رو True و باقي رو False كن.
بعد پرينت بگير.

اميدوارم منظورتو درست فهميده باشم و به دردت بخوره.

mahdi bg
11-09-2006, 19:34
سلام:

hp1361 جان

اينطوري كه من فهميدم:
اول گزارش رو بر اساس ماه يا سال يا هر چيز ديگري كه مي خواهي بگيري انجام بده بعد
اگر از ADOTable استفاده مي كني كد زيررو وارد كن


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

توضيح

1. كد رو ساده نوشتم كه قابل فهم باشه وگرنه راحتر و زيبا تر هم مي شه نوشت
2. s:string;
3. i:integer;
4. فرض بين اعداد يك فاصله باشد (1و2و5و... غير مجاز چون بين 2و5 دو عدد وارد نشده البته مي شه با يكم تغيير اين رو هم اضافه كرد كه چند عدد هم اگه وارد نشد كنترل كنه)
5. ابتدا از اول شروع ميكنه و هر شماره رو با قبلش چك مي كنه اگه اختلافشون يكي بود عدد رو به رشته s اضافه ميكنه
مثال:
1و2و3و5و6
اگه به 5 رسيده باشد آنگاه if (ADOTable1.FieldByName('YourFieldName').Value<>i+1) then مقدار True مي شه يعني 5<>3+1 پس عدد بين‌ (IntToStr(ADOTable1.FieldByName('YourFieldName').V alue-1) رو به رشته s اضافه ميكنه‌ }عدد 4{

اميدوارم كه كمكت كرده باشم

hp1361
11-09-2006, 21:53
سلام

اول از هر چيز بگم كه بخاطر عدم همكاري دوستان در راهنمايي من براي بكار بردن جداول ADO از خيرش بكل گذشتم (دلگير هم هستم چون بيشتر بكارم ميامد )

من از جداول پارادكس استفاده مي كنم

الگوريتم مورد نظر هم با راهنمايي bayazee و mehdi bg عزيز انتخاب شد

ممنون

مرد مباح
12-09-2006, 09:43
سلام

اول از هر چيز بگم كه بخاطر عدم همكاري دوستان در راهنمايي من براي بكار بردن جداول ADO از خيرش بكل گذشتم (دلگير هم هستم چون بيشتر بكارم ميامد )

من از جداول پارادكس استفاده مي كنم

الگوريتم مورد نظر هم با راهنمايي bayazee و mehdi bg عزيز انتخاب شد

ممنون

سلام رفيق.
من كه درباره ADO تقريبا همه چيز رو گفتم.
توي تاپيك همه چيز درباره ديتابيسها.
لينكشم توي امضام هست.
موفق باشي.
اگه سوالي برات بود همون جا بپرس ممنون.