توصیه شده, مسابقه

مسابقه سوم: استخراج داده از رشته ها در زبان C

چالش و مسابقه برنامه‌نویسی به زبان C

نزدیک به 5 ماه از مسابقه دوم سیسوگ می‌گذره و فکر کردم که بد نیست یک چالش جدید داشته باشیم! البته چالش‌ها هیچ وقت بی‌حاشیه نیستند مثل دو مسابقه قبل، در واقع مساله اینه که کنار هم چیزهای جدیدی یاد بگیریم نه اینکه بخواهیم بگیم کی بهتره!‌ هرکسی هرچقدر هم عالی باشه توی سطح خودش باز چیزهای جدید برای فراگرفتن هست. پس خواهش می‌کنم به این چالش‌ها نه به چشم این که ثابت کنیم کی بهتره بلکه به فرصتی برای یادگیری جزییات بیشتر نگاه کنید.

 

مقدمه

معمولا در طراحی دستگاه‌های الکترونیکی، همه‌ی داده‌ها در درون برنامه و میکروکنترلر تولید نمی‌شوند و لازم است که برخی از داده‌ها از منابع خارجی تامین شود مثل داده‌های انواع سنسور و یا ماژول مخابراتی یا …! برای اینکه بتوانیم از این داده‌ها در برنامه استفاده کنیم لازم است بعد از صحت‌سنجی، داده‌ها را به شکل قابل استفاده تبدیل کنیم.

پایداری تابع تبدیل داده خیلی مهم و تعیین‌کننده است چرا که اگر به هر دلیلی عملکرد این تابع دچار مشکل شود می‌تواند عملکرد کل برنامه را تحت تاثیر قرار دهد و خروجی‌های پیش‌بینی نشده‌ای را تولید کنند!‌ توجه داشته باشید که داده‌های ورودی ممکن است تحت تاثیر نویزهای خارجی تغییر کنند و اگر صحت‌سنجی داده‌ها انجام نشود قطعا خروجی‌های پیش‌بینی نشده‌ای ایجاد خواهد شد که در مواردی بسته به حساسیت دستگاه می‌تواند خسارت‌های جبران‌ناپذیری را ایجاد کند.

این مسابقه تاکیدی بر این مهم است که همه جوانب ممکن را در استخراج اطلاعات در نظر بگیریم تا شاهد عملکرد غیرمنتظره دستگاه نباشیم.

 

صورت مساله

تابعی بنویسید (به زبان C) که یک رشته را با فرمت زیر در ورودی دریافت کند و ساختار داده‌ای آن را استخراج کند.

record{ID},{Some number, delmiter is ‘,’},{NAME},{Some Alphabet, delmiter is ‘,’},{POSTALCODE},{Some number, delmiter is ‘,’},{STATUS true/false},End

در رشته فوق داده‌های آیدی، نام، کد پستی، و وضعیت برای ما مهم است که باید از این رشته استخراج شوند و در ساختاری به شکل زیر بارگذاری شوند.

دقت داشته باشید اعداد می‌توانند + و − باشند و ممکن است با $,%,# ترکیب شده باشند.

تابع باید با ورودی‌ها و خروجی به شکل زیر نوشته شود:

تابع DeserializePersonalData یک رشته و یک ساختار personal_t را به عنوان ورودی دریافت می‌کند و باید داده‌های خواسته شده را از رشته استخراج کند و در ساختار personal_t ذخیره کند اگر تبدیل درست انجام شود خروجی تابع باید true باشد و اگر نتوانستیم تبدیل را درست انجام دهیم باید خروجی تابع false باشد. (یعنی باید تا جای ممکن صحت‌سنجی روی داده‌های ورودی انجام شود)

 

مثال‌هایی برای روشن شدن ورودی‌های ممکن:

 

در ورودی فوق انتظار می‌رود تابع خروجی true ایجاد کند و داده‌ها را به شکل زیر استخراج کند.

در این ورودی نیز انتظار می‌‎رود که تابع خروجی true ایجاد کند و داده‌های زیر را استخراج کند.

در این ورودی نیز انتظار می‌رود که تابع خروجی true ایجاد کند و داده‌های زیر را استخراج کند.

در این ورودی نیز انتظار می‌رود که تابع خروجی true ایجاد کند و داده‌های زیر را استخراج کند.

در این ورودی نیز انتظار می‌رود که تابع خروجی false ایجاد کند. به این دلیل که تابع نتوانسته است Status را پیدا کند.

 

شرایط داوری و جایزه

با توجه به مقدمه توضیح داده شده و حساسیت کارکرد درست چنین توابعی، کد برنده کدی خواهد بود که در کنار این که نسبت به ورودی های مختلف خروجی درست ایجاد کند باید امنیت بالایی در اجرا داشته باشد و احتمال کرش کردن آن تا جای ممکن کم باشد. بعد از آن کیفیت کد نوشته شده حائز اهمیت است! بذارید به درجه اهمیت پارامترهای مهم در بررسی کد را لیست کنم:

۱− عملکرد درست تابع

۲− امنیت در اجرای صحیح کد با دریافت ورودی‌های نامتعارف

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

 

ارسال جواب

پاسخ‌های خود را در زیر همین پست کامنت کنید.

ممکن است که وقتی کد را برای ما کامنت می‌کنید، در قسمت کامنت نظم کد به هم بریزد، پس به همین خاطر لازم است که ابتدا به سایت paste.ubuntu.com بروید، Syntax را زبان C انتخاب کنید و کد خود را در قسمت Content کپی کرده و بر روی Paste کلیک کنید و در نهایت فقط URL را در قسمت کامنت برای ما ارسال کنید.

مهلت پاسخ هم تا اخر روز جمعه  ۲۴ مرداد ماه ۱۳۹۹ است. {حدود ۷ روز}

 

 

پایان و جواب چالش سوم سیسوگ

باز تاکید می‌کنم همونطور که قبلاً هم گفتم مهم برنده شدن و یا نفر اول بودن نیست!، مسئله اصلی اینه که بتونیم از هم یاد بگیرم و مشکلات احتمالی خودمون رو متوجه بشیم و حلشون کنیم، بگذریم!، فکر می‌کردم این مسابقه از مسابقه شماره دو خیلی ساده‌تر باشه! ولی انگار این‌طور نبوده، اینو دارم از تعداد مشارکت دوستان میگم، واقعاً فکر می‌کردم دوستان خیلی بیشتری توی مسابقه شرکت کنند با این از همه دوستانی که شرکت کردند تشکر می‌کنم.

یکی از دوستان سؤال خیلی خوبی پرسید که لازم میدونم جوابش رو مقداری توضیح بدم. سؤال ساده بود “چه دستگاهی ممکنه چنین خروجی‌ای تولید کنه”! اما جواب ساده نیست اول این که این مسابقه به این دلیل طراحی نشده چون دستگاهی چنین خروجی‌ای ایجاد میکنه! در واقع این مسابقه طراحی شده تا کاربر علاوه بر این که مهارت برنامه نویسی خودش رو تقویت میکنه بتواند نیم نگاهی هم به اتفاقات پیش بینی نشده داشته باشد. مثلاً وقتی دیتایی رو از طریق پروتکل سریال منتقل می‌کنید به هیچ وجه نمی‌توانید مطمئن باشید که دیتا صحیح به مقصد می‌رسد و باید فرض این باشه که دیتا احتمالاً اشتباه میرسه! اما وقتی داری با tcp/ip کار می‌کنید فرض بر اینه که دیتا صحیح می‌رسد، مرز باریک بین دنیای برنامه نویسی برای کامیپوتر و الکترونیک همین‌جاست، اطمینان و عدم اطمینان! (باعث سوء تفاهم دوستان برنامه نویسی کامپیوتر نشه البته که این مثال ساده برای روشن کردن شرایط متفاوت است.)

 

بگذارید بریم سر توضیح مسئله، قرار بود دیتایی که به شکل رشته ذخیره شده و هیچ اطمینانی از صحیح بودنش نداریم و یه امن‌ترین روش ممکن دکد کنیم بله در ظاهر به همین سادگی و در باطن اما مقداری چالشی.

پیش از حل بیاید حالت‌های مختلف رو لیست کنیم.

 

۱. لازمه ۴ تا پارامتر رو استخراج کنیم که ممکنه هر کدوم حذف شده باشه.

۲. ممکنه کاراکترهای ناخواسته در جای نادرستی قرار بگیرن مثلاً وسط جایی که باید عدد باشه حروف الفبا باشه یا برعکس یا هر اتفاق دیگه ای

۳. در متغیرهای مورد نیاز رشته‌ای داریم که طول محدود ۱۶ کاراکتری دارد! باید به این مسئله دقت شود چون ممکنه باعث خطای مهلک سگمنت فالس شود.

 

اگر برنامه‌ای بنویسیم که در مواجه با این سه فرض ساده، عملکرد معقولی داشته باشد احتمالا برنامه قابل قبولی نوشته‌ایم. برای تست حالت‌های ممکن 11 رشته زیر طراحی شدن:

رشته اول و دوم و سوم و چهارم کاملاً درسته و نباید توی اطلاعات استخراج شده تناقضی باشه.

در رشته پنجم عبارت end از انتهای رشته حذف شده است و انتظار می‌رود تابع خروجی false برگرداند.

در رشته ششم پارامتر name بیش از ۱۶ کاراکتر طول دارد و انتظار می‌رود که تابع عبارت false را برگرداند.

در رشته هفتم مقدار کد پستی اشتباه است چرا که در آن جز عدد کاراکتر حرف هم وجود دارد.

در رشته هشتم ترتیب کاراکترهای وضعیت (status) صحیح نیست و به جای false به شکل fasle ظاهر شده است که انتظار می‌رود که تابع عبارت false را برگرداند.

در رشته نهم و دهم در جایگاه status کاراکترها به شکل درست در محل درست قرار دادند فقط طول آنها غیرمجاز است و انتظار می‌رود که تابع عبارت false را برگرداند.

در رشته یازدهم id حذف شده است و انتظار می‌رود که تابع عبارت false را برگرداند.

 

و اما برنامه‌ای که برای استخراج داده‌ها با توجه به شرایط پیش رو می‌نویسم به شکل زیر است:

حدس می‌زنم مقداری کد نامتعارف باشد! مخصوصاً رشته فرمت داخل دستور sscanf! اگه داکیومنت های جامع این دستور رو ببینید (مثلاً این آدرس) و مطالعه کنید این نامتعارف بودن مقداری حل میشه. متأسفانه توی کتب درسی و خیلی از سایت‌ها این شکل از فرمت در scanf پرداخته نمیشه و باید اعتراف کنم اولین باری که خودم چنین کدی رو دیدم برام گنگ بود قضیه برمیگرده به سال‌ها پیش که می‌خواستم رشته‌های ارسال شده از طریق gps رو به خونم و کتابخانه‌ای برای این کار دانلود کرده بودم و مشغول مطالعه کدش بودم.

همیشه توصیه می‌کنم اگه میخواید برنامه‌های بهتری بنویسید بهتره برنامه‌های زیادی رو مطالعه کنید و تحلیل کنید به همین سادگی شما هر روز بهتر خواهید بود.

این کد رو زیاد توضیح نمی‌دم به این دلیل که میخوام یه تمرین برای شما باشه، بگید این برنامه چطور کار می کنه؟:)

مهم‌تر از آن رشته‌ای رو با الگوی مطرح شده این مسابقه درست کنید که این تابع نتواند منطقی به آن پاسخ دهد (میدونم که چنین رشته‌ای وجود دارد!)

همین ۱۱ رشته را به برنامه دوستان داده شد و جواب هر کدام از اون ها لیست شده که می‌تواند شرح آن را در زیر مشاهده کنید.

 

متأسفانه هیچ کدام از برنامه‌های ارسال شده به هر ۱۱ رشته جواب صحیح ندادند! اما برنامه آقای سیاوش مولایی و محمد یوسفی کمترین خطا رو داشتند. برنامه آقای سیاوش مولایی هم خوب نوشته شده و هم خوب عمل می کنه اما به دلیل این که طول رشته name رو چک نمیکنه احتمال این که برنامه دچار segment fault بشه. اینجا کد آقای محمد یوسفی رو برنده اعلام می‌کنیم.

آقای یوسفی با تلگرام سیسوگ هماهنگ بشید جهت دریافت جایزه:).

 

جواب های ارسالی شما

سینا

محمد پسندیده

پویا مرادی

Hadi

علی ترابی

cthulhu_sea

معین

سیدعلی علائی طباطبائی

Kamin Jalili

حسین

محمد یوسفی

بابک

Siavash.mollay

انتشار مطالب با ذکر نام و آدرس وب سایت سیسوگ، بلامانع است.

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

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

123 دیدگاه در “مسابقه سوم: استخراج داده از رشته ها در زبان C

  1. سعید گفت:

    سلام
    من یک کامنت گذاشتم که نمیدونم چرا تایید نکردید. برنامه ای که به عنوان جواب گذاشتید تو یک حالت درست کار نمیکنه و اون وقتیه که بلافاصله بعد از فیلد اول (id) ، فیلد دوم (name) بیاد .(بعد از یک کاما) به عنوان مثال رشته زیرکه طبق الگوی درست هست ولی خروجی درست نمیده (rlen=1) :
    record11,sisoog,1234567,true,End
    که در اینجا باید حداقل یک کامای دیگه بین دوتا فیلد اول قرار بدیم تا خروجی درست بده . که به نظرم علت این مشکلم این هست که توی الگویی که که در فرمت استرینگ sscanf گذاشتید بعد از record%d, حداقل یک بار از کاراکترهای داخل اون کروشه رو باید پیدا کنه و نادیده بگیره ( به خروجی نفرسته ) که چون اولین کاراکتر با این ویژگی کامای بعد از sisoogهست ، فیلد name رو پیدا نمیکنه و رشته رو نامعتبر تشخیص میده
    حالا برای حل این مشکل چکار میشه کرد؟

    1. زئوس Zeus زئوس Zeus گفت:

      سلام
      والا من تمام کامنتت های جوابی که دریافت شده بود توی سایت رو تایید کردم و کامنتی نیست که تایید نشده باشه – احتمالا کامنت به دلیلی دریافت نشده و از این بابت متاسفم 🙁
      در مورد رشته ای که گفتید بله درسته ولی ببینید توی الگویی که معرفی شده وجود یک عدد حاقل بعد از آیدی و قبل از نام الذامی است با این فرض برنامه ها نوشته شده

  2. بابک گفت:

    https://paste.ubuntu.com/p/D9SgjXNqJK/
    از کد https://gist.github.com/ianmackinnon/3294587 به عنوان کد پایه استفاده کردم گفتم تو سورس بگم!

    1. زئوس Zeus زئوس Zeus گفت:

      با تشکر از شما برای حفظ کپی راست و حق مالف اولیه 🙂

  3. بابک گفت:

    کد قبلی یک ایراد کوچک داشت که بر طرف کردم
    https://paste.ubuntu.com/p/WR9WBNkrm6/
    در این روش از regex استفاده شده. البته احتمال در mingw کار نخواهد کرد.

    1. زئوس Zeus زئوس Zeus گفت:

      ممنونم – بله واقعا ریجکس عالیه برای استخراج الگوها از رشته ها 🙂
      دست شما درد نکنه 🙂

  4. بابک گفت:

    گفتم برای آموزش هم که شده این کد را تکمیل کنم و بفرستم شاید بعدا به کار کسی آمد.
    برای حل مساله از regex استفاده کردم و از توابع استاندارد gnu c library
    https://paste.ubuntu.com/p/4jrgx9CxgM/

  5. بابک گفت:

    تسلط بر کتابخانه استاندارد سی که حاوی توابع خوب و کاربردی بسیاری هست که قطعا در نوشتن این توابع سرعت و کارایی و امنیت لحاظ شده باعث کوتاه شدن کد نویسی و سرع و کارایی بیشتر برنامه خواهد شد.
    در مورد کارکرد برنامه، تابع sscanf ورودی را بر اساس فرمتی که تعریف کردید پردازش می‌کند و اجزا مورد نظر را استخراج می‌کند.
    بررسی فرمت “record%d,%*[-$#%%+,0-9]%19[^,]%*[^0-9]%i%*[-$#%%+,0-9]%5[^,]%8s”:
    ۱- record%d : مقدار عددی بعد از کلمه record را استخراج می‌کند
    ۲- %*[-$#%%+,0-9]: همه کارکترهایی که داخل کروشه هست را شامل می‌شود یعنی عدد و +-%#$ و خود کارکتر کاما چون با ٪* شروع شده به خروجی ارسال نمی‌گردد.
    ۳- %19[^,]: ۱۹ کارکتر بعدی (حالا چرا ۱۹تا!) بجز کارکتر کاما انتخاب می‌شوند و به عنوان name ذخیره میشود
    ۴- %*[^0-9] : شامل تمام کارکترها به جز اعداد هست که چون با ٪* شروع شده این هم به خروجی ارسال نمی‌شود
    ۵- %i : عددی که شناسایی شده درpostalcode قرار میگیرد
    ۶- %*[-$#%%+,0-9] : مثل قسمت ۲
    ۷- %5[^,] : به طول ۵ کارکتر همه کارکترها بجز کاما انتخاب میشود و در tfdata قرار میگیرد
    ۸- %8s : به طول ۸ کارکتر استرینگ انتخاب میشود در temp قرار میگیرد

    حالا با توجه به این فرمت بالا این رشته که به نظر نباید خروجی صحیح داشته باشد به عنوان رشته صحیح پردازش می‌گردد
    record-15,#15,25,45,si1s*o#o@g abc,s,is,oog,-5463213,6,-7,78,33-43,True,End

    1. زئوس Zeus زئوس Zeus گفت:

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

      1. بابک گفت:

        record-15,#15,25,45,si1s*o#o@g abc,s,is,oog,-5463213,6,-7,78,33-43,True,End
        درست هست که id را از نوع int تعریف کردید ولی در همه مثالها ما id منفی داشته باشیم برای همین فکر کردم شاید عدد منفی در id مد نظر نیست و مقدار name باز در همه مثالهای فقط کارکترهای a-z هست که به نظرم آمد که در مقدار name اعداد و کارکترهای دیگر و علامت دیگر قابل قبول نیست. در مورد postalcode هم باز مقدار منفی در مثالها نبود

        1. زئوس Zeus زئوس Zeus گفت:

          برای اغداد ذکر کردیم که وجود چه کارکتر هایی مجاز هست و برای name هم کارکتر غیر مجاز ذکر نکردیم و انتهای اون با کاما مشخص میشه و البته طول خوب متغییر

  6. saeed گفت:

    سلام
    خیلی ممنون از این مسابقه و آموزش خوبتون . این که این آموزش خیلی خوب رو در قالب یک مسابقه گذاشتید واقعا عالی بود. چالش جواب دادن به سوال مسابقه خیلی به یادگیری و فهم مطلب کمک میکنه . من خودم تقریبا مساله رو حل کرده بودم ولی به روش خیلی سختتر . لطفا از این دست مسابقه ها بیشتر قرار بدید.
    اون رشته ی استثنایی هم که مطابق با الگوی مطرح شده هست ولی تابع پاسخ درستی بهش نمیده به عنوان مثال این میتونه باشه:
    “record133,sisoog,98214512,FalsE,End ”
    برای این که جواب درست بده باید بعد از record 133‌ دوتا کاما قرار بگیره یعنی به فرم زیر:
    record133,,sisoog,98214512,FalsE,End

    1. زئوس Zeus زئوس Zeus گفت:

      سلام دوست عزیز
      خوشحالم که از این روند خوشتون اومده، در واقع هدف ما هم آموزش حین کار هست که خیلی گیرایی بیشتری داره 🙂
      در مورد رشته باید بگم بله این رشته ای که پیشنهاد دادید باعث میشه که برنامه کار نکنه ولی آیا الگوی ما رو هم رعایت کردید ؟ توی الگو گفتیم حداقل اینجا باید یک دیتایی باشه اگر نه خرابه 🙂

  7. EAGLE_ELECTRONIC گفت:

    داداش این کدتون در کدبلاکز خطا میده _ در توضیحات نوشتین کمی نامتعارف ولی خطا دادن را نگفتین _ اصلا بیلد نمیشه _ به عبارت personal ایراد میگیره

    1. زئوس Zeus زئوس Zeus گفت:

      برنامه درسته – باید ببینید خطایی که دریافت می کنید چی هست البته باید بگم نیازه که کتابخانه های stdio و stdlib رو include کنید
      اگر مشکل حل نشد – خطا رو قرار بدید تا با هم بررسی کنیم ببینیم مشکل کجاست

  8. ایلین گفت:

    سلام، اینکار اختراع کردن دوباره چرخ هست همچنین فرمت اعلامی استاندارد نیست و در توسعه های آتی میتونه مشکل ایجاد کنه. بهترین راه همون استفاده از کتابخانه json برای c هست یا بصورت آماده یا نوشتن خود کتابخانه. در اینصورت اگه سنسور شما یا سرورهای شما و … به هر زبانی باشند مثل پایتون، جاوا، سی و … با یک استانداردی در سریعترین زمان در ارتباط هستند.

    1. زئوس Zeus زئوس Zeus گفت:

      بله دوست عزیز توضیح دادم که این مسابقه است و برای چالش چنین چیزی طراحی شده
      فرمایش شما هم کاملا صحیح هست اما در نظر بگیرید که توی میکروکنترلرها اینقدر حافظه در دسترس نیست که بخوایم چیزهایی مثل json رو پیاده سازی کنیم هر چند که نشدنی هم نیستند ولی بهتره بگم بهینه نیستند

    1. زئوس Zeus زئوس Zeus گفت:

      ممنون – هر چند زمان مسابقه تمام شده بود در زمان ارسال شما – ولی کد شما رو هم بررسی کردم

  9. محمد پسندیده گفت:

    با سلام
    حدودا ساعت 4 صبح است
    بالاخره تونستم با توجه به مشغله ای که داشتم طی چند روز از دیدگاه خودم کامل ترین نرم افزار رو بنویسم
    یه سری توضیحات در کدها آمده است ، لطفا مطالعه بفرمایید. با تشکر

    https://paste.ubuntu.com/p/Y5p8r2Pz33/

    1. زئوس Zeus زئوس Zeus گفت:

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

      1. محمد پسندیده گفت:

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

        1. زئوس Zeus زئوس Zeus گفت:

          سلام دوست عزیز
          دارم جواب دوستان رو چک میکنم اگه میتونید تا ساعت ۳ کدتون رو کامنت کنید بررسی میکنم اگر پیش از این طول بکشه چون میخوام جواب ها رو منتشر کنم امکان پذیر نیست متاسفانه

          1. محمد پسندیده گفت:

            پس لطفا تا همین زمان صبر کنید دارم سهی میکنم تبدیل کنم
            ممنون

          2. محمد گفت:

            متاسفانه سعی خودم رو کردم اما زمان بر خواهد بود و تبدیل یه سری توابع کار داره،
            به هر حال برنامه بنده در نزم افزار آردوینو نوشته و تست شده است و بدون هیچ مشکل و به صورت کامل کار میکند. خواستین تست برید تو آردوینو باید تست شود.
            ممنون از مسابقه خوب تون

          3. زئوس Zeus زئوس Zeus گفت:

            خواهش میکنم 🙂
            هدف همین تلاشی است که انجام دادید 🙂
            متشکرم

    1. زئوس Zeus زئوس Zeus گفت:

      سلام چرا در انتهای کد متغییر pptr رو مقدار دهی نکرده بودید – کد شما بررسی شد و به زودی نتیجه اعلام میشود.

      1. بله، فراموش کرده بودم!
        تو این کد پرینت تو یه تابع دیگه انجام میشه و personal_t های اولیه‌ی main پر میشن:
        https://paste.ubuntu.com/p/Yz3WcKQm8N
        نمایش:
        https://asciinema.org/a/uHbxDVakgCWFeZNzQTI23Haew

        1. زئوس Zeus زئوس Zeus گفت:

          سلام – ممنون – کدتون رو خودم اصلاح کردم برای تست 🙂

  10. رضا گفت:

    سلام آیا از روش استیت ماشین میشه استفاده کرد؟

    1. زئوس Zeus زئوس Zeus گفت:

      هیچ محدودیتی برای هیچ روشی وجود ندارد 🙂

    1. زئوس Zeus زئوس Zeus گفت:

      سلام دوست عزیز
      الان این که چه ربطی به مسابقه داره – ظاهرا کد برای دیکد کردن رشته ارسالی gps هست فکر میکنم

  11. با عرض سلام و خسته نباشید خدمت جناب زئوس و همکاران
    این هم از برنامه من ؛ یک سری توضیحات کوچک داخل یه فایل pdf گزاشتم یه نگاهی هم به اون بیندازید برنامه هم داخل code block 20.03 نوشته و به خوبی کامایل شده و حالات متفاوتی را برای ورودی امتحان کردم.
    لینک : https://drive.google.com/file/d/186e7KMPGTtGeTe6V5k0Ac47WIgQnOBrd/view?usp=sharing
    لینک دوم : http://s10.picofile.com/file/8405656950/ali_torabi.zip.html
    با تشکر🙂

    1. زئوس Zeus زئوس Zeus گفت:

      ای کاش کد رو توی همون آدرس ذکر شده قرار می دادید – با این کد شما رو بررسی کردم و به زدوی نتیجه رو اعلام میکنم

      1. با سلام و خسته نباشید از مسابقه خوبتون 🙂
        حداقل اون آخر که اسم اون دو عزیز رو نوشتید و گفتید برنامه شون کمترین خطا را داشته برنامه من هم اندازه اونا ۲ خطا داشته. آخر اسم من رو هم می نوشتید😅. یا به خاطر برنامه عجیب و غریب و خارج از اصولی که داشتم ?
        بحث خودنمایی نیست یه وقت ها😁!! فقط می خوام ضعف خودم رو بدونم اینکه راهکار شما برای حرفه تر شدن در برنامه نویس چی هست؟
        اینم بگم که من کلا از اول فرض رو گذاشته بودن که name فقط حروف الفبا است والا موندم چرا اینطور فکر می کردم !

        1. زئوس Zeus زئوس Zeus گفت:

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

    2. علی ترابی علی گفت:

      به سلام
      یه چیزی که یادم رفته بود بگم (البته یادم که نرفته بود! ) اینکه اون تابع دریافت رشته بدون محدودیت رو از اینجا استفاده کرده بودم:
      https://stackoverflow.com/questions/16870485/how-can-i-read-an-input-string-of-unknown-length

      1. زئوس Zeus زئوس Zeus گفت:

        متشکرم برای این که به اشتراک میذارید 🙂

  12. javad گفت:

    الآن این موارد که پایینه همش باید true برگدونه و درسته یعنی هیچ خطایی وجود نداره چون دیدم یکی از دوستان سوال پرسیده بودند در مورد بزرگ یا کوچک بودن End شما گفتید هر جایی ممکنه اتفاق بیافتد مگه نباید طبق قاعده عمل نکرد تو قاعده شما record نوشتید End نوشتید خوب مگه همیشه اون مازول یا دستگاه همین رو نمیده اگر حروفش بزرگ شد یا حرف اول End بزرگ شد یه خطا محسوب میشه.
    الآن اینا با اون چیزی که می خواهید درست هستند همشون: یعنی باید true برگردونیم؟
    rEcorD15,#15,25,45,sisoog,s,is,oog,5463213,6,-7,78,33-43,TrUe,End
    RecOrd15,#15,25,45,sisoog,s,is,oog,5463213,6,-7,78,33-43,True,END
    reCORD15,#15,25,45,sisoog,s,is,oog,5463213,6,-7,78,33-43,TrUe,enD
    ReCoRd15,#15,25,45,sisoog,s,is,oog,5463213,6,-7,78,33-43,True,end

    1. زئوس Zeus زئوس Zeus گفت:

      اگه کوچک و بزرگی حروف مدنظر باشه – باید صرف نظر کرد ازش
      ممکنه end به شکل هایی که مثال زدید استفاده بشه
      ولی احتمالا چون ممکنه این برداشت رو برخی دوستان نداشته باشند – ازش صرف نظر میکنم و مطابق همون الگو ی که گفتید رفتار میکنیم
      یعنی رکرود به شکل حرف کوچک و End به همین شکل استفاده میکنیم

      1. زئوس Zeus زئوس Zeus گفت:

        بسیار عالی – این که از فانکشن ها به خوبی استفاده کردید خوشم اومد
        کد شما بررسی شد و نتیجه به زودی اعلام میشود.

  13. معین گفت:

    با عرض سلام و خسته نباشید
    کد اولی که ارسال کردم مشکل داشت
    این لینک اصلاح شده کده https://paste.ubuntu.com/p/kgKy847RyW/

    1. زئوس Zeus زئوس Zeus گفت:

      سلام دوست عزیز
      ممنونم برای این که در مسابقه شرکت کردید – فقط این که چرا تابع DeserializePersonalData را انطور که خواسته شده بود پیاده سازی نکردید به لحاظ ورودی ها منظورم هست
      با این کد کدتون رو بررسی کردم و نتیجه به زودی اعلام خواهد شد.

      1. معین گفت:

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

        1. زئوس Zeus زئوس Zeus گفت:

          سلام خواهش می کنم – من خوشحالم که توی این مسابقه شرکت کردید، همونطور که اول پست هم اشاره کردم این مسابقه های برای اینه که دور هم چیز های جدید یاد بگیریم 🙂

  14. بی نام گفت:

    با سلام
    یکی میشه بگه این کارکتر فاصله چیه😭😭😭😭 هی کپی می کنم هی می بینم اشتباهه همه درست و فقط همین یکی رشته خطا عجایب علم !!!
    http://s11.picofile.com/file/8405609492/Screenshot_11_.png

    1. زئوس Zeus زئوس Zeus گفت:

      الان مشکل چیه ! شما فرض کن d آخرین کارکتر است 🙂

    1. زئوس Zeus زئوس Zeus گفت:

      سلام دوست عزیز 🙂
      از جمله کد های خوبی که توی مسابقه شرکت کردند.
      کد شما رو بررسی کردم و به زدوی نتیجه رو اعلام میکنم

  15. Kamin Jalili Kamin Jalili گفت:

    درود زئوس نازنینم.

    همه رو روش تست کردم جواب داده.

    https://paste.ubuntu.com/p/vhRpKNTSWw/

    1. زئوس Zeus زئوس Zeus گفت:

      سلام آقای جلیلی عزیز
      ای کاش کدتون رو با توجه به خواسته های به لحاظ ورودی و خروجی می نوشتید – با این کد شما رو بررسی کردم و به زودی نتیجه رو اعلام خواهم کرد.

  16. حسین گفت:

    با سلام .
    سپاس بابت ترتیب دادن این مسابقه .
    راستش من کد رو به صورت فایلهای .h و .c نوشتم برای همین اونها را به همراه یک فایل توضیحات آپلود کردم .
    اینجا :http://www.mediafire.com/file/tl6dy7g9c2cb57o/file
    امیدوارم مشکلی برای بررسی کدها پیش نیاد .
    با سپاس فراوان.

    1. زئوس Zeus زئوس Zeus گفت:

      سلام من کد شما رو نتونستم کامپایل کنم :/
      تا بعد از ظهر به دستم برسونید و لطفا همون جایی که گفتم آپلود کنید.
      نمونه خطایی که میده مثلا خط ۲۰ فایل c رو ببینید یه کارکتر اشتباه هست.

      1. حسین گفت:

        سلام زئوس گرامی.
        بله درسته کاراکتر / اضافه هست .
        زئوس جان کد برای pc هست نه میکروکنترلر .
        از توابع مربوط به لایبرری های pc استفاده کدم .
        سپاس بابت زحمتی که کشیدید .

        1. زئوس Zeus زئوس Zeus گفت:

          منم سعی کردم روی کامپیوتر کامپایل کنم که نشد فکر کردم بخاطر یونی کد بهم ریخته

      2. حسین گفت:

        درواقع کد یک کتابخانه هست و مثال اجرایی ننوشتم .

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

  17. محمد یوسفی گفت:

    سلام
    آیا Some number می تواند اعشاری نیز باشد؟

    1. زئوس Zeus زئوس Zeus گفت:

      سلام خیر اعداد اعشاری نداریم

  18. محمد یوسفی گفت:

    سلام، من قبلاً کد برنامه را ارسال نموده بودم، تغییراتی در آن ایجاد کردم و مجددا ارسال می کنم. با خارج نمودن خطوط 66 و 174 از حالت توضیحات امکان پذیرفتن اعداد اعشاری نیز به وجود می آید.
    https://paste.ubuntu.com/p/MjY9Xctfxx/

    1. زئوس Zeus زئوس Zeus گفت:

      سلام دوست عزیز – ممنون که توی مسابقه شرکت کردید
      اعداد اعشاری نیازی نبود 🙂
      کد شما رو بررسی کردم و نتیجه رو به زودی اعلام میکنیم

      1. محمد یوسفی گفت:

        سلام،
        واقعا چالش جالبی بود.
        از این که کد من رو به عنوان برنده اعلام کردین متشکرم.
        چون هدف این چالش آموزش است من کد رو اصلاح کردم که اون دو مورد را هم به درستی دیکود نماید.
        https://paste.ubuntu.com/p/V9FC3MCk7x
        بد نیست نکته ای رو که خودم با آن در پروژه ها برخورد کردم بگم، چیزی که اینجا به آن توجه نشده تشخیص ابتدای داده ها توسط برنامه است چون ممکنه کاراکترهایی از داده قبلی به صورت خطا قبل این داده ارسال شود بنابراین کد ما باید قادر به تشخیص ابتدای رکورد باشد.

        1. زئوس Zeus زئوس Zeus گفت:

          سلام خواهش میکنم
          ما که کاری نکردیم – زحمتش رو خود شما کشیده بودید
          ممنونم برای اصلاح برنامه – بله این حالتی که مثال زدید اتفاقا زیاد پیش هم میآد 🙂

  19. محمد گفت:

    سلام
    یا زمانی که Some Alphabet یا Some number علاوه بر قاعده ای که تعریف کردید شامل کاراکتر های دیگه باشد ولی چهار داده اصلی وجود داشته باشند باید false برگردونیم ؟

    1. زئوس Zeus زئوس Zeus گفت:

      بله همینطوره اگر قاعده رعایت نشده باشه باید false برگردانده شود.

    2. محمد گفت:

      مثل مسابقه قبلی توضیحات هم خیلی مهمه یا لازمه که مثلا کامنت بزاریم تو برنامه ؟

      1. زئوس Zeus زئوس Zeus گفت:

        کامنت که بذارید خوبه ولی همین که کد درست کار کنه و مشلی پیش نیاره اوکی هست به نظرم

        1. محمد گفت:

          در زمان خطا خروجی تابع که از نوع bool هست باید false که همون 0 هست.
          و در زمان درستی باید true که 1 هست برگونه؟؟
          چون معادل false رو نگاه کردم تو خود کتاب خونه های c دیدم نوشته define

          1. زئوس Zeus زئوس Zeus گفت:

            برای اطمینان از کتابخانه stdbool.h استفاده کنید ! و البته از مقادیر true و false نباید مشکلی باشه
            البته این مقادیری هم که نوشتید باز نباید مشکلی باشه ولی برای محکم کاری عرض کردم

          2. محمد گفت:

            الآن فقط STATUS ممکن هر کدوم از حروفش بزرگ یا کوچک باشد ایا End همون End هست ؟ یعنی همیشه حرف اول بزرگ و دو حرف بعدی کوچک است؟

          3. زئوس Zeus زئوس Zeus گفت:

            فرض اینه که هرجای عبارت این شکل ممکنه اتفاق بیفته

          4. محمد گفت:

            یعنی record هم می تونه هر کدون از حروفش بزرگ یا کوچک باشه😭😭
            تو قاعده با حروف کوچک نوشتید نمیشه بیخیال این بزرگ و کوچیک بودن بشید همه با حروف کوچک باشه؟

          5. زئوس Zeus زئوس Zeus گفت:

            بذارید تجدید نظر کنم چون یه سری ها با این پیش فرض که تغییر نمیکنه رفتن جلو
            ما هم بنا رو همین میذاریم – تغییر نمیکنه

  20. علی اسماعیلی CounterMader گفت:

    سلام.
    در صورتی که در اولین فیلد دیتای مدنظر استخراج نشود،برنامه با خطا متوقف میشود یا باید برای استخراج بقیه فیلد ها تلاش کرد و نهایتا فالس برگرداند؟

    1. زئوس Zeus زئوس Zeus گفت:

      وقتی اولین خطا به وجود میآد انتظار میره عملیات متوقف و false برگردانده شود.

  21. علی نادری گفت:

    با سلام،
    خروجی این ورودی چی هست؟
    record17,15,-45,351,sisoog,do,wait,smit,End,5463213,33-436,faLse,

    1. زئوس Zeus زئوس Zeus گفت:

      چون با end تمام نشده منطقا false

  22. بابک گفت:

    سوال اینجاست که چرا باید همچین خروجی توسط یک دستگاه تولید بشود! ارسال و دریافت اطلاعات اگر بر اساس استاندارد و پروتکل مشخص باشه پردازشش سریعتر خواهد بود با فرمتی که شما گفتید میشه اطلاعات با حجم خیلی بالا تولید کرد شاید چند پتابایت! در این صورت دستگاه شما برای بازیابی و استخراج ۴ تا رکورد باید ساعتها یا روزها منتظر باشد در شرایط فوق اگر این اطلاعات را بر روی کاغذ با پست معمولی ارسال می‌گردند زودتر جواب می‌گرفتید. حداکثر طول رشته ورودی را مشخص کنید بعد از پردازش چند کارکتر اگر همه فیلدها بازیابی نشد باید پردازش را متوقف کرد؟

    1. زئوس Zeus زئوس Zeus گفت:

      خوب دلایل زیاده !!
      براش بیشتر روشن شدن مساله خروجی ماژول های gps مثلا !
      در ضمن دوست عزیز این مسابقه است تا مهارت دوستان در استخراج اطلاعات از یک رشته به چالش کشیده بشه 🙂
      بله راه های خیلی زیادی هست که میشه داده ها رو انتقال داد. مثلا تا حالا فکر کردید چرا html اصلا یه شکل text داره عرضه میشه ؟ خیلی راه های بهتری هست چرا اونا رو استفاده نمی کنند ؟

      1. بابک گفت:

        هرچقدر مساله طرح شده مابه‌ازای خارجی داشته باشد خوب به نظر من جذاب ‌تر خواهد شد چون با حلش یک مشکلی حل خواهد شد. در مورد ارسال و دریافت اطلاعات در شبکه بر اساس پروتکل tcp/ip که مشتق شده از مدل OSI هست خوب پروتکل http که مسئول دریافت و ارسال html هست پروتکل لایه اپلیکیشن هست که بر اساس نیاز زمان خودش و توسط یک فیزیکدان طراحی و اجرا شده، چرا تکست اجرا شده، در ذهن طراحان html قرار نبود دنیا این شکلی باشد، قراربود یکسری صفحه ساده دارای لینک به صفحات دیگر تهیه و نمایش داده بشود، که خوب الان شده پایه اطلاع‌رسانی در اینترنت، شاید اکثر مردم اینترنت را فقط به اسم همین وب بشناسند. ولی در لایه ip ارسال و دریافت اطلاعات بر اساس یک پروتکلی است که تقریبا اکثر ارتباطات شبکه‌ای الان بر اساس این پروتکل هست که پردازش این پروتکل بسیار سریع و راحت هست. بگذریم
        من با regex انجام دادم در gcc یک کتابخانه وجود دارد که اطلاعاتش را از اینجا می توانید ببینید
        https://www.gnu.org/software/libc/manual/html_node/Regular-Expressions.html
        regex و مثالهای شما از اینجا قابل نمایش هست
        https://regex101.com/r/hhK1tT/1

        1. زئوس Zeus زئوس Zeus گفت:

          سلام دوست عزیز
          البته توی الکترونیک دقیقا مصداق های زیادی براش داریم 🙂
          ممنوم برای مشارکت شما

  23. محمد یوسفی گفت:

    سلام، چالش خوبی بود. با توجه به تعریف name به صورت 16 کاراکتری در کد من در صورتی که نام از 16 کاراکتر بیشتر شود (با احتساب کاراکتر null انتهای رشته) تابع false برمی گرداند. امیدوارم همین مد نظر شما هم باشد. خیلی متشکرم.

    https://paste.ubuntu.com/p/5GyK7vhFbc/

  24. علی گفت:

    با سلام
    1- شما طول name رو 16 تا تعیین کردید از آن جایی که 16 امین کاراکتر؛ کاراکتر NULL برای تعیین انتهای رشته است یعنی name که در آخر قرار چاپ بشه 15 کارکتر داره.؟
    2- بیشترین اندازه postalcode و id چه قدره چون که int تعریف کردید میشه 2,147,483,647+ و 2,147,483,648 – که شما گفید این دو منفی نمی شن.
    3- در آخر یه سوال دیگه اینکه اگر به اون وضیعتی که انتظار نداریم رسیدیم(هنوز نفهمیدم چه حالتی به جز نبودن یکی از داده ها است!!) و خواستیم خروجی false بدیم ایا از اون چهار تا داده اونایی که پیدا کریدم رو چاپ کنیم یا کلا بگیم false ?

    1. زئوس Zeus زئوس Zeus گفت:

      ۱. میشه فالس برگرداند و میشه تا ۱۵ رو کپی کرد.
      ۲. همون نوعی که تعریف ساختار تعریف شده همون 2,147,483,647 قابل قبول هست
      ۳. وقتی عملیات false بشه خوب یعنی یه مشکلی بوده و چیزی چاپ نمیشه اصلا در مورد غیر منتظره بودم مثلا وقتی انتهای رشته end نداریم یا با record شروع نشده باشه و از این دست دیگه

    2. علی گفت:

      با سلام
      من برنامه ام رو داخل code block 20.03 نوشتم دقیق هم درست کار میکنه کلی حالت غیر منظره هم امتحان کردم gcc 8.0.1 x64 ولی حالا که اومدم تو لینکوس امتحانش کنم با این کد build می کنم به کلی خراب کار می کنه گفتم درستش کنم چون شما رو لینکوس تست می کنید مشکلی نداشته باشه
      اینم کد build :
      gcc main.c -o linux-main

      1. زئوس Zeus زئوس Zeus گفت:

        سلام دوست عزیز 🙂
        تابع سی که دیگه لینوکس و ویندوز نداره ، همون کد بلاکس هم داره از gcc استفاده میکنه – اگر اونجا کار میکنه پس نباید مشکلی برای لینوکس هم داشته باشه

        1. علی ترابی علی گفت:

          با سلام مشکل به نحوه غیر منظره ای حل شد.
          به کلی ماجرا code block رو ubuntu نصب کردم با اون اومدم بیلد کنم ارور داد که نوع size_t تعریف نشده البته خودش هم راهنمایی کرد که باید stddef.h رو اضافه کنید
          این کار رو کردم ولی باز کردم کار نمی کرد با code blockخط به خط دیباگ کردم کاملا درست بود تا اینکه
          دست به گزینه ای زدم که هیچ گاه از اش استفاده نمی کردم
          من همیشه تو بیشتر IDE هایی که کار میکنم نوع build روی debug هست (که پیش فرض هست) گذاشتم رو release دیدم (آب در کوزه و ما تشنه لبان گرد جهان می گردیم 😂😂) بله درست شد رفتم کد بیلد خود code block رو نگاه کردم دیدم یه O2- اضاف داره . فقط برای یک فلگ O2 چهار ساعت !!!

          1. زئوس Zeus زئوس Zeus گفت:

            یکم عجیبه باز – ولی خوب خدارو شکر که حل شد مساله 🙂

  25. علی محسنیان aLimec گفت:

    سلام سیسوگ (زئوس)
    خیلی ممنون برای چالش جدید 🙂
    یک سوالی از regex که اجازه نداریم استفاده کنیم درسته؟ (البته در هر صورت من کار کردن با regex رو بلد نیستم)

    1. زئوس Zeus زئوس Zeus گفت:

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

  26. سید علی علایی گفت:

    با سلام بنده دقیق متوجه نشدم که چطوری می خوایم خطا رو برطرف کنیم توی مخابرات وقتی می خوایم گیرنده بهینه داشته باشیم میایم روی سمبل های ممکن یجور arg max می گیریم یعنی حدس می زنیم چیزی که دریافت کردیم به کدوم نزدیک تره.
    توی مثال ها این طور که من متوجه شدم صرفا بزرگ و کوچک بودن حروف کلمه ای مانند true ملاک است و اگر برای true یک بیت خطا داشته باشیم ممکنه truf دریافت کنیم.
    توی این حالت باید بگیم درست تشخیص دادیم یا خیر؟
    با تشکر

    1. زئوس Zeus زئوس Zeus گفت:

      امم – منطقا نمی خوایم خطا رو برطرف کنیم !! در اون حالت خیلی بحث پیچیده میشه
      کوچک و بزرگ بودن رو نادیده گرفتیم و گفتیم نباید فرقی بینشون گذاشته بشه – اما جابجا شدن بیت ها برامون مهمه و مثلا توی مثال خود شما خروجی باید false باشه
      ولی از نگاهتون به مساله خوشم اومد.

  27. مهدی خلیلی مهدی گفت:

    سلام
    توی عبارات مثلا 33-43 را عدد در نظر گرفتید و خروجی تابع true بود، در حالی که عدد نیست و یک عبارت ریاضی است

    1. زئوس Zeus زئوس Zeus گفت:

      سلام
      متشکر برای سوالتون – این جزو همون عبارت هایی است که گفتم میتونه با اعداد ترکیب بشه – میشه اول باشه – وسطش باشه یا آخرش

  28. حسین گفت:

    سلام .
    شما در یک مثال نشان دادید که status ممکنه حذف شده باشد
    آیا ممکن است این اتفاق برای ID یا کد پستی و یا نام هم بیافتد؟

    1. زئوس Zeus زئوس Zeus گفت:

      بله چنین احتمالی هست، ممکن است یکی یا چند تا فیلد الزامی حذف شده باشد

  29. علی گفت:

    با سلام طول کل رشته ورودی البته به یکی از دوستان گفنید محدودیت ندارد ولی میشه بگید مثلا از 500 تا بیشتره یا بیشتر از 1000 تا کاراکتراست ؟

    1. زئوس Zeus زئوس Zeus گفت:

      بله ، تا چند کیلوبایت حساب کنید مثلا ده کیلو مثلا
      منظور اینه که محدودیت طولی خاص در نظر نگیرید

  30. علی گفت:

    با سلام
    1-ایا همه داده ها حتما با” , “از هم جدا شده اند؟
    2-شما گفنید اعداد ممکن است مثبت و منفی باشد و شامل $,%,# ایا این مربوط به postalcode و ID می شود؟
    3-مقدار برگشتی تابع(( که می تونه true و false باشه) ایا وضیعت false را فقط زمانی باید برگردانیم که یکی از چهار داده را پیدا نکردیم؟

    1. زئوس Zeus زئوس Zeus گفت:

      ۱. بله تمام داده ها با کاما از هم جدا می شوند
      ۲. نه این فیلد ها چنین چیزی را ندارند و فقط شامل اعداد هستند
      ۳. بذارید اینطور بگم اگه چیزی که انتظارش رو نداریم دریافت کنیم یاید خروجی خطا بدیم

  31. morequ گفت:

    سلام،
    حداکثر طول رشته ورودی چقدر است؟
    پردازنده میزبان از چه خانواده‌ای است؟

    1. زئوس Zeus زئوس Zeus گفت:

      سیستم میزبان رو یه کامپیوتر بدون محدودیت در نظر بگیرد!
      طول رشته ورودی هم محدودیتی براش نداریم

      1. morequ گفت:

        ممنون،
        و دو سوال دیگه اینکه:
        ممکنه که اعداد در مبنای ۱۰ نباشند؟
        ممکنه اعداد اعشاری باشند؟

        1. زئوس Zeus زئوس Zeus گفت:

          خواهش میکنم
          همه اعداد مبنای ده هستن – اعشاری هم نداریم به لطف خدا :دی

    1. Aygin Naderi Aygin Naderi گفت:

      یه مسئله ای هست توی سوال. شما postalcode رو با تعداد ارقام بالا دادین توی یکی از مثالها. توی زبان سی بعضی جاها int دو بایتی هست بعضی جاها 4 بایتی. ممکنه برا مواردی که با مقدار 2 بایتی کار میکنن جواب با اون چیزی که شما دادید نخونه چون کلا مقدار postalcode نمیتونه اینقد مقدار بزرگی باشه.

      1. زئوس Zeus زئوس Zeus گفت:

        فرض اینه که ما یه برنامه سی داریم می نویسم! توی استاندارد سی مقدار int چهار بایت است 🙂
        البته گفته شما کاملا درسته توی میکروکنترلر های 8 بیتی مقدار int دو بایتی است! برای همین مقدار پستال کد رو عددی بیش از 65535 انتخاب کردم که این نکته رفع ابهام بشه.

      2. زئوس Zeus زئوس Zeus گفت:

        و نکته بعدی که باید توجه داشته باشید اینه که طول رشته ورودی میتونه هرمقداری باشه !
        اصولا فرض این که برای میکروکنترلر دارید برنامه مینویسید رو کنار بذارید – فرض یه کامپیوتر ۳۲ بیتی است

        1. shkrm گفت:

          سلام .دوتا سوال دارم ولی اگه میشه این کامنت رو نشون ندین
          اینکه گفتین فرض کار با میکروکنترلر رو کنار بگذارید ینی حجم زیاد مهم نیست ؟ چون میخواستم از روش استرایپ استفاده کنم (بر اساس کاما رشته رو تکه تکه کنم و بعد یکی یکی بررسیشون کنم )
          مورد بعد کل الگو های جستجو باید دوباره نویسی بشن یا مشکلی نیست از توابع string.h و کتابخانه های استاندارد سی استفاده بشه ؟

          1. زئوس Zeus زئوس Zeus گفت:

            خوب اگه بخوام جوابتون رو بدم باید کامنت رو تایید کنم
            البته سوال خوبی است و فکر میکنم سوال خیلی از دوست ها باشد
            ببینید اگر قرار بود محدودیتی اعمال بشه حتما توی شرط های مسابقه لحاظ میشد. پس وقتی چیزی از محدودیت ننوشتیم ، یعنی می توانید به سادگی از هر تابعی که فکر میکند استفاده کنید.
            البته سریع و سبک بودن برنامه امتیاز حساب میشه

    2. زئوس Zeus زئوس Zeus گفت:

      امکانش هست کدتون رو مجددا بفرستید ؟ – من نمیتونم کدتون رو ببینم تا بررسی کنم
      متشکرم

  32. Siavash.mollayi سیاوش گفت:

    سلام
    بخش هایی که (some number) و (some alphabet) هستند، امکانش هست که تو رکورد موجود نباشند؟ مثلا بعد از record15 خود name باشه؟

    1. زئوس Zeus زئوس Zeus گفت:

      سلام دوست عزیز
      فرض این هست که حداقل یک بار این پترن وجود داره – میتونه یکی باشه – یا مثلا ده تا !ولی حتما یک بار رو هست

  33. رامین گفت:

    با سلام .
    ایا نظم و ترتیب اجزادر رشته ی ارسالی رعایت میشه ؟
    یعنی ممکنه جای status با id عوض بشه؟

    1. Sisoog Os Sisoog Os گفت:

      سلام بله رعایت میشه و ممکن نیست عوض بشه