سلام مهمان گرامی ، خوش آمدید. آیا این نخستین بازدید شماست ؟ وارد شده یا عضو شوید

انجمن های تخصصی علوم رایانه و هنرهای دیجیتال



تمرینهای مربوط به کنسول اپلیکیشن ConsoleApplication
زمان کنونی: 22-07-2017، 11:08 PM
کاربرانِ درحال بازدید از این موضوع: 3 مهمان
نویسنده: Mohsen Omidvar
آخرین ارسال: Mohsen Omidvar
پاسخ 15
بازدید 15091
محبوب کنید:

امتیاز موضوع:
  • 2 رأی - میانگین امتیازات: 5
  • 1
  • 2
  • 3
  • 4
  • 5
تمرینهای مربوط به کنسول اپلیکیشن ConsoleApplication
#1
Rainbow 
اولین تمرین این تاپیک رو با یک مثال ساده آغاز میکنیم.

کلاسی طراحی کنید که شعاع دایره را دریافت و مساحت و محیط دایره را محاسبه و چاپ کند.
کد:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Circle
{
    class program
    {
        class circle
        {
            private double r;
            public double masahat()
            {
                return 3.14 * r * r;
            }
            public double mohit()
            {
                return 2 * 3.14 * r;
            }
            public void input()
            {
                r = Convert.ToDouble(Console.ReadLine());
            }
        }//end of class

        static void Main(string[] args)
        {

            circle c;
            c = new circle();
            c.input();
            double s = c.masahat();
            double m = c.mohit();

            Console.WriteLine("masahat=" + s.ToString());
            Console.WriteLine("mohit=" + m.ToString());
            Console.ReadKey();

        }
    }
}
*شما قادر به دیدن لینک ها نیستید ثبت نام کنید یا وارد حساب خود شوید تا بتوانید لینک ها را ببینید*
*شما قادر به دیدن لینک ها نیستید ثبت نام کنید یا وارد حساب خود شوید تا بتوانید لینک ها را ببینید*
*شما قادر به دیدن لینک ها نیستید ثبت نام کنید یا وارد حساب خود شوید تا بتوانید لینک ها را ببینید*
خورشید باش که اگر خواستی بر کسی نتابی نتوانی.
پاسخ
 سپاس شده توسط baloot ، Ehsan
#2
کلاسی به نام مکعب طراحی کنید که طول،عرض و ارتفاع را از ورودی دریافت کرده،مساحت و حجم را محاسبه کرده در صورتی که کاربر تقاضای محاسبه محیط مکعب را داشت پیغام خطا ظاهر شود.

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

namespace cube
{
    class Program
    {
        class cube
        {
            private int x, y, h;
            public void input()
            {
                x = Convert.ToInt32(Console.ReadLine());
                y = Convert.ToInt32(Console.ReadLine());
                h = Convert.ToInt32(Console.ReadLine());
            }
            public void hajm()
            {
                int z = x * y * h;
                Console.WriteLine("hajm="+z.ToString());
            }
            public void masahat()
            {
                int s = (x * y + y * h + x * h) * 2;
                Console.WriteLine("masahat="+s.ToString());
            }
            public void mohit()
            {
                Console.WriteLine("Error");
            }
        }//end of class

        static void Main(string[] args)
        {
            cube p;
            p = new cube();
            p.input();
            p.masahat();
            p.hajm();
            p.mohit();
            
            Console.ReadKey();

        }
    }
}
*شما قادر به دیدن لینک ها نیستید ثبت نام کنید یا وارد حساب خود شوید تا بتوانید لینک ها را ببینید*
*شما قادر به دیدن لینک ها نیستید ثبت نام کنید یا وارد حساب خود شوید تا بتوانید لینک ها را ببینید*
*شما قادر به دیدن لینک ها نیستید ثبت نام کنید یا وارد حساب خود شوید تا بتوانید لینک ها را ببینید*
خورشید باش که اگر خواستی بر کسی نتابی نتوانی.
پاسخ
 سپاس شده توسط baloot ، Ehsan
#3
تابع سازنده :
تابعی است که در کلاس تعریف می شود ،این تابع همنام با کلاس می باشد و هیچ مقداری را بر نمیگرداند حتی void ، تابع سازنده ممکن است با پارامتر باشد یا بدون پارامتر،ممکن است در صورت نیاز از چندین تابع سازنده با پارامترهای مختلف در کلاس استفاده شود.
هنگام ایجاد حافظه ای از نوع کلاس تابع سازنده به صورت پیش فرض و خودکار فراخوانی می شود.
هدف از سازنده ها تخصیص دهی اعضای کلاس در زمان ایجاد نمونه ای جدید از کلاس است.
سازنده ها دارای مقادیر بازگشتی نبوده و همواره نامی مشابه نام کلاس دارند.
سازنده ها همواره public می باشند.
تمرین :
کلاسی به نام time طراحی کنید که ساعت ،دقیقه و ثانیه را توسط تابع سازنده از ورودی دریافت کند و 1 - ساعت،ثانیه و دقیقه را به فرم مناسبی نمایش دهد؟
2- زمان را برحسب ثانیه بر روی صفحه نمایش نشان دهد؟
کد:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace test9
{
    class Program
    {
        class time
        {
            private int h, m, s;
            public time(int h1, int m1, int s1)
            {
                h = h1;
                m = m1;
                s = s1;
            }
            public void print1()

            {
                Console.Write("Time Now:");
                Console.WriteLine(h.ToString() + ":" + m.ToString() + ":" + s.ToString());
            }
            public void print2()
            {
                
                int z = h * 3600 + m * 60 + s;
                Console.WriteLine("Barhasb Sanieh=" + z.ToString());
            }
        }//end of class
        static void Main(string[] args)
        {
            time p;
            int h1, m1, s1;
            Console.Write("Hour:");
            h1 = Convert.ToInt32(Console.ReadLine());
            Console.Write("Minut:");
            m1 = Convert.ToInt32(Console.ReadLine());
            Console.Write("Second:");
            s1 = Convert.ToInt32(Console.ReadLine());
            p = new time(h1, m1, s1);
            p.print1();
            p.print2();
            Console.ReadKey();
        }
    }
}
*شما قادر به دیدن لینک ها نیستید ثبت نام کنید یا وارد حساب خود شوید تا بتوانید لینک ها را ببینید*
*شما قادر به دیدن لینک ها نیستید ثبت نام کنید یا وارد حساب خود شوید تا بتوانید لینک ها را ببینید*
*شما قادر به دیدن لینک ها نیستید ثبت نام کنید یا وارد حساب خود شوید تا بتوانید لینک ها را ببینید*
خورشید باش که اگر خواستی بر کسی نتابی نتوانی.
پاسخ
 سپاس شده توسط baloot ، Ehsan
#4
کلاسی به نام کسر تعریف کنید که توسط تابع ورودی(سازنده)صورت و مخرج یک عدد کسری را دریافت کند و خروجی را به صورت کسری و اعشاری نشان دهد؟
کد:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace kasr
{
    class Program
    {
        class kasr
        {
            private int a, b;
            public kasr(int x, int y)
            {
                a = x;
                b = y;
            }
            public void print1()
            {
                Console.WriteLine(a.ToString() + "/" + b.ToString());
            }
            public void print2()
            {
                double z = a / b;
                Console.WriteLine(z.ToString());
            }
        }
                
        static void Main(string[] args)
        {
            kasr k;
            k = new kasr(19,87);
            k.print1();
            k.print2();
            Console.ReadKey();
        }
    }
}
*شما قادر به دیدن لینک ها نیستید ثبت نام کنید یا وارد حساب خود شوید تا بتوانید لینک ها را ببینید*
*شما قادر به دیدن لینک ها نیستید ثبت نام کنید یا وارد حساب خود شوید تا بتوانید لینک ها را ببینید*
*شما قادر به دیدن لینک ها نیستید ثبت نام کنید یا وارد حساب خود شوید تا بتوانید لینک ها را ببینید*
خورشید باش که اگر خواستی بر کسی نتابی نتوانی.
پاسخ
 سپاس شده توسط Ehsan
#5
کلاسی به نام کارمند تعریف کنید که کد پرسنلی،حقوق پایه،میزان هر ساعت اضافه کاری و هزینه هر ساعت اضافه کاری رادریافت کند،سپس حقوق کارمند را محاسبه و چاپ کند؟
جواب با استفاده از input :

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

namespace karmand
{
    class Program
    {
        class karmand
        {
            private long id, bas, h, cost;
            public void input()
            {
                id = Convert.ToInt32(Console.ReadLine());
                bas = Convert.ToInt32(Console.ReadLine());
                h = Convert.ToInt32(Console.ReadLine());
                cost = Convert.ToInt32(Console.ReadLine());
            }
            public void salary()
            {
                long s = bas + h * cost;
                Console.WriteLine(s.ToString());
            }
        }
        static void Main(string[] args)
        {
            karmand c;
            c = new karmand();
            c.input();
            c.salary();
            Console.ReadKey();
        }
    }
}

جواب با استفاده از تابع سازنده :

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

namespace karmand_2
{
    class Program
    {
        class karmand
        {
            private long id, bas, h, cost;
            public karmand(long id1, long bas1, long h1, long cost1)
            {
                id = id1;
                bas = bas1;
                h = h1;
                cost = cost1;
            }
            public void salary()
            {
                long s = bas + h * cost;
                Console.WriteLine(s.ToString());
            }
        }
        static void Main(string[] args)
        {
            karmand c;
            c = new karmand(1,9,8,7);
            c.salary();
            Console.ReadKey();
        }
    }
}
*شما قادر به دیدن لینک ها نیستید ثبت نام کنید یا وارد حساب خود شوید تا بتوانید لینک ها را ببینید*
*شما قادر به دیدن لینک ها نیستید ثبت نام کنید یا وارد حساب خود شوید تا بتوانید لینک ها را ببینید*
*شما قادر به دیدن لینک ها نیستید ثبت نام کنید یا وارد حساب خود شوید تا بتوانید لینک ها را ببینید*
خورشید باش که اگر خواستی بر کسی نتابی نتوانی.
پاسخ
 سپاس شده توسط baloot
#6
در این کلاس که نام آن test می باشد دو متغییر صیح به نام a,b داریم
میخواهیم تابعی بنویسیم که یک شی را از ورودی دریافت کند و محتویات آنرا با شی دیگر جمع کند و حاصل را در قالب یک شی به خروجی انتقال دهد.

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

namespace test
{
    class Program
    {
        class test
        {
            private int a, b;
            public void input()
            {
                a = Convert.ToInt32(Console.ReadLine());
                b = Convert.ToInt32(Console.ReadLine());
            }
            public test sum(test other)
            {
                test temp;
                temp = new test();
                temp.a = a + other.a;
                temp.b = b + other.b;
                return temp;
            }
        }
        static void Main(string[] args)
        {
            test p, q, z;
            p = new test();
            q = new test();
            z = new test();
            p.input();
            q.input();
            z = p.sum(q);
            Console.ReadKey();
        }
    }
}
*شما قادر به دیدن لینک ها نیستید ثبت نام کنید یا وارد حساب خود شوید تا بتوانید لینک ها را ببینید*
*شما قادر به دیدن لینک ها نیستید ثبت نام کنید یا وارد حساب خود شوید تا بتوانید لینک ها را ببینید*
*شما قادر به دیدن لینک ها نیستید ثبت نام کنید یا وارد حساب خود شوید تا بتوانید لینک ها را ببینید*
خورشید باش که اگر خواستی بر کسی نتابی نتوانی.
پاسخ
 سپاس شده توسط baloot ، Ehsan
#7
ارث بری :
در این بخش کلاسی به نام کلاس پایه در نظر میگیریم و بقیه کلاسها از این کلاس مشتق می شوند ،یعنی برخی از داده های کلاس پایه(Base)به کلاس فرزند(Drived)به ارث می رسد،عناصر خصوصی پدر؛ خصوصی باقی می ماند و به فرزندان به ارث نمی رسد.
داده های محافظت شده :
عناصری که به صورت محافظت شده و در کلاس پدر تعریف می شوند فقط به فرزندان این کلاس به ارث می رسند یعنی از main قابل دسترسی نیستند.
عناصر عمومی :
عناصر عمومی هم به کلاس فرزندان به ارث می رسند و هم از main قابل دسترسی می باشند.

روشهای ارث بری:
در روشهای ارث بری حافظه به طور چشم گیری کاهش می یابد یعنی بعضی از متغییرها یکبار در کلاس پایه تعریف می شوند و در کلاس فرزند نیاز به تعریف نمی باشند .

مثال :
کلاسی به نام مستعطیل تعریف کنید، سپس کلاس مکعب را از مستعطیل به ارث ببرید
مساحت و محیط مستطیل، مساحت و حجم مکعب رابه دست آورید :

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

namespace ConsoleApplication1
{
    class Program
    {

        class rect
        {
            protected int x, y;
            public void set1(int a, int b)
            {
                x = a;
                y = b;
            }
            private void masahat()
            {
                int s = x * y;
                Console.WriteLine("masahat =" + s.ToString());
            }
            public void mohit(){
                int s=(x+y)*2;
                 Console.WriteLine("mohit =" + s.ToString());

        
            }
            class cube :rect{
                private int h;
                public void set2 (int x){
                    h = x;
                  
                }
                public void masahatc(){
                    int s=(x*h+x*y+y*h)*2;
    Console.WriteLine("masahat =" + s.ToString());
                }
                public void hajm(){
                    int s= x*y*h;
                    Console.WriteLine("hajm =" + s.ToString());
                }
            };


            static void Main(string[] args)
            {
                cube p;
                p = new cube();
                p.set1(2, 4);
                p.set2(3);
                p.masahat();
                p.mohit();
                p.masahatc();
                p.hajm();
                Console.ReadLine();
            }


        }
    }
}
web : *شما قادر به دیدن لینک ها نیستید ثبت نام کنید یا وارد حساب خود شوید تا بتوانید لینک ها را ببینید* 
Instagram : @max_three
پاسخ
 سپاس شده توسط Mohsen Omidvar ، baloot ، Ehsan
#8
کلاسی به نام مجموعه تعریف کنید که اجتماع ،اشتراک و تفاضل دو مجموعه را حساب کند و خروجی را با فرمت یک مجموعه نمایش دهد.

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

namespace majmooe
{
    class Program
    {
        class array{
            private int []a,len;
            public array (int n){
                len=n;
                a=new int[len];
            }
            public array sum(array other){
                int l=len+other.len;
                array z;
                z=new array(l);
                int k=0,i;
                for(int i=0;i<len;i++){
                    z.a[k]=a[i];
                    k++;
                }
                for (i=0;i<other.len;i++){
                    z.a[k]=other.a[i];
                    k++;
                }
                return z;}
            public void input(){
                for(int i=0;i<len;i++)
                    a[i]=Convert.ToInt32(Console.ReadLine())
            }
            public void print(){
                for (int i=0:i(len:i++)
                Console.Write(a[i].ToString()+",");
                Console.WriteLine("}");
            }

            static void Main(string[] args)
            {
                int n1, n2;
                array z, p, q;
                n1 = Convert.ToInt32(Console.ReadLine());
                n2 = Convert.ToInt32(Console.ReadLine());
                p = new array(n1);
                p.input();
                q = new array(n2);
                q.input();
                z = new array(n1, n2);
                z = p.sum(q);
                z.print();
            
        }
    }
}

توجه : کدها کامل نیستن .. به زودی همه کدها را ارسال خواهیم کرد.
*شما قادر به دیدن لینک ها نیستید ثبت نام کنید یا وارد حساب خود شوید تا بتوانید لینک ها را ببینید*
*شما قادر به دیدن لینک ها نیستید ثبت نام کنید یا وارد حساب خود شوید تا بتوانید لینک ها را ببینید*
*شما قادر به دیدن لینک ها نیستید ثبت نام کنید یا وارد حساب خود شوید تا بتوانید لینک ها را ببینید*
خورشید باش که اگر خواستی بر کسی نتابی نتوانی.
پاسخ
 سپاس شده توسط baloot
#9
1 :
برای اضافه کردن به پشته ابتدا توسط تابع خصوصی isfull بررسی می شود که آیا پشته پر است یا خیر،اگر isfull مقدار 1 را برگرداند یعنی حافظه پشته پر استو نمیتوان داده ای به پشته اضافه کرد و در صورتی که مقدار isfull برابر با صفر باشد یعنی پشته پر نیست و قابلیت اضافه شدن را دارد.

2:
top پشته همیشه به بالای پشته اشاره می کند،زمانی که پشته خالی است top برابر با 1- و زمانی که پشته پر است top برابر با n-1 است.
3 :
برای اضافه کردن به پشته ابتدا یکی به top اضافه میکنیم ،سپس داده را در پشته قرار می دهیم ،اما در عمل حذف ابتدا داده را حذف می کنیم سپس یکی از top کم میکنیم.

4 :
در عمل حذف ابتدا توسط تابع خصوصی is empty خالی بودن پشته چک می شود در صورتی که مقدار is empty برابر با 1 باشد یعنی پشته خالی است و اجازه حذف از پشته را نداریم و در صورتی که مقدار این تابع برابر صفر شود یعنی پشته خالی نمی باشد و می توان عمل حذف از پشته را انجام داد.


مثال :
کلاسی به نام پشته تعریف کنید که در آن بتوان عمل حذف و اضافه (push,pop)انجام داد.
کد:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace stack
{
    class Program
    {
        class stack{
            private int[]a,top,n;
            private int isfull (){
                if(top==n-1)
                    return 1;
                    return 0;
            }
            private int isempty(){
                if(top==n-1)
                    return 1;
                    return 0;
            }
            public stack (int len ){
                top = -1;
                n=len;
                a=new int [n];
            }
            public void add(int x){
                if(isfull()==1)
                Console.WriteLine("full");
                else{
                    top ++;
                    a[top]x;
                }
            }
            public void remove(){
                if(isempety()==1)
                Console.WriteLine("empty");
                else{
                    int x=a[top];
                    top--;
                    Console.WriteLine(x.ToString());
                }
            }
        }
        static void Main(string[] args)
        {stack s;
            int len ;
            (x=Convert.ToInt32(Console.ReadLine());
            s=new stack()len;
            s.add(17);
            s.remove();
            s.remove();
        }
    }
}

*شما قادر به دیدن لینک ها نیستید ثبت نام کنید یا وارد حساب خود شوید تا بتوانید لینک ها را ببینید*
*شما قادر به دیدن لینک ها نیستید ثبت نام کنید یا وارد حساب خود شوید تا بتوانید لینک ها را ببینید*
*شما قادر به دیدن لینک ها نیستید ثبت نام کنید یا وارد حساب خود شوید تا بتوانید لینک ها را ببینید*
خورشید باش که اگر خواستی بر کسی نتابی نتوانی.
پاسخ
 سپاس شده توسط baloot
#10
تابع مخرب :
تابعی است که دارای ورودی و خروجی نمی باشدو هیچ مقداری را برنمی گرداند.
این تابع همنام کلاس می باشد و با علامت ~ شروع می شود ،هنگامی که شی از حوزه ای که در آن تعریف شده است خارج شود و یا این حوزه به انتها برسد به طور خودکار تابع مخرب فراخوانی می شود .
در مثال زیر کلاسی به نام test تعریف می شود و بعد از اینکه از main خارج شویم مقدار شی t از بین می رود و به طور خودکار تابع مخرب فراخوانی می شود.
کد:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace mokhareb
{
    class Program
    {
class test
    {
        public test (){
            Console.WriteLine("sazandeh");
        }
        public ~test(){
            Console.WriteLine("mokhareb");
            Console.ReadKey();
        }
    }
        static void Main(string[] args)
        {
    test t;
    t=new test();
        }
    }
}
*شما قادر به دیدن لینک ها نیستید ثبت نام کنید یا وارد حساب خود شوید تا بتوانید لینک ها را ببینید*
*شما قادر به دیدن لینک ها نیستید ثبت نام کنید یا وارد حساب خود شوید تا بتوانید لینک ها را ببینید*
*شما قادر به دیدن لینک ها نیستید ثبت نام کنید یا وارد حساب خود شوید تا بتوانید لینک ها را ببینید*
خورشید باش که اگر خواستی بر کسی نتابی نتوانی.
پاسخ
 سپاس شده توسط baloot
#11
در مثال زیر توسط تابع سازنده آرایه ای به طول n ایجاد و توسط تابع دیگری این n عنصر مقدار دهی می شود و در تابع دیگری مجموع عناصر آرایه را محاسبه می کند :
کد:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Test4
{
    class Program
    {
        class array
        {
            private int[] a;
          
            private int len;
            public array(int n)
            {
                len = n;
                a = new int[n];
            }
            public void input()
            {
                for (int i = 0; i < len; i++)

                    a[i] = Convert.ToInt32(Console.ReadLine());
            }
            public void sum()
            {
                int s = 0;
                for (int i = 0; i < len; i++)
                    s = s + a[i];
                Console.WriteLine(s.ToString());
            }
        }//end of class
        static void Main(string[] args)
        {
            array p;
            int n;
            n = Convert.ToInt32(Console.ReadLine());
            p = new array(n);
            p.input();
            p.sum();
            Console.ReadKey();
        }
    }
}
web : *شما قادر به دیدن لینک ها نیستید ثبت نام کنید یا وارد حساب خود شوید تا بتوانید لینک ها را ببینید* 
Instagram : @max_three
پاسخ
 سپاس شده توسط Mohsen Omidvar ، baloot ، Ehsan
#12
سازنده ها در وراثت به صورت زیر عمل می کنند:
هنگامی که یک شی از کلاس فرزند تعریف می شود مقادیر اولیه را به تابع سازنده کلاس فرزند ارسال می کند و سپس توسط کلمه کلیدی base مقادیر دریافت شده به پدر یا کلاس پایه ارسال می شود،بعد از اینکه سازنده پدر اجرا شد سپس سازنده فرزند اجرا می شود ،اما در مخرب فرزند فراخوانی میشود سپس پدر

مثال) کلاسی به نام مستطیل تعریف کنید و کلاس مکعب را از آن به ارث ببرید و سپس توسط تابع سازنده مقادیر مستطیل و مکعب را دریافت کنید و مساحت ،محیط و حجم را محاسبه کنید.
کد:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace rect_verasat
{
    class Program
    {
        class rect
        {
            protected int x, y;
            public rect(int a, int b)
            {
                x = a;
                y = b;
            }
            public void masahat()
            {
                int s = x * y;
                Console.WriteLine("srect" + s.ToString());
            }
            public void mohit()
            {
                int z = (x * y) * 2;
                Console.WriteLine("mohit rect " + z.ToString());
            }
        };
        class cube : rect
        {
            private int h;
            public cube(int x1, int y1, int h1)
                : base(x1, y1)
            {
                h = h1;
            }
            public void masahat(){
                int s = (x * h + x * y + y * h) * 2;
                Console.WriteLine("Masahat.cube=" + s.ToString());
            }
            

            public void hajm()
            {
                int z = x * y * h;
                Console.WriteLine("hajm.cube=" + z.ToString());
            }
        }
  
        static void Main(string[] args)
        {
            cube obj;
            obj = new cube(25, 66, 92);
            obj.masahat();
            obj.hajm();
            obj.mohit();
            Console.ReadKey();

        }
    }
}
*شما قادر به دیدن لینک ها نیستید ثبت نام کنید یا وارد حساب خود شوید تا بتوانید لینک ها را ببینید*
*شما قادر به دیدن لینک ها نیستید ثبت نام کنید یا وارد حساب خود شوید تا بتوانید لینک ها را ببینید*
*شما قادر به دیدن لینک ها نیستید ثبت نام کنید یا وارد حساب خود شوید تا بتوانید لینک ها را ببینید*
خورشید باش که اگر خواستی بر کسی نتابی نتوانی.
پاسخ
 سپاس شده توسط baloot ، Ehsan


پرش به انجمن:


کاربرانِ درحال بازدید از این موضوع: 3 مهمان