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

نام تاپیک: اذیت کردن متغیر کمکی

  1. #1

    اذیت کردن متغیر کمکی

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


    این برنامه من باید جای مقادیر دو واحد ارایه رو بدون متغیر کمکی تغییر بده ایا کدی هست که بدون متغیر کمکی این کارو بکنه؟؟


    یک مثال میزنم:

    char [] a = new char [1];
    char temp;
    a[0] = "A";
    a[1] = " B";

    temp = a[0];
    a[0] = a[1];
    a[1] = temp;

    نمیخوام از temp استفاده کنم


    ممنون

  2. #2

    نقل قول: اذیت کردن متغیر کمکی

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


    این برنامه من باید جای مقادیر دو واحد ارایه رو بدون متغیر کمکی تغییر بده ایا کدی هست که بدون متغیر کمکی این کارو بکنه؟؟


    یک مثال میزنم:

    char [] a = new char [1];
    char temp;
    a[0] = "A";
    a[1] = " B";

    temp = a[0];
    a[0] = a[1];
    a[1] = temp;

    نمیخوام از temp استفاده کنم


    ممنون
    فقط توجه داشته باشید که کد خودتون هم باگ داشت.
    1- تعداد آرایه را کم تعرف کردید
    2- برای char باید از تک کوتیشن استفاده کنید

    char[] a = new char[2];
    a[0] = 'A';
    a[1] = 'B';

    Console.WriteLine("befor swap a[0] is:"+a[0]);
    Console.WriteLine("befor swap a[1] is:" + a[1]);

    a[0] = (char)(a[0] ^ a[1]);
    a[1] = (char)(a[0] ^ a[1]);
    a[0] = (char)(a[0] ^ a[1]);


    Console.WriteLine("after swap a[0] is:" + a[0]);
    Console.WriteLine("after swap a[1] is:" + a[1]);
    Console.ReadLine();

    منطق خیلی ساده ای هم داره!
    کافی که بیت های متغیرها را باهم xor کنید والبته چون عملگرهای بیتی فقط بر روی داده های نوع int عمل میکنند بنابراین کامپایلر یک cast ضمنی به نوع int انجام میده! وبه علت اینکه در سی شارپ نوع char , int باهم متفاوت هستند از یک cast صریح هم برای تبدیل به char استفاده شده است.

    //A ascii ->65 binary -> 0100-0001
    //B ascii ->66 binary -> 0100-0010
    a[0] =a[0] ^ a[1] ; // -> 0100-0001^0100-0010 = 0000-0011 -> a[0] -> 3
    a[1] =a[0] ^ a[1] ; // -> 0000-0011^0100-0010 = 0100-0010 -> a[1] -> 65
    a[0] =a[0] ^ a[1] ; // -> 0000-0011^0100-0010 = 0000-0011 -> a[0] -> 66

    و این هم نسخه بهینه تر در ++C

    char* sw = new char[2];
    *(sw+0) = 'A';
    *(sw+1) = 'B';
    *(sw+0) = *(sw+0) ^ *(sw+1);
    *(sw+1) = *(sw+0) ^ *(sw+1);
    *(sw+0) = *(sw+0) ^ *(sw+1);
    cout << *sw << '\n' << *(sw+1) << '\n';
    آخرین ویرایش به وسیله farhad_shiri_ex : سه شنبه 02 بهمن 1397 در 23:57 عصر

  3. #3

    نقل قول: اذیت کردن متغیر کمکی

    من متوجه نشدم ببخشید

    نسخه سی شارپ رو ندارید؟

  4. #4
    کاربر دائمی آواتار ایلیا آخوندزاده
    تاریخ عضویت
    آبان 1392
    محل زندگی
    تبریز
    پست
    479

    نقل قول: اذیت کردن متغیر کمکی

    درود
    جناب شیری فرم سی شارپ رو هم گفتن نمیدونم چرا متوجه نشدید.
    ضمنا کد شما هم به این شکل صحیح است :
    char [] a = new char [2];char temp;
    a[0] = 'A';
    a[1] = 'B';

    temp = a[0];
    a[0] = a[1];
    a[1] = temp;


    که همون بحث swap هستش.

  5. #5

    نقل قول: اذیت کردن متغیر کمکی

    نقل قول نوشته شده توسط User_Soual مشاهده تاپیک
    من متوجه نشدم ببخشید

    نسخه سی شارپ رو ندارید؟
    چی را متوجه نشدید؟
    در پستی که گذاشتم کد سی شارپ هم هست! و توضیح عملکرد برنامه
    جناب آخوندزاده هم که مجدد1 کد خودتون را اصلاح کردن و پست کردن!
    در هر حال اگر نخواهید از متغیر کمکی برای swap کردن دوتا متغیر استفاده کنید راه دیگه ای که نیازی به متغیر کمکی نداشته باشه mask کردن بیتها هست که در پست اشاره شده!

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

  1. سوال: آپدیت یک متغیر بر اساس مقدار خودش در رکورد قبلی
    نوشته شده توسط barnamehdan در بخش Access
    پاسخ: 1
    آخرین پست: شنبه 15 شهریور 1393, 12:53 عصر
  2. ذخیره متن یک سایت در یک متغیر در php
    نوشته شده توسط shahryari در بخش PHP
    پاسخ: 5
    آخرین پست: شنبه 08 شهریور 1393, 14:05 عصر
  3. تغیر ظاهر سایت
    نوشته شده توسط mohammadsamadi1377 در بخش گفتگو با مسئولین سایت، درخواست و پیشنهاد
    پاسخ: 0
    آخرین پست: جمعه 20 تیر 1393, 14:01 عصر
  4. پاسخ: 4
    آخرین پست: شنبه 20 مهر 1392, 20:23 عصر
  5. وارد کردن (آپدیت و اعمال تغیرات) داده ها به طور همزمان در چند جدول
    نوشته شده توسط baharaaaa در بخش دسترسی به داده ها (ADO.Net و LINQ و ...)
    پاسخ: 1
    آخرین پست: شنبه 05 اردیبهشت 1388, 01:27 صبح

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

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