PDA

View Full Version : مبتدی: سوال در مورد دستورات شرطی؟



vb8334
دوشنبه 04 مرداد 1389, 12:46 عصر
با سلام به تمامی دوستان

دوستان من یه سوال داشتم در زبان C سوالم این بود :

برنامه ای هست که دو تا ورودی میگره a,b که یکیش ما می تونیم اعداد 1 تا 7 رو وارد کنیم
که نشان دهنده ی روز های هفته هستش مثلآ : 1 رو بزنیم میشه شنبه و.... و در دومی
ورودی می تونیم اعداد 1 تا 12 رو وارد کنیم که نشان دهنده ی ماه سال هستش که مثلآ : 1 رو بزنیم میشه فروردین .

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

توجه : فقط ما می تونیم از دستورات شرطی استفاده کنیم از حلقه های تکرار نمخوایم استفاده کنیم


ممنون

yaseriran
دوشنبه 04 مرداد 1389, 12:53 عصر
درود!

با دستور case انجام بدید...




طفیل هستی عشقند آدمی و پری...

tdkhakpur
دوشنبه 04 مرداد 1389, 12:56 عصر
خب از آرایه و ایندکس استفاده کنید یعنی اعداد ورودی شما ایندکس به حساب خواهند آمد.


char *Days[7]={"شنبه","یکشنبه","دوشنبه","سه شنبه","چهار شنبه","پنجشنبه","جمعه"};
char *Months[12]={"فروردین","اردیبهشت","خرداد","تیر","مرداد","شهریور","مهر","آبان","آذر","دی","بهمن","اسفند"};
int x, b
cout<<"enter day number from 1 to 7";
cin>>a;
cout<<"enter month number from 1 to 12";
cin>>b;
cout<< Days[a-1]<<"\n";
cout<< Months[b-1]<<"\n";

فقط باید ورودی ها را در حوزه تعیین شده وارد شود

vb8334
دوشنبه 04 مرداد 1389, 14:52 عصر
خب از آرایه و ایندکس استفاده کنید یعنی اعداد ورودی شما ایندکس به حساب خواهند آمد.


char *Days[7]={"شنبه","یکشنبه","دوشنبه","سه شنبه","چهار شنبه","پنجشنبه","جمعه"};
char *Months[12]={"فروردین","اردیبهشت","خرداد","تیر","مرداد","شهریور","مهر","آبان","آذر","دی","بهمن","اسفند"};
int x, b
cout<<"enter day number from 1 to 7";
cin>>a;
cout<<"enter month number from 1 to 12";
cin>>b;
cout<< Days[a-1]<<"\n";
cout<< Months[b-1]<<"\n";
فقط باید ورودی ها را در حوزه تعیین شده وارد شود

ممنون دوست عزیز ولی من گفتم فقط از دستورات شرطی نه آرایه و دستورات دیگه

PC2st
دوشنبه 04 مرداد 1389, 14:59 عصر
استفاده از آرایه سرعت بیشتری دارد، احتمالا تمرین دانشجوئی است که باید از دستورات شرطی استفاده کنید...!
برای استفاده از switch case بهتر است از انواع شمارشی (enum) استفاده کنید.

vb8334
دوشنبه 04 مرداد 1389, 15:32 عصر
نه دوست عزیز تمرین دانشجوی نیست این تمریناتی هستش که خودم دارم حل می کنم چون تازه وارد زبان C شدم

چون من با switch case هم امتحان کردم ولی باز هم کد رو زیاد میکنه

دوست عزیز PC2st (http://barnamenevis.org/forum/member.php?u=30917) میشه در مورد روش enum توضیح بدید

ممنون

PC2st
دوشنبه 04 مرداد 1389, 16:16 عصر
چون من با switch case هم امتحان کردم ولی باز هم کد رو زیاد میکنهبدون استفاده از آرایه، لیست، مپ یا غیره، به هر حال باید کد بیشتری وارد کنید. چون همانطور که از اسم دستورات شرطی واضح است، باید از بین شرط‌ها انتخاب کنید و به ازای هر کنترل شرط، کاهش سرعت را در پی خواهید داشت. در مقابل و استفاده از چیزی شبیه به آرایه‌ها، در ازای مقدار حافظه‌ای که تخصیص می‌دهید، سرعت را مبادله می‌کنید.


دوست عزیز PC2st (http://barnamenevis.org/forum/member.php?u=30917) میشه در مورد روش enum توضیح بدیداستفاده از enum برای خوانایی بیشر کدها و احتمال تغییر کدها در آینده:


#include <iostream>
#include <string>

enum Days
{
SATURDAY,
SUNDAY,
MONDAY,
TUESDAY,
WEDNESDAY,
THURSDAY,
FRIDAY
};

std::string day_of_week (Days day)
{
switch (day)
{
case SATURDAY:
return "شنبه";
case SUNDAY:
return "یکشنبه";
case MONDAY:
return "دوشنبه";
case TUESDAY:
return "سه‌شنبه";
case WEDNESDAY:
return "چهارشنبه";
case THURSDAY:
return "پنجشنبه";
case FRIDAY:
return "جمعه";
}
return "";
}

int main ()
{
std::cout << day_of_week (TUESDAY) << std::endl;
return 0;
}

vb8334
دوشنبه 04 مرداد 1389, 16:37 عصر
ممنون از اینکه پاسخ من رو میدید یه سوال می تونیم ما بجوای رشته در enum اونجایی که نوشتید( enum (day روز ها رو به رشته گرفتید میشه به صورت عدد هم گرفت مثلآ بجای SATURDAY بنویسم 1 که مشخص کننده ی شنبه هستش در ضمن ببخشید یه سوال میتدی دیگه ما نمی تونیم چیزی رو از ورودی بگیریم همونطور که گفتم .مثلآ بجای SATURDAY بنویسم 1 که البته از ورودی گرفته بشه یه دنیا ممنون

PC2st
دوشنبه 04 مرداد 1389, 16:44 عصر
بله می‌شود:


std::cout << day_of_week ((Days)3) << std::endl;
اما بهتر است این کار را نکنید (منظورم نباید نیست)، چونکه یکی از دلایل استفاده از enum در اینجا این است که خود را از مقادیر عددی (جزئیات پیاده‌سازی) دور کنیم. در اینصورت اگر بعدها تصمیم بگیریم که enum را به اینصورت تغییر دهیم تا به جای شنبه از یکشنبه شروع شود:


enum Days
{
SUNDAY,
MONDAY,
TUESDAY,
WEDNESDAY,
THURSDAY,
FRIDAY,
SATURDAY
};
در اینصورت کد قبل که عدد ۳ را به معادل روز هفته تبدیل می‌کند، نتیجهٔ کاملا متفاوتی را دربرخواهد داشت.

ویرایش: اگر می‌خواهید در هرصورت نتیجه تغییر نکند و اعداد خاصی را بتوانید به عنوان معادل برای اجزاء enum مرتبط کنید: ۱) باید مقادیر enum را بصورت دستی مشخص کنید و یا ۲) ترتیب اجزای آنرا تغییر ندهید.