نمایش نتایج 1 تا 14 از 14

نام تاپیک: palindram strings

  1. #1

    palindram strings

    با سلام خدمت دوستان
    راستی این سایت انجمنی برای پاسکال نداره ؟
    بگزریم


    لطفا به این برنامه دقت کنید :

    برنامه ایی بنویسید که رشته ایی به طول حداکثر 50 کاراکتر را خوانده و مشخص کند آیا این رشته هست یا خیر .

    حالا ممنون میشم در رابطه با الگوریتمش راهنماییم کنید
    آیا باسد از مقایسه کدهای اسکی استفاده کنم ؟ (پاسکال تابعی برای این کار داره ؟)
    چه طور برنامه رو محدود کنم حداکثر 50 کاراکتر بگیره

  2. #2
    کاربر دائمی آواتار اَرژنگ
    تاریخ عضویت
    آبان 1384
    محل زندگی
    arjang8000@gmail.com
    پست
    2,736
    نقل قول نوشته شده توسط akb_behnam مشاهده تاپیک
    لطفا به این برنامه دقت کنید :

    برنامه ایی بنویسید که رشته ایی به طول حداکثر 50 کاراکتر را خوانده و مشخص کند آیا این رشته هست یا خیر .
    رشته ایی به طول حداکثر 50 کاراکتر ،رشته هست.

  3. #3
    مدیر بخش آواتار whitehat
    تاریخ عضویت
    مهر 1382
    محل زندگی
    شیراز
    پست
    2,175
    رشته palindram رشته های متقارن هستند مانند AbA یا abcdcba
    اگر شما به دنبال تشخیص جملات palindram هستید کافیه رشته ورودی را به دو قسمت تقسیم کنید. اگر طول رشته زوج بود رشته دقیقا به دوقسمت مساوی تقسیم می شود، اما در صورت فرد بودن از کاراکتر وسط صرف نظر کنید.
    سپس قسمت اول را با معکوس قسمت دوم مقایسه کنید(از تابع Reverse استفاده کنید) در صورتی که مساوی باشد رشته palindram است
    راه حل دیگر استفاده از پشته ( Stack) می باشد
    موفق باشید
    To follow the path:
    Look to the master
    Follow the master
    Walk with the master
    See through the master
    Become the master

  4. #4
    ممنون

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

  5. #5
    مدیر بخش آواتار whitehat
    تاریخ عضویت
    مهر 1382
    محل زندگی
    شیراز
    پست
    2,175
    پس نیازی به استفاده از کد اسکی کاراکتر ها و مقایسه اون ها نیست؟
    نیازی به این کار ندارید ، بسته به نوع الگوریتمی که می خواهید پیاده سازی کنید باید تک تک کاراکتر ها را مقایسه کنید یا کل دو رشته ای که در بالا گفتم مقایسه کنید.

    باچه تابعی میشه رشته رو به چند قسمت تقسیم کرد ؟
    substr

    راهی نداره کاربرو همون زمان تایپ مجبور کنیم
    خیر شما حتما باید وسط رشته را بدانید.
    موفق باشید
    To follow the path:
    Look to the master
    Follow the master
    Walk with the master
    See through the master
    Become the master

  6. #6
    خیلی ممنون برای به دست آوردن وسطش اینجوری باید عمل کنم ؟

    strLen(STR div 2)


    راستی تابعی به اسم REVERSE تو توربو پاسکال 7 داریم ؟ من که نتونستم اجرا کنم همین طور substr

  7. #7
    کاربر دائمی آواتار اَرژنگ
    تاریخ عضویت
    آبان 1384
    محل زندگی
    arjang8000@gmail.com
    پست
    2,736

    for i = 1 to Length of String do begin
    if String[i] <> String[String Length -1 ] then String IS NOT a palindrom
    end

  8. #8
    مدیر بخش آواتار whitehat
    تاریخ عضویت
    مهر 1382
    محل زندگی
    شیراز
    پست
    2,175
    کد فوق مشکل کوچکی دارد یعنی برای رشته های با طول فرد کار نمی کند، فرض کنید رشته ما AbA باشد در اولین بار تکرار حلقه شرط A<>b چک می شود چون طول رشته برابر 3 است و کاراکتر اول برابر A و کاراکتر یکی ماند به آخر یعنی طول رشته منهای یک برابر 2 یعنی کاراکتر b است و تابع عدم پالیندروم بودن را نمایش می دهد، دقت کنید که در پاسکال رشته از 1 شروع می شود.
    ---------------------------
    برای به دست آوردن وسطش اینجوری باید عمل کنم ؟
    شما باید ابتدا قسمت اول عبارت پالیندروم را بدست آورید برای عبارات زوج از تابع زیر استفاده کنید

    Count:=Lenght(PalindramString)/2

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

    Count:=Ceil(Length(palindramString)/2)

    تابع Ceil یا Ceiling باید وجود داشته باشه لطفا خودتان جستجو کنید
    من که نتونستم اجرا کنم همین طور substr
    از تابع Copy استفاده کنید (خیلی وقت هست با پاسکال کار نکردم شاید این تابع در پاسکال 7 وجود نداشته باشه همینطور Reverse ولی Copy صد در صد وجود داره)
    حال دو قسمت پالیندروم را بدست آورید

    HalfPalindram:=Copy(PalindramString,1,Count)
    HalfPalindram2:=Copy(PalindramString,Count+1,Count )


    راستی تابعی به اسم REVERSE تو توربو پاسکال 7 داریم ؟
    همانطور که گفتم یادم نیست وجود دارد یا نه اما می توانید آنرا به صورت زیر شبیه سازی کنید

    st:='Your String';
    Location := POS(Space, St);
    Len := Length(St);
    Last := COPY(St, 1, Location - 1);
    First := COPY(St, Location + 1, Len - Location);
    St := First + Space + Last


    موفق باشید
    To follow the path:
    Look to the master
    Follow the master
    Walk with the master
    See through the master
    Become the master

  9. #9
    کاربر دائمی آواتار اَرژنگ
    تاریخ عضویت
    آبان 1384
    محل زندگی
    arjang8000@gmail.com
    پست
    2,736
    ۳ خط کد را چرا اینقدر پیچیده میکنند؟

  10. #10
    ممنون لطف کردید. درسته 4 خط کد ساده بیشتر نیست ولی من مشکل اصلیم این بود که خیلی پاسکال یادم نیست و بیشتر دنبال اسم توابع بودم که دوستان کمک کردید و فکر کنم حل شد.


    (باید به فکر یه راهنمای کاربر درست و حسابی و آنلاین برای این زبون های علمی و داشگاهی رو وب باشیم)

  11. #11
    سلام

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


    program palindram;
    {uses crt;}
    uses strings;
    var
    str : array [0..90] of char ;
    reverse,half1,half2 : string;
    count,len,i : integer ;
    begin
    {clrscr;}
    writeln ('Please enter a string (maximum 50 characters) :');
    readln (str);
    if (str[0] = '') or (str[0] = #0)then
    begin
    writeln('Please enter the string !');
    end
    else
    begin
    if (StrLen(str)<50) then
    begin
    len := StrLen(str);
    if (len > 1) then
    begin
    if (len mod 2 = 0) then
    begin
    count := strLen(str) div 2;
    half1 := copy(str,1,count);
    half2 := copy(str,count+1,len-count);
    for i:=count-1 downto 0 do
    reverse := reverse + str[i];
    end
    else
    begin
    count := round((strLen(str) div 2+(0.6)));
    half1 := copy(str,1,count-1);
    half2 := copy(str,count+1,len-count);
    for i:=count-2 downto 0 do
    reverse := reverse + str[i];
    end;
    if(reverse = half2)then
    writeln ('String is palindram !')
    else
    writeln ('String is not palindram !');
    end;
    end
    {
    else
    writeln ('your string is only one character');
    }
    else
    writeln('Your string is bigger than fifty characters !');
    end;
    end.


    فقط دو تا نکته
    1 : کدش خیلی جالب نشد چی کارش کنم مرتب تر و اصولی تر بشه ؟
    2 : طبق تعریف زیر این برنامه نباید علامات و نقطه گذاری رو در نظر بگیره برای اون چی کار کنم ؟
    palindrame : زشته ایی که از چپ و راست بدون در نظر گرفتن علاوئم نقطه گذاری به یک صورت خوانده شود.

  12. #12
    مدیر بخش آواتار whitehat
    تاریخ عضویت
    مهر 1382
    محل زندگی
    شیراز
    پست
    2,175
    طبق تعریف زیر این برنامه نباید علامات و نقطه گذاری رو در نظر بگیره برای اون چی کار کنم ؟
    ابتدا تابعی بنویسید که علامات و نقطه گذاری را از رشته حذف کند، سپس در مورد پالیندروم بودن تصمیم بگیرید
    کدش خیلی جالب نشد چی کارش کنم مرتب تر و اصولی تر بشه ؟
    برای اینکه کد شما بهینه شود ابتدا عبارات تکراری را از شرط خارج کنید
    به جای استفاده از عمل معکوس سازی 2 اندیس تعریف کنید که یکی از ابتدا تا وسط رشته حرکت می کند و دیگری از انتها تا وسط رشته و کاراکتر موجود بر روی اندیس ها مقایسه شوند.
    بهتره به جای تابع Round از تابع Ceil یا Floor استفاده کنید برای املا صحیح آنها از Help پاسکال کمک بگیرید.
    To follow the path:
    Look to the master
    Follow the master
    Walk with the master
    See through the master
    Become the master

  13. #13
    ممنون از کمکتون

    در رابطه با ceil چیزی پیدا نکردم فقط round ، int ، trunc

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

  14. #14
    ابتدا تابعی بنویسید که علامات و نقطه گذاری را از رشته حذف کند، سپس در مورد پالیندروم بودن تصمیم بگیرید
    به جاش میتونی یه کار کنی یه SET تعریف کن که علائم نقطه گذاری توش باشه؛ حالا درحین پردازش ، با دستورif not in MySet علائم را در نظر نگیر.
    در رابطه با ceil چیزی پیدا نکردم
    ترجمه فارسیش می شه "سقف" یعنی به "جزء صحیح" عدد اعشاری یک واحد اضافه کن.
    مثلا سقف 4 می شه 4 ؛ اما سقف 4.4 میشه 5
    از دست این پاسکال
    نبینم به دلفی و پاسکال توهین کنی!!

تاپیک های مشابه

  1. انواع connection strings برای SQL Server 2005
    نوشته شده توسط بابک زواری در بخش VB.NET
    پاسخ: 4
    آخرین پست: جمعه 22 فروردین 1393, 12:44 عصر
  2. Managing Connection Strings for Web Farms in ASP.NET 2.0
    نوشته شده توسط HO457 در بخش ASP.NET Web Forms
    پاسخ: 0
    آخرین پست: جمعه 15 اردیبهشت 1385, 10:16 صبح

قوانین ایجاد تاپیک در تالار

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